mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
1124 lines
38 KiB
HTML
1124 lines
38 KiB
HTML
<div class="sheet-main">
|
|
|
|
<!-- Game Name, roll toggles, and tab switching -->
|
|
<div class='sheet-topgrid'>
|
|
|
|
<a href="https://ibb.co/KqnVCkB"><img src="https://i.ibb.co/yy2gL1K/red-giant-logo.png" alt="red-giant-logo" border="0"></a>
|
|
|
|
|
|
<span> </span>
|
|
|
|
<input type="hidden" class="sheet-radio-roll-state" name="attr_rollstate" value="flat" />
|
|
|
|
<button type="action" name="act_roll_state_disadvantage" class="sheet-radio-roll-state sheet-radio-roll-state-disadvantage"> Dis
|
|
</button>
|
|
|
|
<span> </span>
|
|
|
|
<button type="action" name="act_roll_state_flat" class="sheet-radio-roll-state sheet-radio-roll-state-flat"> -
|
|
</button>
|
|
|
|
<span> </span>
|
|
|
|
<button type="action" name="act_roll_state_advantage" class="sheet-radio-roll-state sheet-radio-roll-state-advantage"> Adv
|
|
</button>
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-big-label" > Roll Mod </label>
|
|
|
|
<span> </span>
|
|
|
|
<input name="attr_roll_mod" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-big-label" > Defense </label>
|
|
|
|
<span> </span>
|
|
|
|
<input name="attr_defence" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
<span> </span>
|
|
|
|
<button type="action" name="act_pc" class="sheet-tabbutton" >PC</button>
|
|
<span> </span>
|
|
<button type="action" name="act_npc" class="sheet-tabbutton" >NPC</button>
|
|
|
|
|
|
</div>
|
|
|
|
<!-- Spacing fix -->
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!-- line 1 of stats -->
|
|
<div class='sheet-stat1'>
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-regular-label" title="STR" > Strength </label>
|
|
<select name="attr_strength" class="sheet-die-dropdowns">
|
|
<option value="4">D4</option><option value="6">D6</option><option value="8">D8</option><option value="10">D10</option><option value="12">D12</option>
|
|
</select>
|
|
|
|
<label class="sheet-regular-label" title="RFX" > Reflex </label>
|
|
<select name="attr_reflex" class="sheet-die-dropdowns">
|
|
<option value="4">D4</option><option value="6">D6</option><option value="8">D8</option><option value="10">D10</option><option value="12">D12</option>
|
|
</select>
|
|
|
|
<label class="sheet-big-label-title" > DEFENSE </label>
|
|
|
|
<!-- repeated here for hiding to work -->
|
|
<input type="hidden" class="sheet-radio-roll-state" name="attr_rollstate" value="flat" />
|
|
|
|
<button type="roll" name="roll_sanity_check" class="sheet-statrollbutton disadvantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Sanity Check}} {{attribute1=Mind}} {{attribute2=Sanity}} {{die1=D@{mind}}} {{die2=@{sanity}}} {{mod=@{roll_mod}}} {{result=[[2D@{mind}kl1+@{sanity} + @{roll_mod}]]}}" >Sanity! </button>
|
|
|
|
<button type="roll" name="roll_sanity_check" class="sheet-statrollbutton flat" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Sanity Check}} {{attribute1=Mind}} {{attribute2=Sanity}} {{die1=D@{mind}}} {{die2=@{sanity}}} {{mod=@{roll_mod}}} {{result=[[1D@{mind}+@{sanity} + @{roll_mod}]]}}" >Sanity! </button>
|
|
|
|
<button type="roll" name="roll_sanity_check" class="sheet-statrollbutton advantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Sanity Check}} {{attribute1=Mind}} {{attribute2=Sanity}} {{die1=D@{mind}}} {{die2=@{sanity}}} {{mod=@{roll_mod}}} {{result=[[2D@{mind}k1+@{sanity} + @{roll_mod}]]}}" >Sanity! </button>
|
|
|
|
<label class="sheet-regular-label" > Sanity </label>
|
|
|
|
<input name="attr_sanity" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
<label class="sheet-regular-label" > / </label>
|
|
|
|
<input name="attr_sanity_max" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
|
|
</div>
|
|
|
|
<!-- Spacing fix -->
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
|
|
<!-- line 2 of stats -->
|
|
<div class='sheet-stat2'>
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-regular-label" title="MND" > Mind </label>
|
|
<select name="attr_mind" class="sheet-die-dropdowns">
|
|
<option value="4">D4</option><option value="6">D6</option><option value="8">D8</option><option value="10">D10</option><option value="12">D12</option>
|
|
</select>
|
|
|
|
<label class="sheet-regular-label" title="CHA" > Charm </label>
|
|
<select name="attr_charm" class="sheet-die-dropdowns">
|
|
<option value="4">D4</option><option value="6">D6</option><option value="8">D8</option><option value="10">D10</option><option value="12">D12</option>
|
|
</select>
|
|
|
|
<label class="sheet-regular-label" > Health </label>
|
|
|
|
<input name="attr_health" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
<label class="sheet-regular-label" > / </label>
|
|
|
|
<input name="attr_health_max" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
<label class="sheet-regular-label" > Spirit </label>
|
|
|
|
<input name="attr_spirit" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
<label class="sheet-regular-label" > / </label>
|
|
|
|
<input name="attr_spirit_max" class="sheet-stat-inputs" type="number" value="0" />
|
|
|
|
|
|
</div>
|
|
|
|
<!-- Spacing fix -->
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
|
|
<!-- line 3 of stats -->
|
|
<div class='sheet-stat3'>
|
|
|
|
<label class="sheet-left-label" > Name </label>
|
|
<input name="attr_character_name" class="sheet-char-inputs" type="text"/>
|
|
<span> </span>
|
|
|
|
<input type="hidden" name="attr_attribute1die" value="">
|
|
<select name="attr_attribute1name" class="sheet-attribute-dropdowns">
|
|
<option value="Strength">Strength</option><option value="Reflex">Reflex</option><option value="Mind">Mind</option><option value="Charm">Charm</option>
|
|
</select>
|
|
|
|
<label class="sheet-regular-label" > + </label>
|
|
|
|
<input type="hidden" name="attr_attribute2die" value="">
|
|
<select name="attr_attribute2name" class="sheet-attribute-dropdowns">
|
|
<option value="Strength">Strength</option><option value="Reflex">Reflex</option><option value="Mind">Mind</option><option value="Charm">Charm</option>
|
|
</select>
|
|
|
|
<!-- repeated here for hiding to work -->
|
|
<input type="hidden" class="sheet-radio-roll-state" name="attr_rollstate" value="flat" />
|
|
|
|
<button type="roll" name="roll_attribute_check" class="sheet-statrollbuttonshort disadvantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Attribute Check}} {{attribute1=@{attribute1name}}} {{attribute2=@{attribute2name}}} {{die1=D@{attribute1die}}} {{die2=D@{attribute2die}}} {{mod=@{roll_mod}}} {{result=[[2D@{attribute1die}kl1+2D@{attribute2die}kl1 + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<button type="roll" name="roll_attribute_check" class="sheet-statrollbuttonshort flat" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Attribute Check}} {{attribute1=@{attribute1name}}} {{attribute2=@{attribute2name}}} {{die1=D@{attribute1die}}} {{die2=D@{attribute2die}}} {{mod=@{roll_mod}}} {{result=[[1D@{attribute1die}+1D@{attribute2die} + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<button type="roll" name="roll_attribute_check" class="sheet-statrollbuttonshort advantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Attribute Check}} {{attribute1=@{attribute1name}}} {{attribute2=@{attribute2name}}} {{die1=D@{attribute1die}}} {{die2=D@{attribute2die}}} {{mod=@{roll_mod}}} {{result=[[2D@{attribute1die}k1+2D@{attribute2die}k1 + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
|
|
<label class="sheet-regular-label" > Look </label>
|
|
<input name="attr_look" class="sheet-char-inputs-look" type="text"/>
|
|
|
|
|
|
</div>
|
|
|
|
<!-- Spacing fix -->
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!-- To switch tabs -->
|
|
|
|
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value='pc' />
|
|
|
|
<!-- Player Character sheet -->
|
|
<div class='sheet-main-pc'>
|
|
|
|
<!-- Player Character sheet - Left Column -->
|
|
<div class='sheet-main-pc-left'>
|
|
|
|
<!--Attributes -->
|
|
<div class='sheet-attributes'>
|
|
|
|
<label class="sheet-left-label-1" > ATTRIBUTES </label>
|
|
|
|
<label class="sheet-left-label" > Personality </label>
|
|
<input name="attr_personality" class="sheet-char-inputs-long" type="text"/>
|
|
|
|
<label class="sheet-left-label" > Flaw </label>
|
|
<input name="attr_flaw" class="sheet-char-inputs-long" type="text"/>
|
|
|
|
<label class="sheet-left-label" > Past </label>
|
|
<input name="attr_past" class="sheet-char-inputs-long" type="text"/>
|
|
|
|
<label class="sheet-left-label" > Misfortune </label>
|
|
<input name="attr_misfortune" class="sheet-char-inputs-long" type="text"/>
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!--Useables - Joss, Rations, & Item Slots -->
|
|
<div class='sheet-useables'>
|
|
|
|
<label class="sheet-regular-label-left" > Joss </label>
|
|
|
|
<input name="attr_joss" class="sheet-useable-inputs-long" type="number" value="0" />
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-regular-label-left" > Rations </label>
|
|
|
|
<input name="attr_rations" class="sheet-useable-inputs" type="number" value="2" />
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-regular-label-left" > Item Slots </label>
|
|
|
|
<input name="attr_itemslots" class="sheet-useable-inputs" type="number" value="0" />
|
|
|
|
<label class="sheet-regular-label" > / </label>
|
|
|
|
<input name="attr_itemslots_max" class="sheet-useable-inputs" type="number" value="0" />
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!--Armor -->
|
|
<div class='sheet-armor'>
|
|
|
|
<div class='sheet-armortitle'>
|
|
|
|
<label class="sheet-left-label-1" > ARMOR </label>
|
|
|
|
<label class="sheet-big-label-table" > ITEM </label>
|
|
<label class="sheet-big-label-table" > DEFENSE </label>
|
|
<label class="sheet-big-label-table" > SIZE </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-armordetails'>
|
|
|
|
<fieldset class="repeating_armor">
|
|
<div class="sheet-armor-row">
|
|
<input name="attr_armorname" class="sheet-armor-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_armordefense" class="sheet-useable-inputs" type="number" value="0" />
|
|
<span> </span>
|
|
<input name="attr_armorsize" class="sheet-useable-inputs" type="number" value="1" />
|
|
<div class="col" style="width: 100%; height: 4px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!--Weapons -->
|
|
<div class='sheet-weapons'>
|
|
|
|
<div class='sheet-weaponstitle'>
|
|
|
|
<label class="sheet-left-label-1" > WEAPONS </label>
|
|
|
|
<label class="sheet-big-label-table" > ITEM </label>
|
|
<label class="sheet-big-label-table" > ACCURACY </label>
|
|
<label class="sheet-big-label-table" > DMG </label>
|
|
<label class="sheet-big-label-table" > HANDS </label>
|
|
<label class="sheet-big-label-table" > SIZE </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-weaponsdetails'>
|
|
|
|
<fieldset class="repeating_weapons">
|
|
<div class="sheet-weapons-row">
|
|
<input name="attr_weaponsname" class="sheet-weapons-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_weaponsaccuracy" class="sheet-weapons-inputs-short" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_weaponsdamage" class="sheet-weapons-inputs-shortest" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_weaponshands" class="sheet-useable-inputs" type="number" value="1" />
|
|
<span> </span>
|
|
<input name="attr_weaponssize" class="sheet-useable-inputs" type="number" value="1" />
|
|
<div class="col" style="width: 100%; height: 4px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!--Items -->
|
|
<div class='sheet-items'>
|
|
|
|
<div class='sheet-itemstitle'>
|
|
|
|
<label class="sheet-left-label-1" > ITEMS </label>
|
|
|
|
<label class="sheet-big-label-table" > ITEM </label>
|
|
<label class="sheet-big-label-table" > SIZE </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-itemsdetails'>
|
|
|
|
<fieldset class="repeating_items">
|
|
<div class="sheet-items-row">
|
|
<input name="attr_itemsname" class="sheet-items-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_itemssize" class="sheet-useable-inputs" type="number" value="1" />
|
|
<div class="col" style="width: 100%; height: 4px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 10px;"></div>
|
|
|
|
<!--Speech Magic -->
|
|
<div class='sheet-speechmagic'>
|
|
|
|
<div class='sheet-speechmagictitle'>
|
|
|
|
<label class="sheet-left-label-1" title="MND + CHA competition check if used on an unwilling creature, otherwise no check needed." > SPEECH MAGIC </label>
|
|
|
|
<label class="sheet-big-label-table" title="Modum is the spell's effect. Spatium is the size/range of the spell. Vim is the strength of the spell. A spell must use at minimum one Modum and one Spatium." > TYPE </label>
|
|
<label class="sheet-big-label-table" > KEYWORD </label>
|
|
<label class="sheet-big-label-table" > SPIRIT </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-speechmagicdetails'>
|
|
|
|
<fieldset class="repeating_speechmagic">
|
|
<div class="sheet-speechmagic-row">
|
|
<select name="attr_speechmagictype" class="sheet-speechmagic-dropdowns">
|
|
<option value="Modum">Modum</option><option value="Spatium">Spatium</option><option value="Vim">Vim</option>
|
|
</select>
|
|
<span> </span>
|
|
<input name="attr_speechmagickeyword" class="sheet-speechmagic-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_speechmagicspiritcost" class="sheet-useable-inputs" type="number" value="1" />
|
|
<div class="sheet-auto-expand speechmagic-width" >
|
|
<span name="attr_speechmagicdescription"></span>
|
|
<textarea spellcheck="false" name="attr_speechmagicdescription" placeholder="keyword description"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!-- Player Character sheet - Right Column -->
|
|
<div class='sheet-main-pc-right'>
|
|
|
|
<!--Archetype -->
|
|
<div class='sheet-archetype'>
|
|
|
|
<div class='sheet-archetypename'>
|
|
|
|
<label class="sheet-left-label-big" > ARCHETYPE </label>
|
|
<input name="attr_archetype" class="sheet-char-inputs-title" type="text"/>
|
|
|
|
</div>
|
|
|
|
<label class="sheet-left-label" > Skill 1: </label>
|
|
<div class="sheet-auto-expand attribute-width">
|
|
<span name="attr_skill1"></span>
|
|
<textarea spellcheck="false" name="attr_skill1"></textarea>
|
|
</div>
|
|
|
|
<label class="sheet-left-label" > Skill 2: </label>
|
|
<div class="sheet-auto-expand attribute-width">
|
|
<span name="attr_skill2"></span>
|
|
<textarea spellcheck="false" name="attr_skill2"></textarea>
|
|
</div>
|
|
|
|
<label class="sheet-left-label" > Skill 3: </label>
|
|
<div class="sheet-auto-expand attribute-width">
|
|
<span name="attr_skill3"></span>
|
|
<textarea spellcheck="false" name="attr_skill3"></textarea>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!--Exchanges -->
|
|
<div class='sheet-exchanges'>
|
|
|
|
<label class="sheet-left-label-1" > EXCHANGES </label>
|
|
|
|
<fieldset class="repeating_exchanges">
|
|
<div class="sheet-exchanges-row">
|
|
<div class="sheet-auto-expand red-width" >
|
|
<span name="attr_exchangename"></span>
|
|
<textarea spellcheck="false" name="attr_exchangename"></textarea>
|
|
</div>
|
|
<span> </span>
|
|
<div class="sheet-auto-expand exchange-width" >
|
|
<span name="attr_exchangeability"></span>
|
|
<textarea spellcheck="false" name="attr_exchangeability"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 4px;"></div>
|
|
<label class="sheet-left-label" > however </label>
|
|
<span> </span>
|
|
<div class="sheet-auto-expand exchangelong-width">
|
|
<span name="attr_exchangedrawback"></span>
|
|
<textarea spellcheck="false" name="attr_exchangedrawback"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
|
|
<!--Curses -->
|
|
<div class='sheet-curses'>
|
|
|
|
<label class="sheet-left-label-1" > CURSES </label>
|
|
|
|
<fieldset class="repeating_curses">
|
|
<div class="sheet-curses-row">
|
|
<div class="sheet-auto-expand curse-width" >
|
|
<span name="attr_curse"></span>
|
|
<textarea spellcheck="false" name="attr_curse"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
|
|
<!--Healing -->
|
|
<div class='sheet-healing'>
|
|
|
|
<label class="sheet-left-label-1" > HEALING </label>
|
|
|
|
<button type='action' name='act_treatwound' class="sheet-healingbuttonshort" >Treat Wound</button>
|
|
|
|
<span> </span>
|
|
|
|
<button type='action' name='act_mealandrest' class="sheet-healingbutton" >Meal and Full Night's Rest</button>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
|
|
<!--Stave Magic -->
|
|
<div class='sheet-stavemagic'>
|
|
|
|
<div class='sheet-stavemagictitle'>
|
|
|
|
<label class="sheet-left-label-1" > STAVE MAGIC </label>
|
|
|
|
<label class="sheet-big-label-table" > ITEM </label>
|
|
<label class="sheet-big-label-table" > MATERIAL COST WORTH </label>
|
|
<label class="sheet-big-label-table" > SIZE </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-stavemagicdetails'>
|
|
|
|
<fieldset class="repeating_stavemagic">
|
|
<div class="sheet-stavemagic-row">
|
|
<input name="attr_stavemagicname" class="sheet-stavemagic-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_stavemagicmaterialcostworth" class="sheet-useable-inputs" type="number" value="0" />
|
|
<span> </span>
|
|
<input name="attr_stavemagicsize" class="sheet-useable-inputs" type="number" value="2" />
|
|
<div class="col" style="width: 100%; height: 4px;"></div>
|
|
<div class="sheet-auto-expand stavemagic-width" >
|
|
<span name="attr_stavemagicdescription"></span>
|
|
<textarea spellcheck="false" name="attr_stavemagicdescription" placeholder="stave description"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
|
|
<!--Orb Magic -->
|
|
<div class='sheet-orbmagic'>
|
|
|
|
<div class='sheet-orbmagictitle'>
|
|
|
|
<label class="sheet-left-label-1" > ORB MAGIC </label>
|
|
|
|
<label class="sheet-big-label-table" > ITEM </label>
|
|
<label class="sheet-big-label-table" > SPIRIT COST </label>
|
|
<label class="sheet-big-label-table" > SIZE </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-orbmagicdetails'>
|
|
|
|
<fieldset class="repeating_orbmagic">
|
|
<div class="sheet-orbmagic-row">
|
|
<input name="attr_orbmagicname" class="sheet-orbmagic-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_orbmagicspiritcost" class="sheet-useable-inputs" type="number" value="2" />
|
|
<span> </span>
|
|
<input name="attr_orbmagicsize" class="sheet-useable-inputs" type="number" value="1" />
|
|
<div class="col" style="width: 100%; height: 4px;"></div>
|
|
<div class="sheet-auto-expand orbmagic-width" >
|
|
<span name="attr_orbmagicdescription"></span>
|
|
<textarea spellcheck="false" name="attr_orbmagicdescription" placeholder="orb description"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<!-- Non-Player Character sheet -->
|
|
<div class='sheet-main-npc'>
|
|
|
|
<!-- NPC Rollers - accuracy check, damage check, and defense value -->
|
|
<div class='sheet-npcrollers'>
|
|
|
|
<label class="sheet-left-label" > Accuracy Check </label>
|
|
|
|
<span> </span>
|
|
|
|
<input type="hidden" name="attr_accuracy1die" value="">
|
|
<select name="attr_accuracy1name" class="sheet-attribute-dropdowns-npc">
|
|
<option value="Strength">Strength</option><option value="Reflex">Reflex</option><option value="Mind">Mind</option><option value="Charm">Charm</option>
|
|
</select>
|
|
|
|
<label class="sheet-regular-label" > + </label>
|
|
|
|
<input type="hidden" name="attr_accuracy2die" value="">
|
|
<select name="attr_accuracy2name" class="sheet-attribute-dropdowns-npc">
|
|
<option value="Strength">Strength</option><option value="Reflex">Reflex</option><option value="Mind">Mind</option><option value="Charm">Charm</option>
|
|
</select>
|
|
|
|
<!-- repeated here for hiding to work -->
|
|
<input type="hidden" class="sheet-radio-roll-state" name="attr_rollstate" value="flat" />
|
|
|
|
<button type="roll" name="roll_accuracy_check" class="sheet-statrollbuttonshort disadvantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Accuracy Check}} {{attribute1=@{accuracy1name}}} {{attribute2=@{accuracy2name}}} {{die1=D@{accuracy1die}}} {{die2=D@{accuracy2die}}} {{mod=@{roll_mod}}} {{result=[[2D@{accuracy1die}kl1+2D@{accuracy2die}kl1 + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<button type="roll" name="roll_accuracy_check" class="sheet-statrollbuttonshort flat" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Accuracy Check}} {{attribute1=@{accuracy1name}}} {{attribute2=@{accuracy2name}}} {{die1=D@{accuracy1die}}} {{die2=D@{accuracy2die}}} {{mod=@{roll_mod}}} {{result=[[1D@{accuracy1die}+1D@{accuracy2die} + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<button type="roll" name="roll_accuracy_check" class="sheet-statrollbuttonshort advantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Accuracy Check}} {{attribute1=@{accuracy1name}}} {{attribute2=@{accuracy2name}}} {{die1=D@{accuracy1die}}} {{die2=D@{accuracy2die}}} {{mod=@{roll_mod}}} {{result=[[2D@{accuracy1die}k1+2D@{accuracy2die}k1 + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<span> </span>
|
|
|
|
<label class="sheet-left-label" > Damage Check </label>
|
|
|
|
<span> </span>
|
|
|
|
<input type="hidden" name="attr_damage1die" value="">
|
|
<select name="attr_damage1name" class="sheet-attribute-dropdowns-npc">
|
|
<option value="Strength">Strength</option><option value="Reflex">Reflex</option><option value="Mind">Mind</option><option value="Charm">Charm</option>
|
|
</select>
|
|
|
|
<label class="sheet-regular-label" > + </label>
|
|
|
|
<input type="hidden" name="attr_damage2die" value="">
|
|
<select name="attr_damage2name" class="sheet-attribute-dropdowns-npc">
|
|
<option value="Strength">Strength</option><option value="Reflex">Reflex</option><option value="Mind">Mind</option><option value="Charm">Charm</option>
|
|
</select>
|
|
|
|
<!-- repeated here for hiding to work -->
|
|
<input type="hidden" class="sheet-radio-roll-state" name="attr_rollstate" value="flat" />
|
|
|
|
<button type="roll" name="roll_damage_check" class="sheet-statrollbuttonshort disadvantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Damage Check}} {{attribute1=@{damage1name}}} {{attribute2=@{damage2name}}} {{die1=D@{damage1die}}} {{die2=D@{damage2die}}} {{mod=@{roll_mod}}} {{result=[[2D@{damage1die}kl1+2D@{damage2die}kl1 + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<button type="roll" name="roll_damage_check" class="sheet-statrollbuttonshort flat" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Damage Check}} {{attribute1=@{damage1name}}} {{attribute2=@{damage2name}}} {{die1=D@{damage1die}}} {{die2=D@{damage2die}}} {{mod=@{roll_mod}}} {{result=[[1D@{damage1die}+1D@{damage2die} + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
<button type="roll" name="roll_damage_check" class="sheet-statrollbuttonshort advantage" value="&{template:attribute} {{charname=@{character_name}}} {{checktype=Damage Check}} {{attribute1=@{damage1name}}} {{attribute2=@{damage2name}}} {{die1=D@{damage1die}}} {{die2=D@{damage2die}}} {{mod=@{roll_mod}}} {{result=[[2D@{damage1die}k1+2D@{damage2die}k1 + @{roll_mod}]]}}" >Roll!</button>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
|
|
<!--Specials -->
|
|
<div class='sheet-specials'>
|
|
|
|
<div class='sheet-specialstitle'>
|
|
|
|
<label class="sheet-left-label-1" > SPECIALS </label>
|
|
|
|
<label class="sheet-big-label-table" > NAME </label>
|
|
<label class="sheet-big-label-table" > SPIRIT COST </label>
|
|
<label class="sheet-big-label-table" > DESCRIPTION </label>
|
|
|
|
</div>
|
|
|
|
<div class='sheet-specialsdetails'>
|
|
|
|
<fieldset class="repeating_specials">
|
|
<div class="sheet-specials-row">
|
|
<input name="attr_specialsname" class="sheet-specials-inputs" type="text"/>
|
|
<span> </span>
|
|
<input name="attr_specialsspiritcost" class="sheet-useable-inputs" type="number" value="2" />
|
|
<span> </span>
|
|
<div class="sheet-auto-expand specials-width" >
|
|
<span name="attr_specialsdescription"></span>
|
|
<textarea spellcheck="false" name="attr_specialsdescription"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
|
|
<!--Appearance -->
|
|
<div class='sheet-appearance'>
|
|
|
|
<label class="sheet-left-label-1" > APPEARANCE & BEHAVIOR </label>
|
|
|
|
<fieldset class="repeating_appearance">
|
|
<div class="sheet-appearance-row">
|
|
<div class="sheet-auto-expand appearance-width" >
|
|
<span name="attr_appearancedescription"></span>
|
|
<textarea spellcheck="false" name="attr_appearancedescription"></textarea>
|
|
</div>
|
|
<div class="col" style="width: 100%; height: 7px;"></div>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<rolltemplate class="sheet-rolltemplate-attribute">
|
|
<div class="sheet-attribute-container">
|
|
<div class="sheet-attribute-roll-header">
|
|
<br> {{charname}}
|
|
<span class="attribute-roll-result">
|
|
{{result}}<BR>
|
|
|
|
</span>
|
|
</div>
|
|
{{#checktype}}
|
|
<div class="sheet-attribute-checktype">
|
|
{{checktype}}
|
|
</div>
|
|
{{/checktype}}
|
|
<div class="sheet-attribute-type">
|
|
{{attribute1}} {{die1}} + {{attribute2}} {{die2}} + {{mod}}
|
|
</div>
|
|
</div>
|
|
</rolltemplate>
|
|
|
|
|
|
<rolltemplate class="sheet-rolltemplate-treatwounds">
|
|
<div class="sheet-treatwounds-container">
|
|
<div class="sheet-treatwounds-roll-header">
|
|
<br> {{charname}}
|
|
</div>
|
|
<div class="sheet-treatwounds-type">
|
|
Treat Wounds
|
|
</div>
|
|
<div class="sheet-treatwounds-hp-header">
|
|
HP Regained
|
|
<span class="treatwounds-hp-result">
|
|
{{computed::hpresult}}<BR>
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</rolltemplate>
|
|
|
|
<rolltemplate class="sheet-rolltemplate-mealandrest">
|
|
<div class="sheet-mealandrest-container">
|
|
<div class="sheet-mealandrest-roll-header">
|
|
<br> {{charname}}
|
|
</div>
|
|
<div class="sheet-mealandrest-type">
|
|
Meal and Full Night's Rest
|
|
</div>
|
|
<div class="sheet-mealandrest-hp-header">
|
|
HP Regained
|
|
<span class="mealandrest-hp-result">
|
|
{{computed::hpresult}}<BR>
|
|
|
|
</span>
|
|
</div>
|
|
<div class="sheet-mealandrest-spirit-header">
|
|
Spirit Regained
|
|
<span class="mealandrest-spirit-result">
|
|
{{computed::spiritresult}}<BR>
|
|
|
|
</span>
|
|
</div>
|
|
<div class="sheet-mealandrest-sanity-header">
|
|
Sanity Regained
|
|
<span class="mealandrest-sanity-result">
|
|
{{computed::sanityresult}}<BR>
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</rolltemplate>
|
|
|
|
|
|
|
|
<script type="text/worker">
|
|
//Buttons for Tabs
|
|
const buttonlist = ["pc","npc"];
|
|
buttonlist.forEach(button => {
|
|
on(`clicked:${button}`, function() {
|
|
setAttrs({
|
|
sheetTab: button,
|
|
});
|
|
});
|
|
});
|
|
|
|
const rollStateRadioValues = ["advantage","flat","disadvantage"];
|
|
rollStateRadioValues.forEach(function(value) {
|
|
on(`clicked:roll_state_${value}`, function() {
|
|
setAttrs({
|
|
["rollstate"]: value
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
// trigger when the sheet is opened for the first time in a session or statname changes or the actual stat value changes
|
|
on('sheet:opened change:attribute1name change:strength change:reflex change:mind change:charm', () => {
|
|
getAttrs(['attribute1name','strength','reflex','mind','charm','attribute1die'], (values) => {
|
|
// Based on attribute1name, set the correct variable value for attribute1die
|
|
const attribute1name = values.attribute1name.trim();
|
|
let attribute1dienew = values.attribute1die || 0;
|
|
|
|
if (attribute1name === "Strength") {
|
|
|
|
attribute1dienew = values.strength || 0;;
|
|
}
|
|
else if (attribute1name === "Reflex") {
|
|
|
|
attribute1dienew = values.reflex || 0;;
|
|
}
|
|
else if (attribute1name === "Mind") {
|
|
|
|
attribute1dienew = values.mind || 0;;
|
|
}
|
|
else if (attribute1name === "Charm") {
|
|
|
|
attribute1dienew = values.charm || 0;;
|
|
}
|
|
|
|
setAttrs({
|
|
attribute1die: attribute1dienew.toString()
|
|
});
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
on('sheet:opened change:attribute2name change:strength change:reflex change:mind change:charm', () => {
|
|
getAttrs(['attribute2name','strength','reflex','mind','charm','attribute2die'], (values) => {
|
|
// Based on attribute2name, set the correct variable value for attribute2die
|
|
const attribute2name = values.attribute2name.trim();
|
|
let attribute2dienew = values.attribute2die || 0;
|
|
|
|
if (attribute2name === "Strength") {
|
|
|
|
attribute2dienew = values.strength || 0;;
|
|
}
|
|
else if (attribute2name === "Reflex") {
|
|
|
|
attribute2dienew = values.reflex || 0;;
|
|
}
|
|
else if (attribute2name === "Mind") {
|
|
|
|
attribute2dienew = values.mind || 0;;
|
|
}
|
|
else if (attribute2name === "Charm") {
|
|
|
|
attribute2dienew = values.charm || 0;;
|
|
}
|
|
|
|
setAttrs({
|
|
attribute2die: attribute2dienew.toString()
|
|
});
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
on('sheet:opened change:accuracy1name change:strength change:reflex change:mind change:charm', () => {
|
|
getAttrs(['accuracy1name','strength','reflex','mind','charm','accuracy1die'], (values) => {
|
|
// Based on accuracy1name, set the correct variable value for accuracy1die
|
|
const accuracy1name = values.accuracy1name.trim();
|
|
let accuracy1dienew = values.accuracy1die || 0;
|
|
|
|
if (accuracy1name === "Strength") {
|
|
|
|
accuracy1dienew = values.strength || 0;;
|
|
}
|
|
else if (accuracy1name === "Reflex") {
|
|
|
|
accuracy1dienew = values.reflex || 0;;
|
|
}
|
|
else if (accuracy1name === "Mind") {
|
|
|
|
accuracy1dienew = values.mind || 0;;
|
|
}
|
|
else if (accuracy1name === "Charm") {
|
|
|
|
accuracy1dienew = values.charm || 0;;
|
|
}
|
|
|
|
setAttrs({
|
|
accuracy1die: accuracy1dienew.toString()
|
|
});
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
on('sheet:opened change:accuracy2name change:strength change:reflex change:mind change:charm', () => {
|
|
getAttrs(['accuracy2name','strength','reflex','mind','charm','accuracy2die'], (values) => {
|
|
// Based on accuracy2name, set the correct variable value for accuracy2die
|
|
const accuracy2name = values.accuracy2name.trim();
|
|
let accuracy2dienew = values.accuracy2die || 0;
|
|
|
|
if (accuracy2name === "Strength") {
|
|
|
|
accuracy2dienew = values.strength || 0;;
|
|
}
|
|
else if (accuracy2name === "Reflex") {
|
|
|
|
accuracy2dienew = values.reflex || 0;;
|
|
}
|
|
else if (accuracy2name === "Mind") {
|
|
|
|
accuracy2dienew = values.mind || 0;;
|
|
}
|
|
else if (accuracy2name === "Charm") {
|
|
|
|
accuracy2dienew = values.charm || 0;;
|
|
}
|
|
|
|
setAttrs({
|
|
accuracy2die: accuracy2dienew.toString()
|
|
});
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
on('sheet:opened change:damage1name change:strength change:reflex change:mind change:charm', () => {
|
|
getAttrs(['damage1name','strength','reflex','mind','charm','damage1die'], (values) => {
|
|
// Based on damage1name, set the correct variable value for damage1die
|
|
const damage1name = values.damage1name.trim();
|
|
let damage1dienew = values.damage1die || 0;
|
|
|
|
if (damage1name === "Strength") {
|
|
|
|
damage1dienew = values.strength || 0;;
|
|
}
|
|
else if (damage1name === "Reflex") {
|
|
|
|
damage1dienew = values.reflex || 0;;
|
|
}
|
|
else if (damage1name === "Mind") {
|
|
|
|
damage1dienew = values.mind || 0;;
|
|
}
|
|
else if (damage1name === "Charm") {
|
|
|
|
damage1dienew = values.charm || 0;;
|
|
}
|
|
|
|
setAttrs({
|
|
damage1die: damage1dienew.toString()
|
|
});
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
on('sheet:opened change:damage2name change:strength change:reflex change:mind change:charm', () => {
|
|
getAttrs(['damage2name','strength','reflex','mind','charm','damage2die'], (values) => {
|
|
// Based on damage2name, set the correct variable value for damage2die
|
|
const damage2name = values.damage2name.trim();
|
|
let damage2dienew = values.damage2die || 0;
|
|
|
|
if (damage2name === "Strength") {
|
|
|
|
damage2dienew = values.strength || 0;;
|
|
}
|
|
else if (damage2name === "Reflex") {
|
|
|
|
damage2dienew = values.reflex || 0;;
|
|
}
|
|
else if (damage2name === "Mind") {
|
|
|
|
damage2dienew = values.mind || 0;;
|
|
}
|
|
else if (damage2name === "Charm") {
|
|
|
|
damage2dienew = values.charm || 0;;
|
|
}
|
|
|
|
setAttrs({
|
|
damage2die: damage2dienew.toString()
|
|
});
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// Custom Roll Parsing - for healing, so that the attributes can increase automatically
|
|
|
|
const parseClickTrigger = function(string){
|
|
let match = string.match(/clicked:(?:(repeating_[^_]+)_([^_]+)_)?(.+)/);
|
|
match.shift();
|
|
return match;
|
|
};
|
|
|
|
//Treat Wounds
|
|
|
|
const initiateRollTreatWounds = async function(event){
|
|
|
|
let [section,rowID,button] = parseClickTrigger(event.triggerName);//Returns an array with values of ['repeating_section','rowID','button name']
|
|
let message = `&{template:treatwounds} {{charname=@{character_name}}} {{showroll=[[1]]}} {{hpresult=[[0[computed result]]]}} {{roll1=[[1d4]]}} `;
|
|
let roll = await startRoll(message);
|
|
const computeObj = {};
|
|
|
|
let rollResults = [1].map((num)=>roll.results[`roll${num}`]);
|
|
console.log("Original rolls");
|
|
console.log(rollResults);
|
|
let result = rollResults.map(a => a.result);
|
|
console.log("Original rolls - easier format");
|
|
console.log(result);
|
|
|
|
console.log("HP Increase rolled");
|
|
let hpresult = result[0];
|
|
console.log(hpresult);
|
|
computeObj.hpresult = hpresult;
|
|
|
|
// Get HP, and adjust it to lower of HP + hpresult, and HP max
|
|
getAttrs(["health","health_max"], function(values) {
|
|
let hpcurrent = parseInt(values.health)||0;
|
|
let hpmax = parseInt(values.health_max)||0;
|
|
console.log("HP Max");
|
|
console.log(hpmax);
|
|
let hpmaxhealing = hpcurrent + hpresult;
|
|
console.log("HP Max Healing");
|
|
console.log(hpmaxhealing);
|
|
|
|
let lowerResults = [hpmaxhealing,hpmax];
|
|
var hphealed = Math.min.apply(null, lowerResults); // get the min of the array
|
|
console.log("Healing result");
|
|
console.log(hphealed);
|
|
|
|
setAttrs({
|
|
health: hphealed
|
|
});
|
|
|
|
|
|
finishRoll(roll.rollId,computeObj);
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
on('clicked:treatwound',initiateRollTreatWounds);
|
|
|
|
|
|
//Meal and Rest
|
|
|
|
const initiateRollMealAndRest = async function(event){
|
|
|
|
let [section,rowID,button] = parseClickTrigger(event.triggerName);//Returns an array with values of ['repeating_section','rowID','button name']
|
|
let message = `&{template:mealandrest} {{charname=@{character_name}}} {{showroll=[[1]]}} {{hpresult=[[0[computed result]]]}} {{spiritresult=[[0[computed result]]]}} {{sanityresult=[[0[computed result]]]}} {{roll1=[[1d6]]}} {{roll2=[[1d6]]}} `;
|
|
let roll = await startRoll(message);
|
|
const computeObj = {};
|
|
|
|
let rollResults = [1,2].map((num)=>roll.results[`roll${num}`]);
|
|
console.log("Original rolls");
|
|
console.log(rollResults);
|
|
let result = rollResults.map(a => a.result);
|
|
console.log("Original rolls - easier format");
|
|
console.log(result);
|
|
|
|
console.log("HP Increase rolled");
|
|
let hpresult = result[0];
|
|
console.log(hpresult);
|
|
computeObj.hpresult = hpresult;
|
|
|
|
console.log("Spirit Increase rolled");
|
|
let spiritresult = result[1];
|
|
console.log(spiritresult);
|
|
computeObj.spiritresult = spiritresult;
|
|
|
|
console.log("Sanity Increase (default)");
|
|
let sanityresult = 1;
|
|
console.log(sanityresult);
|
|
computeObj.sanityresult = sanityresult;
|
|
|
|
// Get HP, and adjust it to lower of HP + hpresult, and HP max
|
|
getAttrs(["health","health_max","spirit","spirit_max","sanity","sanity_max"], function(values) {
|
|
let hpcurrent = parseInt(values.health)||0;
|
|
let hpmax = parseInt(values.health_max)||0;
|
|
console.log("HP Max");
|
|
console.log(hpmax);
|
|
let hpmaxhealing = hpcurrent + hpresult;
|
|
console.log("HP Max Healing");
|
|
console.log(hpmaxhealing);
|
|
|
|
let lowerResultsHP = [hpmaxhealing,hpmax];
|
|
var hphealed = Math.min.apply(null, lowerResultsHP); // get the min of the array
|
|
console.log("Healing result");
|
|
console.log(hphealed);
|
|
|
|
|
|
let spiritcurrent = parseInt(values.spirit)||0;
|
|
let spiritmax = parseInt(values.spirit_max)||0;
|
|
console.log("Spirit Max");
|
|
console.log(spiritmax);
|
|
let spiritmaxhealing = spiritcurrent + spiritresult;
|
|
console.log("Spirit Max Healing");
|
|
console.log(spiritmaxhealing);
|
|
|
|
let lowerResultsSpirit = [spiritmaxhealing,spiritmax];
|
|
var spirithealed = Math.min.apply(null, lowerResultsSpirit); // get the min of the array
|
|
console.log("Spirit result");
|
|
console.log(spirithealed);
|
|
|
|
|
|
let sanitycurrent = parseInt(values.sanity)||0;
|
|
let sanitymax = parseInt(values.sanity_max)||0;
|
|
console.log("Sanity Max");
|
|
console.log(sanitymax);
|
|
let sanitymaxhealing = sanitycurrent + sanityresult;
|
|
console.log("Sanity Max Healing");
|
|
console.log(sanitymaxhealing);
|
|
|
|
let lowerResultsSanity = [sanitymaxhealing,sanitymax];
|
|
var sanityhealed = Math.min.apply(null, lowerResultsSanity); // get the min of the array
|
|
console.log("Sanity result");
|
|
console.log(sanityhealed);
|
|
|
|
setAttrs({
|
|
health: hphealed,
|
|
spirit: spirithealed,
|
|
sanity: sanityhealed
|
|
});
|
|
|
|
|
|
finishRoll(roll.rollId,computeObj);
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
on('clicked:mealandrest',initiateRollMealAndRest);
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|