mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
606 lines
29 KiB
HTML
606 lines
29 KiB
HTML
<input type="hidden" name="attr_version">
|
|
<input type="hidden" class="sheet-tabstoggle" name="attr_sheetTab" value="character" />
|
|
<div>
|
|
<button type="action" name="act_character" class="sheet-tabbutton">Character</button>
|
|
<button type="action" name="act_crew" class="sheet-tabbutton">Crew</button>
|
|
<button type="action" name="act_mods" class="sheet-tabbutton">Mods</button>
|
|
</div>
|
|
|
|
<h1>L I M I N A L</h1>
|
|
<h3>A RPG about those caught between the ordinary and extraordinary.</h3>
|
|
|
|
<div class="sheet-character">
|
|
|
|
<div class="sheet-basicinfo">
|
|
<label>Name:</label><input type="text" name="attr_character_name" /><br />
|
|
<label>Concept:</label><input type="text" name="attr_concept" /><br />
|
|
<label>Crew:</label><input type="text" name="attr_crew" /><br />
|
|
<label>Focus:</label><select name="attr_focus">
|
|
<option value="Tough">Tough</option>
|
|
<option value="Determined">Determined</option>
|
|
<option value="Magician">Magician</option>
|
|
</select><br />
|
|
<label>Drive:</label><div class="sheet-auto-expand"><span name="attr_drive"></span><textarea name="attr_drive" /></div>
|
|
|
|
</div>
|
|
<div class="sheet-attributes">
|
|
<h2>Attributes</h2>
|
|
<h4 class="sheet-first">Current</h4><h4>Max</h4><br />
|
|
<label>Endurance</label><input type="number" name="attr_endurance" /><span style="font-weight:bold;font-size: 1.2em;"> / <span name="attr_endurance_max"></span></span><input type="hidden" name="attr_endurance_max" /><br />
|
|
<label>Will</label><input type="number" name="attr_will" /><span style="font-weight:bold;font-size: 1.2em;"> / <span name="attr_will_max"></span></span><input type="hidden" name="attr_will_max" /><br />
|
|
|
|
<label class="sheet-driveused">Drive used this session?</label><input type="checkbox" name="attr_driveused"></input>
|
|
<button class="sheet-skill-button sheet-d6-dice" type='roll' name='roll_drive' value='&{template:liminal} {{title=@{character_name}}} {{Will points recovered=[[1d6]]}}'> Lean on your drive</button>
|
|
</div>
|
|
|
|
<div class="sheet-skills sheet-physical">
|
|
<h2>Physical Skills</h2>
|
|
<label>Specialities</label>
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_athletics' value='&{template:liminal} {{title=@{character_name}}} {{Athletics=[[2d6 + @{athletics} + ?{Modifier|0}]]}}'>Athletics</button><input type="number" name='attr_athletics' min="0"></input><input type="text" name='attr_athleticsspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_awareness' value='&{template:liminal} {{title=@{character_name}}} {{Awareness=[[2d6 + @{awareness} + ?{Modifier|0}]]}}'>Awareness</button><input type="number" name='attr_awareness' min="0"></input><input type="text" name='attr_awarenessspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_melee' value='&{template:liminal} {{title=@{character_name}}} {{Melee=[[2d6 + @{melee} + ?{Modifier|0}]]}}'>Melee</button><input type="number" name='attr_melee' min="0"></input><input type="text" name='attr_meleespec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_shoot' value='&{template:liminal} {{title=@{character_name}}} {{Shoot=[[2d6 + @{shoot} + ?{Modifier|0}]]}}'>Shoot</button><input type="number" name='attr_shoot' min="0"></input><input type="text" name='attr_shootspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_stealth' value='&{template:liminal} {{title=@{character_name}}} {{Stealth=[[2d6 + @{stealth} + ?{Modifier|0}]]}}'>Stealth</button><input type="number" name='attr_stealth' min="0"></input><input type="text" name='attr_stealthspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_survival' value='&{template:liminal} {{title=@{character_name}}} {{Survival=[[2d6 + @{survival} + ?{Modifier|0}]]}}'>Survival</button><input type="number" name='attr_survival' min="0"></input><input type="text" name='attr_survivalspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_vehicles' value='&{template:liminal} {{title=@{character_name}}} {{Vehicles=[[2d6 + @{vehicles} + ?{Modifier|0}]]}}'>Vehicles</button><input type="number" name='attr_vehicles' min="0"></input><input type="text" name='attr_vehiclesspec'></input>
|
|
|
|
</div>
|
|
|
|
<div class="sheet-skills sheet-mental">
|
|
<h2>Mental Skills</h2>
|
|
<label>Specialities</label>
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Art=[[2d6 + @{art} + ?{Modifier|0}]]}}'>Art</button><input type="number" name='attr_art' min="0"></input><input type="text" name='attr_artspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Business=[[2d6 + @{business} + ?{Modifier|0}]]}}'>Business</button><input type="number" name='attr_business' min="0"></input><input type="text" name='attr_businessspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Education=[[2d6 + @{education} + ?{Modifier|0}]]}}'>Education</button><input type="number" name='attr_education' min="0"></input><input type="text" name='attr_educationspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Lore=[[2d6 + @{lore} + ?{Modifier|0}]]}}'>Lore</button><input type="number" name='attr_lore' min="0"></input><input type="text" name='attr_lorespec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Medicine=[[2d6 + @{medicine} + ?{Modifier|0}]]}}'>Medicine</button><input type="number" name='attr_medicine' min="0"></input><input type="text" name='attr_medicinespec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Science=[[2d6 + @{science} + ?{Modifier|0}]]}}'>Science</button><input type="number" name='attr_science' min="0"></input><input type="text" name='attr_sciencespec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Technology=[[2d6 + @{technology} + ?{Modifier|0}]]}}'>Technology</button><input type="number" name='attr_technology' min="0"></input><input type="text" name='attr_technologyspec'></input>
|
|
</div>
|
|
|
|
<div class="sheet-skills sheet-social">
|
|
<h2>Social Skills</h2>
|
|
<label>Specialities</label>
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Charm=[[2d6 + @{charm} + ?{Modifier|0}]]}}'>Charm</button><input type="number" name='attr_charm' min="0"></input><input type="text" name='attr_charmspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Conviction=[[2d6 + @{conviction} + ?{Modifier|0}]]}}'>Conviction</button><input type="number" name='attr_conviction' min="0"></input><input type="text" name='attr_convictionspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Empathy=[[2d6 + @{empathy} + ?{Modifier|0}]]}}'>Empathy</button><input type="number" name='attr_empathy' min="0"></input><input type="text" name='attr_empathyspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{High Society=[[2d6 + @{highsociety} + ?{Modifier|0}]]}}'>High Society</button><input type="number" name='attr_highsociety' min="0"></input><input type="text" name='attr_highsocietyspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Rhetoric=[[2d6 + @{rhetoric} + ?{Modifier|0}]]}}'>Rhetoric</button><input type="number" name='attr_rhetoric' min="0"></input><input type="text" name='attr_rhetoricspec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Streetwise=[[2d6 + @{streetwise} + ?{Modifier|0}]]}}'>Streetwise</button><input type="number" name='attr_streetwise' min="0"></input><input type="text" name='attr_streetwisespec'></input>
|
|
<br />
|
|
|
|
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:liminal} {{title=@{character_name}}} {{Taunt=[[2d6 + @{taunt} + ?{Modifier|0}]]}}'>Taunt</button><input type="number" name='attr_taunt' min="0"></input><input type="text" name='attr_tauntspec'></input>
|
|
</div>
|
|
|
|
|
|
<p class="sheet-skill-explain">Start with 17 Skill points. If you have a skill at 3 or higher you may spend 1 point for a Speciality.</p>
|
|
|
|
|
|
<div class="sheet-skillpoints sheet-unspent">
|
|
<label>Unspent skill points: <span name='attr_skillpoints'></span> / <span name='attr_totalskillpoints'></span></label><input type="hidden" name='attr_skillpoints'></input><input type="hidden" name='attr_totalskillpoints'></input>
|
|
</div>
|
|
<div class="sheet-skillpoints sheet-cap">
|
|
<label>Skill cap: <span name='attr_skillcap'></span></label><input type="hidden" name='attr_skillcap'></input>
|
|
</div>
|
|
|
|
<div class="sheet-traits">
|
|
<h2>Traits</h2>
|
|
|
|
<fieldset class="repeating_traits">
|
|
<input type="text" name="attr_traitname" />
|
|
<input type="number" name="attr_traitcost" min="1" />
|
|
<div class="sheet-auto-expand"><span name="attr_traitdescription"></span><textarea name="attr_traitdescription" /></div>
|
|
</fieldset>
|
|
|
|
<h2 style="margin-top:20px;">Limitations</h2>
|
|
|
|
<fieldset class="repeating_limitations">
|
|
<input type="text" name="attr_limitation" />
|
|
<input type="number" name="attr_limitationcost" min="1" value="1"/>
|
|
<div class="sheet-auto-expand"><span name="attr_limitationdescription"></span><textarea name="attr_limitationdescription" /></div>
|
|
</fieldset>
|
|
<p class="sheet-skill-explain">Start with 5 Trait points. You can gain up to +2 points from Limitations.</p>
|
|
<div class="sheet-skillpoints">
|
|
<div class="sheet-col">
|
|
<label>Unspent trait points: <span name="attr_traitpoints"></span></label><input type="hidden" name='attr_traitpoints'></input>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- combat -->
|
|
<div class="sheet-other">
|
|
<div class="sheet-combat">
|
|
<h2>Combat</h2>
|
|
<label class="sheet-damagebonus">Melee damage bonus</label><input type="number" name="attr_meleebonus" /><br />
|
|
<label class="sheet-damagebonus">Shoot damage bonus</label><input type="number" name="attr_shootbonus" />
|
|
<label class="sheet-damagebonus">Initiative bonus</label><input type="number" name="attr_initiativebonus" />
|
|
|
|
<button class="sheet-2d6-dice" type='roll' name='roll_initiative' value='&{template:liminal} {{title=@{character_name}}} {{Initiative=[[2d6 + @{awareness} + @{initiativebonus} + ?{Modifier|0}]]}}'>Roll Initiative</button>
|
|
|
|
<hr />
|
|
<label>Weapons and Attacks</label><br />
|
|
<div style="display:inline-block;width:170px;">Name</div>
|
|
<div style="display:inline-block;width:50px;">Weapon damage</div>
|
|
<div style="display:inline-block;width:80px;">Attack type</div>
|
|
<div style="display:inline-block;width:30px;">Roll 1d6</div>
|
|
<div style="display:inline-block;width:30px;">Roll 2d6</div>
|
|
<br />
|
|
<input type="text" disabled="true" value="Unarmed" />
|
|
<input type="number" value="0" disabled="true" />
|
|
<select disabled="true">
|
|
<option value="@{meleebonus}">Melee</option>
|
|
</select>
|
|
<button class="sheet-d6-dice" type='roll' name='roll_unarmed' value='&{template:liminal} {{title=@{character_name}}} {{Weapon=Unarmed}} {{Damage=[[1d6 + @{meleebonus} + ?{Modifier|0}]]}}'></button>
|
|
<button class="sheet-2d6-dice" type='roll' name='roll_unarmed2' value='&{template:liminal} {{title=@{character_name}}} {{Weapon=Unarmed}} {{Damage=[[2d6 + @{meleebonus} + ?{Modifier|0}]]}}'></button>
|
|
|
|
<fieldset class="repeating_weapons">
|
|
<input type="text" name="attr_weaponname" />
|
|
<input type="number" name="attr_weapondamagebonus" />
|
|
<select name="attr_weapontype">
|
|
<option value="@{meleebonus}">Melee</option>
|
|
<option value="@{shootbonus}">Shoot</option>
|
|
<option value="0">Other</option>
|
|
</select>
|
|
<button class="sheet-d6-dice" type='roll' name='roll_weapon' value='&{template:liminal} {{title=@{character_name}}} {{Weapon=@{weaponname}}} {{Damage=[[1d6 + @{weapondamagebonus} + @{weapontype} + ?{Modifier|0}]]}}'></button>
|
|
<button class="sheet-2d6-dice" type='roll' name='roll_weapon2' value='&{template:liminal} {{title=@{character_name}}} {{Weapon=@{weaponname}}} {{Damage=[[2d6 + @{weapondamagebonus} + @{weapontype} + ?{Modifier|0}]]}}'></button>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="sheet-advancement">
|
|
<h2>Advancement</h2>
|
|
<label>Experience</label><input type="number" name="attr_experience" />
|
|
<br />
|
|
<br />
|
|
<label>Total advancements</label><input type="hidden" name="attr_totaladvancements" /><span name="attr_totaladvancements"></span><br />
|
|
<label>Unspent advancements</label><input type="hidden" name="attr_advancements" /><span name="attr_advancements"></span><br />
|
|
<p class="sheet-skill-explain">Spend 1 advancement to buy a trait point, increase your skill cap, or buy a crew asset.</p>
|
|
|
|
<label>Added trait points</label><input type="number" name="attr_addtraitpoints" />
|
|
<label>Increased skill cap</label><input type="number" name="attr_addskillcap" />
|
|
<label>Additional crew assets</label><input type="number" name="attr_crewassets" />
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- CREW SHEET -->
|
|
<div class="sheet-crew">
|
|
<h2 class="sheet-crewinfo">Crew Information</h2>
|
|
<div class="sheet-crewname">
|
|
<label>Crew Name:</label><div class="sheet-auto-expand"><span name="attr_crew_name"></span><textarea name="attr_crew_name" /></div><br /> <br />
|
|
<label>Concept:</label><div class="sheet-auto-expand"><span name="attr_crew_concept"></span><textarea name="attr_crew_concept" /></div>
|
|
</div>
|
|
<div class="sheet-crewgoal">
|
|
<label>Goal:</label><div class="sheet-auto-expand"><span name="attr_crew_goal"></span><textarea name="attr_crew_goal" /></div><br /> <br />
|
|
<label>Drive:</label><div class="sheet-auto-expand"><span name="attr_crew_drive"></span><textarea name="attr_crew_drive" /></div>
|
|
</div>
|
|
<div class="sheet-assets">
|
|
<h2>Assets:</h2>
|
|
<fieldset class="repeating_assets">
|
|
<div class="sheet-crew-asset">
|
|
<select name="attr_asset">
|
|
<option value="BaseofOperations">Base of Operations</option>
|
|
<option value="Connections">Connections</option>
|
|
<option value="Equipment">Equipment</option>
|
|
<option value="GeomanticNode">Geomantic Node</option>
|
|
<option value="HangersOn">Hangers-On</option>
|
|
<option value="HatedEnemy">Hated Enemy</option>
|
|
<option value="Hideout">Hideout</option>
|
|
<option value="Informants">Informants</option>
|
|
<option value="Laboratory">Laboratory</option>
|
|
<option value="MedicalFacilities">Medical Facilities</option>
|
|
<option value="OccultLibrary">Occult Library</option>
|
|
<option value="Patron">Patron</option>
|
|
<option value="Support">Support</option>
|
|
<option value="Training Opportunity">Training Opportunity</option>
|
|
<option value="Transport">Transport</option>
|
|
<option value="Weapons Cache">Weapons Cache</option>
|
|
<option value="Workshop">Workshop</option>
|
|
<option value="Other">Other</option>
|
|
</select>
|
|
<input type="text" name="attr_assetname" />
|
|
<textarea name="attr_assetdescription" />
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-crew-relationships">
|
|
<h2>Relationships</h2>
|
|
<h3 class="sheet-factionname">Faction</h3><h3 class="sheet-factionmodifiers">Modifiers</h3><h3 class="sheet-factiontotal">Total</h3>
|
|
<fieldset class="repeating_relationships">
|
|
<textarea name="attr_faction_name" />
|
|
<textarea name="attr_faction_modifiers" />
|
|
<input type="number" name="attr_faction_relationship_total" min="-3" max="3" />
|
|
</fieldset>
|
|
</div>
|
|
|
|
</div>
|
|
<!-- END CREW SHEET -->
|
|
|
|
<!-- MODS SHEET -->
|
|
<div class="sheet-mods">
|
|
<h2>Modifications</h2>
|
|
<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 will:</label><input type="number" name="attr_extrawill" /><br />
|
|
</div>
|
|
<!-- END MODS SHEET -->
|
|
|
|
<!-- ROLL TEMPLATE -->
|
|
<rolltemplate class="sheet-rolltemplate-liminal">
|
|
<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">
|
|
|
|
// Do a version check, and if it's an older version, update the additional trait and skill cap boxes.
|
|
on("sheet:opened", function(eventInfo){
|
|
|
|
setAttrs({
|
|
modificator: getTranslationByKey("modificator-rt")
|
|
});
|
|
|
|
// check the version
|
|
// if it's 0 either we need an upgrade or it's a new sheet
|
|
// check the attributes that need upgrading
|
|
// if they exist, do the upgrade
|
|
// then update the version to 2
|
|
getAttrs(["version"], function(values) {
|
|
var version = parseInt(values.version)||0;
|
|
if (version == 0){
|
|
getAttrs(["skillcap","totaltraitpoints"], function(subvalues) {
|
|
var newrowattrs = {};
|
|
newrowattrs["version"] = 2;
|
|
|
|
if (subvalues.skillcap != undefined){
|
|
newrowattrs["addskillcap"] = subvalues.skillcap - 4;
|
|
}
|
|
|
|
if (subvalues.totaltraitpoints != undefined){
|
|
newrowattrs["addtraitpoints"] = subvalues.totaltraitpoints - 5;
|
|
}
|
|
|
|
setAttrs(newrowattrs);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Deal with the tabs
|
|
const buttonlist = ["character","crew","mods"];
|
|
buttonlist.forEach(button => {
|
|
on(`clicked:${button}`, function() {
|
|
setAttrs({
|
|
sheetTab: button
|
|
});
|
|
});
|
|
});
|
|
|
|
// Initialise skills and other numbered attributes
|
|
on("change:athletics change:awareness change:melee change:shoot change:stealth change:survival change:vehicles change:art change:business change:education change:lore change:medicine change:science change:technology change:charm change:conviction change:empathy change:highsociety change:rhetoric change:streetwise change:taunt sheet:opened", function() {
|
|
getAttrs(["athletics","awareness","melee","shoot","stealth","survival","vehicles","art","business","education","lore","medicine","science","technology","charm","conviction","empathy","highsociety","rhetoric","streetwise","taunt","skillcap","meleebonus","shootbonus","initiativebonus","totaltraitpoints","crewassets"], function(values) {
|
|
let athletics = parseInt(values.athletics)||0;
|
|
let awareness = parseInt(values.awareness)||0;
|
|
let melee = parseInt(values.melee)||0;
|
|
let shoot = parseInt(values.shoot)||0;
|
|
let stealth = parseInt(values.stealth)||0;
|
|
let survival = parseInt(values.survival)||0;
|
|
let vehicles = parseInt(values.vehicles)||0;
|
|
let art = parseInt(values.art)||0;
|
|
let business = parseInt(values.business)||0;
|
|
let education = parseInt(values.education)||0;
|
|
let lore = parseInt(values.lore)||0;
|
|
let medicine = parseInt(values.medicine)||0;
|
|
let science = parseInt(values.science)||0;
|
|
let technology = parseInt(values.technology)||0;
|
|
let charm = parseInt(values.charm)||0;
|
|
let conviction = parseInt(values.conviction)||0;
|
|
let empathy = parseInt(values.empathy)||0;
|
|
let highsociety = parseInt(values.highsociety)||0;
|
|
let rhetoric = parseInt(values.rhetoric)||0;
|
|
let streetwise = parseInt(values.streetwise)||0;
|
|
let taunt = parseInt(values.taunt)||0;
|
|
let skillcap = parseInt(values.skillcap)||4;
|
|
let meleebonus = parseInt(values.meleebonus)||0;
|
|
let shootbonus = parseInt(values.shootbonus)||0;
|
|
let initiativebonus = parseInt(values.initiativebonus)||0;
|
|
let totaltraitpoints = parseInt(values.totaltraitpoints)||5;
|
|
let crewassets = parseInt(values.crewassets)||0;
|
|
|
|
setAttrs({
|
|
"athletics": Math.min(athletics, skillcap),
|
|
"awareness": Math.min(awareness, skillcap),
|
|
"melee": Math.min(melee, skillcap),
|
|
"shoot": Math.min(shoot, skillcap),
|
|
"stealth": Math.min(stealth, skillcap),
|
|
"survival": Math.min(survival, skillcap),
|
|
"vehicles": Math.min(vehicles, skillcap),
|
|
"art": Math.min(art, skillcap),
|
|
"business": Math.min(business, skillcap),
|
|
"education": Math.min(education, skillcap),
|
|
"lore": Math.min(lore, skillcap),
|
|
"medicine": Math.min(medicine, skillcap),
|
|
"science": Math.min(science, skillcap),
|
|
"technology": Math.min(technology, skillcap),
|
|
"charm": Math.min(charm, skillcap),
|
|
"conviction": Math.min(conviction, skillcap),
|
|
"empathy": Math.min(empathy, skillcap),
|
|
"highsociety": Math.min(highsociety, skillcap),
|
|
"rhetoric": Math.min(rhetoric, skillcap),
|
|
"streetwise": Math.min(streetwise, skillcap),
|
|
"taunt": Math.min(taunt, skillcap),
|
|
"skillcap": skillcap,
|
|
"meleebonus": meleebonus,
|
|
"shootbonus": shootbonus,
|
|
"initiativebonus": initiativebonus,
|
|
"totaltraitpoints": totaltraitpoints,
|
|
"crewassets": crewassets
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set endurance maximum
|
|
on("change:athletics change:extraendurance change:focus sheet:opened", function() {
|
|
getAttrs(["athletics","focus","extraendurance"], function(values) {
|
|
let athletics = parseInt(values.athletics)||0;
|
|
let extraendurance = parseInt(values.extraendurance)||0;
|
|
let focus = values.focus;
|
|
let endurance = athletics + 8 + extraendurance;
|
|
if (focus === "Tough")
|
|
{
|
|
endurance = athletics + 12 + extraendurance;
|
|
}
|
|
setAttrs({
|
|
"endurance_max": endurance
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set will maximum
|
|
on("change:conviction change:extrawill change:focus sheet:opened", function() {
|
|
getAttrs(["conviction","focus","extrawill"], function(values) {
|
|
let conviction = parseInt(values.conviction)||0;
|
|
let extrawill = parseInt(values.extrawill)||0;
|
|
let focus = values.focus;
|
|
let will = conviction + 8 + extrawill;
|
|
if (focus === "Determined")
|
|
{
|
|
will = conviction + 10 + extrawill;
|
|
}
|
|
setAttrs({
|
|
"will_max": will
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set total skill points and advancements
|
|
on("change:experience change:extraskills sheet:opened", function() {
|
|
getAttrs(["experience", "extraskills"], function(values) {
|
|
let experience = parseInt(values.experience)||0;
|
|
let extraskills = parseInt(values.extraskills)||0;
|
|
let totalskillpoints = Math.floor(experience/5) + 17 + extraskills;
|
|
let totaladvancements = Math.floor(experience/15);
|
|
setAttrs({
|
|
"totalskillpoints": totalskillpoints,
|
|
"totaladvancements": totaladvancements
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set unspent skill points
|
|
on("change:athletics change:awareness change:melee change:shoot change:stealth change:survival change:vehicles change:art change:business change:education change:lore change:medicine change:science change:technology change:charm change:conviction change:empathy change:highsociety change:rhetoric change:streetwise change:taunt change:athleticsspec change:awarenessspec change:meleespec change:shootspec change:stealthspec change:survivalspec change:vehiclesspec change:artspec change:businessspec change:educationspec change:lorespec change:medicinespec change:sciencespec change:technologyspec change:charmspec change:convictionspec change:empathyspec change:highsocietyspec change:rhetoricspec change:streetwisespec change:tauntspec change:totalskillpoints sheet:opened", function() {
|
|
getAttrs(["athletics","awareness","melee","shoot","stealth","survival","vehicles","art","business","education","lore","medicine","science","technology","charm","conviction","empathy","highsociety","rhetoric","streetwise","taunt","athleticsspec","awarenessspec","meleespec","shootspec","stealthspec","survivalspec","vehiclesspec","artspec","businessspec","educationspec","lorespec","medicinespec","sciencespec","technologyspec","charmspec","convictionspec","empathyspec","highsocietyspec","rhetoricspec","streetwisespec","tauntspec","totalskillpoints"], function(values) {
|
|
let athletics = parseInt(values.athletics)||0;
|
|
let awareness = parseInt(values.awareness)||0;
|
|
let melee = parseInt(values.melee)||0;
|
|
let shoot = parseInt(values.shoot)||0;
|
|
let stealth = parseInt(values.stealth)||0;
|
|
let survival = parseInt(values.survival)||0;
|
|
let vehicles = parseInt(values.vehicles)||0;
|
|
let art = parseInt(values.art)||0;
|
|
let business = parseInt(values.business)||0;
|
|
let education = parseInt(values.education)||0;
|
|
let lore = parseInt(values.lore)||0;
|
|
let medicine = parseInt(values.medicine)||0;
|
|
let science = parseInt(values.science)||0;
|
|
let technology = parseInt(values.technology)||0;
|
|
let charm = parseInt(values.charm)||0;
|
|
let conviction = parseInt(values.conviction)||0;
|
|
let empathy = parseInt(values.empathy)||0;
|
|
let highsociety = parseInt(values.highsociety)||0;
|
|
let rhetoric = parseInt(values.rhetoric)||0;
|
|
let streetwise = parseInt(values.streetwise)||0;
|
|
let taunt = parseInt(values.taunt)||0;
|
|
|
|
let athleticsspec = CountSpecialities(values.athleticsspec);
|
|
let awarenessspec = CountSpecialities(values.awarenessspec);
|
|
let meleespec = CountSpecialities(values.meleespec);
|
|
let shootspec = CountSpecialities(values.shootspec);
|
|
let stealthspec = CountSpecialities(values.stealthspec);
|
|
let survivalspec = CountSpecialities(values.survivalspec);
|
|
let vehiclesspec = CountSpecialities(values.vehiclesspec);
|
|
let artspec = CountSpecialities(values.artspec);
|
|
let businessspec = CountSpecialities(values.businessspec);
|
|
let educationspec = CountSpecialities(values.educationspec);
|
|
let lorespec = CountSpecialities(values.lorespec);
|
|
let medicinespec = CountSpecialities(values.medicinespec);
|
|
let sciencespec = CountSpecialities(values.sciencespec);
|
|
let technologyspec = CountSpecialities(values.technologyspec);
|
|
let charmspec = CountSpecialities(values.charmspec);
|
|
let convictionspec = CountSpecialities(values.convictionspec);
|
|
let empathyspec = CountSpecialities(values.empathyspec);
|
|
let highsocietyspec = CountSpecialities(values.highsocietyspec);
|
|
let rhetoricspec = CountSpecialities(values.rhetoricspec);
|
|
let streetwisespec = CountSpecialities(values.streetwisespec);
|
|
let tauntspec = CountSpecialities(values.tauntspec);
|
|
console.log(stealthspec);
|
|
|
|
let totalskillpoints = parseInt(values.totalskillpoints)||0;
|
|
|
|
let skillpoints = athletics
|
|
+ awareness
|
|
+ melee
|
|
+ shoot
|
|
+ stealth
|
|
+ survival
|
|
+ vehicles
|
|
+ art
|
|
+ business
|
|
+ education
|
|
+ lore
|
|
+ medicine
|
|
+ science
|
|
+ technology
|
|
+ charm
|
|
+ conviction
|
|
+ empathy
|
|
+ highsociety
|
|
+ rhetoric
|
|
+ streetwise
|
|
+ taunt
|
|
+ athleticsspec
|
|
+ awarenessspec
|
|
+ meleespec
|
|
+ shootspec
|
|
+ stealthspec
|
|
+ survivalspec
|
|
+ vehiclesspec
|
|
+ artspec
|
|
+ businessspec
|
|
+ educationspec
|
|
+ lorespec
|
|
+ medicinespec
|
|
+ sciencespec
|
|
+ technologyspec
|
|
+ charmspec
|
|
+ convictionspec
|
|
+ empathyspec
|
|
+ highsocietyspec
|
|
+ rhetoricspec
|
|
+ streetwisespec
|
|
+ tauntspec;
|
|
|
|
setAttrs({
|
|
"skillpoints": totalskillpoints - skillpoints
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set trait points
|
|
on('sheet:opened remove:repeating_traits change:repeating_traits:traitcost change:addtraitpoints change:repeating_limitations change:repeating_limitations:limitationcost remove:repeating_limitations', function() {
|
|
getSectionIDs('traits', function(idarray) {
|
|
// first get the attribute names for all rows in put in one array
|
|
const fieldnames = [];
|
|
idarray.forEach(id => fieldnames.push(`repeating_traits_${id}_traitcost`));
|
|
getAttrs(fieldnames, values => {
|
|
let totaltraitcost = 0;
|
|
// now loop through the rows again
|
|
idarray.forEach(id => {
|
|
let row = 'repeating_traits_' + id;
|
|
let traitcost = parseInt(values[`${row}_traitcost`])||0;
|
|
totaltraitcost += traitcost;
|
|
});
|
|
|
|
// Repeat for limitations
|
|
getSectionIDs('limitations', function(idarray) {
|
|
const fieldnames = [];
|
|
idarray.forEach(id => fieldnames.push(`repeating_limitations_${id}_limitationcost`));
|
|
getAttrs(fieldnames, values => {
|
|
let totallimitationcost = 0;
|
|
// now loop through the rows again
|
|
idarray.forEach(id => {
|
|
let row = 'repeating_limitations_' + id;
|
|
let limitationcost = parseInt(values[`${row}_limitationcost`])||0;
|
|
totallimitationcost += limitationcost;
|
|
});
|
|
totaltraitcost -= totallimitationcost;
|
|
// Get the number of trait points.
|
|
getAttrs(["addtraitpoints"], function(values) {
|
|
let totaltraitpoints = parseInt(values.addtraitpoints) + 5||5;
|
|
setAttrs({
|
|
"traitpoints": totaltraitpoints - totaltraitcost
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set unspent advancements
|
|
on('sheet:opened change:addtraitpoints change:addskillcap change:crewassets change:totaladvancements', function() {
|
|
getAttrs(["addtraitpoints","addskillcap","crewassets","totaladvancements"], function(values) {
|
|
let additionaltraitpoints = parseInt(values.addtraitpoints)||0;
|
|
let additionalskillcap = parseInt(values.addskillcap)||0;
|
|
let crewassets = parseInt(values.crewassets)||0;
|
|
let totaladvancements = parseInt(values.totaladvancements)||0;
|
|
setAttrs({
|
|
"advancements": totaladvancements - additionaltraitpoints - additionalskillcap - crewassets
|
|
});
|
|
});
|
|
});
|
|
|
|
// Set skill cap
|
|
on('sheet:opened change:addskillcap', function() {
|
|
getAttrs(["skillcap","addskillcap"], function(values) {
|
|
let addskillcap = parseInt(values.addskillcap)||0;
|
|
setAttrs({
|
|
"skillcap": 4 + addskillcap
|
|
});
|
|
});
|
|
});
|
|
|
|
function CountSpecialities(attribute){
|
|
return attribute == null ? 0 : attribute.trim().length > 0 ? attribute.split(",").length : 0;
|
|
}
|
|
</script>
|