Re-wrote the normal damage attack buttons (shield attack, weapon attack 5, and basic attack) to display both BODY and STUN damage using the new roll parsing feature.
5928 lines
245 KiB
HTML
5928 lines
245 KiB
HTML
<!-- Suggested helper script: https://app.roll20.net/forum/post/6009891/script-champions-slash-hero-system-damage-roller/?pageforid=6009893#post-6009893 -->
|
|
|
|
<div class="tab">
|
|
<button type="action" name="act_characteristics" >Characteristics</button>
|
|
<button type="action" name="act_gear" >Gear</button>
|
|
<button type="action" name="act_skills" >Skills</button>
|
|
<button type="action" name="act_powers" >Powers</button>
|
|
<button type="action" name="act_complications" >Talents & Complications</button>
|
|
<button type="action" name="act_options" >Options</button>
|
|
</div>
|
|
|
|
<input type="hidden" class="sheet-tabstoggle" name="attr_sheetTab" value="character"/>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Bio, primary statistics, and combat statistics tab -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-characteristics">
|
|
<div class="grid-container-tab-characteristics">
|
|
<div class="grid-container-characteristics-leftGrid">
|
|
<div class="item-characteristics-logo">
|
|
<img src="https://github.com/Villain1nGlasses/images/blob/main/HeroSystemGraphic.png?raw=true" alt="Sheet Logo" style="width:209px;height:105px;">
|
|
</div>
|
|
|
|
<div class="item-characteristics-bio">
|
|
<div class="item-characteristics-bio-nameLabel">
|
|
<label>Name:</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-bio-nameText">
|
|
<input type="text" value=" " name="attr_character_name"/>
|
|
</div>
|
|
|
|
<div class="item-characteristics-bio-titleLabel">
|
|
<label>Title:</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-bio-titleText">
|
|
<input type="text" value=" " name="attr_character_title"/>
|
|
</div>
|
|
|
|
<div class="item-characteristics-bio-backgroundLabel">
|
|
<label>Background:</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-bio-backgroundText">
|
|
<textarea name="attr_backgroundText"cols="28" rows="3"/></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-characteristics-earnings">
|
|
|
|
<div class="item-characteristics-earnings-experienceLabel">
|
|
<label>Experience:</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-earnings-experience">
|
|
<input type="number" min="0" value="0" name="attr_experience"/>
|
|
</div>
|
|
|
|
<div class="item-characteristics-earnings-moneyLabel">
|
|
<label>Money:</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-earnings-money">
|
|
<input type="number" value="0" name="attr_money" step="1"/>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-characteristics-primary-attributes">
|
|
|
|
<div class="item-characteristics-primary-attributes-names">
|
|
<h1>Characteristics</h1>
|
|
<label>Strength</label>
|
|
<label>Dexterity</label>
|
|
<label>Constitution</label>
|
|
<label>Intelligence</label>
|
|
<label>Ego</label>
|
|
<label>Presence</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-primary-attributes-values">
|
|
<h1>Value</h1>
|
|
<input type="number" value="10" name="attr_strength" min="1" />
|
|
<input type="number" value="10" name="attr_dexterity" min="1"/>
|
|
<input type="number" value="10" name="attr_constitution" min="1"/>
|
|
<input type="number" value="10" name="attr_intelligence" min="1"/>
|
|
<input type="number" value="10" name="attr_ego" min="1"/>
|
|
<input type="number" value="10" name="attr_presence" min="1"/>
|
|
</div>
|
|
|
|
<div class="item-characteristics-primary-attributes-rollChances">
|
|
<h1>Roll</h1>
|
|
<input type="number" value="11" name="attr_strengthChance" readonly/>
|
|
<input type="number" value="11" name="attr_dexterityChance" readonly/>
|
|
<input type="number" value="11" name="attr_constitutionChance" readonly/>
|
|
<input type="number" value="11" name="attr_intelligenceChance" readonly/>
|
|
<input type="number" value="11" name="attr_egoChance" readonly/>
|
|
<input type="number" value="11" name="attr_presenceChance" readonly/>
|
|
</div>
|
|
|
|
<div class="item-characteristics-primary-attributes-rollButtons">
|
|
<h1>‍</h1> <!-- Invisible character -->
|
|
|
|
<button type="roll" class='button buttonRoll' name="roll_strength" value="&{template:custom} {{title=@{character_name} - @{character_title}}} {{subtitle= Uses Strength }} {{Base Chance = [[@{strengthChance}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
|
|
<button type="roll" class='button buttonRoll' name="roll_dexterity" value="&{template:custom} {{title=@{character_name} - @{character_title}}} {{subtitle= Uses Dexterity }} {{Base Chance = [[@{dexterityChance}+@{weightDexDCVPenalty}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
|
|
<button type="roll" class='button buttonRoll' name="roll_constitution" value="&{template:custom} {{title=@{character_name} - @{character_title}}} {{subtitle= Uses Constitution}} {{Base Chance = [[@{constitutionChance}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
|
|
<button type="roll" class='button buttonRoll' name="roll_intelligence" value="&{template:custom} {{title=@{character_name} - @{character_title}}} {{subtitle= Uses Intelligence}} {{Base Chance = [[@{intelligenceChance}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
|
|
<button type="roll" class='button buttonRoll' name="roll_ego" value="&{template:custom} {{title=@{character_name} - @{character_title}}} {{subtitle= Uses Ego}} {{Base Chance = [[@{egoChance}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
|
|
<button type="roll" class='button buttonRoll' name="roll_presence" value="&{template:custom} {{title=@{character_name} - @{character_title}}} {{subtitle= Uses Presence}} {{Base Chance = [[@{presenceChance}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
</div>
|
|
|
|
<div class="item-characteristics-primary-attributes-costs">
|
|
<h1>CP</h1>
|
|
<label><input type="number" value="0" name="attr_strengthCP" readonly/></label>
|
|
<label><input type="number" value="0" name="attr_dexterityCP" readonly/></label>
|
|
<label><input type="number" value="0" name="attr_constitutionCP" readonly/></label>
|
|
<label><input type="number" value="0" name="attr_intelligenceCP" readonly/></label>
|
|
<label><input type="number" value="0" name="attr_egoCP" readonly/></label>
|
|
<label><input type="number" value="0" name="attr_presenceCP" readonly/></label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-characteristics-combat-attributes">
|
|
<div class="item-characteristics-combat-attributes-names">
|
|
<h1>Combat Abilities</h1>
|
|
<label>OCV</label> <br>
|
|
<label>DCV</label> <br>
|
|
<label>MOCV</label> <br>
|
|
<label>MDCV</label> <br>
|
|
<label>Speed</label> <br>
|
|
<label>Physical Defense</label> <br>
|
|
<label>Energy Defense</label> <br>
|
|
<label>Body</label> <br>
|
|
<label>Stun</label> <br>
|
|
<label>Endurance</label> <br>
|
|
<label>Recovery</label> <br>
|
|
</div>
|
|
|
|
<div class="item-characteristics-combat-attributes-values">
|
|
<h1>Value</h1>
|
|
<label><input type="number" value="3" name="attr_ocv" min="1" /></label> <br>
|
|
<label><input type="number" value="3" name="attr_dcv" min="1" /></label> <br>
|
|
<label><input type="number" value="3" name="attr_mocv" min="1" /></label> <br>
|
|
<label><input type="number" value="3" name="attr_mdcv" min="1" /></label> <br>
|
|
<label><input type="number" value="2" name="attr_speed" min="1" max="12" /></label> <br>
|
|
<label><input type="number" value="2" name="attr_pd" min="1" /></label> <br>
|
|
<label><input type="number" value="2" name="attr_ed" min="1" /></label> <br>
|
|
<label><input type="number" value="10" name="attr_body" min ="1" /></label> <br>
|
|
<label><input type="number" value="20" name="attr_stun" min="2" step="2" /></label> <br>
|
|
<label><input type="number" value="20" name="attr_endurance" min="5" step="5" /></label> <br>
|
|
<label><input type="number" value="4" name="attr_recovery" min="1" /></label> <br>
|
|
</div>
|
|
|
|
<div class="item-characteristics-combat-attributes-costs">
|
|
<h1>CP</h1>
|
|
<label><input type="number" value="0" name="attr_ocvCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_dcvCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_mocvCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_mdcvCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_speedCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_pdCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_edCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_bodyCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_stunCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_enduranceCP" readonly/></label> <br>
|
|
<label><input type="number" value="0" name="attr_recoveryCP" readonly/></label> <br>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-characteristics-movement-abilities">
|
|
<div class="item-characteristics-movement-abilities-names">
|
|
<h1>Movement</h1>
|
|
<label>Running</label> <br>
|
|
<label>Leaping</label> <br>
|
|
<label>Swimming</label> <br>
|
|
</div>
|
|
|
|
<div class="item-characteristics-movement-abilities-values">
|
|
<h1>Value</h1>
|
|
<label><input type="number" value="12" name="attr_running" min="0" step="1" /></label> <br>
|
|
<label><input type="number" value="4" name="attr_leaping" min="0" step="2" /></label><br>
|
|
<label><input type="number" value="4" name="attr_swimming" min="0" step="2" /> </label> <br>
|
|
</div>
|
|
|
|
<div class="item-characteristics-movement-abilities-costs">
|
|
<h1>CP</h1>
|
|
<label><input type="number" value="0" name="attr_runningCP" readonly /></label> <br>
|
|
<label><input type="number" value="0" name="attr_leapingCP" readonly /></label> <br>
|
|
<label><input type="number" value="0" name="attr_swimmingCP" readonly /></label> <br>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid-container-characteristics-rightGrid">
|
|
<div class="item-characteristics-portrait">
|
|
|
|
<!-- Hidden variables for the portrait display slideshow -->
|
|
<input type="hidden" class="item-portrait-slideshow" name="attr_portraitSelection" value="0" min="0" step="1" max="2"/>
|
|
<input type="hidden" name="attr_totalNumberOfPortraits" value="2"/>
|
|
|
|
<!-- A set of portrait images or rule cards with the visible image selected by the user. -->
|
|
<!-- There are three cards: -->
|
|
<!-- (1) A welcome card that could be changed to something else. Increasing attr_totalNumberOfPortraits's maximum value (and updates to the CSS) would allow for more cards. -->
|
|
<!-- (2) The character's Avatar Portrait. -->
|
|
<!-- (3) A sticky note for more player notes. -->
|
|
|
|
<!-- The rule card: -->
|
|
<div class="item-portrait-00">
|
|
<h1>Welcome!</h1>
|
|
<div class="item-portrait-flex-container">
|
|
<div class="item-portrait-rule-description">
|
|
<h1>Starting Character Points</h1>
|
|
<p>Heroic characters are typically built on a base of 125 CP plus up to 50 CP that are offset with Complications. Use the Bonus CP input at the bottom of this sheet to account for free abilities.</p>
|
|
</div>
|
|
<div class="item-portrait-rule-description">
|
|
<h1>Portrait</h1>
|
|
<p>You may change this frame to your avatar or to space for more notes with the hidden side arrow buttons.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Avatar Portrait Image -->
|
|
<div class="item-portrait-01">
|
|
<img alt="Character Avatar" name="attr_theSheetAvatar" style="width:250px;height:250px;">
|
|
</div>
|
|
|
|
<!-- Sticky Note -->
|
|
<div class="item-portrait-02">
|
|
<textarea name="attr_portraitStickyNote">Sticky Note</textarea>
|
|
</div>
|
|
|
|
<!-- Portrait frame select buttons -->
|
|
<button type="action" name="act_left-arrow-button" class="button button-left-arrow">❮</button>
|
|
<button type="action" name="act_right-arrow-button" class="button button-right-arrow">❯</button>
|
|
</div>
|
|
|
|
<div class="item-characteristics-health">
|
|
<p>BODY</p>
|
|
<input type="number" name="attr_currentBODY" value="10"><br>
|
|
<p>STUN</p>
|
|
<input type="number" name="attr_currentSTUN" value="20"><br>
|
|
<p>END</p>
|
|
<input type="number" name="attr_currentEND" min="0" value="20"><br>
|
|
<button type="action" class='button buttonRecover' name='act_recoverHealth'>Recover</button><br>
|
|
<button type="action" class='button buttonReset' name='act_resetHealth'>Reset</button> <br>
|
|
</div>
|
|
|
|
<div class="grid-container-container-turn-segments">
|
|
<label class="container-speed-indicator" >
|
|
<input type="checkbox" name="attr_speedIndicator01">
|
|
<span class="checkmark01" ></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator02">
|
|
<span class="checkmark02"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator03">
|
|
<span class="checkmark03"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator04">
|
|
<span class="checkmark04"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator05">
|
|
<span class="checkmark05"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator06">
|
|
<span class="checkmark06"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator07">
|
|
<span class="checkmark07"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator08">
|
|
<span class="checkmark08"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator09">
|
|
<span class="checkmark09"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator10">
|
|
<span class="checkmark10"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator11">
|
|
<span class="checkmark11"></span>
|
|
</label>
|
|
<label class="container-speed-indicator">
|
|
<input type="checkbox" name="attr_speedIndicator12">
|
|
<span class="checkmark12"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="item-characteristics-history">
|
|
<textarea name="attr_historyText">Biography</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Skills tab -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-skills">
|
|
<div class="grid-container-skills-tab">
|
|
<div class="item-skillsTab-flex-container-skills-group01">
|
|
<!-- Left side skills heading -->
|
|
<div class="subitem-skillsTab-grid-container-skills-heading-left">
|
|
<div class="subitem-skillsTab-grid-container-skills-heading-left-name">
|
|
<h1>Skill</h1>
|
|
</div>
|
|
<div class="subitem-skillsTab-grid-container-skills-heading-left-type">
|
|
<h1>Type</h1>
|
|
</div>
|
|
<div class="subitem-skillsTab-grid-container-skills-heading-left-roll">
|
|
<h1>Roll</h1>
|
|
</div>
|
|
<div class="subitem-skillsTab-grid-container-skills-heading-left-cost">
|
|
<h1>CP</h1>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Skill 01 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName01"/>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_skillType01">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
<option value="group">Group</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance01" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill01" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName01}}} {{Base Chance = [[@{skillRollChance01}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP01"/>
|
|
</div>
|
|
|
|
<!-- Skill 02 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName02"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType02">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance02" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill02" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName02}}} {{Base Chance = [[@{skillRollChance02}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP02"/>
|
|
</div>
|
|
|
|
<!-- Skill 03 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName03"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType03">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance03" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill03" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName03}}} {{Base Chance = [[@{skillRollChance03}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP03"/>
|
|
</div>
|
|
|
|
<!-- Skill 04 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName04"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType04">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance04" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill04" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName04}}} {{Base Chance = [[@{skillRollChance04}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP04"/>
|
|
</div>
|
|
|
|
<!-- Skill 05 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName05"/>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_skillType05">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
<option value="group">Group</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance05" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill05" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName05}}} {{Base Chance = [[@{skillRollChance05}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP05"/>
|
|
</div>
|
|
|
|
<!-- Skill 06 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName06"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType06">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance06" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill06" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName06}}} {{Base Chance = [[@{skillRollChance06}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP06"/>
|
|
</div>
|
|
|
|
<!-- Skill 07 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName07"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType07">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance07" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill07" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName07}}} {{Base Chance = [[@{skillRollChance07}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP07"/>
|
|
</div>
|
|
|
|
<!-- Skill 08 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName08"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType08">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance08" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill08" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName08}}} {{Base Chance = [[@{skillRollChance08}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP08"/>
|
|
</div>
|
|
|
|
<!-- Skill 09 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName09"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType09">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance09" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill09" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName09}}} {{Base Chance = [[@{skillRollChance09}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP09"/>
|
|
</div>
|
|
|
|
<!-- Skill 10 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName10"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType10">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance10" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill10" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName10}}} {{Base Chance = [[@{skillRollChance10}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP10"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Skill Group 02-->
|
|
<div class="item-skillsTab-flex-container-skills-group02">
|
|
|
|
<!-- Skill 11 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName11"/>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_skillType11">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
<option value="group">Group</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance11" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill11" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName11}}} {{Base Chance = [[@{skillRollChance11}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP11"/>
|
|
</div>
|
|
|
|
<!-- Skill 12 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName12"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType12">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance12" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill12" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName12}}} {{Base Chance = [[@{skillRollChance12}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP12"/>
|
|
</div>
|
|
|
|
<!-- Skill 13 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName13"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType13">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance13" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill13" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName13}}} {{Base Chance = [[@{skillRollChance13}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP13"/>
|
|
</div>
|
|
|
|
<!-- Skill 14 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName14"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType14">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance14" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill14" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName14}}} {{Base Chance = [[@{skillRollChance14}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP14"/>
|
|
</div>
|
|
|
|
<!-- Skill 15 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName15"/>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_skillType15">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
<option value="group">Group</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance15" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill15" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName15}}} {{Base Chance = [[@{skillRollChance15}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP15"/>
|
|
</div>
|
|
|
|
<!-- Skill 16 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName16"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType16">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance16" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill16" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName16}}} {{Base Chance = [[@{skillRollChance16}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP16"/>
|
|
</div>
|
|
|
|
<!-- Skill 17 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName17"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType17">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance17" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill17" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName17}}} {{Base Chance = [[@{skillRollChance17}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP17"/>
|
|
</div>
|
|
|
|
<!-- Skill 18 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName18"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType18">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance18" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill18" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName18}}} {{Base Chance = [[@{skillRollChance18}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP18"/>
|
|
</div>
|
|
|
|
<!-- Skill 19 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName19"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType19">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance19" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill19" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName19}}} {{Base Chance = [[@{skillRollChance19}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP19"/>
|
|
</div>
|
|
|
|
<!-- Skill 20 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName20"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType20">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance20" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill20" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName20}}} {{Base Chance = [[@{skillRollChance20}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP20"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Skill Group 03-->
|
|
<div class="item-skillsTab-flex-container-skills-group03">
|
|
|
|
<!-- Skill 21 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName21"/>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_skillType21">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
<option value="group">Group</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance21" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill21" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName21}}} {{Base Chance = [[@{skillRollChance21}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP21"/>
|
|
</div>
|
|
|
|
<!-- Skill 22 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName22"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType22">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance22" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill22" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName22}}} {{Base Chance = [[@{skillRollChance22}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP22"/>
|
|
</div>
|
|
|
|
<!-- Skill 23 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName23"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType23">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance23" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill23" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName23}}} {{Base Chance = [[@{skillRollChance23}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP23"/>
|
|
</div>
|
|
|
|
<!-- Skill 24 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName24"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType24">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance24" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill24" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName24}}} {{Base Chance = [[@{skillRollChance24}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP24"/>
|
|
</div>
|
|
|
|
<!-- Skill 25 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName25"/>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_skillType25">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
<option value="group">Group</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance25" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill25" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName25}}} {{Base Chance = [[@{skillRollChance25}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP25"/>
|
|
</div>
|
|
|
|
<!-- Skill 26 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName26"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType26">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance26" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill26" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName26}}} {{Base Chance = [[@{skillRollChance26}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP26"/>
|
|
</div>
|
|
|
|
<!-- Skill 27 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName27"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType27">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance27" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill27" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName27}}} {{Base Chance = [[@{skillRollChance27}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP27"/>
|
|
</div>
|
|
|
|
<!-- Skill 28 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName28"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType28">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance28" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill28" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName28}}} {{Base Chance = [[@{skillRollChance28}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP28"/>
|
|
</div>
|
|
|
|
<!-- Skill 29 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName29"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType29">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance29" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill29" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName29}}} {{Base Chance = [[@{skillRollChance29}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP29"/>
|
|
</div>
|
|
|
|
<!-- Skill 30 -->
|
|
<div class="subitem-skillsTab-flex-container-skill">
|
|
<input type="text" value=" " name="attr_skillName30"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType30">
|
|
<option value="none" selected>-</option>
|
|
<option value="str">STR</option>
|
|
<option value="dex">DEX</option>
|
|
<option value="con">CON</option>
|
|
<option value="int">INT</option>
|
|
<option value="ego">EGO</option>
|
|
<option value="pre">PRE</option>
|
|
<option value="ak">AK</option>
|
|
<option value="ks">KS</option>
|
|
<option value="intKS">KS (INT)</option>
|
|
<option value="ps">PS</option>
|
|
<option value="intPS">PS (INT)</option>
|
|
<option value="dexPS">PS (DEX)</option>
|
|
<option value="ss">SS</option>
|
|
<option value="intSS">SS (INT)</option>
|
|
<option value="combat">Combat</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
<input type="number" value="0" name="attr_skillRollChance30" readonly/>
|
|
<button type="roll" class='button buttonRoll' name="roll_testSkill30" value="&{template:custom} {{title=@{character_name} - @{character_title} }} {{subtitle= Uses @{skillName30}}} {{Base Chance = [[@{skillRollChance30}+?{Modifiers|0}]] }} {{Roll=[[3d6cf<7cs>0]]}} {{}}" >Roll</button>
|
|
<input type="number" value="0" min="0" name="attr_skillCP30"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Combat skills section -->
|
|
<div class="item-skillsTab-grid-container-combat-skills">
|
|
|
|
<!-- Combat skill names -->
|
|
<div class="subitem-skillsTab-flex-container-combat-skills-names">
|
|
<h1>Combat Skills</h1>
|
|
<input type="text" value=" " name="attr_skillName31"/>
|
|
<input type="text" value=" " name="attr_skillName32"/>
|
|
<input type="text" value=" " name="attr_skillName33"/>
|
|
<input type="text" value=" " name="attr_skillName34"/>
|
|
<input type="text" value=" " name="attr_skillName35"/>
|
|
<input type="text" value=" " name="attr_skillName36"/>
|
|
<input type="text" value=" " name="attr_skillName37"/>
|
|
</div>
|
|
|
|
<div class="subitem-skillsTab-flex-container-combat-skills-level-names">
|
|
<h1>All HTH Levels</h1> <!-- skill 38 -->
|
|
<h1>All Range Levels</h1> <!-- skill 39 -->
|
|
<h1>All Combat Levels</h1> <!-- skill 40 -->
|
|
</div>
|
|
|
|
<!-- Combat skill levels where needed -->
|
|
<div class="subitem-skillsTab-flex-container-combat-skills-levels">
|
|
<h1>Lvl.</h1>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels31"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels32"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels33"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels34"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels35"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels36"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels37"/>
|
|
<input type="number" value="0" min="0" name="attr_skillLevels38"/> <!-- All HTH -->
|
|
<input type="number" value="0" min="0" name="attr_skillLevels39"/> <!-- All Range -->
|
|
<input type="number" value="0" min="0" name="attr_skillLevels40"/> <!-- All Combat -->
|
|
</div>
|
|
|
|
<div class="subitem-skillsTab-flex-container-combat-skills-types">
|
|
<h1>Type</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType31">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType32">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType33">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType34">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType35">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType36">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_skillType37">
|
|
<option value="none" selected>-</option>
|
|
<option value="Fam1" >WF1</option>
|
|
<option value="Fam2" >WF2</option>
|
|
<option value="CSL2">CSL2</option>
|
|
<option value="CSL3">CSL3</option>
|
|
<option value="CSL5">CSL5</option>
|
|
</select>
|
|
</div>
|
|
<!-- Blank entry for Skill 38 type: All HTH -->
|
|
<!-- Blank entry for Skill 39 type: All Range -->
|
|
<!-- Blank entry for Skill 40 type: All Combat -->
|
|
</div>
|
|
|
|
<div class="subitem-skillsTab-flex-container-combat-skills-costs">
|
|
<h1>CP</h1>
|
|
<input type="number" value="0" min="0" name="attr_skillCP31" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP32" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP33" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP34" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP35" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP36" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP37" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP38" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP39" readonly>
|
|
<input type="number" value="0" min="0" name="attr_skillCP40" readonly>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Language skills section -->
|
|
<div class="item-skillsTab-flex-container-languages">
|
|
<!-- Language skills heading -->
|
|
<div class="subitem-skillsTab-flex-container-languages-heading">
|
|
<div class="subitem-skillsTab-flex-container-languages-heading-name">
|
|
<h1>Languages</h1>
|
|
</div>
|
|
<div class="subitem-skillsTab-flex-container-languages-heading-fluency">
|
|
<h1>Fluency</h1>
|
|
</div>
|
|
<div class="subitem-skillsTab-flex-container-languages-heading-literacy">
|
|
<h1>Lit.</h1>
|
|
</div>
|
|
<div class="subitem-skillsTab-flex-container-languages-heading-cost">
|
|
<h1>CP</h1>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Language skill 01 (41 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value="Native Language" name="attr_skillName41"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency41">
|
|
<option value="native" selected >Native</option>
|
|
<option value="none">-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy41">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP41" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 02 (42 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName42"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency42">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy42">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP42" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 03 (43 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName43"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency43">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy43">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP43" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 04 (44 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName44"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency44">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy44">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP44" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 05 (45 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName45"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency45">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy45">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP45" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 06 (46 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName46"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency46">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy46">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP46" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 07 (47 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName47"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency47">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy47">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP47" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 08 (48 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName48"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency48">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy48">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP48" readonly/>
|
|
</div>
|
|
|
|
<!-- Language skill 09 (49 overall) -->
|
|
<div class="subitem-skillsTab-flex-container-language">
|
|
<input type="text" value=" " name="attr_skillName49"/>
|
|
<div class="custom-select">
|
|
<select name="attr_skillFluency49">
|
|
<option value="native">Native</option>
|
|
<option value="none" selected >-</option>
|
|
<option value="basic" >Basic</option>
|
|
<option value="fluent" >Fluent</option>
|
|
<option value="accent" >Accent</option>
|
|
<option value="idiomatic">Idiomatic</option>
|
|
<option value="imitate" >Imitate</option>
|
|
</select>
|
|
</div>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_skillLiteracy49">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<input type="number" value="0" min="0" name="attr_skillCP49" readonly/>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- Enhancers and Levels -->
|
|
<div class="item-skillsTab-grid-container-skill-enhancers">
|
|
<!-- Enhancer Heading -->
|
|
<div class="subitem-skillsTab-flex-container-skill-enhancers-heading">
|
|
<h1>Enhancer</h1>
|
|
<h1>CP</h1>
|
|
</div>
|
|
|
|
<!-- Enhancer Checkboxes -->
|
|
<div class="subitem-skillsTab-flex-container-skill-enhancers-checkboxes">
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_enhancerJack">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_enhancerLing">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_enhancerSch">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_enhancerSci">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_enhancerTrav">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
<label class="container-checkbox-small">
|
|
<input type="checkbox" name="attr_enhancerWell">
|
|
<span class="checkmark-small"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- Skill Names -->
|
|
<div class="subitem-skillsTab-flex-container-skill-enhancers-names">
|
|
<h1>Jack of all Trades</h1>
|
|
<h1>Linguist</h1>
|
|
<h1>Scholar</h1>
|
|
<h1>Scientist</h1>
|
|
<h1>Traveler</h1>
|
|
<h1>Well-Connected</h1>
|
|
<h1>Interaction Skill Levels</h1>
|
|
<h1>Intellect Skill Levels</h1>
|
|
<h1>Agility Skill Levels</h1>
|
|
<h1>Non-combat Skill Levels</h1>
|
|
<h1>Overall Levels</h1>
|
|
</div>
|
|
|
|
<!-- Skill Levels -->
|
|
<div class="subitem-skillsTab-flex-container-skill-enhancers-levels">
|
|
<input type="number" name="attr_interactionLevels" min="0" value="0"/>
|
|
<input type="number" name="attr_intellectLevels" min="0" value="0"/>
|
|
<input type="number" name="attr_agilityLevels" min="0" value="0"/>
|
|
<input type="number" name="attr_noncombatLevels" min="0" value="0"/>
|
|
<input type="number" name="attr_overallLevels" min="0" value="0"/>
|
|
</div>
|
|
|
|
<!-- Skill Costs -->
|
|
<div class="subitem-skillsTab-flex-container-skill-enhancers-costs">
|
|
<input type="number" value="0" min="0" max="3" step="3" name="attr_enhancerJackCP" readonly/>
|
|
<input type="number" value="0" min="0" max="3" step="3" name="attr_enhancerLingCP" readonly/>
|
|
<input type="number" value="0" min="0" max="3" step="3" name="attr_enhancerSchCP" readonly/>
|
|
<input type="number" value="0" min="0" max="3" step="3" name="attr_enhancerSciCP" readonly/>
|
|
<input type="number" value="0" min="0" max="3" step="3" name="attr_enhancerTravCP" readonly/>
|
|
<input type="number" value="0" min="0" max="3" step="3" name="attr_enhancerWellCP" readonly/>
|
|
<input type="number" name="attr_interactionLevelsCP" min="0" value="0" readonly/>
|
|
<input type="number" name="attr_intellectLevelsCP" min="0" value="0" readonly/>
|
|
<input type="number" name="attr_agilityLevelsCP" min="0" value="0" readonly/>
|
|
<input type="number" name="attr_noncombatLevelsCP" min="0" value="0" readonly/>
|
|
<input type="number" name="attr_overallLevelsCP" min="0" value="0" readonly/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Powers tab -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-powers">
|
|
<div class="grid-container-powers">
|
|
<!-- Left side powers -->
|
|
<div class="flex-container-powers-left">
|
|
<!-- Power 01 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-left">
|
|
<input type="text" name="attr_powerName01"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP01" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-left">
|
|
<input type="text" name="attr_powerEffect01" />
|
|
<button type="action" class="button button-Power-END-left" name="act_buttonPower01">END:</button><br>
|
|
<input type="number" name="attr_powerEND01" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select">
|
|
<select name="attr_powerType01">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost01" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost01" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages01" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations01" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_powerReducedEND01">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText01"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 02 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-left">
|
|
<input type="text" name="attr_powerName02"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP02" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-left">
|
|
<input type="text" name="attr_powerEffect02" />
|
|
<button type="action" class="button button-Power-END-left" name="act_buttonPower02">END:</button><br>
|
|
<input type="number" name="attr_powerEND02" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select">
|
|
<select name="attr_powerType02">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost02" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost02" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages02" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations02" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_powerReducedEND02">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText02"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 03 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-left">
|
|
<input type="text" name="attr_powerName03"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP03" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-left">
|
|
<input type="text" name="attr_powerEffect03" />
|
|
<button type="action" class="button button-Power-END-left" name="act_buttonPower03">END:</button><br>
|
|
<input type="number" name="attr_powerEND03" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select">
|
|
<select name="attr_powerType03">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost03" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost03" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages03" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations03" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_powerReducedEND03">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText03"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 04 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-left">
|
|
<input type="text" name="attr_powerName04"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP04" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-left">
|
|
<input type="text" name="attr_powerEffect04" />
|
|
<button type="action" class="button button-Power-END-left" name="act_buttonPower04">END:</button><br>
|
|
<input type="number" name="attr_powerEND04" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select">
|
|
<select name="attr_powerType04">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost04" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost04" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages04" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations04" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_powerReducedEND04">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText04"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 05 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-left">
|
|
<input type="text" name="attr_powerName05"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP05" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-left">
|
|
<input type="text" name="attr_powerEffect05" />
|
|
<button type="action" class="button button-Power-END-left" name="act_buttonPower05">END:</button><br>
|
|
<input type="number" name="attr_powerEND05" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select">
|
|
<select name="attr_powerType05">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost05" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost05" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages05" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations05" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_powerReducedEND05">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText05"></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Right side powers -->
|
|
<div class="flex-container-powers-right">
|
|
<!-- Power 06 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-right">
|
|
<input type="text" name="attr_powerName06"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP06" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-right">
|
|
<input type="text" name="attr_powerEffect06" />
|
|
<button type="action" class="button button-Power-END-right" name="act_buttonPower06">END:</button><br>
|
|
<input type="number" name="attr_powerEND06" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerType06">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost06" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost06" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages06" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations06" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerReducedEND06">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText06"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 07 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-right">
|
|
<input type="text" name="attr_powerName07"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP07" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-right">
|
|
<input type="text" name="attr_powerEffect07" />
|
|
<button type="action" class="button button-Power-END-right" name="act_buttonPower07">END:</button><br>
|
|
<input type="number" name="attr_powerEND07" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerType07">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost07" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost07" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages07" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations07" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerReducedEND07">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText07"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 08 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-right">
|
|
<input type="text" name="attr_powerName08"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP08" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-right">
|
|
<input type="text" name="attr_powerEffect08" />
|
|
<button type="action" class="button button-Power-END-right" name="act_buttonPower08">END:</button><br>
|
|
<input type="number" name="attr_powerEND08" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerType08">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost08" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost08" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages08" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations08" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerReducedEND08">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText08"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 09 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-right">
|
|
<input type="text" name="attr_powerName09"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP09" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-right">
|
|
<input type="text" name="attr_powerEffect09" />
|
|
<button type="action" class="button button-Power-END-right" name="act_buttonPower09">END:</button><br>
|
|
<input type="number" name="attr_powerEND09" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerType09">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost09" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost09" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages09" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations09" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerReducedEND09">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText09"></textarea>
|
|
</div>
|
|
|
|
<!-- Power 10 -->
|
|
<div class="item-flex-power">
|
|
<div class="subitem-flex-power-heading-right">
|
|
<input type="text" name="attr_powerName10"/>
|
|
<h1>Real CP:</h1>
|
|
<input type="number" name="attr_powerCP10" value="0" min="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-effect-right">
|
|
<input type="text" name="attr_powerEffect10" />
|
|
<button type="action" class="button button-Power-END-right" name="act_buttonPower10">END:</button><br>
|
|
<input type="number" name="attr_powerEND10" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-activeCost">
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerType10">
|
|
<option value="single" selected>Single Power</option>
|
|
<option value="multipower">Multipower</option>
|
|
<option value="variableSlot">Variable Slot</option>
|
|
<option value="fixedSlot">Fixed Slot</option>
|
|
<option value="powerPool">Power Pool</option>
|
|
</select>
|
|
</div>
|
|
|
|
<h1>Base:</h1>
|
|
<input type="number" name="attr_powerBaseCost10" min="0" value="0" />
|
|
<h1>Active:</h1>
|
|
<input type="number" name="attr_powerActiveCost10" min="0" value="0" readonly/>
|
|
</div>
|
|
<div class="subitem-flex-power-limitations">
|
|
<h1>Adv:</h1>
|
|
<input type="number" name="attr_powerAdvantages10" min="0" value="0" step="0.25"/>
|
|
<h1>Lim:</h1>
|
|
<input type="number" name="attr_powerLimitations10" min="0" value="0" step="0.25" />
|
|
<h1>END:</h1>
|
|
<div class="custom-select-alternate">
|
|
<select name="attr_powerReducedEND10">
|
|
<option value="noEND">None</option>
|
|
<option value="zeroENDAF">Zero (AF)</option>
|
|
<option value="zeroEND">Zero</option>
|
|
<option value="reducedENDAF">Reduced (AF)</option>
|
|
<option value="reducedEND">Reduced</option>
|
|
<option value="standardEND" selected>Standard</option>
|
|
<option value="increasedENDx2">Increase x2</option>
|
|
<option value="increasedENDx3">Increase x3</option>
|
|
<option value="increasedENDx4">Increase x4</option>
|
|
<option value="increasedENDx5">Increase x5</option>
|
|
<option value="increasedENDx6">Increase x6</option>
|
|
<option value="increasedENDx7">Increase x7</option>
|
|
<option value="increasedENDx8">Increase x8</option>
|
|
<option value="increasedENDx9">Increase x9</option>
|
|
<option value="increasedENDx10">Increase x10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<textarea name="attr_powerText10"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Perks, Talents, and Complications tab -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-complications">
|
|
<div class="grid-container-complications-talents">
|
|
<!-- Perks and Talents -->
|
|
<div class="flex-container-complications-talents-left">
|
|
<h2> Perks and Talents</h2>
|
|
|
|
<!-- Talent 01 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName01" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP01" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText01"></textarea>
|
|
</div>
|
|
|
|
<!-- Talent 02 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName02" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP02" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText02"></textarea>
|
|
</div>
|
|
|
|
<!-- Talent 03 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName03" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP03" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText03"></textarea>
|
|
</div>
|
|
|
|
<!-- Talent 04 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName04" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP04" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText04"></textarea>
|
|
</div>
|
|
|
|
<!-- Talent 05 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName05" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP05" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText05"></textarea>
|
|
</div>
|
|
|
|
<!-- Talent 06 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName06" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP06" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText06"></textarea>
|
|
</div>
|
|
|
|
<!-- Talent 07 -->
|
|
<div class="item-talent-heading">
|
|
<input type="text" name="attr_talentName07" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_talentCP07" value="0" min="0" />
|
|
</div>
|
|
<div class="item-talent-textbox">
|
|
<textarea name="attr_talentText07"></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Complications -->
|
|
<div class="flex-container-complications-talents-right">
|
|
<h2>Complications</h2>
|
|
|
|
<!-- Complication 01 -->
|
|
<div class="item-complication-heading">
|
|
<input type="text" name="attr_complicationName01" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_complicationCP01" value="0" min="0" />
|
|
</div>
|
|
<div class="item-complication-textbox">
|
|
<textarea name="attr_complicationText01"></textarea>
|
|
</div>
|
|
|
|
<!-- Complication 02 -->
|
|
<div class="item-complication-heading">
|
|
<input type="text" name="attr_complicationName02" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_complicationCP02" value="0" min="0" />
|
|
</div>
|
|
<div class="item-complication-textbox">
|
|
<textarea name="attr_complicationText02"></textarea>
|
|
</div>
|
|
|
|
<!-- Complication 03 -->
|
|
<div class="item-complication-heading">
|
|
<input type="text" name="attr_complicationName03" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_complicationCP03" value="0" min="0" />
|
|
</div>
|
|
<div class="item-complication-textbox">
|
|
<textarea name="attr_complicationText03"></textarea>
|
|
</div>
|
|
|
|
<!-- Complication 04 -->
|
|
<div class="item-complication-heading">
|
|
<input type="text" name="attr_complicationName04" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_complicationCP04" value="0" min="0" />
|
|
</div>
|
|
<div class="item-complication-textbox">
|
|
<textarea name="attr_complicationText04"></textarea>
|
|
</div>
|
|
|
|
<!-- Complication 05 -->
|
|
<div class="item-complication-heading">
|
|
<input type="text" name="attr_complicationName05" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_complicationCP05" value="0" min="0" />
|
|
</div>
|
|
<div class="item-complication-textbox">
|
|
<textarea name="attr_complicationText05"></textarea>
|
|
</div>
|
|
|
|
<!-- Complication 06 -->
|
|
<div class="item-complication-heading">
|
|
<input type="text" name="attr_complicationName06" value=" ">
|
|
<h1>CP:</h1>
|
|
<input type="number" name="attr_complicationCP06" value="0" min="0" />
|
|
</div>
|
|
<div class="item-complication-textbox">
|
|
<textarea name="attr_complicationText06"></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Complications Notes -->
|
|
<div class="flex-container-complications-bottom">
|
|
<textarea name="attr_complicationsTextLeft"></textarea>
|
|
<textarea name="attr_complicationsTextRight"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Gear, weapons, and armor tab -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-gear">
|
|
<div class="grid-container-tab-gear">
|
|
<div class="item-tab-gear-flex-container-encumbrance">
|
|
<div class="subitem-tab-gear-flex-container-encumbrance">
|
|
<h1>Lift</h1>
|
|
<h1>Weight</h1>
|
|
<input class="number" name="attr_liftWeight" readonly/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-encumbrance">
|
|
<h1>Free</h1>
|
|
<h1>Carry</h1>
|
|
<input class="number" name="attr_encumbranceFreeCarry" readonly/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-encumbrance">
|
|
<h1>Carried</h1>
|
|
<h1>Load</h1>
|
|
<input class="number" name="attr_carriedWeight" readonly/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-encumbrance">
|
|
<h1>END</h1>
|
|
<h1>per Turn</h1>
|
|
<input class="number" name="attr_weightEndPenalty" readonly/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-encumbrance">
|
|
<h1>DCV & DEX</h1>
|
|
<h1>Roll Penalty</h1>
|
|
<input class="number" name="attr_weightDexDCVPenalty" readonly/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-encumbrance">
|
|
<h1>Movement</h1>
|
|
<h1>Penalty</h1>
|
|
<input class="number" name="attr_weightMovePenalty" readonly/>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="item-tab-gear-grid-container-armor">
|
|
<div class="subitem-tab-gear-flex-container-armor">
|
|
<h1>Armor</h1>
|
|
<input type="text" name="attr_armorName01"/>
|
|
<input type="text" name="attr_armorName02"/>
|
|
<input type="text" name="attr_armorName03"/>
|
|
<input type="text" name="attr_armorName04"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-PD">
|
|
<h1>PD</h1>
|
|
<input type="number" name="attr_armorPD01" step="1" value="0" min="0" step="1"/>
|
|
<input type="number" name="attr_armorPD02" step="1" value="0" min="0" step="1"/>
|
|
<input type="number" name="attr_armorPD03" step="1" value="0" min="0" step="1"/>
|
|
<input type="number" name="attr_armorPD04" step="1" value="0" min="0" step="1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-ED">
|
|
<h1>ED</h1>
|
|
<input type="number" name="attr_armorED01" step="1" value="0" min="0" step="1"/>
|
|
<input type="number" name="attr_armorED02" step="1" value="0" min="0" step="1"/>
|
|
<input type="number" name="attr_armorED03" step="1" value="0" min="0" step="1"/>
|
|
<input type="number" name="attr_armorED04" step="1" value="0" min="0" step="1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-END">
|
|
<h1>END/Turn</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_armorEND01">
|
|
<option value="4">4</option>
|
|
<option value="3">3</option>
|
|
<option value="2">2</option>
|
|
<option value="1">1</option>
|
|
<option value="0" selected>0</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_armorEND02">
|
|
<option value="4">4</option>
|
|
<option value="3">3</option>
|
|
<option value="2">2</option>
|
|
<option value="1">1</option>
|
|
<option value="0" selected>0</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_armorEND03">
|
|
<option value="4">4</option>
|
|
<option value="3">3</option>
|
|
<option value="2">2</option>
|
|
<option value="1">1</option>
|
|
<option value="0" selected>0</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_armorEND04">
|
|
<option value="4">4</option>
|
|
<option value="3">3</option>
|
|
<option value="2">2</option>
|
|
<option value="1">1</option>
|
|
<option value="0" selected>0</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-activation">
|
|
<h1>Activate</h1>
|
|
<div class="custom-select">
|
|
<select name="attr_armorActivation01">
|
|
<option value="15">15-</option>
|
|
<option value="14">14-</option>
|
|
<option value="13">13-</option>
|
|
<option value="12">12-</option>
|
|
<option value="11">11-</option>
|
|
<option value="10">10-</option>
|
|
<option value="9">9-</option>
|
|
<option value="8">8-</option>
|
|
<option value="0" selected>NA</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_armorActivation02">
|
|
<option value="15">15-</option>
|
|
<option value="14">14-</option>
|
|
<option value="13">13-</option>
|
|
<option value="12">12-</option>
|
|
<option value="11">11-</option>
|
|
<option value="10">10-</option>
|
|
<option value="9">9-</option>
|
|
<option value="8">8-</option>
|
|
<option value="0" selected>NA</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_armorActivation03">
|
|
<option value="15">15-</option>
|
|
<option value="14">14-</option>
|
|
<option value="13">13-</option>
|
|
<option value="12">12-</option>
|
|
<option value="11">11-</option>
|
|
<option value="10">10-</option>
|
|
<option value="9">9-</option>
|
|
<option value="8">8-</option>
|
|
<option value="0" selected>NA</option>
|
|
</select>
|
|
</div>
|
|
<div class="custom-select">
|
|
<select name="attr_armorActivation04">
|
|
<option value="15">15-</option>
|
|
<option value="14">14-</option>
|
|
<option value="13">13-</option>
|
|
<option value="12">12-</option>
|
|
<option value="11">11-</option>
|
|
<option value="10">10-</option>
|
|
<option value="9">9-</option>
|
|
<option value="8">8-</option>
|
|
<option value="0" selected>NA</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-activation-buttons">
|
|
<span><button type="roll" class='button buttonRollActivate' name="roll_armorActivation01" value="&{template:custom-activate} {{title=@{character_name} - @{character_title}}} {{subtitle= Defends with @{armorName01}**}} {{Activate on = [[@{armorActivation01}]] **or less**}} {{Result = [[3d6cf<0cs>0]]}}" >Roll</button></span>
|
|
<span><button type="roll" class='button buttonRollActivate' name="roll_armorActivation02" value="&{template:custom-activate} {{title=@{character_name} - @{character_title}}} {{subtitle= Defends with @{armorName02}**}} {{Activate on = [[@{armorActivation02}]] **or less**}} {{Result = [[3d6cf<0cs>0]]}}" >Roll</button></span>
|
|
<span><button type="roll" class='button buttonRollActivate' name="roll_armorActivation03" value="&{template:custom-activate} {{title=@{character_name} - @{character_title}}} {{subtitle= Defends with @{armorName03}**}} {{Activate on = [[@{armorActivation03}]] **or less**}} {{Result = [[3d6cf<0cs>0]]}}" >Roll</button></span>
|
|
<span><button type="roll" class='button buttonRollActivate' name="roll_armorActivation04" value="&{template:custom-activate} {{title=@{character_name} - @{character_title}}} {{subtitle= Defends with @{armorName04}**}} {{Activate on = [[@{armorActivation04}]] **or less**}} {{Result = [[3d6cf<0cs>0]]}}" >Roll</button></span>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-locations">
|
|
<h1>Locations</h1>
|
|
<input type="text" class="armorLocationsText" name="attr_armorLocations01"/>
|
|
<input type="text" class="armorLocationsText" name="attr_armorLocations02"/>
|
|
<input type="text" class="armorLocationsText" name="attr_armorLocations03"/>
|
|
<input type="text" class="armorLocationsText" name="attr_armorLocations04"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-mass">
|
|
<h1>Mass</h1>
|
|
<input type="number" name="attr_armorMass01" value="0" min="0" step="0.1"/>
|
|
<input type="number" name="attr_armorMass02" value="0" min="0" step="0.1"/>
|
|
<input type="number" name="attr_armorMass03" value="0" min="0" step="0.1"/>
|
|
<input type="number" name="attr_armorMass04" value="0" min="0" step="0.1"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-shield">
|
|
<div class="subitem-tab-gear-flex-container-shield-name">
|
|
<h1>Shield</h1>
|
|
<input type="text" name="attr_shieldName"</input>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-dcv">
|
|
<h1>DCV</h1>
|
|
<input type="number" name="attr_shieldDCV"step="1" min="0"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-damage">
|
|
<h1>Normal DMG</h1>
|
|
<input type="text" name="attr_shieldDamage"step="1" min="0"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-damage-roll">
|
|
<button type="action" class='button buttonRollNormalDamage' name="act_attackShield">Roll</button>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-strength">
|
|
<h1>STR</h1>
|
|
<input type="number" name="attr_shieldStrength"step="1" min="0"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-body">
|
|
<h1>BODY</h1>
|
|
<input type="number" name="attr_shieldBody"step="1" min="0"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-defense">
|
|
<h1>Defense</h1>
|
|
<input type="number" name="attr_shieldDefense"step="1" min="0"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-shield-mass">
|
|
<h1>Mass</h1>
|
|
<input type="number" name="attr_shieldMass"step="0.1" min="0"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-tab-gear-grid-container-weapons">
|
|
<div class="subitem-tab-gear-flex-container-weapons">
|
|
<h1>Weapons</h1>
|
|
<input type="text" name="attr_weaponName01"/>
|
|
<input type="text" name="attr_weaponName02"/>
|
|
<input type="text" name="attr_weaponName03"/>
|
|
<input type="text" name="attr_weaponName04"/>
|
|
<input type="text" name="attr_weaponName05"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-weapon-damages">
|
|
<h1>Damage</h1>
|
|
<input type="text" name="attr_weaponDamage01"/>
|
|
<input type="text" name="attr_weaponDamage02"/>
|
|
<input type="text" name="attr_weaponDamage03"/>
|
|
<input type="text" name="attr_weaponDamage04"/>
|
|
<input type="text" name="attr_weaponDamage05"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-attack-buttons">
|
|
<div class="subitem-tab-gear-flex-container-weapon-damage-roll">
|
|
<button type="roll" class="button buttonRollDamage" name="roll_weaponDamage01" value="&{template:custom-attack} [[ [[ @{weaponDamage01} ]] * [[ @{weaponStunMod01} ]] ]] {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with @{weaponName01}}} {{Attack with OCV=[[@{ocv}+@{weaponOCV01}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{BODY=$[[0]]}} {{STUN=$[[0]]*$[[1]]=$[[2]] }}" >Roll</button>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-weapon-damage-roll">
|
|
<button type="roll" class="button buttonRollDamage" name="roll_weaponDamage02" value="&{template:custom-attack} [[ [[ @{weaponDamage02} ]] * [[ @{weaponStunMod02} ]] ]] {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with @{weaponName02}}} {{Attack with OCV=[[@{ocv}+@{weaponOCV02}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{BODY=$[[0]]}} {{STUN=$[[0]]*$[[1]]=$[[2]] }}" >Roll</button>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-weapon-damage-roll">
|
|
<button type="roll" class="button buttonRollDamage" name="roll_weaponDamage03" value="&{template:custom-attack} [[ [[ @{weaponDamage03} ]] * [[ @{weaponStunMod03} ]] ]] {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with @{weaponName03}}} {{Attack with OCV=[[@{ocv}+@{weaponOCV03}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{BODY=$[[0]]}} {{STUN=$[[0]]*$[[1]]=$[[2]] }}" >Roll</button>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-weapon-damage-roll">
|
|
<button type="roll" class="button buttonRollDamage" name="roll_weaponDamage04" value="&{template:custom-attack} [[ [[ @{weaponDamage04} ]] * [[ @{weaponStunMod04} ]] ]] {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with @{weaponName04}}} {{Attack with OCV=[[@{ocv}+@{weaponOCV04}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{BODY=$[[0]]}} {{STUN=$[[0]]*$[[1]]=$[[2]] }}" >Roll</button>
|
|
</div>
|
|
<!-- Weapon 05 does normal damage -->
|
|
<div class="subitem-tab-gear-flex-container-weapon-damage-roll">
|
|
<button type="action" class="button buttonRollNormalDamage" name="act_attackWeapon05">Roll</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-ocv-modifiers">
|
|
<h1>OCV</h1>
|
|
<input type="number" name="attr_weaponOCV01" step="1"/>
|
|
<input type="number" name="attr_weaponOCV02" step="1"/>
|
|
<input type="number" name="attr_weaponOCV03" step="1"/>
|
|
<input type="number" name="attr_weaponOCV04" step="1"/>
|
|
<input type="number" name="attr_weaponOCV05" step="1"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-range-modifiers">
|
|
<h1>RMod</h1>
|
|
<input type="number" name="attr_weaponRangeMod01" step="1"/>
|
|
<input type="number" name="attr_weaponRangeMod02" step="1"/>
|
|
<input type="number" name="attr_weaponRangeMod03" step="1"/>
|
|
<input type="number" name="attr_weaponRangeMod04" step="1"/>
|
|
<input type="number" name="attr_weaponRangeMod05" step="1"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-stun-modifiers">
|
|
<h1>STUNx</h1>
|
|
<input type="text" name="attr_weaponStunMod01" value="1d3"/>
|
|
<input type="text" name="attr_weaponStunMod02" value="1d3"/>
|
|
<input type="text" name="attr_weaponStunMod03" value="1d3"/>
|
|
<input type="text" name="attr_weaponStunMod04" value="1d3"/>
|
|
<h1>‍</h1> <!-- <input type="text" name="attr_weaponStunMod05" value="1d3"/> Normal Damage used instead -->
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-weapon-shots">
|
|
<h1>Shots</h1>
|
|
<input type="number" name="attr_weaponShots01" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponShots02" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponShots03" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponShots04" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponShots05" step="1" min="0"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-strength-used">
|
|
<h1>STR</h1>
|
|
<input type="number" name="attr_weaponStrength01" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponStrength02" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponStrength03" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponStrength04" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponStrength05" step="1" min="0"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-endurance">
|
|
<h1>END</h1>
|
|
<input type="number" name="attr_weaponEndurance01" readonly/>
|
|
<input type="number" name="attr_weaponEndurance02" readonly/>
|
|
<input type="number" name="attr_weaponEndurance03" readonly/>
|
|
<input type="number" name="attr_weaponEndurance04" readonly/>
|
|
<input type="number" name="attr_weaponEndurance05" readonly/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-weapon-ranges">
|
|
<h1>Range</h1>
|
|
<input type="number" name="attr_weaponRange01" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponRange02" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponRange03" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponRange04" step="1" min="0"/>
|
|
<input type="number" name="attr_weaponRange05" step="1" min="0"/>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-flex-container-weapon-masses">
|
|
<h1>Mass</h1>
|
|
<input type="number" name="attr_weaponMass01" step="0.1" min="0"/>
|
|
<input type="number" name="attr_weaponMass02" step="0.1" min="0"/>
|
|
<input type="number" name="attr_weaponMass03" step="0.1" min="0"/>
|
|
<input type="number" name="attr_weaponMass04" step="0.1" min="0"/>
|
|
<input type="number" name="attr_weaponMass05" step="0.1" min="0"/>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-tab-gear-flex-container-equipment">
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<h1>Equipment</h1>
|
|
<h1>Mass</h1>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText01"/>
|
|
<input type="number" name="attr_equipMass01" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText02"/>
|
|
<input type="number" name="attr_equipMass02" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText03"/>
|
|
<input type="number" name="attr_equipMass03" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText04"/>
|
|
<input type="number" name="attr_equipMass04" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText05"/>
|
|
<input type="number" name="attr_equipMass05" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText06"/>
|
|
<input type="number" name="attr_equipMass06" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText07"/>
|
|
<input type="number" name="attr_equipMass07" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText08"/>
|
|
<input type="number" name="attr_equipMass08" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText09"/>
|
|
<input type="number" name="attr_equipMass09" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText10"/>
|
|
<input type="number" name="attr_equipMass10" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText11"/>
|
|
<input type="number" name="attr_equipMass11" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText12"/>
|
|
<input type="number" name="attr_equipMass12" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText13"/>
|
|
<input type="number" name="attr_equipMass13" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText14"/>
|
|
<input type="number" name="attr_equipMass14" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText15"/>
|
|
<input type="number" name="attr_equipMass15" min="0" step="0.1"/>
|
|
</div>
|
|
<div class="subitem-tab-gear-flex-container-equipment">
|
|
<input type="text" name="attr_equipText16"/>
|
|
<input type="number" name="attr_equipMass16" min="0" step="0.1"/>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-gear-health">
|
|
<p>BODY</p>
|
|
<input type="number" name="attr_gearCurrentBODY" value="10"><br>
|
|
<p>STUN</p>
|
|
<input type="number" name="attr_gearCurrentSTUN" value="20"><br>
|
|
<p>END</p>
|
|
<input type="number" name="attr_gearCurrentEND" min="0" value="20"><br>
|
|
<button type="action" class='button buttonRecover' name='act_gearRecoverHealth'>Recover</button><br>
|
|
<button type="action" class='button buttonReset' name='act_gearResetHealth'>Reset</button> <br>
|
|
</div>
|
|
|
|
<div class="item-tab-gear-slide-container">
|
|
<input type="hidden" class="item-gear-slideshow" name="attr_gearSlideSelection" value="1" min="1" step="1" max="3"/>
|
|
<input type="hidden" name="attr_totalNumberOfGearSlides" value="3"/>
|
|
|
|
<div class="item-tab-gear-slide-flex-container-maneuvers">
|
|
<!-- Slide showing basic Hero combat maneuvers a flex container for rows of flex columns -->
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-heading">
|
|
<h1>Maneuver</h1>
|
|
<h1>Phase</h1>
|
|
<h1>OCV</h1>
|
|
<h1>DCV</h1>
|
|
<h1>Effects</h1>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Block</h1>
|
|
<h2>1/2</h2>
|
|
<h2>+0</h2>
|
|
<h2>+0</h2>
|
|
<h2>Block, Abort</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Brace</h1>
|
|
<h2>0</h2>
|
|
<h2>+2</h2>
|
|
<h2>1/2</h2>
|
|
<h2>+2 OCV vs. Range Mod.</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Disarm</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-2</h2>
|
|
<h2>+0</h2>
|
|
<h2>Strength vs Strength</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-dark-row">
|
|
<h1>Dodge</h1>
|
|
<h2>1/2</h2>
|
|
<h2>—</h2>
|
|
<h2>+3</h2>
|
|
<h2>Abort, vs. all attacks</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-dark-row">
|
|
<h1>Grab</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-1*</h2>
|
|
<h2>-2*</h2>
|
|
<h2>Grab two limbs</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-dark-row">
|
|
<h1>Grab By</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-3</h2>
|
|
<h2>-4</h2>
|
|
<h2>Move, grab, +v/10 STR</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Haymaker</h1>
|
|
<h2>1/2*</h2>
|
|
<h2>+0</h2>
|
|
<h2>-5</h2>
|
|
<h2>+4 DC to attack</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Move By</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-2</h2>
|
|
<h2>-2</h2>
|
|
<h2>STR/2 +v/10; take 1/3</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Move Through</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-v/10</h2>
|
|
<h2>-3</h2>
|
|
<h2>STR+v/6; take 1/2 or full</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-dark-row">
|
|
<h1>Multiple Attack</h1>
|
|
<h2>1</h2>
|
|
<h2>var.</h2>
|
|
<h2>1/2</h2>
|
|
<h2>Attack multiple times</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-dark-row">
|
|
<h1>Set</h1>
|
|
<h2>1</h2>
|
|
<h2>+1*</h2>
|
|
<h2>+0</h2>
|
|
<h2>Ranged attacks. May Brace</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-dark-row">
|
|
<h1>Shove</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-1</h2>
|
|
<h2>-1</h2>
|
|
<h2>Push 1m per 5 STR</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Strike</h1>
|
|
<h2>1/2</h2>
|
|
<h2>+0</h2>
|
|
<h2>+0</h2>
|
|
<h2>Damage by STR or weapon</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Throw</h1>
|
|
<h2>1/2</h2>
|
|
<h2>+0</h2>
|
|
<h2>+0</h2>
|
|
<h2>Throw with STR damage</h2>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-maneuvers-light-row">
|
|
<h1>Trip</h1>
|
|
<h2>1/2</h2>
|
|
<h2>-1</h2>
|
|
<h2>-2</h2>
|
|
<h2>Knock target prone</h2>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="item-tab-gear-slide-flex-container-martial-maneuvers">
|
|
<!-- Slide showing special martial arts maneuvers. Entries need to be supplied by the user. -->
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-heading">
|
|
<h1>Martial Maneuver</h1>
|
|
<h1>Phase</h1>
|
|
<h1>OCV</h1>
|
|
<h1>DCV</h1>
|
|
<h1>Effects</h1>
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-row">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points">
|
|
<input type="text" value="" name="attr_martialManeuverName01">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points-row">
|
|
<h1>CP:</h1>
|
|
<input type="number" value="0" min="0" step="1" name="attr_martialManeuverCP01">
|
|
</div>
|
|
</div>
|
|
<input type="text" value="1/2" name="attr_martialManeuverPhase01">
|
|
<input type="text" value="+0" name="attr_martialManeuverOCV01">
|
|
<input type="text" value="+0" name="attr_martialManeuverDCV01">
|
|
<textarea value=" " name="attr_martialManeuverEffect01">
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-row">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points">
|
|
<input type="text" value="" name="attr_martialManeuverName02">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points-row">
|
|
<h1>CP:</h1>
|
|
<input type="number" value="0" min="0" step="1" name="attr_martialManeuverCP02">
|
|
</div>
|
|
</div>
|
|
<input type="text" value="1/2" name="attr_martialManeuverPhase02">
|
|
<input type="text" value="+0" name="attr_martialManeuverOCV02">
|
|
<input type="text" value="+0" name="attr_martialManeuverDCV02">
|
|
<textarea value=" " name="attr_martialManeuverEffect02">
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-row">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points">
|
|
<input type="text" value="" name="attr_martialManeuverName03">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points-row">
|
|
<h1>CP:</h1>
|
|
<input type="number" value="0" min="0" step="1" name="attr_martialManeuverCP03">
|
|
</div>
|
|
</div>
|
|
<input type="text" value="1/2" name="attr_martialManeuverPhase03">
|
|
<input type="text" value="+0" name="attr_martialManeuverOCV03">
|
|
<input type="text" value="+0" name="attr_martialManeuverDCV03">
|
|
<textarea value=" " name="attr_martialManeuverEffect03">
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-row">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points">
|
|
<input type="text" value="" name="attr_martialManeuverName04">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points-row">
|
|
<h1>CP:</h1>
|
|
<input type="number" value="0" min="0" step="1" name="attr_martialManeuverCP04">
|
|
</div>
|
|
</div>
|
|
<input type="text" value="1/2" name="attr_martialManeuverPhase04">
|
|
<input type="text" value="+0" name="attr_martialManeuverOCV04">
|
|
<input type="text" value="+0" name="attr_martialManeuverDCV04">
|
|
<textarea value=" " name="attr_martialManeuverEffect04">
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-row">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points">
|
|
<input type="text" value="" name="attr_martialManeuverName05">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points-row">
|
|
<h1>CP:</h1>
|
|
<input type="number" value="0" min="0" step="1" name="attr_martialManeuverCP05">
|
|
</div>
|
|
</div>
|
|
<input type="text" value="1/2" name="attr_martialManeuverPhase05">
|
|
<input type="text" value="+0" name="attr_martialManeuverOCV05">
|
|
<input type="text" value="+0" name="attr_martialManeuverDCV05">
|
|
<textarea value=" " name="attr_martialManeuverEffect05">
|
|
</div>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-maneuvers-row">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points">
|
|
<input type="text" value="" name="attr_martialManeuverName06">
|
|
<div class="subitem-tab-gear-slide-flex-container-martial-name-and-points-row">
|
|
<h1>CP:</h1>
|
|
<input type="number" value="0" min="0" step="1" name="attr_martialManeuverCP06">
|
|
</div>
|
|
</div>
|
|
<input type="text" value="1/2" name="attr_martialManeuverPhase06">
|
|
<input type="text" value="+0" name="attr_martialManeuverOCV06">
|
|
<input type="text" value="+0" name="attr_martialManeuverDCV06">
|
|
<textarea value=" " name="attr_martialManeuverEffect06">
|
|
</div>
|
|
|
|
<br/>
|
|
|
|
<div class="subitem-tab-gear-slide-flex-container-standard-attack">
|
|
<h1>Basic Attack</h1>
|
|
<h2>1/2</h2>
|
|
<h2>+0</h2>
|
|
<h2>+0</h2>
|
|
<h2>Normal damage STR/5</h2>
|
|
<button type="action" class='button buttonRollNormalDamage' name="act_standardAttackRoll">Roll</button>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="item-gear-slide-treasure-text">
|
|
<textarea name="attr_treasures"></textarea>
|
|
</div>
|
|
|
|
<button type="action" name="act_left-gear-arrow-button" class="button button-left-arrow">❮</button>
|
|
<button type="action" name="act_right-gear-arrow-button" class="button button-right-arrow">❯</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Options tab -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-options">
|
|
<div class="grid-container-tab-options">
|
|
<div class="item-options">
|
|
<label> Options </label>
|
|
<label class="container-checkbox">Characteristic Maximums
|
|
<input type="checkbox" checked="checked" name="attr_useCharacteristicMaximums">
|
|
<span class="checkmark"></span>
|
|
</label>
|
|
|
|
<label class="container-checkbox">Super-Heroic Campaign Endurance
|
|
<input type="checkbox" name="attr_optionSuperHeroicEndurance">
|
|
<span class="checkmark"></span>
|
|
</label>
|
|
|
|
<label class="container-checkbox">Literacy Costs Character Points
|
|
<input type="checkbox" checked="checked" name="attr_optionLiteracyCostsPoints">
|
|
<span class="checkmark"></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Tally bar that appears below all tabs to keep track of point totals -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<div class="sheet-flex-tallybar">
|
|
<span>Char:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_characteristicsCost readonly="true"/></span>
|
|
<span>Skills:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_skillsCost readonly="true"/></span>
|
|
<span>Powers:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_powersPerksTalentsCost readonly="true"/></span>
|
|
<span>Complications:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_complicationsBenefit readonly="true"/></span>
|
|
<span>Bonus:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_bonusBenefit /></span>
|
|
<span>EXP:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_experienceBenefit /></span>
|
|
<span>Total:</span>
|
|
<span><input class="tally" type="number" value="0" min="0" name=attr_totalCharacterCost readonly="true"/></span>
|
|
</div>
|
|
|
|
<!-- Some hidden variables to help simplify skill point calculations -->
|
|
<input type="hidden" name="attr_hiddenSet1SkillsCost" value="0"/>
|
|
<input type="hidden" name="attr_hiddenSet2SkillsCost" value="0"/>
|
|
<input type="hidden" name="attr_hiddenSet3SkillsCost" value="0"/>
|
|
<input type="hidden" name="attr_hiddenCombatSkillsCost" value="0"/>
|
|
<input type="hidden" name="attr_hiddenLanguageSkillsCost" value="0"/>
|
|
<input type="hidden" name="attr_hiddenEnhancerSkillsCost" value="0"/>
|
|
<input type="hidden" name="attr_hiddenMartialSkillsCost" value="0"/>
|
|
|
|
<!-- Jackob's Roll Template -->
|
|
<rolltemplate class="sheet-rolltemplate-custom">
|
|
<div class="sheet-container sheet-color-{{color}}">
|
|
<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>
|
|
|
|
<!-- Jackob's Roll Template for normal damage attacks -->
|
|
<!-- Includes row for computed BODY damage using July, 2021 Roll Parsing feature -->
|
|
<rolltemplate class="sheet-rolltemplate-custom-normal-attack">
|
|
<div class="sheet-container sheet-color-{{color}}">
|
|
<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}}
|
|
<!-- Computed result inserted as final row -->
|
|
<div class="sheet-key">BODY</div>
|
|
<div class="sheet-value">{{computed::STUN}}</div>
|
|
</div>
|
|
</div>
|
|
</rolltemplate>
|
|
|
|
<!-- Jackob's Roll Template for killing damage attacks -->
|
|
<rolltemplate class="sheet-rolltemplate-custom-attack">
|
|
<div class="sheet-container sheet-color-{{color}}">
|
|
<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>
|
|
|
|
<!-- Jackob's Roll Template -->
|
|
<rolltemplate class="sheet-rolltemplate-custom-activate">
|
|
<div class="sheet-container sheet-color-{{color}}">
|
|
<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>
|
|
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
<!-- Sheet workers -->
|
|
<!-- --------------------------------------------------------------------------------- -->
|
|
|
|
<script type="text/worker">
|
|
|
|
// Get the URL to the pseudo attribute attr_character_avatar for use in the Portrait Section.
|
|
on("sheet:opened", function() {
|
|
getAttrs(["character_avatar"], function(values) {
|
|
let theAvatarURL=values.character_avatar;
|
|
|
|
setAttrs({
|
|
theSheetAvatar:theAvatarURL
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
// Tab buttons
|
|
const buttonlist = ["characteristics","skills","powers","complications","gear","options"];
|
|
buttonlist.forEach(button => {
|
|
on(`clicked:${button}`, function() {
|
|
setAttrs({
|
|
sheetTab: button
|
|
});
|
|
});
|
|
});
|
|
|
|
/* ------------------------- */
|
|
/* Functions used sheet-wide */
|
|
/* ------------------------- */
|
|
|
|
function heroRoundHigh(theNumber) {
|
|
// In the Hero System rounding favors the player. Here where high is good.
|
|
let theIntegerPart = Math.floor(theNumber);
|
|
let theRemainder = Math.floor(100*(theNumber-theIntegerPart))/100;
|
|
|
|
if (theRemainder<=0.4) {
|
|
return theIntegerPart;
|
|
} else {
|
|
return theIntegerPart+1;
|
|
}
|
|
}
|
|
|
|
function heroRoundLow(theNumber) {
|
|
// In the Hero System rounding favors the player. Here where low is good.
|
|
let theIntegerPart = Math.floor(theNumber);
|
|
let theRemainder = Math.floor(100*(theNumber-theIntegerPart))/100;
|
|
|
|
if (theRemainder<0.6) {
|
|
return theIntegerPart;
|
|
} else {
|
|
return theIntegerPart+1;
|
|
}
|
|
}
|
|
|
|
function calculateRoll(theNumber) {
|
|
// Determine basic characteristic and skill roll chance
|
|
return heroRoundHigh(9+theNumber/5);
|
|
}
|
|
|
|
function calculatePoints() {
|
|
// Calculate points spent on characteristics, skills, powers, perks, and talents for the tally bar.
|
|
sumCharacteristicPoints();
|
|
sumComplicationsBenefit();
|
|
sumPowersPerksTalents();
|
|
|
|
// Placeholders until tabs are finished
|
|
setAttrs({
|
|
"skillsCost":0
|
|
});
|
|
|
|
// Calculate benefit of complications
|
|
}
|
|
|
|
/* ------------------------- */
|
|
/* Portrait Selection */
|
|
/* ------------------------- */
|
|
|
|
// Demote the portrait slide show.
|
|
on("clicked:left-arrow-button", function () {
|
|
advancePortrait(-1);
|
|
});
|
|
|
|
// Advance the portrait slide show.
|
|
on("clicked:right-arrow-button", function () {
|
|
advancePortrait(+1);
|
|
});
|
|
|
|
function advancePortrait(direction) {
|
|
getAttrs(["portraitSelection", "totalNumberOfPortraits"], function(values) {
|
|
const currentSelection = parseInt(values.portraitSelection)||0;
|
|
const minimumSelection = 0;
|
|
const maximumSelection = parseInt(values.totalNumberOfPortraits)||1;
|
|
|
|
let newSelection = currentSelection+direction;
|
|
|
|
if (newSelection < minimumSelection) {
|
|
newSelection = maximumSelection;
|
|
}
|
|
|
|
if (newSelection > maximumSelection) {
|
|
newSelection = minimumSelection;
|
|
}
|
|
setAttrs({
|
|
"portraitSelection":newSelection
|
|
});
|
|
});
|
|
}
|
|
|
|
/* ------------------------- */
|
|
/* Gear Slide Selection */
|
|
/* ------------------------- */
|
|
|
|
// Demote the portrait slide show.
|
|
on("clicked:left-gear-arrow-button", function () {
|
|
advanceGearSlide(-1);
|
|
});
|
|
|
|
// Advance the portrait slide show.
|
|
on("clicked:right-gear-arrow-button", function () {
|
|
advanceGearSlide(+1);
|
|
});
|
|
|
|
function advanceGearSlide(direction) {
|
|
getAttrs(["gearSlideSelection", "totalNumberOfGearSlides"], function(values) {
|
|
const currentSelection = parseInt(values.gearSlideSelection)||1;
|
|
const minimumSelection = 1;
|
|
const maximumSelection = parseInt(values.totalNumberOfGearSlides)||1;
|
|
|
|
let newSelection = currentSelection+direction;
|
|
|
|
if (newSelection < minimumSelection) {
|
|
newSelection = maximumSelection;
|
|
}
|
|
|
|
if (newSelection > maximumSelection) {
|
|
newSelection = minimumSelection;
|
|
}
|
|
setAttrs({
|
|
"gearSlideSelection":newSelection
|
|
});
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------- */
|
|
/* Functions used for health status boxes */
|
|
/* -------------------------------------- */
|
|
|
|
// Reset endurance and stun in item-characteristics-health when the reset action button is clicked.
|
|
on("clicked:resetHealth", function () {
|
|
applyResetHealth();
|
|
});
|
|
|
|
// Reset endurance and stun when the resect action button in item-gear-health panel is clicked.
|
|
on("clicked:gearResetHealth", function () {
|
|
applyResetHealth();
|
|
});
|
|
|
|
function applyResetHealth() {
|
|
getAttrs(["endurance","stun"], function(values) {
|
|
const maxEND = parseInt(values.endurance);
|
|
const maxSTUN = parseInt(values.stun);
|
|
|
|
setAttrs({
|
|
"currentSTUN":maxSTUN,
|
|
"currentEND":maxEND
|
|
});
|
|
});
|
|
}
|
|
|
|
// Recover endurance and stun when the recover button in the item-characteristics-health box is clicked.
|
|
on("clicked:recoverHealth", function () {
|
|
applyRecovery();
|
|
});
|
|
|
|
// Recover endurance and stun when the recover button in the gear health status box is clicked.
|
|
on("clicked:gearRecoverHealth", function () {
|
|
applyRecovery();
|
|
});
|
|
|
|
function applyRecovery() {
|
|
getAttrs(["endurance","stun","currentEND","currentSTUN","recovery"], function(values) {
|
|
const maxEND = parseInt(values.endurance);
|
|
const maxSTUN = parseInt(values.stun);
|
|
const recovery = parseInt(values.recovery);
|
|
let currentEND = parseInt(values.currentEND);
|
|
let currentSTUN = parseInt(values.currentSTUN);
|
|
|
|
if (currentSTUN<=maxSTUN) { // Check to see if character hasn't been boosted above character max by Aid power or similar.
|
|
if (currentSTUN+recovery<=maxSTUN) {
|
|
setAttrs({
|
|
"currentSTUN":currentSTUN+recovery
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"currentSTUN":maxSTUN
|
|
});
|
|
}
|
|
}
|
|
|
|
if (currentEND<=maxEND) { // Check to see if character hasn't been boosted above character max by Aid power or similar.
|
|
if (currentEND+recovery<=maxEND) {
|
|
setAttrs({
|
|
"currentEND":currentEND+recovery
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"currentEND":maxEND
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Keep the gear tab's health status up to date with the character tab's health status.
|
|
on("change:currentBODY change:currentSTUN change:currentEND", function () {
|
|
getAttrs(["gearCurrentBODY","gearCurrentSTUN","gearCurrentEND","currentBODY","currentSTUN","currentEND"], function(values) {
|
|
setAttrs({
|
|
"gearCurrentBODY":parseInt(values.currentBODY)||0,
|
|
"gearCurrentSTUN":parseInt(values.currentSTUN)||0,
|
|
"gearCurrentEND":parseInt(values.currentEND)||0,
|
|
})
|
|
});
|
|
});
|
|
|
|
// Keep the gear tab's health status up to date with the character tab's health status.
|
|
on("change:gearCurrentBODY change:gearCurrentSTUN change:gearCurrentEND", function () {
|
|
getAttrs(["gearCurrentBODY","gearCurrentSTUN","gearCurrentEND","currentBODY","currentSTUN","currentEND"], function(values) {
|
|
setAttrs({
|
|
"currentBODY":parseInt(values.gearCurrentBODY)||0,
|
|
"currentSTUN":parseInt(values.gearCurrentSTUN)||0,
|
|
"currentEND":parseInt(values.gearCurrentEND)||0,
|
|
})
|
|
});
|
|
});
|
|
|
|
/* -------------------------------------- */
|
|
/* Functions used for characteristics tab */
|
|
/* -------------------------------------- */
|
|
function sumCharacteristicPoints() {
|
|
// Add up points spent on characteristics.
|
|
// All character attributes added in one function to avoid getAttrs() limitations.
|
|
|
|
// Add attribute costs in one go
|
|
getAttrs(["strengthCP","dexterityCP","constitutionCP","intelligenceCP","egoCP","presenceCP","ocvCP","dcvCP","mocvCP","mdcvCP","speedCP","pdCP","edCP","bodyCP","stunCP","enduranceCP","recoveryCP","runningCP","leapingCP","swimmingCP"], function(values) {
|
|
const strengthCost = parseInt(values.strengthCP)||0;
|
|
const dexterityCost = parseInt(values.dexterityCP)||0;
|
|
const constitutionCost = parseInt(values.constitutionCP)||0;
|
|
const intelligenceCost = parseInt(values.intelligenceCP)||0;
|
|
const egoCost = parseInt(values.egoCP)||0;
|
|
const presenceCost = parseInt(values.presenceCP)||0;
|
|
|
|
const ocvCost = parseInt(values.ocvCP)||0;
|
|
const dcvCost = parseInt(values.dcvCP)||0;
|
|
const mocvCost = parseInt(values.mocvCP)||0;
|
|
const mdcvCost = parseInt(values.mdcvCP)||0;
|
|
|
|
const speedCost = parseInt(values.speedCP)||0;
|
|
|
|
const pdCost = parseInt(values.pdCP)||0;
|
|
const edCost = parseInt(values.edCP)||0;
|
|
const bodyCost = parseInt(values.bodyCP)||0;
|
|
const stunCost = parseInt(values.stunCP)||0;
|
|
const endCost = parseInt(values.enduranceCP)||0;
|
|
const recCost = parseInt(values.recoveryCP)||0;
|
|
|
|
const runningCost = parseInt(values.runningCP)||0;
|
|
const leapingCost = parseInt(values.leapingCP)||0;
|
|
const swimmingCost = parseInt(values.swimmingCP)||0;
|
|
|
|
let primaryAttributesCost = strengthCost+dexterityCost+constitutionCost+intelligenceCost+egoCost+presenceCost;
|
|
let combatValuesCost = ocvCost+dcvCost+mocvCost+mdcvCost;
|
|
let defenseCost = pdCost+edCost;
|
|
let healthCost = bodyCost+stunCost+endCost+recCost;
|
|
let movementCost = runningCost+leapingCost+swimmingCost;
|
|
|
|
let characterAttributeCost = primaryAttributesCost+combatValuesCost+speedCost+defenseCost+healthCost+movementCost;
|
|
|
|
setAttrs({
|
|
"characteristicsCost":parseInt(characterAttributeCost)
|
|
});
|
|
});
|
|
}
|
|
|
|
// Update Strength related stats and skills
|
|
on("change:strength", function () {
|
|
getAttrs(["strength","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.strength)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
let liftCapability=Math.round(250*Math.pow((statValue/5),2))/10;
|
|
let freeCarry=liftCapability/10;
|
|
|
|
// Update cost and roll chance
|
|
setAttrs({
|
|
"strengthCP":statCP,
|
|
"strengthChance":calculateRoll(statValue),
|
|
"liftWeight":liftCapability,
|
|
"encumbranceFreeCarry":freeCarry
|
|
});
|
|
|
|
// Update costs
|
|
calculatePoints();
|
|
});
|
|
});
|
|
|
|
// Update Dexterity
|
|
on("change:dexterity", function () {
|
|
getAttrs(["dexterity","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.dexterity)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 2;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost and roll chance
|
|
setAttrs({
|
|
"dexterityCP":statCP,
|
|
"dexterityChance":calculateRoll(statValue)
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Constitution
|
|
on("change:constitution", function () {
|
|
getAttrs(["constitution","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.constitution)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost and roll chance
|
|
setAttrs({
|
|
"constitutionCP":statCP,
|
|
"constitutionChance":calculateRoll(statValue)
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Intelligence
|
|
on("change:intelligence", function () {
|
|
getAttrs(["intelligence","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.intelligence)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost and roll chance
|
|
setAttrs({
|
|
"intelligenceCP":statCP,
|
|
"intelligenceChance":calculateRoll(statValue)
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Ego
|
|
on("change:ego", function () {
|
|
getAttrs(["ego","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.ego)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost and roll chance
|
|
setAttrs({
|
|
"egoCP":statCP,
|
|
"egoChance":calculateRoll(statValue)
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Presence
|
|
on("change:presence", function () {
|
|
getAttrs(["presence","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.presence)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost and roll chance
|
|
setAttrs({
|
|
"presenceCP":statCP,
|
|
"presenceChance":calculateRoll(statValue)
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Combat Characteristics
|
|
|
|
// Update Offensive Combat Value
|
|
on("change:ocv", function () {
|
|
getAttrs(["ocv","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.ocv)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 3;
|
|
const maxStat = 8;
|
|
const costStat = 5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"ocvCP":statCP,
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Defensive Combat Value
|
|
on("change:dcv", function () {
|
|
getAttrs(["dcv","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.dcv)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 3;
|
|
const maxStat = 8;
|
|
const costStat = 5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"dcvCP":statCP,
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Mental Offensive Combat Value
|
|
on("change:mocv", function () {
|
|
getAttrs(["mocv","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.mocv)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 3;
|
|
const maxStat = 8;
|
|
const costStat = 5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"mocvCP":statCP,
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Mental Defensive Combat Value
|
|
on("change:mdcv", function () {
|
|
getAttrs(["mdcv","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.mdcv)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 3;
|
|
const maxStat = 8;
|
|
const costStat = 5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"mdcvCP":statCP,
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Speed
|
|
on("change:speed", function () {
|
|
getAttrs(["speed","useCharacteristicMaximums"], function(values) {
|
|
|
|
let theSpeed = parseInt(values.speed)||0;
|
|
let useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 2;
|
|
const maxStat = 4;
|
|
const costStat = 10;
|
|
let statCP = 0;
|
|
|
|
if ( (theSpeed>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(theSpeed-maxStat)*costStat+(theSpeed-baseStat)*costStat;
|
|
} else {
|
|
statCP=(theSpeed-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"speedCP":statCP
|
|
});
|
|
|
|
sumCharacteristicPoints();
|
|
|
|
// Update speed indicator checkboxes
|
|
if (theSpeed==12) {
|
|
setAttrs({
|
|
"speedIndicator01":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator01":0
|
|
});
|
|
}
|
|
|
|
if (theSpeed>=6) {
|
|
setAttrs({
|
|
"speedIndicator02":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator02":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=8)||(theSpeed===4)||(theSpeed===5)) {
|
|
setAttrs({
|
|
"speedIndicator03":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator03":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=9)||(theSpeed===3)||(theSpeed===6)||(theSpeed===7)) {
|
|
setAttrs({
|
|
"speedIndicator04":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator04":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=10)||(theSpeed===8)||(theSpeed===5)) {
|
|
setAttrs({
|
|
"speedIndicator05":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator05":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=6)||(theSpeed===2)||(theSpeed===4)) {
|
|
setAttrs({
|
|
"speedIndicator06":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator06":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=11)||(theSpeed===1)||(theSpeed===7)||(theSpeed===9)) {
|
|
setAttrs({
|
|
"speedIndicator07":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator07":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=8)||(theSpeed===3)||(theSpeed===5)||(theSpeed===6)) {
|
|
setAttrs({
|
|
"speedIndicator08":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator08":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=10)||(theSpeed===4)||(theSpeed===7)||(theSpeed===8)) {
|
|
setAttrs({
|
|
"speedIndicator09":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator09":0
|
|
});
|
|
}
|
|
|
|
if ((theSpeed>=9)||(theSpeed===5)||(theSpeed===6)) {
|
|
setAttrs({
|
|
"speedIndicator10":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator10":0
|
|
});
|
|
}
|
|
|
|
if (theSpeed>=7) {
|
|
setAttrs({
|
|
"speedIndicator11":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator11":0
|
|
});
|
|
}
|
|
|
|
if (theSpeed>=2) {
|
|
setAttrs({
|
|
"speedIndicator12":"on"
|
|
});
|
|
} else {
|
|
setAttrs({
|
|
"speedIndicator12":0
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Update Physical Defense
|
|
on("change:pd", function () {
|
|
getAttrs(["pd","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.pd)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 2;
|
|
const maxStat = 8;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"pdCP":statCP
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Energy Defense
|
|
on("change:ed", function () {
|
|
getAttrs(["ed","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.ed)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 2;
|
|
const maxStat = 8;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"edCP":statCP
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update BODY
|
|
on("change:body", function () {
|
|
getAttrs(["body","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.body)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 10;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"bodyCP":statCP
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update STUN
|
|
on("change:stun", function () {
|
|
getAttrs(["stun","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.stun)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 20;
|
|
const maxStat = 50;
|
|
const costStat = 0.5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"stunCP":heroRoundLow(statCP)
|
|
});
|
|
|
|
// Update costs
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Endurance
|
|
on("change:endurance", function () {
|
|
getAttrs(["endurance","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.endurance)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 20;
|
|
const maxStat = 50;
|
|
const costStat = 0.2;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"enduranceCP":heroRoundLow(statCP)
|
|
});
|
|
|
|
// Update characteristics cost
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Recovery
|
|
on("change:recovery", function () {
|
|
getAttrs(["recovery","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.recovery)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 4;
|
|
const maxStat = 10;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"recoveryCP":statCP
|
|
});
|
|
|
|
// Update characteristics cost
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Movement abilities
|
|
|
|
// Update Running
|
|
on("change:running", function () {
|
|
getAttrs(["running","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.running)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 12;
|
|
const maxStat = 20;
|
|
const costStat = 1;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"runningCP":statCP
|
|
});
|
|
|
|
// Update characteristics cost
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Leaping
|
|
on("change:leaping", function () {
|
|
getAttrs(["leaping","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.leaping)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 4;
|
|
const maxStat = 10;
|
|
const costStat = 0.5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"leapingCP":heroRoundLow(statCP)
|
|
});
|
|
|
|
// Update characteristics cost
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
// Update Swimming
|
|
on("change:swimming", function () {
|
|
getAttrs(["swimming","useCharacteristicMaximums"], function(values) {
|
|
|
|
const statValue = parseInt(values.swimming)||0;
|
|
const useMaximums = values.useCharacteristicMaximums;
|
|
const baseStat = 4;
|
|
const maxStat = 10;
|
|
const costStat = 0.5;
|
|
let statCP = 0;
|
|
|
|
if ( (statValue>maxStat) && (useMaximums != 0) ) {
|
|
statCP=(statValue-maxStat)*costStat+(statValue-baseStat)*costStat;
|
|
} else {
|
|
statCP=(statValue-baseStat)*costStat;
|
|
}
|
|
|
|
// Update cost
|
|
setAttrs({
|
|
"swimmingCP":heroRoundLow(statCP)
|
|
});
|
|
|
|
// Update characteristics cost
|
|
sumCharacteristicPoints();
|
|
});
|
|
});
|
|
|
|
/* -------------------------------------- */
|
|
/* Functions used for tally bar */
|
|
/* -------------------------------------- */
|
|
|
|
function addPoints() {
|
|
// Add up points from each section of the tally bar and subtract the complications benefit to arrive at a total character cost
|
|
// Seems to need a onchange() notice for each tab total to be recognized correctly.
|
|
getAttrs(["hiddenCombatSkillsCost","characteristicsCost","hiddenSet1SkillsCost","hiddenSet2SkillsCost","hiddenSet3SkillsCost","hiddenLanguageSkillsCost","hiddenEnhancerSkillsCost","hiddenMartialSkillsCost","powersPerksTalentsCost","complicationsBenefit","bonusBenefit","experienceBenefit"], function(values) {
|
|
|
|
const characteristicsCP = parseInt(values.characteristicsCost)||0;
|
|
const set1SkillsCP = parseInt(values.hiddenSet1SkillsCost)||0;
|
|
const set2SkillsCP = parseInt(values.hiddenSet2SkillsCost)||0;
|
|
const set3SkillsCP = parseInt(values.hiddenSet3SkillsCost)||0;
|
|
const combatSkillsCP = parseInt(values.hiddenCombatSkillsCost)||0;
|
|
const languageSkillsCP = parseInt(values.hiddenLanguageSkillsCost)||0;
|
|
const enhancerSkillsCP = parseInt(values.hiddenEnhancerSkillsCost)||0;
|
|
const martialSkillsCP = parseInt(values.hiddenMartialSkillsCost)||0;
|
|
const powersPerksTalentsCP = parseInt(values.powersPerksTalentsCost)||0;
|
|
const complicationsCP = parseInt(values.complicationsBenefit)||0;
|
|
const bonusCP = parseInt(values.bonusBenefit)||0;
|
|
const experienceCP = parseInt(values.experienceBenefit)||0;
|
|
|
|
let totalSkillsCP = set1SkillsCP+set2SkillsCP+set3SkillsCP+combatSkillsCP+languageSkillsCP+enhancerSkillsCP+martialSkillsCP;
|
|
let totalCP = characteristicsCP+totalSkillsCP+powersPerksTalentsCP-complicationsCP-bonusCP+experienceCP;
|
|
|
|
setAttrs({
|
|
"skillsCost":totalSkillsCP,
|
|
"totalCharacterCost":totalCP
|
|
});
|
|
});
|
|
}
|
|
|
|
on("change:characteristicsCost change:hiddenSet1SkillsCost change:hiddenSet2SkillsCost change:hiddenSet3SkillsCost change:hiddenCombatSkillsCost change:hiddenEnhancerSkillsCost change:hiddenLanguageSkillsCost change:hiddenMartialSkillsCost change:powersPerksTalentsCost change:complicationsBenefit change:bonusBenefit change:experienceBenefit", function () {
|
|
// Update total character points any of the hidden character point subtotals change.
|
|
addPoints();
|
|
});
|
|
|
|
/* -------------------------------------------------- */
|
|
/* Functions used for talents and complications tab */
|
|
/* -------------------------------------------------- */
|
|
|
|
function sumComplicationsBenefit() {
|
|
getAttrs(["complicationCP01","complicationCP02","complicationCP03","complicationCP04","complicationCP05","complicationCP06"], function(values) {
|
|
const complication01benefit = parseInt(values.complicationCP01)||0;
|
|
const complication02benefit = parseInt(values.complicationCP02)||0;
|
|
const complication03benefit = parseInt(values.complicationCP03)||0;
|
|
const complication04benefit = parseInt(values.complicationCP04)||0;
|
|
const complication05benefit = parseInt(values.complicationCP05)||0;
|
|
const complication06benefit = parseInt(values.complicationCP06)||0;
|
|
|
|
let totalBenefit = complication01benefit+complication02benefit+complication03benefit+complication04benefit+complication05benefit+complication06benefit;
|
|
|
|
setAttrs({
|
|
"complicationsBenefit":totalBenefit
|
|
});
|
|
});
|
|
}
|
|
|
|
// Update Tally Bar after change notice any complication's CP benefit.
|
|
on("change:complicationCP01 change:complicationCP02 change:complicationCP03 change:complicationCP04 change:complicationCP05 change:complicationCP06", function () {
|
|
sumComplicationsBenefit();
|
|
});
|
|
|
|
function sumPowersPerksTalents() {
|
|
getAttrs(["talentCP01","talentCP02","talentCP03","talentCP04","talentCP05","talentCP06","talentCP07","powerCP01","powerCP02","powerCP03","powerCP04","powerCP05","powerCP06", "powerCP07", "powerCP08", "powerCP09", "powerCP10"], function(values) {
|
|
const talent01cost = parseInt(values.talentCP01)||0;
|
|
const talent02cost = parseInt(values.talentCP02)||0;
|
|
const talent03cost = parseInt(values.talentCP03)||0;
|
|
const talent04cost = parseInt(values.talentCP04)||0;
|
|
const talent05cost = parseInt(values.talentCP05)||0;
|
|
const talent06cost = parseInt(values.talentCP06)||0;
|
|
const talent07cost = parseInt(values.talentCP07)||0;
|
|
|
|
let talentsCost = talent01cost+talent02cost+talent03cost+talent04cost+talent05cost+talent06cost+talent07cost;
|
|
|
|
const power01cost = parseInt(values.powerCP01)||0;
|
|
const power02cost = parseInt(values.powerCP02)||0;
|
|
const power03cost = parseInt(values.powerCP03)||0;
|
|
const power04cost = parseInt(values.powerCP04)||0;
|
|
const power05cost = parseInt(values.powerCP05)||0;
|
|
const power06cost = parseInt(values.powerCP06)||0;
|
|
const power07cost = parseInt(values.powerCP07)||0;
|
|
const power08cost = parseInt(values.powerCP08)||0;
|
|
const power09cost = parseInt(values.powerCP09)||0;
|
|
const power10cost = parseInt(values.powerCP10)||0;
|
|
|
|
let powersCost = power01cost+power02cost+power03cost+power04cost+power05cost+power06cost+power07cost+power08cost+power09cost+power10cost;
|
|
|
|
let totalCost=talentsCost+powersCost;
|
|
|
|
setAttrs({
|
|
"powersPerksTalentsCost":totalCost
|
|
});
|
|
});
|
|
}
|
|
|
|
// Update Tally Bar after change to any Talent's CP cost.
|
|
on("change:talentCP01 change:talentCP02 change:talentCP03 change:talentCP04 change:talentCP05 change:talentCP06 change:talentCP07", function () {
|
|
sumPowersPerksTalents();
|
|
});
|
|
|
|
/* -------------------------------------------------- */
|
|
/* Functions used for powers tab */
|
|
/* -------------------------------------------------- */
|
|
|
|
function calculatePowerEND(powerActiveCost,powerReducedEND) {
|
|
// Calculates power endurance given active cost and reduced, standard, or increased endurance limitation.
|
|
var powerEND=0;
|
|
|
|
switch (powerReducedEND) {
|
|
case 'increasedENDx10': powerEND=10*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx9': powerEND=9*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx8': powerEND=8*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx7': powerEND=7*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx6': powerEND=6*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx5': powerEND=5*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx4': powerEND=4*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx3': powerEND=3*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'increasedENDx2': powerEND=2*(heroRoundLow(powerActiveCost/10));
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'standardEND': powerEND=heroRoundLow(powerActiveCost/10);
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'reducedEND': powerEND=heroRoundLow(powerActiveCost/20);
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
case 'reducedENDAF': powerEND=heroRoundLow(powerActiveCost/20);
|
|
if (powerEND<1) {
|
|
powerEND=1;
|
|
};
|
|
break;
|
|
default: powerEND=0;
|
|
}
|
|
|
|
return powerEND;
|
|
}
|
|
|
|
function calculateActiveCost(powerBaseCost,powerAdvantages,powerReducedEND) {
|
|
var powerActiveCost=0;
|
|
|
|
switch (powerReducedEND) {
|
|
case 'reducedENDAF': powerActiveCost=powerBaseCost*(powerAdvantages+1.5);
|
|
break;
|
|
case 'zeroENDAF': powerActiveCost=powerBaseCost*(powerAdvantages+2);
|
|
break;
|
|
case 'reducedEND': powerActiveCost=powerBaseCost*(powerAdvantages+1.25);
|
|
break;
|
|
case 'zeroEND': powerActiveCost=powerBaseCost*(powerAdvantages+1.5);
|
|
break;
|
|
default: powerActiveCost=powerBaseCost*(1+powerAdvantages);
|
|
}
|
|
|
|
return powerActiveCost;
|
|
}
|
|
|
|
function increasedENDlimitation(settingEND) {
|
|
switch (settingEND) {
|
|
case 'increasedENDx2': return 0.5;
|
|
break;
|
|
case 'increasedENDx3': return 1;
|
|
break;
|
|
case 'increasedENDx4': return 1.5;
|
|
break;
|
|
case 'increasedENDx5': return 2;
|
|
break;
|
|
case 'increasedENDx6': return 2.5;
|
|
break;
|
|
case 'increasedENDx7': return 3;
|
|
break;
|
|
case 'increasedENDx8': return 3.5;
|
|
break;
|
|
case 'increasedENDx9': return 3.5;
|
|
break;
|
|
case 'increasedENDx10': return 4;
|
|
break;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
/* Update Power01 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType01 change:powerBaseCost01 change:powerAdvantages01 change:powerReducedEND01 change:powerLimitations01", function () {
|
|
getAttrs(["powerType01","powerBaseCost01","powerAdvantages01","powerReducedEND01","powerLimitations01"], function(values) {
|
|
|
|
let powerType = values.powerType01;
|
|
const powerBaseCost = parseInt(values.powerBaseCost01)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages01)||0;
|
|
const powerReducedEND = values.powerReducedEND01;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations01)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost01":powerActiveCost,
|
|
"powerEND01":powerEND,
|
|
"powerCP01":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 01
|
|
on("clicked:buttonPower01", function () {
|
|
getAttrs(["currentEND","powerEND01"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND01);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power02 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType02 change:powerBaseCost02 change:powerAdvantages02 change:powerReducedEND02 change:powerLimitations02", function () {
|
|
getAttrs(["powerType02","powerBaseCost02","powerAdvantages02","powerReducedEND02","powerLimitations02"], function(values) {
|
|
|
|
let powerType = values.powerType02;
|
|
const powerBaseCost = parseInt(values.powerBaseCost02)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages02)||0;
|
|
const powerReducedEND = values.powerReducedEND02;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations02)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost02":powerActiveCost,
|
|
"powerEND02":powerEND,
|
|
"powerCP02":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 02
|
|
on("clicked:buttonPower02", function () {
|
|
getAttrs(["currentEND","powerEND02"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND02);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power03 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType03 change:powerBaseCost03 change:powerAdvantages03 change:powerReducedEND03 change:powerLimitations03", function () {
|
|
getAttrs(["powerType03","powerBaseCost03","powerAdvantages03","powerReducedEND03","powerLimitations03"], function(values) {
|
|
|
|
let powerType = values.powerType03;
|
|
const powerBaseCost = parseInt(values.powerBaseCost03)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages03)||0;
|
|
const powerReducedEND = values.powerReducedEND03;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations03)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost03":powerActiveCost,
|
|
"powerEND03":powerEND,
|
|
"powerCP03":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 03
|
|
on("clicked:buttonPower03", function () {
|
|
getAttrs(["currentEND","powerEND03"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND03);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power04 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType04 change:powerBaseCost04 change:powerAdvantages04 change:powerReducedEND04 change:powerLimitations04", function () {
|
|
getAttrs(["powerType04","powerBaseCost04","powerAdvantages04","powerReducedEND04","powerLimitations04"], function(values) {
|
|
|
|
let powerType = values.powerType04;
|
|
const powerBaseCost = parseInt(values.powerBaseCost04)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages04)||0;
|
|
const powerReducedEND = values.powerReducedEND04;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations04)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost04":powerActiveCost,
|
|
"powerEND04":powerEND,
|
|
"powerCP04":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 04
|
|
on("clicked:buttonPower04", function () {
|
|
getAttrs(["currentEND","powerEND04"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND04);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power05 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType05 change:powerBaseCost05 change:powerAdvantages05 change:powerReducedEND05 change:powerLimitations05", function () {
|
|
getAttrs(["powerType05","powerBaseCost05","powerAdvantages05","powerReducedEND05","powerLimitations05"], function(values) {
|
|
|
|
let powerType = values.powerType05;
|
|
const powerBaseCost = parseInt(values.powerBaseCost05)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages05)||0;
|
|
const powerReducedEND = values.powerReducedEND05;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations05)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost05":powerActiveCost,
|
|
"powerEND05":powerEND,
|
|
"powerCP05":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 05
|
|
on("clicked:buttonPower05", function () {
|
|
getAttrs(["currentEND","powerEND05"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND05);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power06 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType06 change:powerBaseCost06 change:powerAdvantages06 change:powerReducedEND06 change:powerLimitations06", function () {
|
|
getAttrs(["powerType06","powerBaseCost06","powerAdvantages06","powerReducedEND06","powerLimitations06"], function(values) {
|
|
|
|
let powerType = values.powerType06;
|
|
const powerBaseCost = parseInt(values.powerBaseCost06)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages06)||0;
|
|
const powerReducedEND = values.powerReducedEND06;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations06)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost06":powerActiveCost,
|
|
"powerEND06":powerEND,
|
|
"powerCP06":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 06
|
|
on("clicked:buttonPower06", function () {
|
|
getAttrs(["currentEND","powerEND06"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND06);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power07 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType07 change:powerBaseCost07 change:powerAdvantages07 change:powerReducedEND07 change:powerLimitations07", function () {
|
|
getAttrs(["powerType07","powerBaseCost07","powerAdvantages07","powerReducedEND07","powerLimitations07"], function(values) {
|
|
|
|
let powerType = values.powerType07;
|
|
const powerBaseCost = parseInt(values.powerBaseCost07)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages07)||0;
|
|
const powerReducedEND = values.powerReducedEND07;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations07)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost07":powerActiveCost,
|
|
"powerEND07":powerEND,
|
|
"powerCP07":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 07
|
|
on("clicked:buttonPower07", function () {
|
|
getAttrs(["currentEND","powerEND07"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND07);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power08 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType08 change:powerBaseCost08 change:powerAdvantages08 change:powerReducedEND08 change:powerLimitations08", function () {
|
|
getAttrs(["powerType08","powerBaseCost08","powerAdvantages08","powerReducedEND08","powerLimitations08"], function(values) {
|
|
|
|
let powerType = values.powerType08;
|
|
const powerBaseCost = parseInt(values.powerBaseCost08)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages08)||0;
|
|
const powerReducedEND = values.powerReducedEND08;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations08)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost08":powerActiveCost,
|
|
"powerEND08":powerEND,
|
|
"powerCP08":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 08
|
|
on("clicked:buttonPower08", function () {
|
|
getAttrs(["currentEND","powerEND08"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND08);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power09 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType09 change:powerBaseCost09 change:powerAdvantages09 change:powerReducedEND09 change:powerLimitations09", function () {
|
|
getAttrs(["powerType09","powerBaseCost09","powerAdvantages09","powerReducedEND09","powerLimitations09"], function(values) {
|
|
|
|
let powerType = values.powerType09;
|
|
const powerBaseCost = parseInt(values.powerBaseCost09)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages09)||0;
|
|
const powerReducedEND = values.powerReducedEND09;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations09)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost09":powerActiveCost,
|
|
"powerEND09":powerEND,
|
|
"powerCP09":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 09
|
|
on("clicked:buttonPower09", function () {
|
|
getAttrs(["currentEND","powerEND09"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND09);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Update Power10 after detecting change to any of the numerical vales in the flex container */
|
|
on("change:powerType10 change:powerBaseCost10 change:powerAdvantages10 change:powerReducedEND10 change:powerLimitations10", function () {
|
|
getAttrs(["powerType10","powerBaseCost10","powerAdvantages10","powerReducedEND10","powerLimitations10"], function(values) {
|
|
|
|
let powerType = values.powerType10;
|
|
const powerBaseCost = parseInt(values.powerBaseCost10)||0;
|
|
const powerAdvantages = parseFloat(values.powerAdvantages10)||0;
|
|
const powerReducedEND = values.powerReducedEND10;
|
|
let powerActiveCost=0;
|
|
let powerModifiedCost=0;
|
|
let powerRealCost=0;
|
|
let powerEND=0;
|
|
|
|
var increasedENDLimitation=increasedENDlimitation(powerReducedEND);
|
|
var powerLimitations = (parseFloat(values.powerLimitations10)||0)+increasedENDLimitation;
|
|
|
|
powerPreReducedEndActiveCost=powerBaseCost * (1+powerAdvantages);
|
|
powerEND=calculatePowerEND(powerPreReducedEndActiveCost, powerReducedEND);
|
|
powerActiveCost=calculateActiveCost(powerBaseCost, powerAdvantages, powerReducedEND);
|
|
powerActiveCost=heroRoundLow(powerActiveCost);
|
|
|
|
if (powerBaseCost != 0) {
|
|
switch (powerType) {
|
|
case 'variableSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/5;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
case 'fixedSlot': powerRealCost=powerActiveCost/(1+powerLimitations)/10;
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
break;
|
|
default: powerRealCost=powerActiveCost/(1+powerLimitations);
|
|
powerRealCost=heroRoundLow(powerRealCost);
|
|
if (powerRealCost<1) {
|
|
powerRealCost=1;
|
|
};
|
|
}
|
|
} else {
|
|
powerActiveCost=0;
|
|
powerEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"powerActiveCost10":powerActiveCost,
|
|
"powerEND10":powerEND,
|
|
"powerCP10":powerRealCost
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
// Use Power 10
|
|
on("clicked:buttonPower10", function () {
|
|
getAttrs(["currentEND","powerEND10"], function(values) {
|
|
const currentEND = parseInt(values.currentEND);
|
|
const powerEND = parseInt(values.powerEND10);
|
|
|
|
let updatedEND=currentEND-powerEND;
|
|
|
|
if (updatedEND<0) {
|
|
updatedEND=0;
|
|
}
|
|
|
|
setAttrs({
|
|
"currentEND":updatedEND
|
|
});
|
|
});
|
|
});
|
|
|
|
// Update Tally Bar after change to any Power's CP cost.
|
|
on("change:powerCP01 change:powerCP02 change:powerCP03 change:powerCP04 change:powerCP05 change:powerCP06 change:powerCP07 change:powerCP08 change:powerCP09 change:powerCP10", function () {
|
|
sumPowersPerksTalents();
|
|
});
|
|
|
|
/* -------------------------------------------------- */
|
|
/* Functions used for skills tab */
|
|
/* -------------------------------------------------- */
|
|
|
|
function calculateLanguageSkillCost(skillFluency, skillLiteracy, enhancerLinguist, literacyCost) {
|
|
var enhancerBonus=0;
|
|
var languageCP=0;
|
|
let literacyCP=0;
|
|
|
|
if (skillLiteracy!=0) {
|
|
literacyCP=literacyCost;
|
|
}
|
|
|
|
if (enhancerLinguist!=0) {
|
|
enhancerBonus=1;
|
|
}
|
|
|
|
switch (skillFluency) {
|
|
case "native": languageCP = literacyCP;
|
|
break;
|
|
|
|
case "none": languageCP = literacyCP;
|
|
break;
|
|
|
|
case "basic": languageCP = 1+literacyCP;
|
|
break;
|
|
|
|
case "fluent": languageCP = 2+literacyCP-enhancerBonus;
|
|
break;
|
|
|
|
case "accent": languageCP = 3+literacyCP-enhancerBonus;
|
|
break;
|
|
|
|
case "idiomatic": languageCP = 4+literacyCP-enhancerBonus;
|
|
break;
|
|
|
|
case "imitate": languageCP = 5+literacyCP-enhancerBonus;
|
|
break;
|
|
}
|
|
return languageCP;
|
|
}
|
|
|
|
function standardSkillChance(theBaseSkillRoll,skillCP,additionalLevels) {
|
|
var skillCost=3;
|
|
var skillLevelCost=2;
|
|
var theSkillRollChance;
|
|
var theSkillBonus;
|
|
|
|
if (skillCP===0) {
|
|
theSkillRollChance=0;
|
|
} else if (skillCP===1) {
|
|
theSkillRollChance=8;
|
|
} else if (skillCP===2) {
|
|
theSkillRollChance=10;
|
|
} else {
|
|
theSkillBonus=Math.floor((skillCP-skillCost)/skillLevelCost);
|
|
theSkillRollChance=theBaseSkillRoll+theSkillBonus+additionalLevels;
|
|
}
|
|
return theSkillRollChance;
|
|
}
|
|
|
|
function knowledgeSkillChance(enhancer,skillCP,additionalLevels) {
|
|
// Calculate KS, PS, or AK-type skill roll chance.
|
|
var skillCost=2;
|
|
var skillLevelCost=1;
|
|
var theBaseSkillRoll=11;
|
|
var theSkillBonus=0;
|
|
var theSkillRollChance=0;
|
|
|
|
if (skillCP==0) {
|
|
theSkillRollChance = 0;
|
|
} else if (skillCP===1 && enhancer === 0) {
|
|
theSkillRollChance = 8;
|
|
} else if ( (skillCP>=2) && (enhancer === 0) ) {
|
|
theSkillBonus=skillCP-skillCost;
|
|
theSkillRollChance = theBaseSkillRoll+theSkillBonus+additionalLevels;
|
|
} else {
|
|
skillCost=1;
|
|
theSkillBonus=skillCP-skillCost;
|
|
theSkillRollChance = theBaseSkillRoll+theSkillBonus+additionalLevels;
|
|
}
|
|
return theSkillRollChance;
|
|
}
|
|
|
|
function knowledgeIntSkillChance(theBaseSkillRoll, enhancer, skillCP, additionalLevels) {
|
|
// Knowledge, Professional, and Science Skills can be purchased as Intelligence-based skills. In such a case
|
|
// this function replaces the more general knowledgeSkillChance(...) function.
|
|
var skillCost=3;
|
|
var skillLevelCost=1;
|
|
var theSkillBonus=0;
|
|
var theSkillRollChance=0;
|
|
|
|
if (skillCP===0) {
|
|
theSkillRollChance = 0;
|
|
} else if (skillCP===1 && enhancer === 0) {
|
|
theSkillRollChance = 8;
|
|
} else if (skillCP===1 && enhancer != 0) {
|
|
theSkillRollChance = 11+additionalLevels; // I.e., a regular Knowledge Skill is the better choice.
|
|
} else if ( (skillCP===2) && (enhancer === 0) ) {
|
|
theSkillRollChance = 11+additionalLevels; // I.e., a regular Knowledge Skill is better than 10- skill proficiency.
|
|
} else if ( (skillCP===3) && (enhancer === 0) ) {
|
|
theSkillBonus=0;
|
|
theSkillRollChance=theBaseSkillRoll+theSkillBonus+additionalLevels;
|
|
} else {
|
|
if (enhancer!=0) {
|
|
skillCost=2;
|
|
}
|
|
theSkillBonus=Math.floor((skillCP-skillCost)/skillLevelCost);
|
|
theSkillRollChance=theBaseSkillRoll+theSkillBonus+additionalLevels;
|
|
}
|
|
return theSkillRollChance;
|
|
}
|
|
|
|
function calculateSkillChance(skillType,skillCP,enhancerJack,enhancerSch,enhancerSci,enhancerTrav,strengthChance,dexterityChance,constitutionChance,intelligenceChance,egoChance,presenceChance,interactionSkillLevels,intellectSkillLevels,agilitySkillLevels,bonusLevels) {
|
|
// Calculates the skill roll chance for a general skill.
|
|
//
|
|
// A bit crazy, but all of these variables need to be passed to this function for the the switch function contained below
|
|
// to calculate the skill roll chance for the skill passed to the function.
|
|
|
|
switch (skillType) {
|
|
case "str":
|
|
theSkillRollChance=standardSkillChance( strengthChance,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "dex":
|
|
theSkillRollChance=standardSkillChance( dexterityChance,skillCP,agilitySkillLevels+bonusLevels);
|
|
break;
|
|
|
|
case "con":
|
|
theSkillRollChance=standardSkillChance( constitutionChance,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "int":
|
|
theSkillRollChance=standardSkillChance( intelligenceChance,skillCP,intellectSkillLevels+bonusLevels);
|
|
break;
|
|
|
|
case "ego":
|
|
theSkillRollChance=standardSkillChance( egoChance,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "pre":
|
|
theSkillRollChance=standardSkillChance( presenceChance,skillCP,interactionSkillLevels+bonusLevels);
|
|
break;
|
|
|
|
case "ps":
|
|
theSkillRollChance=knowledgeSkillChance( enhancerJack,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "intPS":
|
|
theSkillRollChance=knowledgeIntSkillChance( intelligenceChance, enhancerJack,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "dexPS":
|
|
theSkillRollChance=knowledgeIntSkillChance( dexterityChance, enhancerJack,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "ks":
|
|
theSkillRollChance=knowledgeSkillChance( enhancerSch,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "intKS":
|
|
theSkillRollChance=knowledgeIntSkillChance( intelligenceChance, enhancerSch, skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "ss":
|
|
theSkillRollChance=knowledgeSkillChance( enhancerSci,skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "intSS":
|
|
theSkillRollChance=knowledgeIntSkillChance( intelligenceChance, enhancerSci, skillCP,bonusLevels);
|
|
break;
|
|
|
|
case "ak":
|
|
theSkillRollChance=knowledgeSkillChance( enhancerTrav,skillCP,bonusLevels);;
|
|
break;
|
|
|
|
case "other":
|
|
theSkillRollChance=0;
|
|
break;
|
|
|
|
case "none":
|
|
theSkillRollChance=0;
|
|
break;
|
|
|
|
case "group":
|
|
theSkillRollChance=0;
|
|
break;
|
|
|
|
default:
|
|
theSkillRollChance=0;
|
|
}
|
|
|
|
return theSkillRollChance;
|
|
}
|
|
|
|
/* Skill set 01-10 */
|
|
|
|
on("change:skillType01 change:skillCP01 change:skillType02 change:skillCP02 change:skillType03 change:skillCP03 change:skillType04 change:skillCP04 change:skillType05 change:skillCP05 change:skillType06 change:skillCP06 change:skillType07 change:skillCP07 change:skillType08 change:skillCP08 change:skillType09 change:skillCP09 change:skillType10 change:skillCP10 change:enhancerJack change:enhancerSch change:enhancerSci change:enhancerTrav change:strengthChance change:dexterityChance change:constitutionChance change:intelligenceChance change:egoChance change:presenceChance change:interactionLevels change:intellectLevels change:agilityLevels change:noncombatLevels change:overallLevels", function() {
|
|
//
|
|
// The sandbox makes calculating the skill roll chance of general skills messy. All of these modifiers need to be accessed and checked for changes.
|
|
// Group levels are handled by slotting into skills 01 and 05. A player will need to organize the three skills that the group levels apply into
|
|
// the three lines below the desired group level.
|
|
//
|
|
getAttrs(["skillType01","skillCP01","skillType02","skillCP02","skillType03","skillCP03","skillType04","skillCP04","skillType05","skillCP05","skillType06","skillCP06","skillType07","skillCP07","skillType08","skillCP08","skillType09","skillCP09","skillType10","skillCP10","enhancerJack","enhancerSch","enhancerSci","enhancerTrav","strengthChance","dexterityChance","constitutionChance","intelligenceChance","egoChance","presenceChance","interactionLevels","intellectLevels","agilityLevels","noncombatLevels","overallLevels"], function(values) {
|
|
|
|
// Skill 01
|
|
let bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance01=calculateSkillChance(values.skillType01, (parseInt(values.skillCP01)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 02
|
|
// Bonus Levels for Skills 02, 03, and 04 may include group levels if Skill 01 is of type "group".
|
|
if (values.skillType01==="group") {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0)+Math.floor((parseInt(values.skillCP01))/3);
|
|
} else {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
}
|
|
|
|
let skillRollChance02=calculateSkillChance(values.skillType02, (parseInt(values.skillCP02)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 03
|
|
let skillRollChance03=calculateSkillChance(values.skillType03, (parseInt(values.skillCP03)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 04
|
|
let skillRollChance04=calculateSkillChance(values.skillType04, (parseInt(values.skillCP04)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 05
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance05=calculateSkillChance(values.skillType05, (parseInt(values.skillCP05)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 06
|
|
// Bonus Levels for Skills 06, 07, and 08 may include group levels if Skill 05 is of type "group".
|
|
if (values.skillType05=="group") {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0)+Math.floor((parseInt(values.skillCP05))/3);
|
|
} else {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
}
|
|
|
|
let skillRollChance06=calculateSkillChance(values.skillType06, (parseInt(values.skillCP06)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 07
|
|
let skillRollChance07=calculateSkillChance(values.skillType07, (parseInt(values.skillCP07)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 08
|
|
let skillRollChance08=calculateSkillChance(values.skillType08, (parseInt(values.skillCP08)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
|
|
// Skill 09
|
|
// Skills 09 and 10 aren't available for group levels.
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance09=calculateSkillChance(values.skillType09, (parseInt(values.skillCP09)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 10
|
|
let skillRollChance10=calculateSkillChance(values.skillType10, (parseInt(values.skillCP10)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill Set 1 total character point cost
|
|
let setSkillsCost=(parseInt(values.skillCP01)||0)+(parseInt(values.skillCP02)||0)+(parseInt(values.skillCP03)||0)+(parseInt(values.skillCP04)||0)+(parseInt(values.skillCP05)||0)+(parseInt(values.skillCP06)||0)+(parseInt(values.skillCP07)||0)+(parseInt(values.skillCP08)||0)+(parseInt(values.skillCP09)||0)+(parseInt(values.skillCP10)||0);
|
|
|
|
// Assign calculated skill rolls.
|
|
setAttrs({
|
|
"skillRollChance01":skillRollChance01,
|
|
"skillRollChance02":skillRollChance02,
|
|
"skillRollChance03":skillRollChance03,
|
|
"skillRollChance04":skillRollChance04,
|
|
"skillRollChance05":skillRollChance05,
|
|
"skillRollChance06":skillRollChance06,
|
|
"skillRollChance07":skillRollChance07,
|
|
"skillRollChance08":skillRollChance08,
|
|
"skillRollChance09":skillRollChance09,
|
|
"skillRollChance10":skillRollChance10,
|
|
"hiddenSet1SkillsCost":setSkillsCost
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Skill set 11-20 */
|
|
|
|
on("change:skillType11 change:skillCP11 change:skillType12 change:skillCP12 change:skillType13 change:skillCP13 change:skillType14 change:skillCP14 change:skillType15 change:skillCP15 change:skillType16 change:skillCP16 change:skillType17 change:skillCP17 change:skillType18 change:skillCP18 change:skillType19 change:skillCP19 change:skillType20 change:skillCP20 change:enhancerJack change:enhancerSch change:enhancerSci change:enhancerTrav change:strengthChance change:dexterityChance change:constitutionChance change:intelligenceChance change:egoChance change:presenceChance change:interactionLevels change:intellectLevels change:agilityLevels change:noncombatLevels change:overallLevels", function() {
|
|
//
|
|
// The sandbox makes calculating the skill roll chance of general skills messy. All of these modifiers need to be accessed and checked for changes.
|
|
// Group levels are handled by slotting into skills 11 and 15. A player will need to organize the three skills that the group levels apply into
|
|
// the three lines below the desired group level.
|
|
//
|
|
|
|
getAttrs(["skillType11","skillCP11","skillType12","skillCP12","skillType13","skillCP13","skillType14","skillCP14","skillType15","skillCP15","skillType16","skillCP16","skillType17","skillCP17","skillType18","skillCP18","skillType19","skillCP19","skillType20","skillCP20","enhancerJack","enhancerSch","enhancerSci","enhancerTrav","strengthChance","dexterityChance","constitutionChance","intelligenceChance","egoChance","presenceChance","interactionLevels","intellectLevels","agilityLevels","noncombatLevels","overallLevels"], function(values) {
|
|
|
|
// Skill 11
|
|
let bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance11=calculateSkillChance(values.skillType11, (parseInt(values.skillCP11)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 12
|
|
// Bonus Levels for Skills 12, 13, and 14 may include group levels if Skill 11 is of type "group".
|
|
if (values.skillType11==="group") {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0)+Math.floor((parseInt(values.skillCP11))/3);
|
|
} else {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
}
|
|
|
|
let skillRollChance12=calculateSkillChance(values.skillType12, (parseInt(values.skillCP12)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 13
|
|
let skillRollChance13=calculateSkillChance(values.skillType13, (parseInt(values.skillCP13)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 14
|
|
let skillRollChance14=calculateSkillChance(values.skillType14, (parseInt(values.skillCP14)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 15
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance15=calculateSkillChance(values.skillType15, (parseInt(values.skillCP15)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 16
|
|
// Bonus Levels for Skills 16, 17, and 18 may include group levels if Skill 15 is of type "group".
|
|
if (values.skillType15==="group") {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0)+Math.floor((parseInt(values.skillCP15))/3);
|
|
} else {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
}
|
|
|
|
let skillRollChance16=calculateSkillChance(values.skillType16, (parseInt(values.skillCP16)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 17
|
|
let skillRollChance17=calculateSkillChance(values.skillType17, (parseInt(values.skillCP17)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 18
|
|
let skillRollChance18=calculateSkillChance(values.skillType18, (parseInt(values.skillCP18)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
|
|
// Skill 19
|
|
// Skills 19 and 20 aren't available for group levels.
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance19=calculateSkillChance(values.skillType19, (parseInt(values.skillCP19)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 20
|
|
let skillRollChance20=calculateSkillChance(values.skillType20, (parseInt(values.skillCP20)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill Set 2 total character point cost
|
|
let setSkillsCost=(parseInt(values.skillCP11)||0)+(parseInt(values.skillCP12)||0)+(parseInt(values.skillCP13)||0)+(parseInt(values.skillCP14)||0)+(parseInt(values.skillCP15)||0)+(parseInt(values.skillCP16)||0)+(parseInt(values.skillCP17)||0)+(parseInt(values.skillCP18)||0)+(parseInt(values.skillCP19)||0)+(parseInt(values.skillCP20)||0);
|
|
|
|
// Assign calculated skill rolls.
|
|
setAttrs({
|
|
"skillRollChance11":skillRollChance11,
|
|
"skillRollChance12":skillRollChance12,
|
|
"skillRollChance13":skillRollChance13,
|
|
"skillRollChance14":skillRollChance14,
|
|
"skillRollChance15":skillRollChance15,
|
|
"skillRollChance16":skillRollChance16,
|
|
"skillRollChance17":skillRollChance17,
|
|
"skillRollChance18":skillRollChance18,
|
|
"skillRollChance19":skillRollChance19,
|
|
"skillRollChance20":skillRollChance20,
|
|
"hiddenSet2SkillsCost":setSkillsCost
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Skill set 21-30 */
|
|
|
|
on("change:skillType21 change:skillCP21 change:skillType22 change:skillCP22 change:skillType23 change:skillCP23 change:skillType24 change:skillCP24 change:skillType25 change:skillCP25 change:skillType26 change:skillCP26 change:skillType27 change:skillCP27 change:skillType28 change:skillCP28 change:skillType29 change:skillCP29 change:skillType30 change:skillCP30 change:enhancerJack change:enhancerSch change:enhancerSci change:enhancerTrav change:strengthChance change:dexterityChance change:constitutionChance change:intelligenceChance change:egoChance change:presenceChance change:interactionLevels change:intellectLevels change:agilityLevels change:noncombatLevels change:overallLevels", function() {
|
|
//
|
|
// The sandbox makes calculating the skill roll chance of general skills messy. All of these modifiers need to be accessed and checked for changes.
|
|
// Group levels are handled by slotting into skills 21 and 25. A player will need to organize the three skills that the group levels apply into
|
|
// the three lines below the desired group level.
|
|
//
|
|
|
|
getAttrs(["skillType21","skillCP21","skillType22","skillCP22","skillType23","skillCP23","skillType24","skillCP24","skillType25","skillCP25","skillType26","skillCP26","skillType27","skillCP27","skillType28","skillCP28","skillType29","skillCP29","skillType30","skillCP30","enhancerJack","enhancerSch","enhancerSci","enhancerTrav","strengthChance","dexterityChance","constitutionChance","intelligenceChance","egoChance","presenceChance","interactionLevels","intellectLevels","agilityLevels","noncombatLevels","overallLevels"], function(values) {
|
|
|
|
// Skill 21
|
|
let bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance21=calculateSkillChance(values.skillType21, (parseInt(values.skillCP21)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 22
|
|
// Bonus Levels for Skills 22, 23, and 24 may include group levels if Skill 21 is of type "group".
|
|
if (values.skillType21==="group") {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0)+Math.floor((parseInt(values.skillCP21))/3);
|
|
} else {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
}
|
|
|
|
let skillRollChance22=calculateSkillChance(values.skillType22, (parseInt(values.skillCP22)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 23
|
|
let skillRollChance23=calculateSkillChance(values.skillType23, (parseInt(values.skillCP23)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 24
|
|
let skillRollChance24=calculateSkillChance(values.skillType24, (parseInt(values.skillCP24)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 25
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance25=calculateSkillChance(values.skillType25, (parseInt(values.skillCP25)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 26
|
|
// Bonus Levels for Skills 26, 27, and 28 may include group levels if Skill 25 is of type "group".
|
|
if (values.skillType25==="group") {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0)+Math.floor((parseInt(values.skillCP25))/3);
|
|
} else {
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
}
|
|
|
|
let skillRollChance26=calculateSkillChance(values.skillType26, (parseInt(values.skillCP26)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 27
|
|
let skillRollChance27=calculateSkillChance(values.skillType27, (parseInt(values.skillCP27)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 28
|
|
let skillRollChance28=calculateSkillChance(values.skillType28, (parseInt(values.skillCP28)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
|
|
// Skill 29
|
|
// Skills 29 and 30 aren't available for group levels.
|
|
bonusLevels=(parseInt(values.noncombatLevels)||0)+(parseInt(values.overallLevels)||0);
|
|
let skillRollChance29=calculateSkillChance(values.skillType29, (parseInt(values.skillCP29)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill 30
|
|
let skillRollChance30=calculateSkillChance(values.skillType30, (parseInt(values.skillCP30)||0), values.enhancerJack, values.enhancerSch, values.enhancerSci, values.enhancerTrav, (parseInt(values.strengthChance)||0), (parseInt(values.dexterityChance)||0), (parseInt(values.constitutionChance)||0), (parseInt(values.intelligenceChance)||0), (parseInt(values.egoChance)||0), (parseInt(values.presenceChance)||0), (parseInt(values.interactionLevels)||0), (parseInt(values.intellectLevels)||0), (parseInt(values.agilityLevels)||0), bonusLevels);
|
|
|
|
// Skill Set 3 total character point cost
|
|
let setSkillsCost=(parseInt(values.skillCP21)||0)+(parseInt(values.skillCP22)||0)+(parseInt(values.skillCP23)||0)+(parseInt(values.skillCP24)||0)+(parseInt(values.skillCP25)||0)+(parseInt(values.skillCP26)||0)+(parseInt(values.skillCP27)||0)+(parseInt(values.skillCP28)||0)+(parseInt(values.skillCP29)||0)+(parseInt(values.skillCP30)||0);
|
|
|
|
// Assign calculated skill rolls.
|
|
setAttrs({
|
|
"skillRollChance21":skillRollChance21,
|
|
"skillRollChance22":skillRollChance22,
|
|
"skillRollChance23":skillRollChance23,
|
|
"skillRollChance24":skillRollChance24,
|
|
"skillRollChance25":skillRollChance25,
|
|
"skillRollChance26":skillRollChance26,
|
|
"skillRollChance27":skillRollChance27,
|
|
"skillRollChance28":skillRollChance28,
|
|
"skillRollChance29":skillRollChance29,
|
|
"skillRollChance30":skillRollChance30,
|
|
"hiddenSet3SkillsCost":setSkillsCost
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Combat Skills */
|
|
on("change:skillLevels31 change:skillType31 change:skillLevels32 change:skillType32 change:skillLevels33 change:skillType33 change:skillLevels34 change:skillType34 change:skillLevels35 change:skillType35 change:skillLevels36 change:skillType36 change:skillLevels37 change:skillType37 change:skillLevels38 change:skillLevels39 change:skillLevels40", function () {
|
|
//
|
|
// Calculation of combat skill costs is based on many user selections.
|
|
// If the skill is a weapon familiarity, the cost is either 1 CP (WF1) or 2 CP (WF2).
|
|
// If the selection is a skill level, the cost is determined by number of levels and the scope (single: 2, small group: 3, or large group: 5).
|
|
// The costs of general combat skills are calculated by the function calculateCombatSkillCost(..).
|
|
//
|
|
// Skill level costs for all HTH, all ranged, and all combat are calculated here without the calculateCombatSkillCost(..).
|
|
//
|
|
getAttrs(["skillLevels31", "skillType31", "skillLevels32", "skillType32", "skillLevels33", "skillType33", "skillLevels34", "skillType34", "skillLevels35", "skillType35", "skillLevels36", "skillType36", "skillLevels37", "skillType37", "skillLevels38","skillLevels39","skillLevels40"], function(values) {
|
|
|
|
// Skills 31-37 are general combat skills with costs determined by their skill type or levels.
|
|
let skill31Cost = calculateCombatSkillCost(values.skillType31, (parseInt(values.skillLevels31)||0) );
|
|
let skill32Cost = calculateCombatSkillCost(values.skillType32, (parseInt(values.skillLevels32)||0) );
|
|
let skill33Cost = calculateCombatSkillCost(values.skillType33, (parseInt(values.skillLevels33)||0) );
|
|
let skill34Cost = calculateCombatSkillCost(values.skillType34, (parseInt(values.skillLevels34)||0) );
|
|
let skill35Cost = calculateCombatSkillCost(values.skillType35, (parseInt(values.skillLevels35)||0) );
|
|
let skill36Cost = calculateCombatSkillCost(values.skillType36, (parseInt(values.skillLevels36)||0) );
|
|
let skill37Cost = calculateCombatSkillCost(values.skillType37, (parseInt(values.skillLevels37)||0) );
|
|
|
|
// Skill 38: All HTH Combat Levels cost 8 CP each.
|
|
let skill38Cost = 8*(parseInt(values.skillLevels38)||0);
|
|
|
|
// Skill 39: All Range Combat Levels cost 8 CP each.
|
|
let skill39Cost = 8*(parseInt(values.skillLevels39)||0);
|
|
|
|
// Skill 40: All Combat Levels cost 10 CP each.
|
|
let skill40Cost = 10*(parseInt(values.skillLevels40)||0);
|
|
|
|
let combatSkillsCost = skill31Cost+skill32Cost+skill33Cost+skill34Cost+skill35Cost+skill36Cost+skill37Cost+skill38Cost+skill39Cost+skill40Cost;
|
|
|
|
setAttrs({
|
|
"hiddenCombatSkillsCost":combatSkillsCost,
|
|
"skillCP31":skill31Cost,
|
|
"skillCP32":skill32Cost,
|
|
"skillCP33":skill33Cost,
|
|
"skillCP34":skill34Cost,
|
|
"skillCP35":skill35Cost,
|
|
"skillCP36":skill36Cost,
|
|
"skillCP37":skill37Cost,
|
|
"skillCP38":skill38Cost,
|
|
"skillCP39":skill39Cost,
|
|
"skillCP40":skill40Cost
|
|
});
|
|
});
|
|
});
|
|
|
|
function calculateCombatSkillCost(skillType,numberOfLevels) {
|
|
// Used to calculate costs of general combat skill and familiarities.
|
|
let skillBaseCost=0;
|
|
let skillLevelCost=0;
|
|
|
|
switch (skillType) {
|
|
case "none": skillLevelCost=0;
|
|
skillBaseCost = 0;
|
|
break;
|
|
|
|
case "Fam1": skillLevelCost=0;
|
|
skillBaseCost = 1;
|
|
break;
|
|
|
|
case "Fam2": skillLevelCost=0;
|
|
skillBaseCost = 2;
|
|
break;
|
|
|
|
case "CSL2": skillLevelCost=2;
|
|
skillBaseCost = 0;
|
|
break;
|
|
|
|
case "CSL3": skillLevelCost=3;
|
|
skillBaseCost = 0;
|
|
break;
|
|
|
|
case "CSL5": skillLevelCost=5;
|
|
skillBaseCost = 0;
|
|
break;
|
|
|
|
default: skillLevelCost=0;
|
|
skillBaseCost = 0;
|
|
break;
|
|
}
|
|
|
|
return skillBaseCost+numberOfLevels*skillLevelCost;
|
|
}
|
|
|
|
|
|
/* Language Skills */
|
|
on("change:enhancerLing change:skillFluency41 change:skillLiteracy41 change:skillFluency42 change:skillLiteracy42 change:skillFluency43 change:skillLiteracy43 change:skillFluency44 change:skillLiteracy44 change:skillFluency45 change:skillLiteracy45 change:skillFluency46 change:skillLiteracy46 change:skillFluency47 change:skillLiteracy47 change:skillFluency48 change:skillLiteracy48 change:skillFluency49 change:skillLiteracy49, optionLiteracyCostsPoints", function () {
|
|
// Language skills are relatively simple without levels or roll calculations. The linguist enhancer is the only complication.
|
|
// All calculations handled by the function calculateLanguageSkillCost(...).
|
|
|
|
getAttrs(["enhancerLing", "skillFluency41","skillLiteracy41", "skillFluency42","skillLiteracy42", "skillFluency43","skillLiteracy43", "skillFluency44","skillLiteracy44", "skillFluency45","skillLiteracy45", "skillFluency46","skillLiteracy46", "skillFluency47","skillLiteracy47", "skillFluency48","skillLiteracy48", "skillFluency49","skillLiteracy49","optionLiteracyCostsPoints"], function(values) {
|
|
const linguist = values.enhancerLing;
|
|
let literacyCost = 0;
|
|
|
|
if (values.optionLiteracyCostsPoints!=0) {
|
|
literacyCost = 1;
|
|
}
|
|
|
|
let skill41Cost = calculateLanguageSkillCost( values.skillFluency41 , values.skillLiteracy41, linguist, literacyCost);
|
|
let skill42Cost = calculateLanguageSkillCost( values.skillFluency42 , values.skillLiteracy42, linguist, literacyCost);
|
|
let skill43Cost = calculateLanguageSkillCost( values.skillFluency43 , values.skillLiteracy43, linguist, literacyCost);
|
|
let skill44Cost = calculateLanguageSkillCost( values.skillFluency44 , values.skillLiteracy44, linguist, literacyCost);
|
|
let skill45Cost = calculateLanguageSkillCost( values.skillFluency45 , values.skillLiteracy45, linguist, literacyCost);
|
|
let skill46Cost = calculateLanguageSkillCost( values.skillFluency46 , values.skillLiteracy46, linguist, literacyCost);
|
|
let skill47Cost = calculateLanguageSkillCost( values.skillFluency47 , values.skillLiteracy47, linguist, literacyCost);
|
|
let skill48Cost = calculateLanguageSkillCost( values.skillFluency48 , values.skillLiteracy48, linguist, literacyCost);
|
|
let skill49Cost = calculateLanguageSkillCost( values.skillFluency49 , values.skillLiteracy49, linguist, literacyCost);
|
|
|
|
let totalLanguageCosts = skill41Cost+skill42Cost+skill43Cost+skill44Cost+skill45Cost+skill46Cost+skill47Cost+skill48Cost+skill49Cost;
|
|
|
|
setAttrs({
|
|
"hiddenLanguageSkillsCost":totalLanguageCosts,
|
|
"skillCP41":skill41Cost,
|
|
"skillCP42":skill42Cost,
|
|
"skillCP43":skill43Cost,
|
|
"skillCP44":skill44Cost,
|
|
"skillCP45":skill45Cost,
|
|
"skillCP46":skill46Cost,
|
|
"skillCP47":skill47Cost,
|
|
"skillCP48":skill48Cost,
|
|
"skillCP49":skill49Cost
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Skill Enhancers and wide-scope noncombat levels */
|
|
on("change:enhancerJack change:enhancerLing change:enhancerSch change:enhancerSci change:enhancerTrav change:enhancerWell change:interactionLevels change:intellectLevels change:agilityLevels change:noncombatLevels change:overallLevels", function () {
|
|
// If any of the enhancers or wide-scope noncombat levels change (anything in the lower right skill block) recalculate their costs.
|
|
// Because enhancers lower the costs of other skills and wide-scope levels change the rolls of other other skills, the
|
|
// non-combat skills 01-30 will have their costs and roll chances recalculated as well.
|
|
|
|
getAttrs(["enhancerJack","enhancerLing","enhancerSch","enhancerSci","enhancerTrav","enhancerWell","interactionLevels","intellectLevels","agilityLevels","noncombatLevels","overallLevels"], function(values) {
|
|
|
|
// Check for purchased enhancers and assign costs of 3 CP for each.
|
|
const enhancerJackStatus=values.enhancerJack;
|
|
const enhancerLingStatus=values.enhancerLing;
|
|
const enhancerSchStatus=values.enhancerSch;
|
|
const enhancerSciStatus=values.enhancerSci;
|
|
const enhancerTravStatus=values.enhancerTrav;
|
|
const enhancerWellStatus=values.enhancerWell;
|
|
let enhancerJackCost = 0;
|
|
let enhancerLingCost = 0;
|
|
let enhancerSchCost = 0;
|
|
let enhancerSciCost = 0;
|
|
let enhancerTravCost = 0;
|
|
let enhancerWellCost = 0;
|
|
|
|
if (enhancerJackStatus!=0) {
|
|
enhancerJackCost = 3;
|
|
}
|
|
if (enhancerLingStatus!=0) {
|
|
enhancerLingCost = 3;
|
|
}
|
|
if (enhancerSchStatus!=0) {
|
|
enhancerSchCost = 3;
|
|
}
|
|
if (enhancerSciStatus!=0) {
|
|
enhancerSciCost = 3;
|
|
}
|
|
if (enhancerTravStatus!=0) {
|
|
enhancerTravCost = 3;
|
|
}
|
|
if (enhancerWellStatus!=0) {
|
|
enhancerWellCost = 3;
|
|
}
|
|
|
|
setAttrs({
|
|
"enhancerJackCP":enhancerJackCost,
|
|
"enhancerLingCP":enhancerLingCost,
|
|
"enhancerSchCP":enhancerSchCost,
|
|
"enhancerSciCP":enhancerSciCost,
|
|
"enhancerWellCP":enhancerWellCost,
|
|
"enhancerTravCP":enhancerTravCost
|
|
});
|
|
|
|
// Calculate costs for each wide-scope non-combat level.
|
|
const interactionSkillLevels=parseInt(values.interactionLevels)||0;
|
|
const intellectSkillLevels=parseInt(values.intellectLevels)||0;
|
|
const agilitySkillLevels=parseInt(values.agilityLevels)||0;
|
|
const noncombatSkillLevels=parseInt(values.noncombatLevels)||0;
|
|
const overallSkillLevels=parseInt(values.overallLevels)||0;
|
|
|
|
let interactionSkillLevelsCost= interactionSkillLevels*4;
|
|
let intellectSkillLevelsCost= intellectSkillLevels*4;
|
|
let agilitySkillLevelsCost= agilitySkillLevels*6;
|
|
let noncombatSkillLevelsCost= noncombatSkillLevels*10;
|
|
let overallSkillLevelsCost= overallSkillLevels*12;
|
|
|
|
setAttrs({
|
|
"interactionLevelsCP":interactionSkillLevelsCost,
|
|
"intellectLevelsCP":intellectSkillLevelsCost,
|
|
"agilityLevelsCP":agilitySkillLevelsCost,
|
|
"noncombatLevelsCP":noncombatSkillLevelsCost,
|
|
"overallLevelsCP":overallSkillLevelsCost
|
|
});
|
|
|
|
skillEnhancersCost = enhancerJackCost+enhancerLingCost+enhancerSchCost+enhancerSciCost+enhancerTravCost+enhancerWellCost;
|
|
skillLevelsCost=interactionSkillLevelsCost+intellectSkillLevelsCost+agilitySkillLevelsCost+noncombatSkillLevelsCost+overallSkillLevelsCost;
|
|
|
|
setAttrs({
|
|
"hiddenEnhancerSkillsCost":skillEnhancersCost+skillLevelsCost,
|
|
});
|
|
|
|
addSkillPoints();
|
|
});
|
|
});
|
|
|
|
/* Martial Skills, which are entered in the Gear Section */
|
|
on("change:martialManeuverCP01 change:martialManeuverCP02 change:martialManeuverCP03 change:martialManeuverCP04 change:martialManeuverCP05 change:martialManeuverCP06", function () {
|
|
// Martial maneuver skills are not dependent on other attributes or skills.
|
|
|
|
getAttrs(["martialManeuverCP01", "martialManeuverCP02","martialManeuverCP03", "martialManeuverCP04","martialManeuverCP05", "martialManeuverCP06"], function(values) {
|
|
|
|
let martialManeuver01Cost = parseInt(values.martialManeuverCP01)||0;
|
|
let martialManeuver02Cost = parseInt(values.martialManeuverCP02)||0;
|
|
let martialManeuver03Cost = parseInt(values.martialManeuverCP03)||0;
|
|
let martialManeuver04Cost = parseInt(values.martialManeuverCP04)||0;
|
|
let martialManeuver05Cost = parseInt(values.martialManeuverCP05)||0;
|
|
let martialManeuver06Cost = parseInt(values.martialManeuverCP06)||0;
|
|
|
|
let totalMartialManeuversCost = martialManeuver01Cost+martialManeuver02Cost+martialManeuver03Cost+martialManeuver04Cost+martialManeuver05Cost+martialManeuver06Cost;
|
|
|
|
setAttrs({
|
|
"hiddenMartialSkillsCost":totalMartialManeuversCost
|
|
});
|
|
});
|
|
});
|
|
|
|
/* -------------------------------------------------- */
|
|
/* Functions used for gear tab */
|
|
/* -------------------------------------------------- */
|
|
|
|
/* Calculate weapon endurance costs */
|
|
on("change:optionSuperHeroicEndurance change:weaponStrength01 change:weaponStrength02 change:weaponStrength03 change:weaponStrength04 change:weaponStrength05", function() {
|
|
getAttrs(["optionSuperHeroicEndurance", "weaponStrength01","weaponStrength02","weaponStrength03","weaponStrength04","weaponStrength05"], function(values) {
|
|
// If optionSuperHeroicEndurance is true, endurance cost is 1 per 5 strength, otherwise it is 1 per 10 strenght used.
|
|
|
|
optionSuperHeroic = values.optionSuperHeroicEndurance;
|
|
let enduranceCostFactor = 10;
|
|
|
|
if (optionSuperHeroic != 0) {
|
|
enduranceCostFactor=5;
|
|
}
|
|
|
|
let enduranceCost01= heroRoundLow( (parseInt(values.weaponStrength01)||0)/enduranceCostFactor );
|
|
if ( (enduranceCost01<1) && (parseInt(values.weaponStrength01)||0)>0) {
|
|
enduranceCost01=1
|
|
}
|
|
|
|
let enduranceCost02= heroRoundLow( (parseInt(values.weaponStrength02)||0)/enduranceCostFactor );
|
|
if ( (enduranceCost02<1) && (parseInt(values.weaponStrength02)||0)>0) {
|
|
enduranceCost02=1
|
|
}
|
|
|
|
let enduranceCost03= heroRoundLow( (parseInt(values.weaponStrength03)||0)/enduranceCostFactor );
|
|
if ( (enduranceCost03<1) && (parseInt(values.weaponStrength03)||0)>0) {
|
|
enduranceCost03=1
|
|
}
|
|
|
|
let enduranceCost04= heroRoundLow( (parseInt(values.weaponStrength04)||0)/enduranceCostFactor );
|
|
if ( (enduranceCost04<1) && (parseInt(values.weaponStrength04)||0)>0) {
|
|
enduranceCost04=1
|
|
}
|
|
|
|
let enduranceCost05= heroRoundLow( (parseInt(values.weaponStrength05)||0)/enduranceCostFactor );
|
|
if ( (enduranceCost05<1) && (parseInt(values.weaponStrength05)||0)>0) {
|
|
enduranceCost05=1
|
|
}
|
|
|
|
setAttrs({
|
|
"weaponEndurance01":enduranceCost01,
|
|
"weaponEndurance02":enduranceCost02,
|
|
"weaponEndurance03":enduranceCost03,
|
|
"weaponEndurance04":enduranceCost04,
|
|
"weaponEndurance05":enduranceCost05
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Gear Tab sum up equipment weight */
|
|
on("change:liftWeight change:armorEND01 change:armorEND02 change:armorEND03 change:armorEND04 change:armorMass01 change:armorMass01 change:armorMass02 change:armorMass03 change:armorMass04 change:shieldMass change:weaponMass01 change:weaponMass02 change:weaponMass03 change:weaponMass04 change:weaponMass05 change:equipMass01 change:equipMass02 change:equipMass03 change:equipMass04 change:equipMass05 change:equipMass06 change:equipMass07 change:equipMass08 change:equipMass09 change:equipMass10 change:equipMass11 change:equipMass12 change:equipMass13 change:equipMass14 change:equipMass15 change:equipMass16", function () {
|
|
// Add the masses of all items of equipment.
|
|
// Determine END used per turn, DCV/DEX roll penalty, and Movement Penalty.
|
|
|
|
getAttrs(["liftWeight","armorEND01","armorEND02","armorEND03","armorEND04","armorMass01","armorMass02","armorMass03","armorMass04","shieldMass", "weaponMass01", "weaponMass02", "weaponMass03", "weaponMass04", "weaponMass05", "equipMass01", "equipMass02", "equipMass03", "equipMass04", "equipMass05", "equipMass06", "equipMass07", "equipMass08", "equipMass09", "equipMass10", "equipMass11", "equipMass12", "equipMass13", "equipMass14", "equipMass15", "equipMass16"], function(values) {
|
|
|
|
// Add up carried mass
|
|
armorCarried=(parseFloat(values.armorMass01)||0)+(parseFloat(values.armorMass02)||0)+(parseFloat(values.armorMass03)||0)+(parseFloat(values.armorMass04)||0)+(parseFloat(values.shieldMass)||0);
|
|
|
|
weaponsCarried=(parseFloat(values.weaponMass01)||0)+(parseFloat(values.weaponMass02)||0)+(parseFloat(values.weaponMass03)||0)+(parseFloat(values.weaponMass04)||0)+(parseFloat(values.weaponMass05)||0);
|
|
|
|
equipmentCarried=(parseFloat(values.equipMass01)||0)+(parseFloat(values.equipMass02)||0)+(parseFloat(values.equipMass03)||0)+(parseFloat(values.equipMass04)||0)+(parseFloat(values.equipMass05)||0)+(parseFloat(values.equipMass06)||0)+(parseFloat(values.equipMass07)||0)+(parseFloat(values.equipMass08)||0)+(parseFloat(values.equipMass09)||0)+(parseFloat(values.equipMass10)||0)+(parseFloat(values.equipMass11)||0)+(parseFloat(values.equipMass12)||0)+(parseFloat(values.equipMass13)||0)+(parseFloat(values.equipMass14)||0)+(parseFloat(values.equipMass15)||0)+(parseFloat(values.equipMass16)||0);
|
|
|
|
carriedWeight=armorCarried+weaponsCarried+equipmentCarried;
|
|
carriedWeight=Math.floor(10*carriedWeight)/10;
|
|
|
|
|
|
// Determine penalties
|
|
const lift=(parseFloat(values.liftWeight)||0);
|
|
const armorENDcost = (parseInt(values.armorEND01)||0)+(parseInt(values.armorEND02)||0)+(parseInt(values.armorEND03)||0)+(parseInt(values.armorEND04)||0);
|
|
let enduranceCost=0;
|
|
let dexPenalty=0;
|
|
let movePenalty=0;
|
|
|
|
if (carriedWeight<=lift*0.1) {
|
|
dexPenalty=0;
|
|
enduranceCost=0+armorENDcost;
|
|
movePenalty=0;
|
|
} else if (carriedWeight<=lift*0.24) {
|
|
dexPenalty=-1;
|
|
enduranceCost=0+armorENDcost;
|
|
movePenalty=0;
|
|
} else if (carriedWeight<=lift*0.49) {
|
|
dexPenalty=-2;
|
|
enduranceCost=1+armorENDcost;
|
|
movePenalty=-2;
|
|
} else if (carriedWeight<=lift*0.74) {
|
|
dexPenalty=-3;
|
|
enduranceCost=2+armorENDcost;
|
|
movePenalty=-4;
|
|
} else if (carriedWeight<=lift*0.89) {
|
|
dexPenalty=-4;
|
|
enduranceCost=3+armorENDcost;
|
|
movePenalty=-8;
|
|
} else {
|
|
dexPenalty=-5;
|
|
enduranceCost=4+armorENDcost;
|
|
movePenalty=-16;
|
|
}
|
|
|
|
setAttrs({
|
|
"carriedWeight":carriedWeight,
|
|
"weightEndPenalty":enduranceCost,
|
|
"weightDexDCVPenalty":dexPenalty,
|
|
"weightMovePenalty":movePenalty
|
|
});
|
|
});
|
|
});
|
|
|
|
// Open with first tab (thanks to GiGs)
|
|
on("sheet:opened", function() {
|
|
setAttrs({sheetTab:"characteristics"});
|
|
});
|
|
|
|
/* ----------------------------------------- */
|
|
/* --- Normal Damage attack roll helpers --- */
|
|
/* ----------------------------------------- */
|
|
|
|
on('clicked:standardAttackRoll', (info) => {
|
|
startRoll("&{template:custom-normal-attack} {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with Strength @{strength}}} {{Attack with OCV=[[@{ocv}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{STUN=[[(@{strength}/5)d6]]}}", (results) => {
|
|
let computed =0;
|
|
const theDice = results.results.STUN.dice;
|
|
for (let element of theDice) {
|
|
if (element === 1) {
|
|
computed = computed+0;
|
|
} else if (element === 6) {
|
|
computed = computed+2;
|
|
} else {
|
|
computed = computed+1;
|
|
}
|
|
}
|
|
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
STUN: computed
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
on('clicked:attackShield', (info) => {
|
|
startRoll("&{template:custom-normal-attack} {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with a @{shieldName}}} {{attack with OCV =[[@{ocv}-@{shieldDCV}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{STUN=[[@{shieldDamage}]]}}", (results) => {
|
|
let computed =0;
|
|
const theDice = results.results.STUN.dice;
|
|
for (let element of theDice) {
|
|
if (element === 1) {
|
|
computed = computed+0;
|
|
} else if (element === 6) {
|
|
computed = computed+2;
|
|
} else {
|
|
computed = computed+1;
|
|
}
|
|
}
|
|
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
STUN: computed
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
on('clicked:attackWeapon05', (info) => {
|
|
startRoll("&{template:custom-normal-attack} {{title=@{character_name} - @{character_title}}} {{subtitle= Attacks with @{weaponName05}}} {{Attack with OCV=[[@{ocv}+@{weaponOCV05}+?{Modifiers|0}]]}} {{Result=[[3d6cf<0cs>0]]}} {{STUN=[[@{weaponDamage05}]]}}", (results) => {
|
|
let computed =0;
|
|
const theDice = results.results.STUN.dice;
|
|
for (let element of theDice) {
|
|
if (element === 1) {
|
|
computed = computed+0;
|
|
} else if (element === 6) {
|
|
computed = computed+2;
|
|
} else {
|
|
computed = computed+1;
|
|
}
|
|
}
|
|
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
STUN: computed
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
// End sheet workers
|
|
|
|
</script>
|