Files
roll20-character-sheets/Out Of The Ashes/outoftheashes.html
T
2024-06-03 13:15:14 -04:00

625 lines
28 KiB
HTML

<input type="hidden" class="sheet-tabstoggle" name="attr_sheetTab" value="character" />
<div class="tabbuttons">
<button type="action" name="act_character" >Character</button>
<button type="action" name="act_community" >Community</button>
<button type="action" name="act_mods" >Mods</button>
</div>
<div class="sheet-character">
<div class="sheet-basicinfo-left basicinfo">
<div class="inforow"><label>Name</label><input type="text" name="attr_character_name" /></div>
<div class="inforow"><label>Culture</label><input type="text" name="attr_culture" /></div>
<div class="inforow"><label>Concept</label><input type="text" name="attr_concept" /></div>
<div class="inforow"><label>Focus</label><select name="attr_focus">
<option value="Determined">Determined</option>
<option value="Magician">Magician</option>
<option value="Tough">Tough</option>
</select></div>
<div class="inforow"><label>Drives</label></div>
<div class="inforow"><label style="font-weight:normal">Duty</label><input type="text" name="attr_driveduty" /></div>
<div class="inforow"><label style="font-weight:normal">Passion</label><input type="text" name="attr_drivepassion" /></div>
<div class="inforow extradrive"><label>&nbsp;</label><input type="text" name="attr_driveother" /></div>
<div class="inforow"><label style="font-weight:normal">Drive used</label><input type="checkbox" name="attr_driveused1"><span></span></input><input type="checkbox" name="attr_driveused2"></input><span></span><input type="checkbox" name="attr_driveused3" class="extradrive"></input><span class="extradrive"></span><button class="sheet-d6-dice" type='roll' name='roll_regainspirit' style="margin-right:19px;float:right;" value='&{template:ashes} {{title=@{character_name}}} {{Regain spirit=[[1d6+1]]}}'>Regain Spirit</button></div>
</div>
<div class="sheet-basicinfo-right basicinfo">
<div class="inforow"><label>Keys</label><input type="text" name="attr_key1" /></div>
<div class="inforow"><label>&nbsp;</label><input type="text" name="attr_key2" /></div>
<div class="inforow"><label>&nbsp;</label><input type="text" name="attr_key3" /></div>
<div class="inforow extrakey"><label>&nbsp;</label><input type="text" name="attr_key4" /></div>
<h4 class="sheet-first">Current</h4><h4>Max</h4><h4 class="despair1 hidden" style="margin-left:25px;">Despair Manifestations</h4><br />
<div class="inforow"><label>Endurance</label><input type="number" name="attr_endurance" />/<input type="number" name="attr_endurance_max" />
<input type="text" name="attr_despair_manifestation1" class="despair despair1 hidden" /></div>
<div class="inforow"><label>Spirit</label><input type="number" name="attr_spirit" />/<input type="number" name="attr_spirit_max" />
<input type="text" name="attr_despair_manifestation2" class="despair despair2 hidden" /></div>
<div class="inforow"><label>Despair</label><input type="number" name="attr_despair" max="5" min="0" />
<input type="text" name="attr_despair_manifestation3" class="despair despair3 hidden" style="margin-left:101px;" /></div>
<div class="inforow despair despair4 hidden"><label>&nbsp;</label><input type="text" name="attr_despair_manifestation4" class="despair" /></div>
<div class="inforow"><label>Experience</label><input type="number" name="attr_experience" /></div>
</div>
<div class="sheet-skills sheet-physical">
<h2>Physical Skills</h2>
<label>Athletics</label><input type="number" name='attr_athletics' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_athletics' value='&{template:ashes} {{title=@{character_name}}} {{Athletics=[[2d10 + @{athletics} + ?{Modifier|0}]]}}'></button>
<br />
<label>Fight</label><input type="number" name='attr_fight' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_fight' value='&{template:ashes} {{title=@{character_name}}} {{Fight=[[2d10 + @{fight} + ?{Modifier|0}]]}}'></button>
<br />
<label>Shoot</label><input type="number" name='attr_shoot' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_shoot' value='&{template:ashes} {{title=@{character_name}}} {{Shoot=[[2d10 + @{shoot} + ?{Modifier|0}]]}}'></button>
<br />
<label>Sneak</label><input type="number" name='attr_sneak' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_sneak' value='&{template:ashes} {{title=@{character_name}}} {{Sneak=[[2d10 + @{sneak} + ?{Modifier|0}]]}}'></button>
<br />
<label>Survival</label><input type="number" name='attr_survival' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_survival' value='&{template:ashes} {{title=@{character_name}}} {{Survival=[[2d10 + @{survival} + ?{Modifier|0}]]}}'></button>
<br />
<label>Vigour</label><input type="number" name='attr_vigour' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_vigour' value='&{template:ashes} {{title=@{character_name}}} {{Vigour=[[2d10 + @{vigour} + ?{Modifier|0}]]}}'></button>
</div>
<div class="sheet-skills sheet-mental">
<h2>Mental Skills</h2>
<label>Battle</label><input type="number" name='attr_battle' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_battle' value='&{template:ashes} {{title=@{character_name}}} {{Battle=[[2d10 + @{battle} + ?{Modifier|0}]]}}'></button>
<br />
<label>Craft</label><input type="number" name='attr_craft' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_craft' value='&{template:ashes} {{title=@{character_name}}} {{Craft=[[2d10 + @{craft} + ?{Modifier|0}]]}}'></button>
<br />
<label>Heal</label><input type="number" name='attr_heal' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_heal' value='&{template:ashes} {{title=@{character_name}}} {{Heal=[[2d10 + @{heal} + ?{Modifier|0}]]}}'></button>
<br />
<label>Investigate</label><input type="number" name='attr_investigate' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_investigate' value='&{template:ashes} {{title=@{character_name}}} {{Investigate=[[2d10 + @{investigate} + ?{Modifier|0}]]}}'></button>
<br />
<label>Lore</label><input type="number" name='attr_lore' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_lore' value='&{template:ashes} {{title=@{character_name}}} {{Lore=[[2d10 + @{lore} + ?{Modifier|0}]]}}'></button>
<br />
<label>Notice</label><input type="number" name='attr_notice' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_notice' value='&{template:ashes} {{title=@{character_name}}} {{Notice=[[2d10 + @{notice} + ?{Modifier|0}]]}}'></button>
</div>
<div class="sheet-skills sheet-social">
<h2>Social Skills</h2>
<label>Conviction</label><input type="number" name='attr_conviction' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_conviction' value='&{template:ashes} {{title=@{character_name}}} {{Conviction=[[2d10 + @{conviction} + ?{Modifier|0}]]}}'></button>
<br />
<label>Deceive</label><input type="number" name='attr_deceive' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_deceive' value='&{template:ashes} {{title=@{character_name}}} {{Deceive=[[2d10 + @{deceive} + ?{Modifier|0}]]}}'></button>
<br />
<label>Persuade</label><input type="number" name='attr_persuade' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_persuade' value='&{template:ashes} {{title=@{character_name}}} {{Persuade=[[2d10 + @{persuade} + ?{Modifier|0}]]}}'></button>
<br />
<label>Insight</label><input type="number" name='attr_insight' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_insight' value='&{template:ashes} {{title=@{character_name}}} {{Insight=[[2d10 + @{insight} + ?{Modifier|0}]]}}'></button>
<br />
<label>Song</label><input type="number" name='attr_song' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_song' value='&{template:ashes} {{title=@{character_name}}} {{Song=[[2d10 + @{song} + ?{Modifier|0}]]}}'></button>
<br />
<label>Taunt</label><input type="number" name='attr_taunt' min="0"></input><button class="sheet-skill-button" type='roll' name='roll_taunt' value='&{template:ashes} {{title=@{character_name}}} {{Taunt=[[2d10 + @{taunt} + ?{Modifier|0}]]}}'></button>
</div>
<p class="sheet-skill-explain">First select 10 skills at level 3. You then have 15 points to spend on increasing your skills; each level costs 1 point.</p>
<div class="sheet-skillpoints sheet-unspent">
<label>Unspent skill points </label><input type="number" name='attr_skillpoints'></input>
</div>
<div class="sheet-skillpoints sheet-cap">
<label>Skill cap </label><input type="number" name='attr_skillcap'></input>
</div>
<div class="sheet-talents">
<h2>Talents</h2>
<fieldset class="repeating_talents">
<input type="text" name="attr_talentname" /><input type="number" name="attr_talentcost" min="0" />
<textarea name="attr_talentdescription" />
</fieldset>
<div class="sheet-skillpoints">
<div class="sheet-col">
<label>Unspent talent points </label><input type="number" name='attr_talentpoints'></input>
</div>
</div>
</div>
<!-- Attributes and combat -->
<div class="sheet-other">
<h2>Possessions</h2>
<div class="sheet-equipment">
<div class="possessionsdamage">
<label>Damage</label>
<div class="inforow"><div style="display:inline-block;width:113px;">Weapon</div><div style="display:inline-block;width:55px;">Damage</div><div style="display:inline-block;width:50px;">Bonus</div><div style="display:inline-block;">Roll</div></div>
<div class="itemrow"><input type="text" disabled="true" value="Unarmed" /><select name="attr_unarmeddietype" class="diceselector">
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><select name="attr_unarmedbonus" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_unarmed' value='&{template:ashes} {{title=@{character_name}}} {{Weapon=Unarmed}} {{Damage=[[@{unarmeddietype} + @{unarmedbonus} + ?{Modifier|0}]]}}'></button></div>
<fieldset class="repeating_weapons">
<div class="itemrow"><input type="text" name="attr_weaponname" /><select name="attr_weapondietype" class="diceselector">
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><select name="attr_weaponbonus" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_weapon' value='&{template:ashes} {{title=@{character_name}}} {{Weapon=@{weaponname}}} {{Damage=[[@{weapondietype} + @{weaponbonus} + ?{Modifier|0}]]}}'></button></div>
</fieldset>
</div>
<div class="possessionsprotection">
<label>Protection</label>
<div class="inforow"><div style="display:inline-block;width:90px;">Armour</div><div style="display:inline-block;">Protection</div></div>
<fieldset class="repeating_armour">
<div class="itemrow" style="margin-bottom:5px;"><input type="text" name="attr_armourname" /><input type="number" name="attr_armourbonus" style="border-right:1px solid black;" /></div>
</fieldset>
</div>
<div class="possessionspossessions"><br />
<div class="inforow" style="float:right;"><label style="width:60px;">Wealth</label><select name="attr_wealth" class="diceselector">
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="0">0</option>
</select><button class="sheet-skill-button" type='roll' name='roll_wealth' value='&{template:ashes} {{title=@{character_name}}} {{Wealth=[[@{wealth}]]}}'></button></div>
<label>Significant Possessions</label><br />
<textarea name="attr_possessions" style="height:95px;"></textarea>
</div>
</div>
<h2 style="margin-top:10px;">Connections</h2>
<fieldset class="repeating_connections">
<input type="text" name="attr_connection" class="connectionitem" /><select name="attr_connectiondietype" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_connection' value='&{template:ashes} {{title=@{character_name}}} {{Connection=@{connection}}} {{Result=[[@{connectiondietype} + ?{Modifier|0}]]}}'></button></div>
</fieldset>
</div>
</div>
<!-- COMMUNITY SHEET -->
<div class="sheet-community">
<div class="header"><h1>Community</h1></div>
<div class="concept">
<h2>Concept</h2>
<div class="inforow"><label>Name</label><input type="text" name="attr_character_name"></input></div>
<div class="inforow"><label>Age</label><input type="text" name="attr_communityage"></input></div>
<div class="inforow"><label>Cultures</label><input type="text" name="attr_communitycultures"></input></div>
<div class="inforow"><label>Concept</label><textarea name="attr_communityconcept" /></div>
<h2>Attributes</h2>
<div class="attributesblock">
<div class="communityattributes">
<div class="inforow"><label>Education</label><select name="attr_education" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_education' value='&{template:ashes} {{title=@{character_name}}} {{Education=[[@{education}]]}}'></button></div>
<div class="inforow"><label>Hope</label><select name="attr_hope" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_hope' value='&{template:ashes} {{title=@{character_name}}} {{Hope=[[@{hope}]]}}'></button></div>
<div class="inforow"><label>Military</label><select name="attr_military" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_military' value='&{template:ashes} {{title=@{character_name}}} {{Military=[[@{military}]]}}'></button></div>
<div class="inforow"><label>Prosperity</label><select name="attr_prosperity" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_prosperity' value='&{template:ashes} {{title=@{character_name}}} {{Prosperity=[[@{prosperity}]]}}'></button></div>
<div class="inforow"><label>Territory</label><select name="attr_territory" class="diceselector">
<option value="0">0</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select><button type='roll' name='roll_territory' value='&{template:ashes} {{title=@{character_name}}} {{Territory=[[@{territory}]]}}'></button></div>
</div>
<div class="advancements">
<div class="inforow"><label>Advancement</label><input type="number" name="attr_advancementpoints" /></div>
<div class="inforow"><label>Attribute points</label><input type="number" name="attr_attributepoints" /></div>
<p>It costs one point to buy an attribute at d4 or raise an attribute by a die type, for example, from d4 to d6. You must spend at least one point in Hope.</p>
</div>
</div>
<h2>Ties</h2>
<fieldset class="repeating_ties">
<div class="itemrow"><label>Name</label><input type="text" name="attr_tiename"></input></div>
<div class="itemrow"><label>Details</label><textarea name="attr_tiedetails" /></div>
</fieldset>
<h2>Threats</h2>
<fieldset class="repeating_threat">
<div class="itemrow"><label>Name</label><input type="text" name="attr_threatname"></input></div>
<div class="itemrow"><label>Details</label><textarea name="attr_threatdetails" /></div>
</fieldset>
</div>
<div class="people">
<h2>People</h2>
<fieldset class="repeating_people">
<div class="itemrow"><label>Name</label><input type="text" name="attr_peoplename"></input></div>
<div class="itemrow"><label>Details</label><textarea name="attr_peopledetails" /></div>
</fieldset>
<h2>Locations</h2>
<fieldset class="repeating_location">
<div class="itemrow"><label>Name</label><input type="text" name="attr_locationname"></input></div>
<div class="itemrow"><label>Details</label><textarea name="attr_locationdetails" /></div>
</fieldset>
<h2>Dangerous Places</h2>
<fieldset class="repeating_dangerous">
<div class="itemrow"><label>Name</label><input type="text" name="attr_dangerousname"></input></div>
<div class="itemrow"><label>Details</label><textarea name="attr_dangerousdetails" /></div>
</fieldset>
</div>
</div>
<!-- END DOMAIN SHEET -->
<!-- MODS SHEET -->
<div class="sheet-mods">
<div class="header"><h1>Modifications</h1></div>
<div class="content">
<p>Need to make some tweaks? Modify things here.</p>
<label>Modify skill points:</label><input type="number" name="attr_extraskills" /><br />
<label>Modify endurance:</label><input type="number" name="attr_extraendurance" /><br />
<label>Modify spirit:</label><input type="number" name="attr_extraspirit" /><br />
</div>
</div>
<!-- END MODS SHEET -->
<!-- ROLL TEMPLATE -->
<rolltemplate class="sheet-rolltemplate-ashes">
<div class="sheet-container">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
</div>
<div class="sheet-content">
{{#allprops() title subtitle desc color}}
<div class="sheet-key">{{key}}</div>
<div class="sheet-value">{{value}}</div>
{{/allprops() title subtitle desc color}}
{{#desc}}<div class="sheet-desc">{{desc}}</div>{{/desc}}
</div>
</div>
</rolltemplate>
<script type="text/worker">
// Deal with the tabs
const buttonlist = ["character","community","mods"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
});
// Initialise skills and other numbered attributes
on("change:athletics change:fight change:shoot change:sneak change:survival change:vigour change:battle change:craft change:heal change:investigate change:lore change:notice change:conviction change:deceive change:persuade change:insight change:song change:taunt sheet:opened", function() {
getAttrs(["athletics","fight","shoot","sneak","survival","vigour","battle","craft","heal","investigate","lore","notice","conviction","deceive","persuade","insight","song","taunt","skillcap","despair","experience","talentpoints","advancementpoints","attributepoints"], function(values) {
let athletics = parseInt(values.athletics)||0;
let fight = parseInt(values.fight)||0;
let shoot = parseInt(values.shoot)||0;
let sneak = parseInt(values.sneak)||0;
let survival = parseInt(values.survival)||0;
let vigour = parseInt(values.vigour)||0;
let battle = parseInt(values.battle)||0;
let craft = parseInt(values.craft)||0;
let heal = parseInt(values.heal)||0;
let investigate = parseInt(values.investigate)||0;
let lore = parseInt(values.lore)||0;
let notice = parseInt(values.notice)||0;
let conviction = parseInt(values.conviction)||0;
let deceive = parseInt(values.deceive)||0;
let persuade = parseInt(values.persuade)||0;
let insight = parseInt(values.insight)||0;
let song = parseInt(values.song)||0;
let taunt = parseInt(values.taunt)||0;
let skillcap = parseInt(values.skillcap)||8;
let despair = parseInt(values.despair)||0;
let experience = parseInt(values.experience)||0;
let talentpoints = parseInt(values.talentpoints)||5;
let advancementpoints = parseInt(values.advancementpoints)||0;
let attributepoints = parseInt(values.attributepoints)||5;
setAttrs({
"athletics": Math.min(athletics, skillcap),
"fight": Math.min(fight, skillcap),
"shoot": Math.min(shoot, skillcap),
"sneak": Math.min(sneak, skillcap),
"survival": Math.min(survival, skillcap),
"vigour": Math.min(vigour, skillcap),
"battle": Math.min(battle, skillcap),
"craft": Math.min(craft, skillcap),
"heal": Math.min(heal, skillcap),
"investigate": Math.min(investigate, skillcap),
"lore": Math.min(lore, skillcap),
"notice": Math.min(notice, skillcap),
"conviction": Math.min(conviction, skillcap),
"deceive": Math.min(deceive, skillcap),
"persuade": Math.min(persuade, skillcap),
"insight": Math.min(insight, skillcap),
"song": Math.min(song, skillcap),
"taunt": Math.min(taunt, skillcap),
"skillcap": skillcap,
"despair": despair,
"experience": experience,
"talentpoints": talentpoints,
"advancementpoints": advancementpoints,
"attributepoints": attributepoints
});
});
});
// Hide/show fields when focus changes
on("change:focus sheet:opened", function() {
getAttrs(["focus"], function(values) {
let focus = values.focus;
if (focus === "Tough")
{
$20('.extradrive').addClass('hidden');
$20('.extrakey').addClass('hidden');
}
if (focus === "Determined")
{
$20('.extradrive').removeClass('hidden');
$20('.extrakey').addClass('hidden');
}
if (focus === "Magician")
{
$20('.extradrive').addClass('hidden');
$20('.extrakey').removeClass('hidden');
}
});
});
// Add manifestations when despair changes
on("change:despair sheet:opened", function() {
getAttrs(["despair"], function(values) {
let despair = values.despair;
$20('.despair1').addClass('hidden');
$20('.despair2').addClass('hidden');
$20('.despair3').addClass('hidden');
$20('.despair4').addClass('hidden');
if (despair > 0)
{
$20('.despair1').removeClass('hidden');
}
if (despair > 1)
{
$20('.despair2').removeClass('hidden');
}
if (despair > 2)
{
$20('.despair3').removeClass('hidden');
}
if (despair > 3)
{
$20('.despair4').removeClass('hidden');
}
});
});
// Set endurance maximum
on("change:vigour change:extraendurance change:focus sheet:opened", function() {
getAttrs(["vigour","focus","extraendurance"], function(values) {
let vigour = parseInt(values.vigour)||0;
let extraendurance = parseInt(values.extraendurance)||0;
let focus = values.focus;
let endurance = vigour + 16 + extraendurance;
if (focus === "Tough")
{
endurance = vigour + 22 + extraendurance;
}
setAttrs({
"endurance_max": endurance
});
});
});
// Set spirit maximum
on("change:conviction change:extraspirit change:focus sheet:opened", function() {
getAttrs(["conviction","focus","extraspirit"], function(values) {
let conviction = parseInt(values.conviction)||0;
let extraspirit = parseInt(values.extraspirit)||0;
let focus = values.focus;
let halfconviction = Math.floor(conviction/2);
let spirit = halfconviction + 8 + extraspirit;
if (focus === "Determined")
{
spirit = halfconviction + 11 + extraspirit;
}
setAttrs({
"spirit_max": spirit
});
});
});
// Set skillcap
on("change:experience sheet:opened", function() {
getAttrs(["experience", "skillcap"], function(values) {
let experience = parseInt(values.experience)||0;
let skillcap = Math.floor(experience/15) + 8;
if (skillcap > 13) {
skillcap = 13;
}
setAttrs({
"skillcap": skillcap
});
});
});
// Set unspent skill points
on("change:athletics change:fight change:shoot change:sneak change:survival change:vigour change:battle change:craft change:heal change:investigate change:lore change:notice change:conviction change:deceive change:persuade change:insight change:song change:taunt change:experience change:extraskills sheet:opened", function() {
getAttrs(["athletics","fight","shoot","sneak","survival","vigour","battle","craft","heal","investigate","lore","notice","conviction","deceive","persuade","insight","song","taunt","experience","extraskills"], function(values) {
let athletics = parseInt(values.athletics)||0;
let fight = parseInt(values.fight)||0;
let shoot = parseInt(values.shoot)||0;
let sneak = parseInt(values.sneak)||0;
let survival = parseInt(values.survival)||0;
let vigour = parseInt(values.vigour)||0;
let battle = parseInt(values.battle)||0;
let craft = parseInt(values.craft)||0;
let heal = parseInt(values.heal)||0;
let investigate = parseInt(values.investigate)||0;
let lore = parseInt(values.lore)||0;
let notice = parseInt(values.notice)||0;
let charm = parseInt(values.charm)||0;
let conviction = parseInt(values.conviction)||0;
let deceive = parseInt(values.deceive)||0;
let persuade = parseInt(values.persuade)||0;
let insight = parseInt(values.insight)||0;
let song = parseInt(values.song)||0;
let taunt = parseInt(values.taunt)||0;
let experience = parseInt(values.experience)||0;
let extraskills = parseInt(values.extraskills)||0;
let totalskillpoints = Math.floor(experience/5) + 45 + extraskills;
let skillpoints = athletics
+ fight
+ shoot
+ sneak
+ survival
+ vigour
+ battle
+ craft
+ heal
+ investigate
+ lore
+ notice
+ conviction
+ deceive
+ persuade
+ insight
+ song
+ taunt;
setAttrs({
"skillpoints": totalskillpoints - skillpoints
});
});
});
// Set talent points
on('sheet:opened remove:repeating_talents change:repeating_talents:talentcost change:experience', function() {
getSectionIDs('talents', function(idarray) {
// first get the attribute names for all rows in put in one array
const fieldnames = [];
idarray.forEach(id => fieldnames.push(`repeating_talents_${id}_talentcost`));
getAttrs(fieldnames, values => {
let totaltalentcost = 0;
// now loop through the rows again
idarray.forEach(id => {
let row = 'repeating_talents_' + id;
let talentcost = parseInt(values[`${row}_talentcost`])||0;
totaltalentcost += talentcost;
});
// Get the number of talent points.
getAttrs(["experience"], function(values) {
let talentpoints = Math.floor(parseInt(values.experience) /15) + 5||5;
setAttrs({
"talentpoints": talentpoints - totaltalentcost
});
});
});
});
});
// Set attribute points
on('sheet:opened change:education change:hope change:military change:territory change:prosperity change:advancementpoints', function() {
getAttrs(["education","hope","military","territory","prosperity","advancementpoints"], function(values) {
// Get total points spend
let education = DiceToPoints(values.education)||0;
let hope = DiceToPoints(values.hope)||0;
let military = DiceToPoints(values.military)||0;
let territory = DiceToPoints(values.territory)||0;
let prosperity = DiceToPoints(values.prosperity)||0;
let spend = education + hope + military + territory + prosperity;
// Get total attribute points
let attributepoints = Math.floor(parseInt(values.advancementpoints) /5) + 5||5;
// Set unspent attribute points
setAttrs({
"attributepoints": attributepoints - spend
});
});
});
function DiceToPoints(die){
if (die === 0) {return 0;}
else if (die === 'd4') {return 1;}
else if (die === 'd6') {return 2;}
else if (die === 'd8') {return 3;}
else if (die === 'd10') {return 4;}
else if (die === 'd12') {return 5;}
}
</script>