Files
roll20-character-sheets/FotN/FotN.html
T
yehoshua1312 0a51e4226f Fate of the Norns Character Sheet (#6802)
This is a character sheet for Fate of the Norns. The images are not currently referenced by this sheet, but as soon as they are on the roll20 github I will update the sheet to use the image files local to roll20.
2020-06-22 10:45:56 -04:00

463 lines
30 KiB
HTML

<div class="sheet-container">
<div class="tabs">
<button type="action" name="act_character" >Character</button>
<button type="action" name="act_current" >Current</button>
</div>
<input type='hidden' class='tabstoggle' name='attr_sheetTab' value='character' />
<div class="character">
<div class="bio ability-box">
<label class="playernamebox"><span class="labeltext">Player Name: </span><input type="text" name="attr_player_name" /></label>
<label class="charnamebox"><span class="labeltext">Character Name: </span><input type="text" name="attr_character_name" /></label>
<label class="archtypebox"><span class="labeltext">Archtype: </span><input type="text" name="attr_archtype" /></label>
<label class="levelbox"><span class="labeltext"> Level: </span><input type="number" name="attr_level" /></label>
<input type="text" name="attr_voidrune" class="single-char voidrunebox" />
</div>
<div class="stats ability-box">
<br>
<label class="labeltext">Size: <span class="sizebox stat-container"><input type="number" value="4" name="attr_basesize" /></span></label>
<label class="labeltext">Move: <span class="movebox stat-container"><input type="number" value="4" name="attr_basemove" /></span></label>
<label class="labeltext">Essence: <span class="essencebox stat-container"><input type="number" name="attr_essence" /></span></label>
<label class="labeltext">Destiny: <span class="destinybox stat-container"><input type="number" name="attr_destiny" /></span></label>
</div>
<div class="skills ability-box">
<div class="skills ability-wrapper">
<span class="skillname labeltext">Skills:</span>
<span class="skillrank labeltext">Rank:</span>
<fieldset class="repeating_skills">
<input class="skillname" type="text" name="attr_skills_name" />
<input class="skillrank" type="number" name="attr_skill_rank" />
<input type="checkbox" class="toggle-show" />
<div class="silldetails showable">
<label class="labeltext modlabel">Description:</label><textarea class="skilldesc textbox name="attr_skills_description></textarea>
</div>
</fieldset>
</div>
</div>
<div class="passives ability-box">
<span class="checkbox"></span>
<span class="passivename labeltext">Passive:</span>
<span class="labeltext type">Ability Type:</span>
<span class="labeltext toggle-show">Show</span>
<fieldset class="repeating_passives">
<input class="checkbox" type="checkbox" name="attr_passives_toggle" value="1" />
<input class="passivename" type="text" name="attr_passives_name" />
<select class="passivetype type" name="attr_passives_type">
<option value="feat">Feat</option>
<option value="enchantment">Enchantment</option>
<option value="rune">Rune</option>
<option value="shadow">Shadow</option>
<option value="primal">Primal</option>
<option value="bloodline_primal">Bloodline Primal</option>
<option value="summon">Summon</option>
</select>
<input type="checkbox" class="toggle-show" />
<div class="passivedetails showable">
<label class="modlabel labeltext">Description:</label><br><textarea class="passivedesc textbox" name="attr_passives_description"></textarea>
<label class="modlabel labeltext">PDF:<input class="mod" type='number' name='attr_passives_pdf' /></label>
<label class="modlabel labeltext">Pierce:<input class="mod" type="number" name='attr_passives_pierce' /></label>
<label class="modlabel labeltext">Focus:<input class="mod" type="number" name='attr_passives_focus' /></label>
<label class="modlabel labeltext">Reach/<br>Range:<input class="mod" type="number" name='attr_passives_reach' /></label>
<label class="modlabel labeltext">Heal:<input class="mod" type="number" name='attr_passives_heal' /></label>
<label class="modlabel labeltext">Recover:<input class="mod" type="number" name='attr_passives_recover' /></label>
<label class="modlabel labeltext">Size:<input class="mod" type="number" name='attr_passives_size' /></label>
<label class="modlabel labeltext">Move:<input class="mod" type="number" name='attr_passives_move' /></label>
<label class="modlabel labeltext">PPF:<input class="mod" type="number" name='attr_passives_ppf' /></label>
<label class="modlabel labeltext">Parry:<input class="mod" type="number" name='attr_passives_pparry' /></label>
<label class="modlabel labeltext">Evade:<input class="mod" type="number" name='attr_passives_evade' /></label>
<label class="modlabel labeltext">MDF:<input class="mod" type="number" name='attr_passives_mdf' /></label>
<label class="modlabel labeltext">MPF:<input class="mod" type="number" name='attr_passives_mpf' /></label>
<label class="modlabel labeltext">MParry:<input class="mod" type="number" name='attr_passives_mparry' /></label>
<label class="modlabel labeltext">SDF:<input class="mod" type="number" name='attr_passives_sdf' /></label>
<label class="modlabel labeltext">SPF:<input class="mod" type="number" name='attr_passives_spf' /></label>
<label class="modlabel labeltext">SParry:<input class="mod" type="number" name='attr_passives_sparry' /></label>
</div>
</fieldset>
</div>
<div class="actives ability-box">
<br>
<span class="checkbox"></span>
<span class="rune labeltext">Rune:</span>
<span class="activename labeltext">Active:</span>
<span class="type labeltext">Ability Type:</span>
<span class="pmeta labeltext">PMeta:</span>
<span class="mmeta labeltext">MMeta:</span>
<span class="smeta labeltext">SMeta:</span>
<span class="labeltext toggle-show">Show</span>
<fieldset class="repeating_actives">
<input class="checkbox" type="checkbox" name="attr_actives_toggle" value="1" />
<select name="attr_rune" class="rune">
<option value="void">Void</option>
<option value="tiwaz">Tiwaz</option>
<option value="berkano">Berkano</option>
<option value="ehwo">Ehwo</option>
<option value="mann">Mann</option>
<option value="claguz">Claguz</option>
<option value="ing">Ing</option>
<option value="dagaz">Dagaz</option>
<option value="othala">Othala</option>
<option value="hagalaz">Hagalaz</option>
<option value="naudhneed">Naudhneed</option>
<option value="isaice">Isaice</option>
<option value="jethe">Jethe</option>
<option value="Eihwas">Eihwas</option>
<option value="pertho">Pertho</option>
<option value="elhaz">Elhaz</option>
<option value="sowsun">Sowsun</option>
<option value="fehu">Fehu</option>
<option value="uruz">Uruz</option>
<option value="thurisaz">Thurisaz</option>
<option value="cansuz">Cansuz</option>
<option value="raidho">Raidho</option>
<option value="kenaz">Kenaz</option>
<option value="gebgift">Gebgift</option>
<option value="wunjo">Wunjo</option>
<option value="physical">Physical</option>
<option value="mental">Mental</option>
<option value="spiritaul">Spiritual</option>
</select>
<input class="activename" type="text" name="attr_avtivename" />
<select name="attr_activetype" class="activetype type">
<option value="manoeuvre">Manoeuvre</option>
<option value="stance">Stance</option>
<option value="interrupt">Interrupt</option>
<option value="spell">Spell</option>
<option value="runespell">Rune Spell</option>
<option value="seithspell">Seith Spell</option>
<option value="spellsong">Spell Song</option>
<option value="shapechange">Shapechange</option>
<option value="transform">Transform</option>
<option value="gate">Gate</option>
<option value="alkaspell">Alka Spell</option>
<option value="shade">Shade</option>
<option value="snare">Snare</option>
<option value="verwandlungspell">Verwandlung Spell</option>
<option value="verwandlungalkaspell">Verwandlung Alka Spell</option>
<option value="faith">Faith</option>
<option value="voidspell">Void Spell</option>
<option value="divinespell">Divine Spell</option>
<option value="creationspell">Creation Spell</option>
<option value="feat">Providence</option>
</select>
<select name="attr_pmeta" class="pmeta metatag">
<option value="abate">Abate</option>
<option value="absorb">Absorb</option>
<option class="meta" value="amplify">Amplify</option>
<option value="area">Area</option>
<option value="cannibalize">Cannibalize</option>
<option value="combo">Combo</option>
<option value="cluster">Cluster</option>
<option value="deflect">Deflect</option>
<option value="dodge">Dodge</option>
<option value="echo">Echo</option>
<option value="eldritch">Eldritch</option>
<option value="expanse">Expanse</option>
<option value="fortify">Fortify</option>
<option value="gloom">Gloom</option>
<option value="maintain">Maintain</option>
<option value="multi">Multi</option>
<option value="open">Open</option>
<option value="permanency">Permanency</option>
<option value="piercer">Piercer</option>
<option value="proficiency">Proficiency</option>
<option value="range">Range</option>
<option value="sight">Sight</option>
<option value="stutter">Stutter</option>
<option value="weapon">Weapon</option>
</select>
<select name="attr_mmeta" class="mmeta metatag">
<option value="abate">Abate</option>
<option value="absorb">Absorb</option>
<option value="amplify">Amplify</option>
<option value="area">Area</option>
<option value="cannibalize">Cannibalize</option>
<option value="combo">Combo</option>
<option value="cluster">Cluster</option>
<option value="deflect">Deflect</option>
<option value="dodge">Dodge</option>
<option value="echo">Echo</option>
<option value="eldritch">Eldritch</option>
<option value="expanse">Expanse</option>
<option value="fortify">Fortify</option>
<option value="gloom">Gloom</option>
<option value="maintain">Maintain</option>
<option value="multi">Multi</option>
<option value="open">Open</option>
<option value="permanency">Permanency</option>
<option value="piercer">Piercer</option>
<option value="proficiency">Proficiency</option>
<option value="range">Range</option>
<option value="sight">Sight</option>
<option value="stutter">Stutter</option>
<option value="weapon">Weapon</option>
</select>
<select name="attr_smeta" class="smeta metatag">
<option value="abate">Abate</option>
<option value="absorb">Absorb</option>
<option value="amplify">Amplify</option>
<option value="area">Area</option>
<option value="cannibalize">Cannibalize</option>
<option value="combo">Combo</option>
<option value="cluster">Cluster</option>
<option value="deflect">Deflect</option>
<option value="dodge">Dodge</option>
<option value="echo">Echo</option>
<option value="eldritch">Eldritch</option>
<option value="expanse">Expanse</option>
<option value="fortify">Fortify</option>
<option value="gloom">Gloom</option>
<option value="maintain">Maintain</option>
<option value="multi">Multi</option>
<option value="open">Open</option>
<option value="permanency">Permanency</option>
<option value="piercer">Piercer</option>
<option value="proficiency">Proficiency</option>
<option value="range">Range</option>
<option value="sight">Sight</option>
<option value="stutter">Stutter</option>
<option value="weapon">Weapon</option>
</select>
<input type="checkbox" class="toggle-show" />
<div class="activedetails showable">
<label class="desclabel labeltext">Description:<textarea name="attr_actives_description" class="activedesc textbox"></textarea></lable>
<label class="modlabel labeltext">PDF:<input class="mod" type='number' name='attr_actives_pdf' /></label>
<label class="modlabel labeltext">Pierce:<input class="mod" type="number" name='attr_actives_pierce' /></label>
<label class="modlabel labeltext">Reach/<br>Range:<input class="mod" type="number" name='attr_actives_reach' /></label>
<label class="modlabel labeltext">Size:<input class="mod" type="number" name='attr_actives_size' /></label>
<label class="modlabel labeltext">Move:<input class="mod" type="number" name='attr_actives_move' /></label>
<label class="modlabel labeltext">Heal:<input class="mod" type="number" name='attr_actives_heal' /></label>
<label class="modlabel labeltext">Recover:<input class="mod" type="number" name='attr_actives_recover' /></label>
<label class="modlabel labeltext">Focus:<input class="mod" type="number" name='attr_actives_focus' /></label>
<label class="modlabel labeltext">PPF:<input class="mod" type="number" name='attr_actives_ppf' /></label>
<label class="modlabel labeltext">Parry:<input class="mod" type="number" name='attr_actives_pparry' /></label>
<label class="modlabel labeltext">Evade:<input class="mod" type="number" name='attr_actives_evade' /></label>
<label class="modlabel labeltext">MDF:<input class="mod" type="number" name='attr_actives_mdf' /></label>
<label class="modlabel labeltext">MPF:<input class="mod" type="number" name='attr_actives_mpf' /></label>
<label class="modlabel labeltext">MParry:<input class="mod" type="number" name='attr_actives_mparry' /></label>
<label class="modlabel labeltext">SDF:<input class="mod" type="number" name='attr_actives_sdf' /></label>
<label class="modlabel labeltext">SPF:<input class="mod" type="number" name='attr_actives_spf' /></label>
<label class="modlabel labeltext">SParry:<input class="mod" type="number" name='attr_actives_sparry' /></label>
</div>
</fieldset>
</div>
<div class="equipment ability-box">
<span class="checkbox"></span>
<span class="equipname labeltext">Equipment:</span>
<span class="textbox labeltext">Description:</span>
<span class="labeltext toggle-show">Show</span>
<fieldset class="repeating_equipment">
<input class="checkbox" type="checkbox" name="attr_equipment_toggle" value="1" />
<input class="equipname" type="text" name="attr_equipment_name" />
<textarea class="equipdesc textbox" name="attr_equipment_description"></textarea>
<input type="checkbox" class="toggle-show" />
<div class="equipdetails showable">
<label class="modlabel labeltext">PDF:<input class="mod" type='number' name='attr_equipment_pdf' /></label>
<label class="modlabel labeltext">Pierce:<input class="mod" type="number" name='attr_equipment_pierce' /></label>
<label class="modlabel labeltext">Reach/<br>Range:<input class="mod" type="number" name='attr_equipment_reach' /></label>
<label class="modlabel labeltext">Heal:<input class="mod" type="number" name='attr_equipment_heal' /></label>
<label class="modlabel labeltext">Recover:<input class="mod" type="number" name='attr_equipment_recover' /></label>
<label class="modlabel labeltext">Size:<input class="mod" type="number" name='attr_equipment_size' /></label>
<label class="modlabel labeltext">Move:<input class="mod" type="number" name='attr_equipment_move' /></label>
<label class="modlabel labeltext">Focus:<input class="mod" type="number" name='attr_equipment_focus' /></label>
<label class="modlabel labeltext">PPF:<input class="mod" type="number" name='attr_equipment_ppf' /></label>
<label class="modlabel labeltext">Parry:<input class="mod" type="number" name='attr_equipment_pparry' /></label>
<label class="modlabel labeltext">Evade:<input class="mod" type="number" name='attr_equipment_evade' /></label>
<label class="modlabel labeltext">MDF:<input class="mod" type="number" name='attr_equipment_mdf' /></label>
<label class="modlabel labeltext">MPF:<input class="mod" type="number" name='attr_equipment_mpf' /></label>
<label class="modlabel labeltext">MParry:<input class="mod" type="number" name='attr_equipment_mparry' /></label>
<label class="modlabel labeltext">SDF:<input class="mod" type="number" name='attr_equipment_sdf' /></label>
<label class="modlabel labeltext">SPF:<input class="mod" type="number" name='attr_equipment_spf' /></label>
<label class="modlabel labeltext">SParry:<input class="mod" type="number" name='attr_equipment_sparry' /></label>
</div>
</fieldset>
</div>
<div class="notes ability-box">
<label class="labeltext">Notes:</label>
<textarea class="notebox" name="attr_notes"></textarea>
</div>
</div>
<div class="current">
<div class="conditions grid-container"></div>
<div class="condition blind grid-element">
<input class="blind numbox" type="number" value="0" name="attr_blind" />
</div>
<div class="condition degen-curse grid-element">
<input class="degen numbox" type="number" value="0" name="attr_degen" />
<input class="curse numbox" type="number" value="0" name="attr_curse" />
</div>
<div class="condition taunt grid-element">
<input class="taunt numbox" type="number" value="0" name="attr_taunt" />
</div>
<div class="condition impeded grid-element">
<input class="impeded numbox" type="number" value="0" name="attr_impeded" />
</div>
<div class="condition shroud grid-element">
<input class="shroud numbox" type="number" value="0" name="attr_shroud" />
</div>
<div class="condition possession grid-element">
<input class="possession numbox" type="number" value="0" name="attr_possession" />
</div>
<div class="condition rage grid-element">
<input class="rage numbox" type="number" value="0" name="attr_rage" />
</div>
<div class="condition vulnerable grid-element">
<input class="vulnerable numbox" type="number" value="0" name="attr_vulnerable" />
</div>
<div class="condition aura grid-element">
<input class="aura numbox" type="number" value="0" name="attr_aura" />
</div>
<div class="derived grid-container">
<div class="derived grid-element pdf">
<label class="derived-stat-label">Physical<br>DF: </label>
<span class="stat-container"><input type="number" name="attr_pdf" /></span>
</div>
<div class="derived grid-element pierce">
<label class="derived-stat-label">Pierce: </label>
<span class="stat-container"><input type="number" name="attr_pierce" /></span>
</div>
<div class="derived grid-element focus">
<label class="derived-stat-label">Focus: </label>
<span class="stat-container"><input type="number" name="attr_focus" /></span>
</div>
<div class="derived grid-element heal">
<label class="derived-stat-label">Heal:</label>
<span class="stat-container"><input type="number" name="attr_heal" /></span>
</div>
<div class="derived grid-element size">
<label class="derived-stat-label">Size:</label>
<span class="stat-container"><input type="number" name="attr_size" /></span>
</div>
<div class="derived grid-element move">
<label class="derived-stat-label">Movement:</label>
<span class="stat-container"><input type="number" name="attr_move" /></span>
</div>
<div class="derived grid-element ppf">
<label class="derived-stat-label">Physical<br>PF: </label>
<span class="stat-container"><input type="number" name="attr_ppf" /></span>
</div>
<div class="derived grid-element pparry">
<label class="derived-stat-label">Physical<br>Parry: </label>
<span class="stat-container"><input type="number" name="attr_pparry" /></span>
</div>
<div class="derived grid-element evade">
<label class="derived-stat-label">Evade: </label>
<span class="stat-container"><input type="number" name="attr_evade" /></span>
</div>
<div class="derived grid-element mdf">
<label class="derived-stat-label">Mental<br>DF: </label>
<span class="stat-container"><input type="number" name="attr_mdf" /></span>
</div>
<div class="derived grid-element mpf">
<label class="derived-stat-label">Mental<br>PF: </label>
<span class="stat-container"><input type="number" name="attr_mpf" /></span>
</div>
<div class="derived grid-element mparry">
<label class="derived-stat-label">Mental<br>Parry: </label>
<span class="stat-container"><input type="number" name="attr_mparry" /></span>
</div>
<div class="derived grid-element sdf">
<label class="derived-stat-label">Spiritual<br>DF: </label>
<span class="stat-container"><input type="number" name="attr_sdf" /></span>
</div>
<div class="derived grid-element spf">
<label class="derived-stat-label">Spiritual<br>PF: </label>
<span class="stat-container"><input type="number" name="attr_spf" /></span>
</div>
<div class="derived grid-element sparry">
<label class="derived-stat-label">Spiritual<br>Parry: </label>
<span class="stat-container"><input type="number" name="attr_sparry" /></span>
</div>
</div>
</div>
</div>
<script type="text/worker">
const int = (value, error = 0) => parseInt(value) || error;
const derived_stats = ['pdf', 'pierce', 'focus','heal','size','move', 'ppf', 'pparry', 'evade', 'mdf', 'mpf', 'mparry', 'sdf', 'spf', 'sparry'];
// an array of the repeating section names
const section_names = ['equipment', 'passives', 'actives'];
// an array of the attributes outside of the section you want to use.
const outside_attributes = ['basesize', 'basemove'];
// a function to quickly build repeating section names, suitable for this worker.
const section_field = (section, field, id = ':') => `repeating_${section}${id === ':' ? id : `_${id}_`}${section}_${field}`;
// altered buildChanges, so now it is a function that can hanndle all 3 repeating sections
const buildChanges = (section) => derived_stats.reduce((total, item) => `${total} change:${section_field(section, item)}`, '');
// created 3 variables for the change:stuff line, to make that less of a chore to write and read
const toggleChanges = section_names.map(section => `change:repeating_${section}:${section}_toggle`).join(' ');
const outsideChanges = outside_attributes.map(stat => `change:${stat}`).join(' ');
const removeSections = section_names.map(section => `remove:repeating_${section}`).join(' ');
on(`${toggleChanges} ${outsideChanges} ${buildChanges(section_names[0])} ${buildChanges(section_names[1])} ${buildChanges(section_names[2])} ${toggleChanges} ${removeSections} sheet:opened`, () => {
// define the fieldnames outside the first getSectionIDs to make clear it doesnt belong to any of them
const fieldnames = [];
// notice the idarray array name has changed. It must be different in each getSectionIDs
getSectionIDs(`repeating_${section_names[0]}`, idarray0 => {
// loop through idarray0, and create the repeating section attribute for each modifier attribute name
idarray0.forEach(id => {
derived_stats.forEach(mod => fieldnames.push(section_field(section_names[0], `${mod}`, id)));
fieldnames.push(section_field(section_names[0], 'toggle', id));
});
getSectionIDs(`repeating_${section_names[1]}`, idarray1 => {
// loop through idarray1, and create the repeating section attribute for each modifier attribute name
idarray1.forEach(id => {
derived_stats.forEach(mod => fieldnames.push(section_field(section_names[1], `${mod}`, id)));
fieldnames.push(section_field(section_names[1], 'toggle', id));
});
getSectionIDs(`repeating_${section_names[2]}`, idarray2 => {
// loop through idarray2, and create the repeating section attribute for each modifier attribute name
idarray2.forEach(id => {
derived_stats.forEach(mod => fieldnames.push(section_field(section_names[2], `${mod}`, id)));
fieldnames.push(section_field(section_names[2], 'toggle', id));
});
// now we are ready to grab all the values from the character sheet
// outside_attributes as an array of the attributes you want to usem that aren't in the repeating sections
getAttrs([...fieldnames, ...outside_attributes], v => {
//console.log(v);
//console.log('v^');
// initialise the object used for output, with each total attribute set to a default value of 0
const output = {};
derived_stats.forEach(mod => output[`${mod}`] = 0);
// loop through all 3 idarrays
// first set up an array of arrays, to make the idearrays easy to access with an index
const idarrays = [idarray0, idarray1, idarray2];
[0,1,2].forEach(num => {
// now loop through each idarray, and get the various values and add them to output
idarrays[num].forEach(id => {
// check if this row is to be counted or not
const toggle = int(v[section_field(section_names[num], 'toggle', id)]);
if (toggle) {
// add each modifier to the total
derived_stats.forEach(mod => output[`${mod}`] = output[`${mod}`] + int(v[section_field(section_names[num], `${mod}`, id)]));
}
});
});
// now handle the outsideattributes however you need to.
output.size = output.size + int(v.basesize);
output.move = output.move + int(v.basemove);
setAttrs(output);
});
});
});
});
});
const buttonlist = ["character","current"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
});
</script>