mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
11704 lines
605 KiB
HTML
11704 lines
605 KiB
HTML
<div class="overall-wrapper">
|
||
|
||
<div class="theme">
|
||
<input type="radio" class="theme" name="attr_theme" value="1" checked /> <!-- Red -->
|
||
<input type="radio" class="theme" name="attr_theme" value="2" /> <!-- Orange -->
|
||
<input type="radio" class="theme" name="attr_theme" value="3" /> <!-- Yellow -->
|
||
<input type="radio" class="theme" name="attr_theme" value="4" /> <!-- Green -->
|
||
<input type="radio" class="theme" name="attr_theme" value="5" /> <!-- Blue -->
|
||
<input type="radio" class="theme" name="attr_theme" value="6" /> <!-- Purple -->
|
||
<input type="radio" class="theme" name="attr_theme" value="7" /> <!-- Grey -->
|
||
<input type="radio" class="theme" name="attr_theme" value="8" /> <!-- Dark -->
|
||
<input type="radio" class="theme" name="attr_theme" value="9" /> <!-- Light -->
|
||
|
||
<div class="header"><h3 class="center" style="color: white;">Character Sheet</h3>
|
||
<div class="padt padb">
|
||
<div class="row padb">
|
||
<div class="col-9-12"></div>
|
||
|
||
<h5 style="float: right;" class="col-1-24">
|
||
<div>
|
||
<input type="checkbox" name="attr_sheetoptions" class="ro-checkbox" /><span class="ro-label">y</span>
|
||
<div class="ro-modal">
|
||
<div class="border">
|
||
<div class="ro-close-wrapper">
|
||
<input type="checkbox" name="attr_sheetoptions" class="ro-close-checkbox" value="1" />
|
||
<span class="ro-close-label"></span>
|
||
</div>
|
||
<div class="row ro-header padb">
|
||
<div class="col-9-10">
|
||
<div class="row padt padb"><h3 class="col-1 center border"><span>Sheet Options</span></h3></div>
|
||
<div class="row center padb">
|
||
<div class="col-1-5 padr"><h4 class="center border"><span>Sheet Version
|
||
<input type="text" class="center" name="attr_version" value="1.3.0" readonly />
|
||
</span></h4></div>
|
||
<div class="col-1-5 padr"><h4 class="center border"><span>Sheet Type
|
||
<select class="border"><option value="Sheet">Character</option><!--<option value="NPC Sheet">NPC</option><option value="Thing Sheet">Thing</option><option value="GM Sheet">GM</option>--></select>
|
||
</span></h4></div>
|
||
<div class="col-1-5 padr"><h4 class="center border"><span name="attr_label_class">Pronoun
|
||
<input type="text" class="center" name="attr_pronoun" value="their" />
|
||
</span></h4></div>
|
||
<div class="col-1-5 padr"><h4 class="center border"><span name="attr_label_class">Theme
|
||
<select name="attr_theme"><option value="1">Red</option><option value="2">Orange</option><option value="3">Yellow</option><option value="4">Green</option><option value="5">Blue</option><option value="6">Purple</option><option value="7">Grey</option><option value="8">Dark</option><option value="9">Light</option></select>
|
||
</span></h4></div>
|
||
<div class="col-1-5"><h4 class="center border"><span name="attr_label_class">Debug
|
||
<select name="attr_show_debug_messages"><option value="0">False</option><option value="1">True</option></select>
|
||
</span></h4></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h5>
|
||
|
||
<h5 style="float: right;" class="col-1-24">
|
||
<div>
|
||
<input type="checkbox" name="attr_templatemanagement" class="ro-checkbox" /><span class="template-label">o</span>
|
||
<div class="ro-modal padl padr">
|
||
<div class="border">
|
||
<div class="ro-close-wrapper">
|
||
<input type="checkbox" name="attr_templatemanagement" class="ro-close-checkbox" value="1" />
|
||
<span class="ro-close-label"></span>
|
||
</div>
|
||
<div class="row padb">
|
||
<h3 class="col-9-23 templates-title center border"><span>Size Template</span></h3>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<div class="template-size">
|
||
<div class="col-4-5 center">
|
||
<h4 class="border center">
|
||
<fieldset class="repeating_sizetemplate">
|
||
<div class="row">
|
||
<input type="radio" class="templateradio" name="attr_selection" value="0" checked />
|
||
<div class="col-1-12"><input type="radio" name="attr_selection" value="1" /></div>
|
||
<div class="col-11-12 padr tooltip"><input type="text" name="attr_label" value="" readonly /><span class="tooltip"><textarea class="tooltip" name="attr_description" value="" readonly ></textarea></span></div>
|
||
</div>
|
||
</fieldset>
|
||
<input type="hidden" name="attr_static_template_size_selection" value="" />
|
||
<input type="hidden" name="attr_static_template_size_name" value="Select" />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h5>
|
||
|
||
<h5 style="float: right;" class="col-1-24">
|
||
<div>
|
||
<input type="checkbox" name="attr_cpmanagement" class="ro-checkbox" /><span class="ro-label">x</span>
|
||
<div class="ro-modal">
|
||
<div class="border">
|
||
<div class="ro-close-wrapper">
|
||
<input type="checkbox" name="attr_cpmanagement" class="ro-close-checkbox" value="1" />
|
||
<span class="ro-close-label"></span>
|
||
</div>
|
||
<div class="ro-header padb">
|
||
<div class="col-6-11">
|
||
<div class="row padt padb"><h3 class="col-1 center border"><span>Character Point Management</span></h3></div>
|
||
<div class="row center">
|
||
<div class="col-1-4 padr"><h4 class="center border"><span name="attr_label_class">Base
|
||
<input type="number" name="attr_basecp" value=0 />
|
||
</span></h4></div>
|
||
<div class="col-1-4 padr"><h4 class="center border"><span name="attr_label_class">Gained
|
||
<input type="number" name="attr_gainedcp" value=0 />
|
||
</span></h4></div>
|
||
<div class="col-1-4 padr"><h4 class="center border"><span name="attr_label_class">Spent
|
||
<input type="number" name="attr_cpspent" value="(@{stat_cost_body}+@{stat_cost_mind}+@{stat_cost_soul}+@{static_attrgroup_1_totalcost}+@{static_attrgroup_2_totalcost}+@{static_attrgroup_3_totalcost}+@{static_attrgroup_4_totalcost}+@{static_attrgroup_5_totalcost}+@{static_attrgroup_6_totalcost}+@{static_attrgroup_7_totalcost}+@{static_attrgroup_8_totalcost}+@{static_attrgroup_9_totalcost}+@{static_attrgroup_10_totalcost})" disabled />
|
||
</span></h4></div>
|
||
<div class="col-1-4"><h4 class="center border"><span name="attr_label_class">Remaining
|
||
<input type="number" name="attr_cpremaining" value="@{basecp}+@{gainedcp}-@{cpspent}" disabled />
|
||
</span></h4></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h5>
|
||
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-3 padl padr"><h4 class="center border"><span>Character Name
|
||
<input type="text" class="center border" name="attr_charactername" placeholder="Character Name" value="" />
|
||
</span></h4></div>
|
||
<div class="col-1-6 padl"><h4 class="center border"><span name="attr_label_totalcp">Total CP
|
||
<input type="text" class="center border" name="attr_totalcp" value="@{basecp}+@{gainedcp}" disabled />
|
||
</span></h4></div>
|
||
<div class="col-1-6 padl"><h4 class="center border"><span name="attr_label_race">Race
|
||
<input type="text" class="center border" name="attr_race" placeholder="Human" value="" />
|
||
</span></h4></div>
|
||
<div class="col-1-6 padl"><h4 class="center border"><span name="attr_label_class">Class
|
||
<input type="text" class="center border" name="attr_class" placeholder="None" value="" />
|
||
</span></h4></div>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-3 padl padr"><h4 class="center border"><span>Player Name
|
||
<input type="text" class="center border" name="attr_playername" placeholder="Player Name" value="" />
|
||
</span></h4></div>
|
||
<div class="col-1-6 padl"><h4 class="center border"><span name="attr_label_size">Size
|
||
<input type="text" class="center border" name="attr_size" value="Medium" readonly />
|
||
</span></h4></div>
|
||
<div class="col-1-6 padl"><h4 class="center border"><span name="attr_label_height">Height
|
||
<input type="text" class="center border" name="attr_height" value="" />
|
||
</span></h4></div>
|
||
<div class="col-1-6 padl"><h4 class="center border"><span name="attr_label_mass">Mass
|
||
<input type="text" class="center border" name="attr_mass" value="" />
|
||
</span></h4></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<span class="spacer"></span>
|
||
<div class="col-1-10"></div>
|
||
<input type="radio" name="attr_tab" class="tab tab1" value="1" title="Stats" />
|
||
<span class="tab tab1">Screen</span>
|
||
<input type="radio" name="attr_tab" class="tab tab2" value="2" />
|
||
<span class="tab tab2">Stats</span>
|
||
<input type="radio" name="attr_tab" class="tab tab3" value="3" />
|
||
<span class="tab tab3">Attributes</span>
|
||
<input type="radio" name="attr_tab" class="tab tab4" value="4" />
|
||
<span class="tab tab4">Skills</span>
|
||
<input type="radio" name="attr_tab" class="tab tab5" value="5" />
|
||
<span class="tab tab5">Trappings</span>
|
||
<input type="radio" name="attr_tab" class="tab tab99" value="99" checked="checked" />
|
||
<span class="tab tab99">Show All</span>
|
||
<span class="spacer"></span>
|
||
|
||
<div class="section-screen header"><h3 class="center" style="color: white;">Player Screen</h3>
|
||
<div class="row padt">
|
||
<div class="col-1-3">
|
||
<div class="row">
|
||
<div class="col-5-6 padb"><span class="col-1 header border">Status</span></div>
|
||
|
||
<div class="row padb">
|
||
<div class="col-5-6">
|
||
<h4 class="center border">
|
||
<span>
|
||
<div style="padding-top: 5px;" class="row">
|
||
<input type="hidden" name="attr_wounds" value=0 />
|
||
<div class="col-1 container">
|
||
<input type="hidden" value=10 name="attr_health" class="hidden health" readonly />
|
||
<div class="health"></div>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<div class="padb"></div>
|
||
<span style="font-weight: normal;">
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-3-10">Wounds<input type="number" class="border" name="attr_static_stat_total_wounds" value=0 /></div>
|
||
<div class="flex-3-10">Health<input type="number" class="border" name="attr_stat_total_health" value=0 readonly /></div>
|
||
<div class="flex-3-10">Temp<input type="number" class="border" name="attr_static_stat_temp_health" value=0 /></div>
|
||
<input type="hidden" name="attr_stat_adj_health" value=0 />
|
||
</div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<div class="col-5-6">
|
||
<h4 class="center border">
|
||
<span>
|
||
<div class="row">
|
||
<input type="hidden" name="attr_fatigue" value=0 />
|
||
<div class="col-1 container">
|
||
<input type="hidden" value=10 name="attr_energy" class="hidden energyspent" readonly />
|
||
<div class="energyspent"></div>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<div class="padb"></div>
|
||
<span style="font-weight: normal;">
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-3-10">Fatigue<input type="number" class="border" name="attr_static_stat_total_fatigue" value=0 /></div>
|
||
<div class="flex-3-10">Energy<input type="number" class="border" name="attr_stat_total_energy" value=0 readonly /></div>
|
||
<div class="flex-3-10">Temp<input type="number" class="border" name="attr_static_stat_temp_energy" value=0 /></div>
|
||
<input type="hidden" name="attr_stat_adj_energy" value=0 />
|
||
</div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<div class="col-5-6">
|
||
<h4 class="center border">
|
||
<span>
|
||
<div class="row">
|
||
<input type="hidden" name="attr_maddness" value=0 />
|
||
<div class="col-1 container">
|
||
<input type="hidden" value=10 name="attr_sanity" class="hidden sanity" readonly />
|
||
<div class="sanity"></div>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<div class="padb"></div>
|
||
<span style="font-weight: normal;">
|
||
<div class="flex-container-spacearound">
|
||
<div class="flex-9-20">Maddness<input type="number" class="border" name="attr_static_stat_total_maddness" value=0 /></div>
|
||
<div class="flex-9-20">Sanity<input type="number" class="border" name="attr_stat_total_sanity" value=0 readonly /></div>
|
||
<input type="hidden" name="attr_stat_adj_sanity" value=0 />
|
||
</div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<div class="col-5-6">
|
||
<h4 class="center border">
|
||
<span>
|
||
<div class="row">
|
||
<input type="hidden" name="attr_shame" value=0 />
|
||
<div class="col-1 container">
|
||
<input type="hidden" value=10 name="attr_social" class="hidden social" readonly />
|
||
<div class="social"></div>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<div class="padb"></div>
|
||
<span style="font-weight: normal;">
|
||
<div class="flex-container-spacearound">
|
||
<div class="flex-9-20 padr">Shame<input type="number" class="border" name="attr_static_stat_total_shame" value=0 /></div>
|
||
<div class="flex-9-20 padl">Society<input type="number" class="border" name="attr_stat_total_social" value=0 readonly /></div>
|
||
<input type="hidden" name="attr_stat_adj_social" value=0 />
|
||
</div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-1-3 padr">
|
||
<div class="row padb">
|
||
<div class="col-1 padb"><span class="col-1 header border">Conditions</span></div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_bleedingstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_bleeding">
|
||
<span name="attr_bleeding_label"></span>
|
||
<input type="hidden" name="attr_bleeding_label" value="Bleeding" />
|
||
</div>
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_fracturedstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_fractured">
|
||
<span name="attr_fractured_label"></span>
|
||
<input type="hidden" name="attr_fractured_label" value="Fractured" />
|
||
</div>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_blindedstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_blinded">
|
||
<span name="attr_blinded_label"></span>
|
||
<input type="hidden" name="attr_blinded_label" value="Blinded" />
|
||
</div>
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_incurablestate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_incurable">
|
||
<span name="attr_incurable_label"></span>
|
||
<input type="hidden" name="attr_incurable_label" value="Incurable" />
|
||
</div>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_contagiousstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_contagious">
|
||
<span name="attr_contagious_label"></span>
|
||
<input type="hidden" name="attr_contagious_label" value="Contagious" />
|
||
</div>
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_pronestate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_prone">
|
||
<span name="attr_prone_label"></span>
|
||
<input type="hidden" name="attr_prone_label" value="Prone" />
|
||
</div>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_continuingstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_continuing">
|
||
<span name="attr_continuing_label"></span>
|
||
<input type="hidden" name="attr_continuing_label" value="Continuing" />
|
||
</div>
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_stunnedstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_stunned">
|
||
<span name="attr_stunned_label"></span>
|
||
<input type="hidden" name="attr_stunned_label" value="Stunned" />
|
||
</div>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_deadstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_dead">
|
||
<span name="attr_dead_label"></span>
|
||
<input type="hidden" name="attr_dead_label" value="Dead" />
|
||
</div>
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_tangledstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_tangled">
|
||
<span name="attr_tangled_label"></span>
|
||
<input type="hidden" name="attr_tangled_label" value="Tangled" />
|
||
</div>
|
||
</div>
|
||
<div class="row padb">
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_drainedstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_drained">
|
||
<span name="attr_drained_label"></span>
|
||
<input type="hidden" name="attr_drained_label" value="Drained" />
|
||
</div>
|
||
<div class="col-1-2">
|
||
<input type="checkbox" class="condition" name="attr_unconsciousstate" value="1" />
|
||
<button type="action" class="condition" name="act_static_button_stat_unconscious">
|
||
<span name="attr_unconscious_label"></span>
|
||
<input type="hidden" name="attr_unconscious_label" value="Unconscious" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-1-3 padr">
|
||
<div class="row center padb">
|
||
<div class="col-5-6"><span class="col-1 header border">Protection Layers</span></div>
|
||
</div>
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_forcefield_state" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_forcefield_source" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_forcefield_limiteddefense" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_forcefield_limitedcoverage" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_forcefield_limiteddamtype" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_forcefield_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_forcefield_name"></span>
|
||
<input type="hidden" name="attr_protection_forcefield_name" value="Forcefield" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_forcefield_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_shield_state" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_shield_source" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_shield_dcv" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_shield_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_shield_name"></span>
|
||
<input type="hidden" name="attr_protection_shield_name" value="Shield" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_shield_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor1_source" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor1_specialized" value="0" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor1_gap" value="0" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor1_damagetype" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_armor1_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_armor1_name"></span>
|
||
<input type="hidden" name="attr_protection_armor1_name" value="Armor, Primary" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_armor1_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor2_source" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor2_specialized" value="0" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor2_gap" value="0" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor2_damagetype" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_armor2_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_armor2_name"></span>
|
||
<input type="hidden" name="attr_protection_armor2_name" value="Armor, Secondary" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_armor2_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor3_source" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor3_specialized" value="0" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor3_gap" value="0" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_armor3_damagetype" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_armor3_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_armor3_name"></span>
|
||
<input type="hidden" name="attr_protection_armor3_name" value="Armor, Tracheary" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_armor3_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_mindshield_state" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_mindshield_source" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_mindshield_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_mindshield_name"></span>
|
||
<input type="hidden" name="attr_protection_mindshield_name" value="Mind Shield" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_mindshield_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_absorption1_state" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_absorption1_source" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_absorption1_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_absorption1_name"></span>
|
||
<input type="hidden" name="attr_protection_absorption1_name" value="Absorption, Health" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_absorption1_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<input type="hidden" class="protectionstate" name="attr_protection_absorption2_state" value="" />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_absorption2_source" value="" />
|
||
<div class="col-5-6">
|
||
<input type="checkbox" class="protectionstate" name="attr_protection_absorption2_state" value="1" />
|
||
<h4 class="center border protection">
|
||
<div class="col-12-17">
|
||
<span class="protection" name="attr_protection_absorption2_name"></span>
|
||
<input type="hidden" name="attr_protection_absorption2_name" value="Absorption, Energy" />
|
||
</div>
|
||
<div class="col-1-4">
|
||
<input type="text" class="protection" name="attr_protection_absorption2_ar" value="0" readonly />
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" class="protectionstate" name="attr_protection_conversion_ar" value=0 />
|
||
<input type="hidden" class="protectionstate" name="attr_protection_conversion_escalate" value=0 />
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padt padb"></div>
|
||
|
||
<div class="row padt padb">
|
||
<div class="col-1-2 padr">
|
||
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-9-10"><span class="col-1 border">Armed Weapon</span></div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-9-10">
|
||
<h4 class="center border">
|
||
<span style="font-weight: normal;" name="attr_label_maneuver">Maneuver
|
||
<div class="flex-container-evenlyspace">
|
||
<div class='flex-1-8'></div>
|
||
<div class="flex-7-10">
|
||
<select class="border" name="attr_static_activity_maneuver_name">
|
||
<option value=""></option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Offense</option>
|
||
<option value="attack">Attack</option>
|
||
<option value="bite">Bite</option>
|
||
<option value="bypass armor">Bypass Armor</option>
|
||
<option value="disarm">Disarm</option>
|
||
<option value="grab">Grab</option>
|
||
<option value="lock">Lock</option>
|
||
<option value="pin">Pin</option>
|
||
<option value="reduce armor">Reduce Armor</option>
|
||
<option value="throw">Throw</option>
|
||
<option value="vital spot">Vital Spot</option>
|
||
<option value="weak point">Weak Point</option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Defense</option>
|
||
<option value="defend">Defend</option>
|
||
<option value="defend other">Defend Other</option>
|
||
<option value="does nothing">Do Nothing</option>
|
||
<option value="escape">Escape</option>
|
||
</select>
|
||
</div>
|
||
<div class="flex-1-24">
|
||
<button type="roll" class="border d6button" name="roll_maneuver" value='@{maneuverroll}'>
|
||
<input type='hidden' name='attr_maneuverroll' value='' />
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='flex-container padb'>
|
||
<div class='flex-grow'></div>
|
||
<div class='flex-9-10'>
|
||
<h4 class='border'>
|
||
<div class='flex-container-evenlyspace'>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_enable_enemyattack" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<span class='targeted-inactive pictos-custom'>[</span>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_targeted_attack" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_targeted_attack">
|
||
<span class="targeted-attack-deactivated pictos-custom">[</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_targeted_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_targeted_attack">
|
||
<span class="theme-red targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-orange targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-yellow targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-green targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-blue targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-purple targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-grey targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-dark targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-light targeted-attack-active pictos-custom">[</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_enable_enemydefense" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<span class='targeted-inactive pictos-custom'>e</span>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_targeted_defense" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_targeted_defense">
|
||
<span class="targeted-defense-deactivated pictos-custom">e</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_targeted_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_targeted_defense">
|
||
<span class="theme-red targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-orange targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-yellow targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-green targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-blue targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-purple targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-grey targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-dark targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-light targeted-defense-active pictos-custom">e</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_enable_massivedamage" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<span class='targeted-inactive pictos-custom'>t</span>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_targeted_damage" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_targeted_damage">
|
||
<span class="targeted-damage-deactivated pictos-custom">t</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_targeted_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_targeted_damage">
|
||
<span class="theme-red targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-orange targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-yellow targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-green targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-blue targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-purple targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-grey targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-dark targeted-damage-active pictos-custom">t</span>
|
||
<span class="theme-light targeted-damage-active pictos-custom">t</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
<div class='flex-grow'></div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-1-5 padl"><h4 class="center border"><span name="attr_label_actions">Actions
|
||
<input type="text" class="center border" name="attr_actions" value="1" readonly /></span></h4></div>
|
||
<div class="flex-1-5"><h4 class="center border"><span name="attr_label_defenses">Defenses
|
||
<input type="text" class="center border" name="attr_defenses" value="0" readonly /></span></h4></div>
|
||
<div class="flex-1-2 padr"><h4 class="center border"><span name="attr_label_actionturns">Actions by Initiative
|
||
<input type="text" class="center border" name="attr_actionsbyinitiative" value="" readonly /></span></h4></div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb padt">
|
||
<div class="flex-8-9"><span class="col-1 header border">Weapon Selection</span></div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-8-9">
|
||
<input type="checkbox" class="weapon" name="attr_mainhand_state" value="1" />
|
||
<button type="action" class="border weapon" name="act_static_button_mainhand_armedstate">
|
||
<span style="font-weight: normal;" name="attr_mainhand_label">Main Hand
|
||
<div class="flex-container-spacearound padb">
|
||
<div class="flex-1 border" style="background: white;"><span style="width: 90%;" name="attr_mainhand_name"></span></div>
|
||
<input type="hidden" name="attr_mainhand_name" value="Unarmed" readonly />
|
||
<input type="hidden" name="attr_mainhand_source" value="" readonly />
|
||
</div>
|
||
</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-8-9">
|
||
<input type="checkbox" class="weapon" name="attr_offhand_state" value="1" />
|
||
<button type="action" class="border weapon" name="act_static_button_offhand_armedstate">
|
||
<span style="font-weight: normal;" name="attr_offhand_label">Off-Hand
|
||
<div class="flex-container-spacearound padb">
|
||
<div class="flex-1 border" style="background: white;"><span style="width: 90%;" name="attr_offhand_name"></span></div>
|
||
<input type="hidden" name="attr_offhand_name" value="Unarmed" readonly />
|
||
<input type="hidden" name="attr_offhand_source" value="" readonly />
|
||
</div>
|
||
</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<fieldset class="repeating_extraarm">
|
||
<div class="row">
|
||
<div class="col-8-9 theme">
|
||
<input type="checkbox" class="weapon" name="attr_state" value="1" />
|
||
<button type="action" class="border weapon" name="act_armedstate">
|
||
<span>
|
||
<span style="font-weight: normal; color: black;" name="attr_label"></span>
|
||
<div class="row padb">
|
||
<div class="col-1 border" style="background: white;">
|
||
<span style="width: 90%; color: black;" name="attr_name"></span>
|
||
</div>
|
||
<input type="hidden" class="center" name="attr_name" value="Unarmed" readonly />
|
||
<input type="hidden" name="attr_label" value="Extra Arm" />
|
||
<input type="hidden" name="attr_type" value=1 />
|
||
<input type="hidden" name="attr_source" value="" />
|
||
</div>
|
||
</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
|
||
<div class="col-1-2 padl">
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-9-10"><span class="col-1 border">Rolls</span></div>
|
||
</div>
|
||
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-9-10">
|
||
<h4 class='center border'><span name="attr_label_rolls">Roll
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-1-8"><input class="center border" type="text" name="attr_dynamic_roll_base" value="0" readonly /></div>
|
||
<div class="flex-7-10"><select class="border" name="attr_static_roll_type_selection"><option value="2d6">2d6</option><option value="acv">ACV</option><option value="dcv">DCV</option><option value="initiative">Initiative</option><option value="perception">Perception</option><option value="stat">Stat</option></select></div>
|
||
<div class="flex-1-24"><button class="button d6button" type="roll" name="roll_dynamicrolls" value="@{dynamic_roll_value}"></button><input type="hidden" name="attr_dynamic_roll_value" value="" readonly /></div>
|
||
</div>
|
||
</span></h4>
|
||
</div>
|
||
</div>
|
||
|
||
<input type="radio" name="attr_rolltab" class="rolltab rolltab1" value="1" readonly /><span></span>
|
||
<input type="radio" name="attr_rolltab" class="rolltab rolltab2" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_rolltab" class="rolltab rolltab3" value="3" readonly /><span></span>
|
||
<input type="radio" name="attr_rolltab" class="rolltab rolltab4" value="4" readonly /><span></span>
|
||
<input type="radio" name="attr_rolltab" class="rolltab rolltab5" value="5" readonly /><span></span>
|
||
<input type="radio" name="attr_rolltab" class="rolltab rolltab6" value="6" readonly /><span></span>
|
||
|
||
<div class="tab-content rolltab1"></div>
|
||
|
||
<div class="tab-content rolltab2">
|
||
<div class='flex-container padb'>
|
||
<div class='flex-grow'></div>
|
||
<div class='flex-9-10'>
|
||
<h4 class='border'>
|
||
<div class='flex-container-evenlyspace'>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_enable_enemyattack" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<span class='targeted-inactive pictos-custom'>[</span>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_targeted_attack" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_targeted_attack">
|
||
<span class="targeted-attack-deactivated pictos-custom">[</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_targeted_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_targeted_attack">
|
||
<span class="theme-red targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-orange targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-yellow targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-green targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-blue targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-purple targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-grey targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-dark targeted-attack-active pictos-custom">[</span>
|
||
<span class="theme-light targeted-attack-active pictos-custom">[</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
<div class='flex-grow'></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="tab-content rolltab3">
|
||
<div class='flex-container padb'>
|
||
<div class='flex-grow'></div>
|
||
<div class='flex-9-10'>
|
||
<h4 class='border'>
|
||
<div class='flex-container-evenlyspace'>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_personal_defense" value="1" checked />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_personal_defense">
|
||
<span class="targeted-attack-deactivated pictos-three">b</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_personal_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_personal_defense">
|
||
<span class="theme-red targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-orange targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-yellow targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-green targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-blue targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-purple targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-grey targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-dark targeted-attack-active pictos-three">b</span>
|
||
<span class="theme-light targeted-attack-active pictos-three">b</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_enable_enemydefense" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<span class='targeted-inactive pictos-custom'>e</span>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_targeted_defense" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_targeted_defense">
|
||
<span class="targeted-defense-deactivated pictos-custom">e</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_targeted_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_targeted_defense">
|
||
<span class="theme-red targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-orange targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-yellow targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-green targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-blue targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-purple targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-grey targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-dark targeted-defense-active pictos-custom">e</span>
|
||
<span class="theme-light targeted-defense-active pictos-custom">e</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='flex-3-10 center'>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_button_movement_defense" value="1" />
|
||
<div class="block-a">
|
||
<div class="padr padl">
|
||
<button type="action" class="targeted" name="act_static_button_movement_defense">
|
||
<span class="targeted-damage-deactivated pictos">;</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="padr padl">
|
||
<input type="hidden" class="targeted" name="attr_static_button_movement_activatetheme" value="1" />
|
||
<button type="action" class="targeted" name="act_static_button_movement_defense">
|
||
<span class="theme-red targeted-damage-active pictos">;</span>
|
||
<span class="theme-orange targeted-damage-active pictos">;</span>
|
||
<span class="theme-yellow targeted-damage-active pictos">;</span>
|
||
<span class="theme-green targeted-damage-active pictos">;</span>
|
||
<span class="theme-blue targeted-damage-active pictos">;</span>
|
||
<span class="theme-purple targeted-damage-active pictos">;</span>
|
||
<span class="theme-grey targeted-damage-active pictos">;</span>
|
||
<span class="theme-dark targeted-damage-active pictos">;</span>
|
||
<span class="theme-light targeted-damage-active pictos">;</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
<div class='flex-grow'></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="tab-content rolltab4"></div>
|
||
|
||
<div class="tab-content rolltab5">
|
||
<div class='flex-container padb'>
|
||
<div class='flex-grow'></div>
|
||
<div class='flex-9-10'>
|
||
<h4 class='border'>
|
||
<div class='flex-container-evenlyspace'>
|
||
|
||
<div class='flex-1-12'>
|
||
<div class='flex-1-24'>
|
||
<div class='flex-container-spacearound'>
|
||
|
||
<input type="radio" name="attr_enhancedsighttab" class="enhancedsighttab enhancedsighttab1" value="0" readonly checked /><span></span>
|
||
<input type="radio" name="attr_enhancedsighttab" class="enhancedsighttab enhancedsighttab2" value="1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsighttab" class="enhancedsighttab enhancedsighttab3" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsighttab" class="enhancedsighttab enhancedsighttab4" value="-1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsighttab" class="enhancedsighttab enhancedsighttab5" value="-2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsighttab" class="enhancedsighttab enhancedsighttab6" value="-3" readonly /><span></span>
|
||
|
||
<div class='flex-1-24'>
|
||
<div><span class='pictos'>E</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsighttab1 flex-1-24'>
|
||
<div></div>
|
||
</div>
|
||
<div class='tab-content enhancedsighttab2 flex-1-24'>
|
||
<div><span class='pictos'>&</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsighttab3 flex-1-24'>
|
||
<div><span class='pictos'>+</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsighttab4 flex-1-24'>
|
||
<div><span class='pictos'>_</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsighttab5 flex-1-24'>
|
||
<div><span class='pictos'>-</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsighttab6 flex-1-24'>
|
||
<div><span class='pictos'>*</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='flex-1-12'>
|
||
<div class='flex-1-24'>
|
||
<div class='flex-container-spacearound'>
|
||
|
||
<input type="radio" name="attr_enhancedhearingtab" class="enhancedhearingtab enhancedhearingtab1" value="0" readonly checked /><span></span>
|
||
<input type="radio" name="attr_enhancedhearingtab" class="enhancedhearingtab enhancedhearingtab2" value="1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedhearingtab" class="enhancedhearingtab enhancedhearingtab3" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedhearingtab" class="enhancedhearingtab enhancedhearingtab4" value="-1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedhearingtab" class="enhancedhearingtab enhancedhearingtab5" value="-2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedhearingtab" class="enhancedhearingtab enhancedhearingtab6" value="-3" readonly /><span></span>
|
||
|
||
<div class='flex-1-24'>
|
||
<div><span class='pictos'>m</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedhearingtab1 flex-1-24'>
|
||
<div></div>
|
||
</div>
|
||
<div class='tab-content enhancedhearingtab2 flex-1-24'>
|
||
<div><span class='pictos'>&</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedhearingtab3 flex-1-24'>
|
||
<div><span class='pictos'>+</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedhearingtab4 flex-1-24'>
|
||
<div><span class='pictos'>_</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedhearingtab5 flex-1-24'>
|
||
<div><span class='pictos'>-</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedhearingtab6 flex-1-24'>
|
||
<div><span class='pictos'>*</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='flex-1-12'>
|
||
<div class='flex-1-24'>
|
||
<div class='flex-container-spacearound'>
|
||
|
||
<input type="radio" name="attr_enhancedtouchtab" class="enhancedtouchtab enhancedtouchtab1" value="0" readonly checked /><span></span>
|
||
<input type="radio" name="attr_enhancedtouchtab" class="enhancedtouchtab enhancedtouchtab2" value="1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtouchtab" class="enhancedtouchtab enhancedtouchtab3" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtouchtab" class="enhancedtouchtab enhancedtouchtab4" value="-1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtouchtab" class="enhancedtouchtab enhancedtouchtab5" value="-2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtouchtab" class="enhancedtouchtab enhancedtouchtab6" value="-3" readonly /><span></span>
|
||
|
||
<div class='flex-1-24'>
|
||
<div><span class='pictos'>Y</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtouchtab1 flex-1-24'>
|
||
<div></div>
|
||
</div>
|
||
<div class='tab-content enhancedtouchtab2 flex-1-24'>
|
||
<div><span class='pictos'>&</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtouchtab3 flex-1-24'>
|
||
<div><span class='pictos'>+</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtouchtab4 flex-1-24'>
|
||
<div><span class='pictos'>_</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtouchtab5 flex-1-24'>
|
||
<div><span class='pictos'>-</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtouchtab6 flex-1-24'>
|
||
<div><span class='pictos'>*</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='flex-1-12'>
|
||
<div class='flex-1-24'>
|
||
<div class='flex-container-spacearound'>
|
||
|
||
<input type="radio" name="attr_enhancedsmelltab" class="enhancedsmelltab enhancedsmelltab1" value="0" readonly checked /><span></span>
|
||
<input type="radio" name="attr_enhancedsmelltab" class="enhancedsmelltab enhancedsmelltab2" value="1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsmelltab" class="enhancedsmelltab enhancedsmelltab3" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsmelltab" class="enhancedsmelltab enhancedsmelltab4" value="-1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsmelltab" class="enhancedsmelltab enhancedsmelltab5" value="-2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedsmelltab" class="enhancedsmelltab enhancedsmelltab6" value="-3" readonly /><span></span>
|
||
|
||
<div class='flex-1-24'>
|
||
<div><span class='pictos-custom'>r</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsmelltab1 flex-1-24'>
|
||
<div></div>
|
||
</div>
|
||
<div class='tab-content enhancedsmelltab2 flex-1-24'>
|
||
<div><span class='pictos'>&</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsmelltab3 flex-1-24'>
|
||
<div><span class='pictos'>+</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsmelltab4 flex-1-24'>
|
||
<div><span class='pictos'>_</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsmelltab5 flex-1-24'>
|
||
<div><span class='pictos'>-</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedsmelltab6 flex-1-24'>
|
||
<div><span class='pictos'>*</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='flex-1-12'>
|
||
<div class='flex-1-24'>
|
||
<div class='flex-container-spacearound'>
|
||
|
||
<input type="radio" name="attr_enhancedtastetab" class="enhancedtastetab enhancedtastetab1" value="0" readonly checked /><span></span>
|
||
<input type="radio" name="attr_enhancedtastetab" class="enhancedtastetab enhancedtastetab2" value="1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtastetab" class="enhancedtastetab enhancedtastetab3" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtastetab" class="enhancedtastetab enhancedtastetab4" value="-1" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtastetab" class="enhancedtastetab enhancedtastetab5" value="-2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancedtastetab" class="enhancedtastetab enhancedtastetab6" value="-3" readonly /><span></span>
|
||
|
||
<div class='flex-1-24'>
|
||
<div><span class='pictos-three'>c</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtastetab1 flex-1-24'>
|
||
<div></div>
|
||
</div>
|
||
<div class='tab-content enhancedtastetab2 flex-1-24'>
|
||
<div><span class='pictos'>&</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtastetab3 flex-1-24'>
|
||
<div><span class='pictos'>+</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtastetab4 flex-1-24'>
|
||
<div><span class='pictos'>_</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtastetab5 flex-1-24'>
|
||
<div><span class='pictos'>-</span></div>
|
||
</div>
|
||
<div class='tab-content enhancedtastetab6 flex-1-24'>
|
||
<div><span class='pictos'>*</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
<div class='flex-grow'></div>
|
||
</div>
|
||
|
||
<div class='flex-container-evenlyspace padb'>
|
||
<div class='flex-9-10'>
|
||
<fieldset class="repeating_senses">
|
||
<h4 class="center border">
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-6-7">
|
||
<span name="attr_name"></span>
|
||
<input type="hidden" name="attr_name" value="Additional Sense" />
|
||
<input type="text" class="center" name="attr_characteristic" value="Super Sense" readonly />
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="tab-content rolltab6">
|
||
<div class="flex-container padb">
|
||
<div class='flex-grow'></div>
|
||
<div class='flex-9-10'>
|
||
<h4 class='border'>
|
||
<div class='flex-container-evenlyspace'>
|
||
<div class='flex-4-10 center'>
|
||
<select name="attr_static_stat_type_set" class="border"><option value="major">All Aspects</option><option value="minor">Major Aspects</option></select>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
<div class='flex-grow'></div>
|
||
</div>
|
||
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-9-10">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_majorstats" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_bodystate" value="1" />
|
||
<button type="action" class="allaspects-stat" name="act_static_button_stat_body" value="">Body
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_body"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_mindstate" value="1" />
|
||
<button type='action' class="allaspects-stat" name='act_static_button_stat_mind' value="">Mind
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_mind"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_soulstate" value="1" />
|
||
<button type='action' class="allaspects-stat" name='act_static_button_stat_soul' value="">Soul
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_soul"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_bodystate" value="1" />
|
||
<button type="action" class="allaspects-stat-inactive">Body
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_body"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_mindstate" value="1" />
|
||
<button type='action' class="allaspects-stat-inactive">Mind
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_mind"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_soulstate" value="1" />
|
||
<button type='action' class="allaspects-stat-inactive">Soul
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_soul"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_minorstats" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_agistate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_agi' value="">Agility
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_agi"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_crestate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_cre' value="">Creativity
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_cre"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_awastate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_awa' value="">Awareness
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_awa"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_constate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_con' value="">Constitution
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_con"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_intstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_int' value="">Intellect
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_int"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_chastate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_cha' value="">Charisma
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_cha"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_dexstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_dex' value="">Dexterity
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_dex"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_perstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_per' value="">Perception
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_per"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_comstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_com' value="">Composure
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_com"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_strstate" value="1" />
|
||
<button type="action" class="major-stat" name="act_static_button_stat_str" value="">Strength
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_str"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_reastate" value="1" />
|
||
<button type="action" class="major-stat" name="act_static_button_stat_rea" value="">Reasoning
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_rea"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_wilstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_static_button_stat_wil' value="">Willpower
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_wil"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flex-container-evenlyspace padt">
|
||
<div class="flex-9-10">
|
||
<div class="col-1"><span class="col-1 header border">Active Attributes</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-9-10">
|
||
<fieldset class="repeating_active">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_rollable" value="1" />
|
||
<div class="block-a">
|
||
<h4 class="center border">
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-19-20">
|
||
<span name="attr_name"></span>
|
||
<input type="hidden" name="attr_name" value="Passive Attribute" />
|
||
<input type="text" class="center" name="attr_characteristic" value="Characteristic" readonly />
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
<div class="block-b">
|
||
<h4 class="center border">
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-5-6">
|
||
<span name="attr_name"></span>
|
||
<input type="hidden" name="attr_name" value="Actvie Attribute" />
|
||
<input type="text" class="center" name="attr_characteristic" value="Characteristic" readonly />
|
||
</div>
|
||
<div class="flex-1-24">
|
||
<span> </span>
|
||
<button style='align-self: flex-end;' class="button d6button" type="roll" name="roll_activeattribute" value="@{rollvalue}"></button>
|
||
<input type="hidden" name="attr_rollvalue" value="" readonly />
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-stats header"><h3 class="center" style="color: white;">Stats</h3>
|
||
<div class="row padt">
|
||
<div class='col-9-20'>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-9-10">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showallaspectsstats" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_bodystate" value="1" />
|
||
<button type="action" class="allaspects-stat">Body
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_body"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_mindstate" value="1" />
|
||
<button type='action' class="allaspects-stat">Mind
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_mind"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_soulstate" value="1" />
|
||
<button type='action' class="allaspects-stat">Soul
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_soul"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_bodystate" value="1" />
|
||
<button type="action" class="allaspects-stat-inactive">Body
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_body"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_mindstate" value="1" />
|
||
<button type='action' class="allaspects-stat-inactive">Mind
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_mind"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_soulstate" value="1" />
|
||
<button type='action' class="allaspects-stat-inactive">Soul
|
||
<div class="flex-skillcontainer">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_soul"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showmajoraspectstats" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_agistate" value="1" />
|
||
<button type='action' class="major-stat">Agility
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_agi"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_crestate" value="1" />
|
||
<button type='action' class="major-stat">Creativity
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_cre"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_awastate" value="1" />
|
||
<button type='action' class="major-stat">Awareness
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_awa"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_constate" value="1" />
|
||
<button type='action' class="major-stat">Constitution
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_con"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_intstate" value="1" />
|
||
<button type='action' class="major-stat">Intellect
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_int"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_chastate" value="1" />
|
||
<button type='action' class="major-stat">Charisma
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_cha"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_dexstate" value="1" />
|
||
<button type='action' class="major-stat">Dexterity
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_dex"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_perstate" value="1" />
|
||
<button type='action' class="major-stat">Perception
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_per"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_comstate" value="1" />
|
||
<button type='action' class="major-stat">Composure
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_com"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace center padb">
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_strstate" value="1" />
|
||
<button type="action" class="major-stat">Strength
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_str"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_reastate" value="1" />
|
||
<button type="action" class="major-stat">Reasoning
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_rea"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
<div class="flex-1-3">
|
||
<input type="checkbox" class="stats" name="attr_wilstate" value="1" />
|
||
<button type='action' class="major-stat">Willpower
|
||
<div class="flex-container">
|
||
<div class="flex-1">
|
||
<div class="border" style="background: white;"><span style="color: black;" class="center" name="attr_stat_total_wil"></span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-1-2">
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_walk">Walk
|
||
<input type="text" class="center border" name="attr_stat_total_walk" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_jumpup">Jump Up
|
||
<input type="text" class="center border" name="attr_stat_total_jumpup" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_swim">Swim
|
||
<input type="text" class="center border" name="attr_stat_total_swim" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_jog">Jog
|
||
<input type="text" class="center border" name="attr_stat_total_jog" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_Jump">Jump
|
||
<input type="text" class="center border" name="attr_stat_total_jump" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_sswim">Sprint Swim
|
||
<input type="text" class="center border" name="attr_stat_total_sswim" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_run">Run
|
||
<input type="text" class="center border" name="attr_stat_total_run" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_leap">Leap
|
||
<input type="text" class="center border" name="attr_stat_total_leap" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span style="font-size: 99px;"> </span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span name="attr_label_sprint">Sprint
|
||
<input type="text" class="center border" name="attr_stat_total_sprint" value="0" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span style="font-size: 99px;"> </span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span style="font-size: 99px;"> </span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-1-24">
|
||
<h5 class="row">
|
||
<div style="float:right" class="padr">
|
||
<input type="checkbox" name="attr_statmanagement" class="ro-checkbox" /><span class="ro-label">y</span>
|
||
<div class="ro-modal padl padr">
|
||
<div class="border">
|
||
<div class="ro-close-wrapper">
|
||
<input type="checkbox" name="attr_statmanagement" class="ro-close-checkbox" value="1" />
|
||
<span class="ro-close-label"></span>
|
||
</div>
|
||
<div class="ro-header padb">
|
||
<div class="col-1-3">
|
||
<div class="row padt padb"><h3 class="col-1 center border"><span>Stat Management</span></h3></div>
|
||
<div class="row center">
|
||
<div class="col-1-3 padr"><h4 class="center border"><span>Body
|
||
<select name="attr_static_stat_base_body"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option></select>
|
||
</span></h4></div>
|
||
<div class="col-1-3 padr"><h4 class="center border"><span>Mind
|
||
<select name="attr_static_stat_base_mind"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option></select>
|
||
</span></h4></div>
|
||
<div class="col-1-3"><h4 class="center border"><span>Soul
|
||
<select name="attr_static_stat_base_soul"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option></select>
|
||
</span></h4></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h5>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-attributes header"><h3 class="center" style="color: white">Attributes</h3>
|
||
<div style="padding-bottom: 25px;">
|
||
<div class="row center padt">
|
||
<button type="action" name="act_attrgroup1" ><span name="attr_static_attrgroup_1_name"></span></button>
|
||
<button type="action" name="act_attrgroup2" ><span name="attr_static_attrgroup_2_name"></span></button>
|
||
<button type="action" name="act_attrgroup3" ><span name="attr_static_attrgroup_3_name"></span></button>
|
||
<button type="action" name="act_attrgroup4" ><span name="attr_static_attrgroup_4_name"></span></button>
|
||
<button type="action" name="act_attrgroup5" ><span name="attr_static_attrgroup_5_name"></span></button>
|
||
<button type="action" name="act_attrgroup6" ><span name="attr_static_attrgroup_6_name"></span></button>
|
||
<button type="action" name="act_attrgroup7" ><span name="attr_static_attrgroup_7_name"></span></button>
|
||
<button type="action" name="act_attrgroup8" ><span name="attr_static_attrgroup_8_name"></span></button>
|
||
<button type="action" name="act_attrgroup9" ><span name="attr_static_attrgroup_9_name"></span></button>
|
||
<button type="action" name="act_attrgroup10" ><span name="attr_static_attrgroup_10_name"></span></button>
|
||
</div>
|
||
<input type='hidden' class='tabstoggle' name='attr_static_attrgroup_selected_tab' value='attrgroup1' />
|
||
|
||
<div class='attrgroup1'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_1_name" value="Group 1" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_1_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_1_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_1_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_1_totalcost" value="floor(@{static_attrgroup_1_groupcost}/(1+@{static_attrgroup_1_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_1_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_1_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr padb">
|
||
<input type="hidden" name="attr_static_attrgroup_1_spent" value=0 readonly />
|
||
<div class="flex-8-15 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_1_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_1_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_1_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_1_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_1_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_1_remaining" value="@{static_attrgroup_1_groupmax}-@{static_attrgroup_1_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup2'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_2_name" value="Group 2" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_2_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_2_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_2_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_2_totalcost" value="floor(@{static_attrgroup_2_groupcost}/(1+@{static_attrgroup_2_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_2_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_2_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_2_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_2_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_2_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_2_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_2_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_2_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_2_remaining" value="@{static_attrgroup_2_groupmax}-@{static_attrgroup_2_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup3'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_3_name" value="Group 3" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_3_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_3_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_3_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_3_totalcost" value="floor(@{static_attrgroup_3_groupcost}/(1+@{static_attrgroup_3_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_3_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_3_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_3_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_3_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_3_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_3_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_3_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_3_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_3_remaining" value="@{static_attrgroup_3_groupmax}-@{static_attrgroup_3_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup4'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_4_name" value="Group 4" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_4_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_4_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_4_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_4_totalcost" value="floor(@{static_attrgroup_4_groupcost}/(1+@{static_attrgroup_4_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_4_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_4_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_4_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_4_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_4_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_4_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_4_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_4_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_4_remaining" value="@{static_attrgroup_4_groupmax}-@{static_attrgroup_4_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup5'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_5_name" value="Group 5" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_5_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_5_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_5_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_5_totalcost" value="floor(@{static_attrgroup_5_groupcost}/(1+@{static_attrgroup_5_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_5_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_5_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_5_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_5_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_5_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_5_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_5_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_5_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_5_remaining" value="@{static_attrgroup_5_groupmax}-@{static_attrgroup_5_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup6'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_6_name" value="Group 6" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_6_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_6_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_6_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_6_totalcost" value="floor(@{static_attrgroup_6_groupcost}/(1+@{static_attrgroup_6_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_6_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_6_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_6_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_6_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_6_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_6_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_6_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_6_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_6_remaining" value="@{static_attrgroup_6_groupmax}-@{static_attrgroup_6_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup7'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_7_name" value="Group 7" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_7_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_7_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_7_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_7_totalcost" value="floor(@{static_attrgroup_7_groupcost}/(1+@{static_attrgroup_7_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_7_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_7_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_7_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_7_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_7_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_7_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_7_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_7_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_7_remaining" value="@{static_attrgroup_7_groupmax}-@{static_attrgroup_7_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup8'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_8_name" value="Group 8" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_8_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_8_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_8_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_8_totalcost" value="floor(@{static_attrgroup_8_groupcost}/(1+@{static_attrgroup_8_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_8_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_8_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_8_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_8_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_8_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_8_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_8_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_8_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_8_remaining" value="@{static_attrgroup_8_groupmax}-@{static_attrgroup_8_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup9'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_9_name" value="Group 9" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_9_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_9_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_9_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_9_totalcost" value="floor(@{static_attrgroup_9_groupcost}/(1+@{static_attrgroup_9_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_9_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_9_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_9_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_9_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_9_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_9_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_9_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_9_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_9_remaining" value="@{static_attrgroup_9_groupmax}-@{static_attrgroup_9_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='attrgroup10'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-1-3">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_attrgroup_10_name" value="Group 10" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center border" name="attr_static_attrgroup_10_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Source
|
||
<select name="attr_static_attrgroup_10_source"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-12">
|
||
<h4 class="center border">
|
||
<span>Item
|
||
<select name="attr_static_attrgroup_10_isitem"><option value=0>No</option><option value=1>Yes</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-10">
|
||
<h4 class="center border">
|
||
<span>Group Cost
|
||
<input type="number" name="attr_static_attrgroup_10_totalcost" value="floor(@{static_attrgroup_10_groupcost}/(1+@{static_attrgroup_10_isitem}))" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_10_groupcost" value=0 readonly />
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_10_changegroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container padl padr">
|
||
<input type="hidden" name="attr_static_attrgroup_10_spent" value=0 readonly />
|
||
<div class="flex-1-2 padr">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;">
|
||
<span style="font-size: 16px; position: relative; top: 30%;" name="attr_static_attrgroup_10_pointype"></span>
|
||
</div>
|
||
<input type="hidden" name="attr_static_attrgroup_10_pointype" value="Flux Points" />
|
||
</h4>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_static_attrgroup_10_changemax" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_attrgroup_10_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="number" class="center" name="attr_static_attrgroup_10_groupmax" value=0 />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="number" class="center" name="attr_static_attrgroup_10_remaining" value="@{static_attrgroup_10_groupmax}-@{static_attrgroup_10_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h4 class="center border">
|
||
<div style="height: 47px;"></div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<fieldset class="repeating_attr">
|
||
<div class="flex-container padr padl">
|
||
<input type="checkbox" class="block-switch" name="attr_visible" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-container center border padframe">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_activate" value="1" />
|
||
<div class="block-a">
|
||
<div style="padding-top: .6em;" class="flex-1-20 flex-center padr padl">
|
||
<button style="padding: 8px;" type="action" class="border activate" name="act_activate">
|
||
<span class="deactivated pictos">Q</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div style="padding-top: .6em;" class="flex-1-20 flex-center padr padl">
|
||
<input type="hidden" class="activate" name="attr_activatetheme" value="1" />
|
||
<button style="padding: 8px;" type="action" class="border activate" name="act_activate">
|
||
<span class="theme-red activate-button pictos">Q</span>
|
||
<span class="theme-orange activate-button pictos">Q</span>
|
||
<span class="theme-yellow activate-button pictos">Q</span>
|
||
<span class="theme-green activate-button pictos">Q</span>
|
||
<span class="theme-blue activate-button pictos">Q</span>
|
||
<span class="theme-purple activate-button pictos">Q</span>
|
||
<span class="theme-grey activate-button pictos">Q</span>
|
||
<span class="theme-dark activate-button pictos">Q</span>
|
||
<span class="theme-light activate-button pictos">Q</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flex-1-4 flex-center padr">
|
||
<h4 class="center border">
|
||
<span>Name
|
||
<input type="text" class='center' name="attr_name" placeholder="Name" value="" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4 flex-center padr">
|
||
<h4 class="center border">
|
||
<span>Attribute
|
||
<select name="attr_attribute"><option value=""></option><option value="absorption">Absorption</option><option value="alternate form">Alternate Form</option><option value="alternate identity">Alternate Identity</option><option value="armor">Armor</option><option value="attack mastery">Attack Mastery</option><option value="augmented">Augmented</option><option value="capacity">Capacity</option><option value="change state">Change State</option><option value="cognition">Cognition</option><option value="combat technique">Combat Technique</option><option value="companion">Companion</option><option value="connected">Connected</option><option value="control environment">Control Environment</option><option value="conversion">Conversion</option><option value="data access">Data Access</option><option value="defect">Defect</option><option value="defense mastery">Defense Mastery</option><option value="dimension walk">Dimension Walk</option><option value="dynamic powers">Dynamic Powers</option><option value="elasticity">Elasticity</option><option value="enemy attack">Enemy Attack</option><option value="enemy defense">Enemy Defense</option><option value="energized">Energized</option><option value="exorcism">Exorcism</option><option value="extra actions">Extra Actions</option><option value="extra arms">Extra Arms</option><option value="extra defenses">Extra Defenses</option><option value="features">Features</option><option value="flight">Flight</option><option value="forcefield">Force Field</option><option value="gear">Gear</option><option value="ground speed">Ground Speed</option><option value="healing">Healing</option><option value="heightened awareness">Heightened Awareness</option><option value="heightened senses">Heightened Senses</option><option value="illusion">Illusion</option><option value="immovable">Immovable</option><option value="immunity">Immunity</option><option value="immutable">Immutable</option><option value="inspire">Inspire</option><option value="jumping">Jumping</option><option value="massive damage">Massive Damage</option><option value="melee attack">Melee Attack</option><option value="melee defense">Melee Defence</option><option value="merge">Merge</option><option value="metamorphosis">Metamorphosis</option><option value="mimic">Mimic</option><option value="mind control">Mind Control</option><option value="mind shield">Mind Shield</option><option value="minions">Minions</option><option value="mulligan">Mulligan</option><option value="nullify">Nullify</option><option value="plant control">Plant Control</option><option value="pocket dimension">Pocket Dimension</option><option value="portal">Portal</option><option value="power flux">Power Flux</option><option value="power variation">Power Variation</option><option value="projection">Projection</option><option value="ranged attack">Ranged Attack</option><option value="ranged defense">Ranged Defence</option><option value="regeneration">Regeneration</option><option value="reincarnation">Reincarnation</option><option value="resilient">Resilient</option><option value="sensory block">Sensory Block</option><option value="shield">Shield</option><option value="sixth sense">Sixth Sense</option><option value="size change">Size Change</option><option value="skill">Skill</option><option value="social mastery">Social Mastery</option><option value="spaceflight">Spaceflight</option><option value="special movement">Special Movement</option><option value="summon creatures">Summon Creatures</option><option value="supersense">Supersense</option><option value="superspeed">Superspeed</option><option value="superstrength">Superstrength</option><option value="swarm">Swarm</option><option value="telekinesis">Telekinesis</option><option value="telepathy">Telepathy</option><option value="teleport">Teleport</option><option value="tough">Tough</option><option value="transfer">Transfer</option><option value="transmute">Transmute</option><option value="tunneling">Tunnelling</option><option value="unaffected">Unaffected</option><option value="unassailable">Unassailable</option><option value="undetectable">Undetectable</option><option value="unique attribute">Unique Attribute</option><option value="unknown power">Unknown Power</option><option value="water speed">Water Speed</option><option value="wealth">Wealth</option><option value="weapon">Weapon</option></select>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-3 flex-center padr">
|
||
<h4 class="center border">
|
||
<span>Characteristic
|
||
<input type="text" class='center' name="attr_characteristic" value="Characteristic" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_costperlevel" value=0 readonly />
|
||
<input type="hidden" name="attr_enhancementassignments" value=0 readonly />
|
||
<input type="hidden" name="attr_limiterassignments" value=0 readonly />
|
||
<input type="hidden" name="attr_defectranks" value=0 readonly />
|
||
<input type="hidden" name="attr_customizations" readonly />
|
||
<input type="hidden" name="attr_group" value=0 readonly />
|
||
<input type="hidden" name="attr_source" value="" readonly />
|
||
<input type="hidden" name="attr_new" value=1 readonly />
|
||
|
||
<div class="flex-1-24 flex-center">
|
||
<input type="checkbox" class="border lock" name="attr_lock" value="1" /><span></span>
|
||
</div>
|
||
|
||
<div class="flex-1-24 flex-center">
|
||
<div>
|
||
<input type="checkbox" name="attr_options" class="ro-checkbox" /><span class="ro-label">y</span>
|
||
<div class="ro-modal">
|
||
<div class="border">
|
||
<div class="ro-close-wrapper">
|
||
<input type="checkbox" name="attr_options" class="ro-close-checkbox" value="1" />
|
||
<span class="attr-close-label"></span>
|
||
</div>
|
||
<div class="row ro-header border-bottom padb">
|
||
<div class="row padt padb">
|
||
<div class="col-5-6">
|
||
<div class="col-1">
|
||
<h3 class="header border">
|
||
<span>Details</span>
|
||
</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="spacer"></div>
|
||
<div class="row padt padb">
|
||
<div class="col-5-6">
|
||
<div class="row">
|
||
<div class="col-3-5 padr">
|
||
<textarea class="description border" name="attr_description" placeholder="Description"></textarea>
|
||
</div>
|
||
<div class="col-2-5">
|
||
|
||
<div class="col-7-22">
|
||
<h4 class="center border">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_attrdefecttoggle" value="1" />
|
||
<div class="block-a">
|
||
<span>Level</span>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_levelelevation" value="1" />
|
||
<div class="block-a">
|
||
<div class="col-1">
|
||
<select style="width: 100%;" name="attr_level"><option value=0>0</option><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option><option value=7>+</option></select>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="col-1">
|
||
<div><input type="number" name="attr_level" value="0" /></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<span style="font-size: 99px;"> </span>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
<div class="col-7-22">
|
||
<h4 class="center border">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_attrdefecttoggle" value="1" />
|
||
<div class="block-a">
|
||
<span>(Level)</span>
|
||
<input type="text" style="text-align: center;" name="attr_effectivelevel" value="0" readonly />
|
||
</div>
|
||
<div class="block-b">
|
||
<span style="font-size: 99px;"> </span>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
<div class="col-7-22">
|
||
<h4 class="center border">
|
||
<span>Cost</span>
|
||
<input style="text-align: center;" type="text" name="attr_totalcost" value="0" readonly />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row padb">
|
||
<div style="padding-left: 68px;" class="flex-container col-5-6">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showarmorlayer" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Armor Layer</span>
|
||
<select name="attr_armorlayer"><option value=1>Primary</option><option value=2>Secondary</option><option value=3>Tracheary</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showaugmentedstat" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Augmented Stat</span>
|
||
<select name="attr_augmentedstat"><option value='body'>Body</option><option value='mind'>Mind</option><option value='soul'>Soul</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showweaponclass" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Weapon Class</span>
|
||
<select name="attr_weaponclass">
|
||
<option value=""></option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Melee</option>
|
||
<option value="exotic">Exotic</option>
|
||
<option value="hafted">Hafted</option>
|
||
<option value="hilted">Hilted</option>
|
||
<option value="polearm">Polearm</option>
|
||
<option value="shield">Shield</option>
|
||
<option value="unarmed">Unarmed</option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Ranged</option>
|
||
<option value="archery">Archery</option>
|
||
<option value="artillery">Artillery</option>
|
||
<option value="handgun">Hand Gun</option>
|
||
<option value="heavyweapon">Heavy Weapon</option>
|
||
<option value="longgun">Long Gun</option>
|
||
<option value="special">Special</option>
|
||
<option value="thrownweapon">Thrown Weapon</option>
|
||
<option value="weaponry">Weaponry</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showdefenseclass" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Defense Class</span>
|
||
<select name="attr_defenseclass"><option value="personal">Personal</option><option value="movement">Movement</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showdamagetype" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Damage Type</span>
|
||
<select class="border" name="attr_damagetype"><option value="blunt">Blunt</option><option value="cold">Cold</option><option value="energy">Energy</option><option value="heat">Heat</option><option value="penetrating">Penetrating</option><option value="radiation">Radiation</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showcontinuing" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Continuing Type</span>
|
||
<select class="border" name="attr_continuingtype"><option value=1>nRounds</option><option value=2>Per Hour</option><option value=3>Per Day</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showdrain" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Drain Type</span>
|
||
<select name="attr_draintype"><option value="body">Body</option><option value="mind">Mind</option><option value="soul">Soul</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showcollectiontype" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Collection Type</span>
|
||
<select class="border" name="attr_collectiontype"><option value=1>Health</option><option value=2>Energy</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showconversiontype" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Collection Type</span>
|
||
<select class="border" name="attr_conversiontype"><option value=0>Damage</option><option value=1>Energy</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showseeinto" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>See Into</span>
|
||
<select class="border" name="attr_seeinto"><option value=0>Future</option><option value=1>Past</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showextraarms" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Extra Arms</span>
|
||
<input type="number" class="border center" name="attr_extraarms" value=0 />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showimmunityrole" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Immunity Role</span>
|
||
<input type="text" class="border center" name="attr_immunityrole" placeholder="e.g. metal weapons or on holy days" />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showattrsrc" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Attribute Source</span>
|
||
<select class="border" name="attr_attrsrc"><option value="Divine">Divine</option><option value="Magical">Magical</option><option value="Mutation">Mutation</option><option value="Natural">Natural</option><option value="Psionics">Psionics</option><option value="Social">Social</option><option value="Skilled">Skilled</option><option value="Supernatural">Supernatural</option><option value="Technological">Technological</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showconditions" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Conditions</span>
|
||
<select class="border" name="attr_conditions"><option value=1>Divine</option><option value=2>Magical</option><option value=3>Mutation</option><option value=4>Natural</option><option value=5>Psionics</option><option value=6>Social</option><option value=7>Skilled</option><option value=8>Supernatural</option><option value=9>Technological</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showcapacitytype" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Capacity Type</span>
|
||
<select class="border" name="attr_capacitytype"><option value=0>Cargo</option><option value=1>People</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showenemy" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Enemy</span>
|
||
<input type='text' class='center' name="attr_enemy" placeholder='Enter Enemy' value='' />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showskillgroup" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Skill Group</span>
|
||
<select class="border" name="attr_skillgroup"><option value=1>Skill Group 1</option><option value=2>Skill Group 2</option><option value=3>Skill Group 3</option><option value=4>Skill Group 4</option><option value=5>Skill Group 5</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showsupersense" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Super Sense</span>
|
||
<select class="border" name="attr_supersense">
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Sight</option>
|
||
<option value="infrared">Infrared</option>
|
||
<option value="microscopic">Microscopic</option>
|
||
<option value="telescopic">Telescopic</option>
|
||
<option value="ultraviolet">Ultraviolet</option>
|
||
<option value="x-ray">X-ray</option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Hearing</option>
|
||
<option value="echolocation">Echolocation</option>
|
||
<option value="infrasound">Infrasound</option>
|
||
<option value="radio">Radio</option>
|
||
<option value="ultrasound">Ultrasound</option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Touch</option>
|
||
<option value="magneticfield">Magnetic Field</option>
|
||
<option value="radiation">Radiation</option>
|
||
<option value="seismic">Seismic</option>
|
||
<option value="thermal">Thermal</option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Smell</option>
|
||
<option value="odorant">Chemical Detection (Odorant)</option>
|
||
<option disabled style="background:gray;font-weight:bold;color:white;">Taste</option>
|
||
<option value="tastant">Chemical Detection (Tastant)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showobject" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Object</span>
|
||
<input type='text' name="attr_object" placeholder='Enter Object' value='' />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showuniquephenomena" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Unique Phenomena</span>
|
||
<input type='text' name="attr_uniquephenomena" placeholder='Enter Phenomena' value='' />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showvariablestat" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="padr">
|
||
<h4 class="center border">
|
||
<!--
|
||
<div class="flex-container-spacearound">
|
||
<div class="flex-container-column padr">
|
||
<div class="col-1">
|
||
<span>Stat</span>
|
||
<input class="border center" type="text" name="attr_stat" value="Body" />
|
||
</div>
|
||
</div>
|
||
<button style="padding: 0px 8px 0px 8px; margin: 2px 0 2px 0;" type='action' name='act_statselection'><span style="font-size: 18px;" class="pictos">U</span></button>
|
||
</div>-->
|
||
<div>
|
||
<span>Stat</span>
|
||
<select class="border" name="attr_stat"><option value="body">Body</option><option value="mind">Mind</option><option value="soul">Soul</option></select>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showammo" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Ammo</span>
|
||
<input type="text" class="border center" name="attr_ammo" value="0" readonly />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showcharges" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border">
|
||
<span>Charges</span>
|
||
<input type="text" class="border center" name="attr_charges" value="0" readonly />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showendurance" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Endurance</span>
|
||
<input type="text" class="border center" name="attr_endurance" value="0" readonly />
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showdefect" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Defect</span>
|
||
<select class="border" name="attr_defect"><option value=""></option><option value="achilles heel">Achilles Heel</option><option value="awkward size">Awkward Size</option><option value="bane">Bane</option><option value="blind fury">Blind Fury</option><option value="conditional ownership">Conditional Ownership</option><option value="confined">Confined</option><option value="cursed">Cursed</option><option value="demure">Demure</option></option><option value="easily distracted">Easily Distracted</option><option value="fragile">Fragile</option><option value="hounded">Hounded</option><option value="impaired manipulation">Impaired Manipulation</option><option value="impaired speech">Impaired Speech</option><option value="inept attack">Inept Attack</option><option value="inept defense">Inept Defence</option><option value="involuntary change">Involuntary Change</option><option value="ism">Ism</option><option value="magnet">Magnet</option><option value="marked">Marked</option><option value="nemesis">Nemesis</option><option value="nightmares">Nightmares</option><option value="no healing">No Healing</option><option value="obligated">Obligated</option><option value="phobia">Phobia</option><option value="physical impairment">Physical Impairment</option><option value="red tape">Red Tape</option><option value="reduced damage">Reduced Damage</option><option value="sensory impairment">Sensory Impairment</option><option value="shortcoming">Shortcoming</option><option value="significant other">Significant Other</option><option value="skeleton in the closet">Skeleton in the Closet</option><option value="social fault">Social Fault</option><option value="special requirement">Special Requirement</option><option value="unappealing">Unappealing</option><option value="unique defect">Unique Defect</option><option value="unsettled">Unsettled</option><option value="vulnerability">Vulnerability</option><option value="wanted">Wanted</option><option value="weak point">Weak Point</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showachillesheel" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Attack Form</span>
|
||
<select class="boarder" name="attr_defectachillesheel">
|
||
<option value=0></option>
|
||
<option value=1>Rare</option>
|
||
<option value=2>Uncommon</option>
|
||
<option value=3>Common</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showawkwardsize" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Awkward Size</span>
|
||
<select class="boarder" name="attr_defectawkwardsize">
|
||
<option value=0>Medium</option><option value=1>Large</option><option value=2>Huge</option><option value=3>Mammoth</option><option value=4>Gigantic</option><option value=5>Gargantuan</option><option value=6>Colossal</option><option value=7>Enormous</option><option value=8>Monstous</option><option value=9>Titanic</option><option value=10>Monumental</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showbane" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Damage</span>
|
||
<select class="boarder" name="attr_defectbane">
|
||
<option value=0></option>
|
||
<option value=1>10 per round of exosure</option>
|
||
<option value=2>20 per round of exosure</option>
|
||
<option value=3>30 per round of exosure</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showblindfury" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Initiate/Revert</span>
|
||
<select class="boarder" name="attr_defectblindfury">
|
||
<option value=0></option>
|
||
<option value=1>Difficult/Easy</option>
|
||
<option value=2>Moderately Difficult</option>
|
||
<option value=3>Easy/Difficult</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showconditionalownership" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Ownership Conditions</span>
|
||
<select class="boarder" name="attr_defectconditionalownership">
|
||
<option value=0></option>
|
||
<option value=1>Mild</option>
|
||
<option value=2>Strict</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showconfined" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Restricted Area</span>
|
||
<select class="boarder" name="attr_defectconfined">
|
||
<option value=0></option>
|
||
<option value=1>Large (100 km radius)</option>
|
||
<option value=2>Moderate (1 km radius)</option>
|
||
<option value=3>Small (100 m radius)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showcursed" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Curse Disadvantage</span>
|
||
<select class="boarder" name="attr_defectcursed">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showdemure" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Embarrassment/Shame</span>
|
||
<select class="boarder" name="attr_defectdemure">
|
||
<option value=0></option>
|
||
<option value=1>Mild (SCV -2)</option>
|
||
<option value=2>Moderate (SCV -4)</option>
|
||
<option value=3>Severe (SCV -6)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showeasilydistracted" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Triggered</span>
|
||
<select class="boarder" name="attr_defecteasilydistracted">
|
||
<option value=0></option>
|
||
<option value=1>Infrequently</option>
|
||
<option value=2>Frequently</option>
|
||
<option value=3>Constantly</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showfragile" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Health Points</span>
|
||
<select class="boarder" name="attr_defectfragile">
|
||
<option value=0></option>
|
||
<option value=1>Decreased by 10</option>
|
||
<option value=2>Decreased by 20</option>
|
||
<option value=3>Decreased by 30</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showhounded" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Inconvenience</span>
|
||
<select class="boarder" name="attr_defecthounded">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showimpairedmanipulation" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Impairment</span>
|
||
<select class="boarder" name="attr_defectimpairedmanipulation">
|
||
<option value=0></option>
|
||
<option value=1>One usable arm</option>
|
||
<option value=2>Rudimentary manipulation</option>
|
||
<option value=3>No usable arms</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showimpairedspeech" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Impediment</span>
|
||
<select class="boarder" name="attr_defectimpairedspeech">
|
||
<option value=0></option>
|
||
<option value=1>Severe</option>
|
||
<option value=2>No language</option>
|
||
<option value=3>Mute</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showineptattack" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Penalty</span>
|
||
<select class="boarder" name="attr_defectineptattack">
|
||
<option value=0></option>
|
||
<option value=1>Minor (ACV -1)</option>
|
||
<option value=2>Moderate (ACV -2)</option>
|
||
<option value=3>Severe (ACV -3)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showineptdefence" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Penalty</span>
|
||
<select class="boarder" name="attr_defectineptdefence">
|
||
<option value=0></option>
|
||
<option value=1>Minor (DCV -1)</option>
|
||
<option value=2>Moderate (DCV -2)</option>
|
||
<option value=3>Severe (DCV -3)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showinvoluntarychange" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Change Trigger</span>
|
||
<select class="boarder" name="attr_defectinvoluntarychange">
|
||
<option value=0></option>
|
||
<option value=1>Difficult</option>
|
||
<option value=2>Moderately Easy</option>
|
||
<option value=3>Easy</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showism" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Discrimination</span>
|
||
<select class="boarder" name="attr_defectism">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showmagnet" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Fan Volume</span>
|
||
<select class="boarder" name="attr_defectmagnet">
|
||
<option value=0></option>
|
||
<option value=1>Few</option>
|
||
<option value=2>Handful</option>
|
||
<option value=3>Swarm</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showmarked" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Concealability</span>
|
||
<select class="boarder" name="attr_defectmarked">
|
||
<option value=0></option>
|
||
<option value=1>Easily</option>
|
||
<option value=2>Moderately Difficult</option>
|
||
<option value=3>Unconcealable</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_shownemesis" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Frequency</span>
|
||
<select class="boarder" name="attr_defectnemesis">
|
||
<option value=0></option>
|
||
<option value=1>Infrequent</option>
|
||
<option value=2>Frequent</option>
|
||
<option value=3>Constant</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_shownightmares" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Frequency</span>
|
||
<select class="boarder" name="attr_defectnemesis">
|
||
<option value=0></option>
|
||
<option value=1>Infrequent</option>
|
||
<option value=2>Frequent</option>
|
||
<option value=3>Constant</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_shownohealing" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Disadvantage</span>
|
||
<select class="boarder" name="attr_defectnohealing">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showobligated" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Obligation</span>
|
||
<select class="boarder" name="attr_defectobligated">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Large</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showphobia" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Encountered</span>
|
||
<select class="boarder" name="attr_defectphobia">
|
||
<option value=0></option>
|
||
<option value=1>Infrequently</option>
|
||
<option value=2>Frequently</option>
|
||
<option value=3>Constantly</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showphysicalimpairment" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Inconvenience</span>
|
||
<select class="boarder" name="attr_defectphysicalimpairment">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showredtape" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Managability</span>
|
||
<select class="boarder" name="attr_defectredtape">
|
||
<option value=0></option>
|
||
<option value=1>Generally Easy</option>
|
||
<option value=2>Moderately Difficult</option>
|
||
<option value=3>Difficult</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showreduceddamage" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Damage Multiplier</span>
|
||
<select class="boarder" name="attr_defectreduceddamage">
|
||
<option value=0></option>
|
||
<option value=1>Minor (DM -1)</option>
|
||
<option value=2>Moderate (DM -2)</option>
|
||
<option value=3>SEvere (DM -3)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showsensoryimpairment" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Disadvantage</span>
|
||
<select class="boarder" name="attr_defectsensoryimpairment">
|
||
<option value=0></option>
|
||
<option value=1>Minor Obstacle</option>
|
||
<option value=2>Major Obstacle</option>
|
||
<option value=3>Loss of Sense</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showshortcoming" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Stat</span>
|
||
<select class="boarder" name="attr_defectaspect">
|
||
<option value=""></option>
|
||
<option class="font-bold" value="body">Body</option>
|
||
<option value="agi"> Agility</option>
|
||
<option value="con"> Constitution</option>
|
||
<option value="dex"> Dexterity</option>
|
||
<option value="str"> Strength</option>
|
||
<option class="font-bold" value="mind">Mind</option>
|
||
<option value="cre"> Creativity</option>
|
||
<option value="int"> Intellect</option>
|
||
<option value="per"> Perception</option>
|
||
<option value="rea"> Reasoning</option>
|
||
<option class="font-bold" value="soul">Soul</option>
|
||
<option value="awa"> Awareness</option>
|
||
<option value="cha"> Charisma</option>
|
||
<option value="com"> Composure</option>
|
||
<option value="wil"> Willpower</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showshortcoming" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Penalty</span>
|
||
<select name="attr_defectshortcoming"><option value="0">0</option><option value="1">-1</option><option value="2">-2</option><option value="3">-3</option><option value="4">-4</option><option value="5">-5</option><option value="6">-6</option><option value="7">-7</option><option value="8">-8</option><option value="9">-9</option><option value="10">-10</option><option value="11">-11</option><option value="12">-12</option><option value="13">-13</option><option value="14">-14</option><option value="15">-15</option><option value="16">-16</option><option value="17">-17</option><option value="18">-18</option></select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showsignificantother" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Appearance</span>
|
||
<select class="boarder" name="attr_defectsignificantother">
|
||
<option value=0></option>
|
||
<option value=1>Infrequently</option>
|
||
<option value=2>Frequently</option>
|
||
<option value=3>Constantly</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showskeletoninthecloset" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Discovery</span>
|
||
<select class="boarder" name="attr_defectskeletoninthecloset">
|
||
<option value=0></option>
|
||
<option value=1>Difficult</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Easy</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showsocialfault" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Disadvantage</span>
|
||
<select class="boarder" name="attr_defectsocialfault">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showspecialrequirement" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Requirement</span>
|
||
<select class="boarder" name="attr_defectspecialrequirement">
|
||
<option value=0></option>
|
||
<option value=1>Easy/Infrequent</option>
|
||
<option value=2>Moderately Difficult/Frequent</option>
|
||
<option value=3>Difficult/Constant</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showunappealing" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Offensiveness</span>
|
||
<select class="boarder" name="attr_defectunappealing">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showunique" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Defect</span>
|
||
<select class="boarder" name="attr_defectunique">
|
||
<option value=0></option>
|
||
<option value=1>Infrequent/Slight</option>
|
||
<option value=2>Frequent/Moderate</option>
|
||
<option value=3>Constant/Severe</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showunsettled" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Sanity Points</span>
|
||
<select class="boarder" name="attr_defectunsettled">
|
||
<option value=0></option>
|
||
<option value=1>Slight (-2)</option>
|
||
<option value=2>Moderate (-4)</option>
|
||
<option value=3>Severe (-6)</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showvulnerability" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Impact</span>
|
||
<select class="boarder" name="attr_defectvulnerability">
|
||
<option value=0></option>
|
||
<option value=1>Drop by one quarter</option>
|
||
<option value=2>Drop by one half</option>
|
||
<option value=3>Cannot be used</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showwanted" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Incentive</span>
|
||
<select class="boarder" name="attr_defectwanted">
|
||
<option value=0></option>
|
||
<option value=1>Slight</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Extreme</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_showweakpoint" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="col-1 padr">
|
||
<h4 class="center border container">
|
||
<span>Target</span>
|
||
<select class="boarder" name="attr_defectweakpoint">
|
||
<option value=0></option>
|
||
<option value=1>Difficult</option>
|
||
<option value=2>Moderate</option>
|
||
<option value=3>Easy</option>
|
||
</select>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="padding-right: 2px;" class="flex-grow">
|
||
<h4 class="center border">
|
||
<span style="font-size: 99px;"> </span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-1">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_statselection" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_majorstats" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_bodystate" value="1" />
|
||
<button type="action" class="allaspects-stat" name="act_body" value="">Body</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_mindstate" value="1" />
|
||
<button type='action' class="allaspects-stat" name='act_mind' value="">Mind</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_soulstate" value="1" />
|
||
<button type='action' class="allaspects-stat" name='act_soul' value="">Soul</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<button type="action" class="allaspects-stat-inactive">Body</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<button type='action' class="allaspects-stat-inactive">Mind</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<button type='action' class="allaspects-stat-inactive">Soul</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_minorstats" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_agistate" value="1" />
|
||
<button type='action' class="major-stat" name='act_agi' value="">Agility</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_crestate" value="1" />
|
||
<button type='action' class="major-stat" name='act_cre' value="">Creativity</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_awastate" value="1" />
|
||
<button type='action' class="major-stat" name='act_awa' value="">Awareness</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_constate" value="1" />
|
||
<button type='action' class="major-stat" name='act_con' value="">Constitution</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_intstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_int' value="">Intellect</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_chastate" value="1" />
|
||
<button type='action' class="major-stat" name='act_cha' value="">Charisma</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_dexstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_dex' value="">Dexterity</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_perstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_per' value="">Perception</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_comtate" value="1" />
|
||
<button type='action' class="major-stat" name='act_com' value="">Composure</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_strstate" value="1" />
|
||
<button type="action" class="major-stat" name="act_str" value="">Strength</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_reastate" value="1" />
|
||
<button type="action" class="major-stat" name="act_rea" value="">Reasoning</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_wilstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_wil' value="">Willpower</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_attrdefecttoggle" value="1" />
|
||
<div class="block-a">
|
||
<div class="col-1-2 center padl padr">
|
||
<div class="padb">
|
||
<h3 class="header border"><span>Enhancements</span></h3>
|
||
</div>
|
||
<h4 class="center border">
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Area" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementarea"><option value=0>Individual</option><option value=1>3 m radius</option><option value=2>10 m</option><option value=3>100 m radius</option><option value=4>1 km radius</option><option value=5>10 km radius</option><option value=6>100 km radius</option><option value=7>1,000 km radius</option><option value=8>10,000 km radius</option><option value=9>100,000 km radius</option><option value=10>1M km radius</option><option value=11>+</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Duration" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementduration"><option value=0>Per attribute description</option><option value=1>10 minutes / 2 rounds</option><option value=2>1 hour / 5 rounds</option><option value=3>1 day / 10 rounds</option><option value=4>1 week / 1 minute</option><option value=5>1 month / 1 hour</option><option value=6>1 season / 1 day</option><option value=10>Permanent</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Potent" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementpotent"><option value=0>Per attribute description</option><option value=1>Minor edge</option><option value=2>Major edge</option><option value=3>Minor edge, x1 reroll</option><option value=4>Major edge, x1 reroll</option><option value=5>Minor edge, x2 rerolls</option><option value=6>Major edge, x2 rerolls</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Range" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementrange"><option value=0>Self or touch</option><option value=1>3 m</option><option value=2>10 m</option><option value=3>100 m</option><option value=4>1 km</option><option value=5>10 km</option><option value=6>100 km</option><option value=7>1,000 km</option><option value=8>10,000 km</option><option value=9>100,000 km</option><option value=10>1M km</option><option value=11>+</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Targets" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtargets"><option value=0>Self or 1 target</option><option value=1>2 targets</option><option value=2>5 targets</option><option value=3>10 targets</option><option value=4>25 targets</option><option value=5>50 targets</option><option value=6>100 targets</option><option value=7>250 targets</option><option value=8>500 targets</option><option value=9>1,000 targets</option><option value=10>2,500 targets</option><option value=11>+</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Unique Enhancement" /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementunique"><option value=0>False</option><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option><option value=7>7</option><option value=8>8</option><option value=9>9</option><option value=10>10</option></select></div>
|
||
</div>
|
||
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab1" value="1" checked="checked" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab2" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab3" value="3" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab4" value="4" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab5" value="5" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab6" value="6" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab7" value="7" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab8" value="8" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab9" value="9" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab10" value="10" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab11" value="11" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab12" value="12" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab13" value="13" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab14" value="14" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab15" value="15" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab16" value="16" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab17" value="17" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab18" value="18" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab19" value="19" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab20" value="20" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab21" value="21" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab22" value="22" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab23" value="23" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab24" value="24" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab25" value="25" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab26" value="26" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab27" value="27" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab28" value="28" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab29" value="29" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab30" value="30" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab31" value="31" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab32" value="32" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab33" value="33" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab34" value="34" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab35" value="35" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab36" value="36" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab37" value="37" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab38" value="38" readonly /><span></span>
|
||
<input type="radio" name="attr_enhancementtab" class="enhancementtab enhancementtab39" value="39" readonly /><span></span>
|
||
|
||
<div class="tab-content enhancementtab1">
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab2"><!-- Armor -->
|
||
<div class="row">
|
||
<div class="col-1 padr fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab3"><!-- Unaffected -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="All Weapons" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementallweapons"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Attributes Affected" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementattributesaffected"><option value=0>Single</option><option value=1>Several</option><option value=2>Many</option><option value=3>All</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab4"><!-- Combat Technique -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blackout" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblackout"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blind Fighting" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblindfighting"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blind Shooting" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblindshooting"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Brutal" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementbrutal"><option value=0>False</option><option value=1>Level 1 Weapon</option><option value=2>Level 2 Weapon</option><option value=3>Level 3 Weapon</option><option value=4>Level 4 Weapon</option><option value=5>Level 5 Weapon</option><option value=6>Level 6 Weapon</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Concealment" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementconcealment"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Critical Strike" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcriticalstrike"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Dead Eye" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdeadeye"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Deflection" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdefelction"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Enhanced Knockback" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementenhancedknockback"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Extended Range" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementextendedrange"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Far Shot" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementfarshot"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Hardboiled" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementhardboiled"><option value=0>False</option><option value=1>Shock Value +10</option><option value=2>Shock Value +20</option><option value=3>Shock Value +30</option><option value=4>Shock Value +40</option><option value=5>Shock Value +50</option><option value=6>Shock Value +60</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Judge Opponent" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementjudgeopponent"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Rush Attack" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementrushattack"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Lethal Blow" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementlethalblow"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Lightning Reflexes" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementlightningreflexes"><option value=0>False</option><option value=1>Minor Edge on Initiative</option><option value=2>Major Edge on Initiative</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Multiple Targets" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmultipletargets"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Portable Armory" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementportablearmory"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Precise Aim" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementpreciseaim"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Reflection" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementreflection"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Steady Hand" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementsteadyhand"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Tournament Encyclopedia" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtournamentencyclopedia"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Two Weapons" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtwoweapons"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Weapons Encyclopedia" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementweaponsencyclopedia"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab5"><!-- Summon Creatures -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Creature Type" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcreaturetype"><option value=0>Natural</option><option value=1>Supernatural</option><option value=2>Dimensional</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab6"><!-- Absorption -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Synergistic" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementsynergistic"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab7"><!-- Conversion -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Escalate" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementescalate"><option value=0>False</option><option value=2>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab8"><!-- Dynamic Powers -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Category" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcategory"><option value=0>Minor Category</option><option value=1>Major Category</option><option value=2>Primal Category</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab9"><!-- Undetectable -->
|
||
<div class="row">
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Hearing" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementhearing"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Sight" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementsight"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Smell" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementsmell"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Taste" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtaste"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Touch" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtouch"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Echolocation (hearing)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementecholocation"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Infrasound (hearing)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementinfrasound"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Radio (hearing)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementradio"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Ultrasound (hearing)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementultrasound"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Infrared (sight)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementinfrared"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Ultraviolet (sight)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementultraviolet"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="X-ray (sight)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementx-ray"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Chemical, odorant (smell)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementodorant"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Chemical, tastant (taste)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtastant"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Magnetic Field (touch)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmagnetic"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Radiation (touch)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementradiation"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Seismic (touch)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementseismic"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Thermal (touch)" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementthermal"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab10"><!-- Merge -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab11"><!-- Flight -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab12"><!-- Force Field -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Air-Tight" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementairtight"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blocks Incorpreal" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblocksincorpreal"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blocks Teleport" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblocksteleport"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Field-Penetrating" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementfieldpenetrating"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Offensive" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementoffensive"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Regenerating" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementregenerating"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab13"><!-- Illusion -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Extra Sense" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementextrasense"><option value=0>1</option><option value=1>2</option><option value=2>3</option><option value=3>4</option><option value=4>5</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Multiple Illusions" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmultipleillusions"><option value=0>1</option><option value=1>2</option><option value=2>3</option><option value=3>4</option><option value=4>5</option><option value=5>6</option><option value=6>7</option><option value=7>8</option><option value=8>9</option><option value=9>10</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab14"><!-- Ground Speed -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab15"><!-- Massive Damage -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab16"><!-- Connected -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Influence" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementinfluence"><option value=0>Moderate</option><option value=1>Significant</option><option value=2>Great</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab17"><!-- Change State -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Quick Change" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementquickchange"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab18"><!-- Metamorphosis -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Forms" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementforms"><option value=0>Single Form</option><option value=1>Multiform</option><option value=2>Any Form</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab19"><!-- Mimic -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Powers" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementpowers"><option value=0>Single Power</option><option value=2>All Powers</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab20"><!-- Mind Control -->
|
||
<div class="row">
|
||
<div class="col-1 padr fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab21"><!-- Nullify -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Multiple Attributes" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmultipleattributes"><option value=0>False</option><option value=2>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab22"><!-- Plant Control -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab23"><!-- Resilient -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Complete" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcomplete"><option value=0>0</option><option value=1></option><option value=2>Not At All</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab24"><!-- Projection -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Projections" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementprojections"><option value=0>Single</option><option value=1>Few (up to 3)</option><option value=2>Several (up to 6)</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab25"><!-- Regeneration -->
|
||
<div class="row">
|
||
<div class="col-1-2 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab26"><!-- Reincarnation -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Difficult To Stop" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdifficulttostop"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab27"><!-- Shield -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Parry" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementparry"><option value=0>Normal</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab28"><!-- Size Change -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Both Ways" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementbothways"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab29"><!-- Special Movement -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Balance" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementbalance"><option value=0>False</option><option value=1>Never loses balance</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Cat-Like" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcatlike"><option value=0>False</option><option value=1>Half damage from falls</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Fast" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementfast"><option value=0>False</option><option value=1>x2 Running Speed</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Light-Footed" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementlightfooted"><option value=0>False</option><option value=1>Skim over loose surfaces</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Slithering" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementslithering"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Swinging" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementswinging"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Untrackable" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementuntrackable"><option value=0>False</option><option value=1>Leave no tracks</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Wall-Bouncing" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementwallbouncing"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Wall-Crawling" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementwallcrawling"><option value=0>False</option><option value=2>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Water-Walking" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementwaterwalking"><option value=0>False</option><option value=2>Walk/run on water surface</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Zen Direction" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementzendirection"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab30"><!-- Telekinesis -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab31"><!-- Telepathy -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab32"><!-- Teleport -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blind" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblind"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab33"><!-- Transfer -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="All Attributes" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementallattributes"><option value=0>False</option><option value=2>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab34"><!-- Transmute -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Resize" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementresize"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Gaseous" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementgaseous"><option value=0>False</option><option value=2>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab35"><!-- Weapons -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Accurate" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementaccurate"><option value=0>False</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Aura" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementaura"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Autofire" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementautofire"><option value=0>False</option><option value=3>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Blight" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementblight"><option value=0>False</option><option value=1>Average (TN 12)</option><option value=2>Difficult (TN 15)</option><option value=3>Challenging (TN 18)</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Contact" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcontact"><option value=0>False</option><option value=1>Extended</option><option value=2>Brief</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Contagious" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcontagious"><option value=0>False</option><option value=1>No Obstacle (TN 12)</option><option value=2>Minor Obstacle (TN 12)</option><option value=3>Major Obstacle (TN 12)</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Continuing" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcontinuing"><option value=0>False</option><option value=1>1/True</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Defense" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdefense"><option value=0>0 DCV</option><option value=1>+1 DCV</option><option value=2>+2 DCV</option><option value=3>+3 DCV</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Drain" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdrain"><option value=0>False</option><option value=1>-1</option><option value=2>-2</option><option value=3>-3</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Enervation" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementenervation"><option value=0>False</option><option value=1>5 energy drain</option><option value=2>10 energy drain</option><option value=3>15 energy drain</option><option value=4>20 energy drain</option><option value=5>25 energy drain</option><option value=6>30 energy drain</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Flare - Audible" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementflareaudible"><option value=0>False</option><option value=1>TN 12</option><option value=2>Minor Obstacle vs TN 12</option><option value=3>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Flare - Scent" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementflarescent"><option value=0>False</option><option value=1>TN 12</option><option value=2>Minor Obstacle vs TN 12</option><option value=3>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Flare - Tactile" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementflaretactile"><option value=0>False</option><option value=1>TN 12</option><option value=2>Minor Obstacle vs TN 12</option><option value=3>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Flare - Taste" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementflaretaste"><option value=0>False</option><option value=1>TN 12</option><option value=2>Minor Obstacle vs TN 12</option><option value=3>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Flare - Visual" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementflarevisual"><option value=0>False</option><option value=1>TN 12</option><option value=2>Minor Obstacle vs TN 12</option><option value=3>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Flexible" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementflexible"><option value=0>False</option><option value=1>Major Obstacle</option><option value=2>Minor Obstacle</option><option value=3>Normal</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Helper" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementhelper"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Homing" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementhoming"><option value=0>False</option><option value=1>Minor Obstacle</option><option value=2>Major Obstacle</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Incapacitating" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementincapacitating"><option value=0>False</option><option value=2>Minor Obstacle vs TN 12</option><option value=4>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Inconspicuous" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementinconspicuous"><option value=0>False</option><option value=3>True</option></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Incurable" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementincurable"><option value=0>False</option><option value=1>Normal Recovery</option><option value=2>Slow Recovery</option><option value=3>Special Recovery</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Indirect" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementindirect"><option value=0>False</option><option value=1>Minor Obstacle</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Insidious" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementinsidious"><option value=0>False</option><option value=3>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Irritant" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementirritant"><option value=0>False</option><option value=1>Normal vs TN 12</option><option value=2>Minor Obstacle vs TN 12</option><option value=3>Major Obstacle vs TN 12</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Knockback" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementknockback"><option value=0>Normal</option><option value=1>x2</option><option value=2>x4</option><option value=3>x8</option><option value=4>x16</option><option value=5>x32</option><option value=6>x64</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Linked" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementlinked"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Multidimensional" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmultidimensional"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Muscle" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmuscle"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="No Hands" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementnohands"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Penetrating Armor" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementpenetrating"><option value=0>False</option><option value=1>-10 armor rating</option><option value=2>-20 armor rating</option><option value=3>-30 armor rating</option><option value=4>-40 armor rating</option><option value=5>-50 armor rating</option><option value=6>-60 armor rating</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Piercing Forcefield" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementpiercing"><option value=0>False</option><option value=1>-10 armor rating</option><option value=2>-20 armor rating</option><option value=3>-30 armor rating</option><option value=4>-40 armor rating</option><option value=5>-50 armor rating</option><option value=6>-60 armor rating</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Psychic" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementpsychic"><option value=0>False</option><option value=4>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Quake" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementquake"><option value=0>False</option><option value=1>2 m deep fissure</option><option value=2>5 m deep fissure</option><option value=3>10 m deep fissure</option><option value=4>30 m deep fissure</option><option value=5>100 m deep fissure</option><option value=6>300 m deep fissure</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Reach" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementreach"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Selective" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementselective"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Spreading" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementspreading"><option value=0>False</option><option value=1>1 target</option><option value=2>2 targets</option><option value=3>3 targets</option><option value=4>4 targets</option><option value=5>5 targets</option><option value=6>6 targets</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Stun Only" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementstunonly"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Tangle" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtangle"><option value=0>False</option><option value=1>5 HP Tangle</option><option value=2>10 HP Tangle</option><option value=3>15 HP Tangle</option><option value=4>20 HP Tangle</option><option value=5>25 HP Tangle</option><option value=6>30 HP Tangle</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Targeted" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtargeted"><option value=0>False</option><option value=1>Individual</option><option value=2>Specific Group</option><option value=3>Common Group</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Trap" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementtrap"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Vampiric" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementvampiric"><option value=0>False</option><option value=2>Restore</option><option value=4>Increase</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab36"><!-- Power Flux -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Category" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcategory"><option value=0>Minor</option><option value=1>Major</option><option value=2>Primal</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab37"><!-- Heightened Senses -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Heightened Sight" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementheightenedsight"><option value=0>False</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Heightened Hearing" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementheightenedhearing"><option value=0>False</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Heightened Touch" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementheightenedtouch"><option value=0>False</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Heightened Smell" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementheightenedsmell"><option value=0>False</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Heightened Taste" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementheightenedtaste"><option value=0>False</option><option value=1>Minor Edge</option><option value=2>Major Edge</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab38"><!-- Sixth Sense -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Attribute Source" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementattrsrc"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Danger" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdanger"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Dimensions" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdimensions"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Elements" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementelements"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Emotions" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementemotions"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Extra-planar Beings" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementextraplanarbeings"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Illusions" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementillusions"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Morality" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementmorality"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Objects" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementobjects"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Places of Power" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementplacesofpower"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Unique Phenomena" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementuniquephenomena"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content enhancementtab39"><!-- Control Environment -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Arid" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementarid"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Clouds" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementclouds"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Cold" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementcold"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Darkness" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementdarkness"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Heat" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementheat"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Humidity" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementhumidity"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Light" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementlight"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Liquid" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementliquid"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Gaseous" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementgaseous"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Smell" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementsmell"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Sound" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementsound"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Storms" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementstorms"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Vacuum" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_enhancementvacuum"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
|
||
<div class="col-1-2 center padr">
|
||
<div class="padb">
|
||
<h3 class="header border"><span>Limiters</span></h3>
|
||
</div>
|
||
<h4 class="center border">
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Activation" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiteractivation"><option value=0>False</option><option value=1>1 round to prepare</option><option value=2>1 minute to prepare</option><option value=3>1 hour to prepare</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Assisted" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterassisted"><option value=0>False</option><option value=1>Single assistant</option><option value=2>Small group (2-10)</option><option value=3>Large group (11-100)</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Backlash" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterbacklash"><option value=0>False</option><option value=1>Significant failure (=>6)</option><option value=2>Moderate failure (=>3)</option><option value=3>Any failed roll</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Charges" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitercharges"><option value=0>False</option><option value=1>6 charges</option><option value=2>3 charges</option><option value=3>Single charge</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Concentration" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterconcentration"><option value=0>False</option><option value=1>Slight: general actions only</option><option value=2>Intense: walk and talk only</option><option value=3>Full: cannot do anything else</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Consumable" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterconsumable"><option value=0>False</option><option value=1>Easy to replace</option><option value=2>Hard to replace</option><option value=3>Very difficult to replace</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Delay" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterdelay"><option value=0>False</option><option value=1>Few minutes</option><option value=2>Few hours</option><option value=3>Few days</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Dependent" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterdependent"><option value=0>False</option><option value=1>Requires 1 activated attribute</option><option value=2>Requires 2 activated attributes</option><option value=3>Requires 3 activated attributes</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Deplete" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterdeplete"><option value=0>0 endurance</option><option value=1>x1 Immediate/x2 Ongoing</option><option value=2>x2 Immediate/x4 Ongoing</option><option value=3>x3 Immediate/x6 Ongoing</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Detectable" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterdetectable"><option value=0>False</option><option value=1>Up to 2 methods</option><option value=2>Up to 5 methods</option><option value=3>Up to 10 methods</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Emotional" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiteremotional"><option value=0>False</option><option value=1>Significant emotion</option><option value=2>Strong emotion</option><option value=3>Extreme emotion</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Environmental" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterenvironmental"><option value=0>False</option><option value=1>Common</option><option value=2>Occasional</option><option value=3>Rare</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Equipment" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterequipment"><option value=0>False</option><option value=1>Easily portable</option><option value=2>Awkward portability</option><option value=3>Static (cannot be moved)</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Imbue" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterimbue"><option value=0>False</option><option value=1>Up to 5 people</option><option value=2>Up to 3 people</option><option value=3>1 person</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Irreversible" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterirreversible"><option value=0>False</option><option value=1>Special circumstances</option><option value=2>Expensive/rare components</option><option value=3>Process takes several days</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Localized" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterlocalized"><option value=0>False</option><option value=1>Affects large part of body</option><option value=2>Affects small part of body</option><option value=3>Affects tiny part of body</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Maximum" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitermaximum"><option value=0>False</option><option value=1>Up to Level 2 attribute</option><option value=2>Up to Level 4 attribute</option><option value=3>Attribute is Level 5 or greater</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Object" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterobject"><option value=0>False</option><option value=1>Significant benefit</option><option value=2>Slight benefit</option><option value=3>Minor benefit</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Permanent" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterpermanent"><option value=0>False</option><option value=1>Slight inconvenience</option><option value=2>Minor inconvenience</option><option value=3>Moderate inconvenience</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Recovery" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterrecovery"><option value=0>False</option><option value=1>1:1 minute cool off</option><option value=2>1:10 minute cool off</option><option value=3>1 minute:1 hour cool off</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Semi-permanent" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitersemipermanent"><option value=0>False</option><option value=1>1 EP/minute</option><option value=2>10 EP/minute</option><option value=3>10 EP/round</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Unique Limiter" /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterunique"><option value=0>False</option><option value=1>Minor restriction</option><option value=2>Moderate restriction</option><option value=3>Major restriction</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Unpredictable" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterunpredictable"><option value=0>False</option><option value=1>Stat vs TN 12</option><option value=2>Stat vs TN 15</option><option value=3>Stat vs TN 18</option></select></div>
|
||
</div>
|
||
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab1" value="1" checked="checked" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab2" value="2" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab3" value="3" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab4" value="4" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab5" value="5" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab6" value="6" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab7" value="7" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab8" value="8" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab9" value="9" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab10" value="10" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab11" value="11" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab12" value="12" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab13" value="13" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab14" value="14" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab15" value="15" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab16" value="16" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab17" value="17" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab18" value="18" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab19" value="19" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab20" value="20" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab21" value="21" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab22" value="22" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab23" value="23" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab24" value="24" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab25" value="25" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab26" value="26" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab27" value="27" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab28" value="28" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab29" value="29" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab30" value="30" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab31" value="31" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab32" value="32" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab33" value="33" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab34" value="34" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab35" value="35" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab36" value="36" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab37" value="37" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab38" value="38" readonly /><span></span>
|
||
<input type="radio" name="attr_limitertab" class="limitertab limitertab39" value="39" readonly /><span></span>
|
||
|
||
<div class="tab-content limitertab1">
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab2"><!-- Armor -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Specialized" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterspecialized"><option value=0>Ordinary</option><option value=1>Emphasized</option><option value=2>Optimized</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Gap" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitergap"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab3"><!-- Unaffected -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab4"><!-- Combat Technique -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab5"><!-- Summon Creatures -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Category" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitercategory"><option value=0>Any</option><option value=1>Narrow</option><option value=2>Specific</option><option value=3>Single</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab6"><!-- Absorption -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Capped" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitercapped"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab7"><!-- Conversion -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab8"><!-- Dynamic Powers -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab9"><!-- Undetectable -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Nonadjacent" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiternonadjacent"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab10"><!-- Merge -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Proportional Damage" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterproportionaldamage"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab11"><!-- Flight -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Glide" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterglide"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Maintain" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitermaintain"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Skim" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterskim"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Spread" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterspread"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab12"><!-- Force Field -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Both Directions" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterbothdirections"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Internal" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterinternal"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Impacting" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterimpacting"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab13"><!-- Illusion -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab14"><!-- Ground Speed -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Road-Bound" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterroadbound"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab15"><!-- Massive Damage -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Focused Damage" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterfocuseddamage"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Targeted Damage" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitertargeteddamage"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab16"><!-- Connected -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab17"><!-- Change State -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab18"><!-- Metamorphosis -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab19"><!-- Mimic -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab20"><!-- Mind Control -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Category" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitercategory"><option value=0>All</option><option value=1>Broad</option><option value=2>Narrow</option><option value=3>Specific</option><option value=4>Single</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab21"><!-- Nullify -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab22"><!-- Plant Control -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Control" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitergroup"><option value=0>All</option><option value=1>Group</option><option value=2>Species</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab23"><!-- Resilient -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab24"><!-- Projection -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab25"><!-- Regeneration -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Conditional" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterintensity"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab26"><!-- Reincarnation -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab27"><!-- Shield -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab28"><!-- Size Change -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab29"><!-- Special Movement -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab30"><!-- Telekinesis -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Focused" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterfocused"><option value=0>False</option><option value=1>Air</option><option value=1>Earth</option><option value=1>Fire</option><option value=1>Metal</option><option value=1>Wood</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab31"><!-- Telepathy -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Category" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitercategoty"><option value=0>All</option><option value=1>Broad</option><option value=2>Narrow</option><option value=3>Specific</option><option value=4>Single</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab32"><!-- Teleport -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab33"><!-- Transfer -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Specific Attribute" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterspecificattribute"><option value=0>False</option><option value=2>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab34"><!-- Transmute -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Broad Category" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterbroadcategory"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab35"><!-- Weapons -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Ammo" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterammo"><option value=0>False</option><option value=1>6 shots</option><option value=2>3 shots</option><option value=3>1 shot</option><option value=4>Single use</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Backblast" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterbackblast"><option value=0>False</option><option value=1>2 m directly behind attacker</option><option value=2>Attacker and 2 m directly behind</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text"value="Exclusive" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterexclusive"><option value=0>False</option><option value=1>Limited to large group</option><option value=2>Limited to small group</option><option value=3>Limited to single thing</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Fieldless" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterfieldless"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Hands" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterhands"><option value=0>Single-handed</option><option value=1>Two-handed</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Inaccurate" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterinaccurate"><option value=0>False</option><option value=1>Minor Obstacle</option><option value=2>Major Obstacle</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Ingest" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiteringest"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="No Stun" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiternostun"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Non-Penetrating" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiternonpenetrating"><option value=0>False</option><option value=1>+10 Armor Rating</option><option value=2>+20 Armor Rating</option><option value=3>+30 Armor Rating</option><option value=4>+40 Armor Rating</option><option value=5>+50 Armor Rating</option><option value=6>+60 Armor Rating</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Stoppable" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterstoppable"><option value=0>False</option><option value=1>One round</option><option value=2>5 rounds</option><option value=3>One minute</option><option value=4>One hour</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Toxic" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limitertoxic"><option value=0>False</option><option value=1>No effect on non-living/immune</option><option value=2>Temporary immunity if aware</option></select></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Unreliable" disabled /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterunreliable"><option value=0>False</option><option value=1>Malfunction on natural 2</option><option value=2>Malfunction on natural 2-3</option><option value=3>Malfunction on natural 2-4</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab36"><!-- Power Flux -->
|
||
<div class="row">
|
||
<div class="col-1-2 padr fontsize-12px"><input type="text" value="Skill Flux" readonly /></div>
|
||
<div class="col-1-2 padr fontsize-12px"><select name="attr_limiterskillflux"><option value=0>False</option><option value=1>True</option></select></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab37"><!-- Heightened Senses -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab38"><!-- Sixth Sense -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-content limitertab39"><!-- Control Environment -->
|
||
<div class="row">
|
||
<div class="col-1 center fontsize-12px"></div>
|
||
</div>
|
||
</div>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
<div class="block-b"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-skills header"><h3 class="center" style="color: white">Skills</h3>
|
||
<div style="padding-bottom: 25px;">
|
||
<div class="row center padt">
|
||
<button type="action" name="act_skillgroup1" ><span name="attr_static_skillgroup_1_name"></span></button>
|
||
<button type="action" name="act_skillgroup2" ><span name="attr_static_skillgroup_2_name"></span></button>
|
||
<button type="action" name="act_skillgroup3" ><span name="attr_static_skillgroup_3_name"></span></button>
|
||
<button type="action" name="act_skillgroup4" ><span name="attr_static_skillgroup_4_name"></span></button>
|
||
<button type="action" name="act_skillgroup5" ><span name="attr_static_skillgroup_5_name"></span></button>
|
||
</div>
|
||
<input type='hidden' class='skilltabstoggle' name='attr_static_skillgroup_selected_tab' value='skillgroup1' />
|
||
|
||
<div class='skillgroup1'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-2-5">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_skillgroup_1_name" value="Group 1" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center" name="attr_static_skillgroup_1_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_skillgroup_1_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="text" class="center" name="attr_static_skillgroup_1_groupremaining" value="@{static_skillgroup_1_groupmax}-@{static_skillgroup_1_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_skillgroup_1_spent" value=0 readonly />
|
||
<input type="hidden" name="attr_static_skillgroup_1_source" value="" readonly />
|
||
</div>
|
||
</div>
|
||
<div class='skillgroup2'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-2-5">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_skillgroup_2_name" value="Group 2" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center" name="attr_static_skillgroup_2_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_skillgroup_2_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="text" class="center" name="attr_static_skillgroup_2_groupremaining" value="@{static_skillgroup_2_groupmax}-@{static_skillgroup_2_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_skillgroup_2_spent" value=0 readonly />
|
||
<input type="hidden" name="attr_static_skillgroup_2_source" value="" readonly />
|
||
</div>
|
||
</div>
|
||
<div class='skillgroup3'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-2-5">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_skillgroup_3_name" value="Group 3" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center" name="attr_static_skillgroup_3_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_skillgroup_3_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="text" class="center" name="attr_static_skillgroup_3_groupremaining" value="@{static_skillgroup_3_groupmax}-@{static_skillgroup_3_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_skillgroup_3_spent" value=0 readonly />
|
||
<input type="hidden" name="attr_static_skillgroup_3_source" value="" readonly />
|
||
</div>
|
||
</div>
|
||
<div class='skillgroup4'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-2-5">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_skillgroup_4_name" value="Group 4" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center" name="attr_static_skillgroup_4_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_skillgroup_4_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="text" class="center" name="attr_static_skillgroup_4_groupremaining" value="@{static_skillgroup_4_groupmax}-@{static_skillgroup_4_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_skillgroup_4_spent" value=0 readonly />
|
||
<input type="hidden" name="attr_static_skillgroup_4_source" value="" readonly />
|
||
</div>
|
||
</div>
|
||
<div class='skillgroup5'>
|
||
<div class="flex-container-evenlyspace center padt padb">
|
||
<div class="flex-2-5">
|
||
<h4 class="center border">
|
||
<span>Group Name
|
||
<input type="text" class="center border" name="attr_static_skillgroup_5_name" value="Group 5" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<h4 class="center border">
|
||
<span>Group Type
|
||
<input type="text" class="center" name="attr_static_skillgroup_5_type" value="Standard" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Max
|
||
<input type="text" class="center" name="attr_static_skillgroup_5_groupmax" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-6">
|
||
<h4 class="center border">
|
||
<span>Remaining
|
||
<input type="text" class="center" name="attr_static_skillgroup_5_groupremaining" value="@{static_skillgroup_5_groupmax}-@{static_skillgroup_5_spent}" disabled />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<input type="hidden" name="attr_static_skillgroup_5_spent" value=0 readonly />
|
||
<input type="hidden" name="attr_static_skillgroup_5_source" value="" readonly />
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="repeating_skill">
|
||
<div class="padr padl">
|
||
<input type="checkbox" class="block-switch" name="attr_visible" value="1" />
|
||
<div class="block-a border padt padb">
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-skillchild-button">
|
||
<button type="roll" style="padding: 8px;" class="d6button" name="roll_skillroll" value="@{skillrollvalue}"></button>
|
||
<input type="hidden" name="attr_skillrollvalue" value="/roll 2d6" />
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Skill
|
||
<input type="text" class="center" name="attr_name" placeholder="Skill Name" value="" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-2-5 padr">
|
||
<h4 class="center border">
|
||
<span>Skill Specializations
|
||
<input type="text" class="center" name="attr_specializations" placeholder="Skill Specializations" value="" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-4 padr">
|
||
<h4 class="center border">
|
||
<span>Stat
|
||
<input type="text" class="center" name="attr_stat" value="" readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-skillchild-button">
|
||
<button style="padding: 8px;" type='action' name='act_statselection'><span class="pictos">U</span></button>
|
||
</div>
|
||
<div class="flex-skillchild-button">
|
||
<button style="padding: 8px;" type='action' name='act_option'><span class="pictos">y</span></button>
|
||
</div>
|
||
<input type="hidden" name="attr_group" value=0 readonly />
|
||
<input type="hidden" name="attr_new" value=1 readonly />
|
||
<input type="hidden" name="attr_costperlevel" value=0 readonly />
|
||
</div>
|
||
<div class="flex-container-evenlyspace padb">
|
||
<div class="flex-1">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_option" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div class="flex-container-evenlyspace padr padl">
|
||
<div class='flex-1-16'></div>
|
||
<div class="flex-1-7 padr">
|
||
<h4 class="center border">
|
||
<span>Rank
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_levelelevation" value="1" />
|
||
<div class="block-a">
|
||
<div class="col-1">
|
||
<select style="width: 100%;" name="attr_level"><option value=0>0</option><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option><option value=7>+</option></select>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="col-1">
|
||
<div><input type="number" name="attr_level" value="0" /></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-1-7 padr">
|
||
<h4 class="center border">
|
||
<span>Cost
|
||
<input type="text" class='center' name="attr_totalcost" value=0 readonly />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="flex-3-4 padr">
|
||
<h4 class="center border">
|
||
<span>Define Skill Specializations
|
||
<input type="text" class="center" name="attr_specializations" placeholder='Add comma seperated skill specializations here' value="" />
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class='flex-1-7'></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="flex-container-evenlyspace">
|
||
<div class="flex-1">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_statselection" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_majorstats" value="1" />
|
||
<div class="block-a">
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_bodystate" value="1" />
|
||
<button type="action" class="allaspects-stat" name="act_body" value="">Body</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_mindstate" value="1" />
|
||
<button type='action' class="allaspects-stat" name='act_mind' value="">Mind</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_soulstate" value="1" />
|
||
<button type='action' class="allaspects-stat" name='act_soul' value="">Soul</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<button type="action" class="allaspects-stat-inactive">Body</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<button type='action' class="allaspects-stat-inactive">Mind</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<button type='action' class="allaspects-stat-inactive">Soul</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" class="block-switch" name="attr_minorstats" value="1" />
|
||
<div class="block-a"></div>
|
||
<div class="block-b">
|
||
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_agistate" value="1" />
|
||
<button type='action' class="major-stat" name='act_agi' value="">Agility</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_crestate" value="1" />
|
||
<button type='action' class="major-stat" name='act_cre' value="">Creativity</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_awastate" value="1" />
|
||
<button type='action' class="major-stat" name='act_awa' value="">Awareness</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_constate" value="1" />
|
||
<button type='action' class="major-stat" name='act_con' value="">Constitution</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_intstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_int' value="">Intellect</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_chastate" value="1" />
|
||
<button type='action' class="major-stat" name='act_cha' value="">Charisma</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_dexstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_dex' value="">Dexterity</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_perstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_per' value="">Perception</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_comtate" value="1" />
|
||
<button type='action' class="major-stat" name='act_com' value="">Composure</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
<div class="flex-container center padb">
|
||
<div class='flex-1-3'></div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_strstate" value="1" />
|
||
<button type="action" class="major-stat" name="act_str" value="">Strength</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_reastate" value="1" />
|
||
<button type="action" class="major-stat" name="act_rea" value="">Reasoning</button>
|
||
</div>
|
||
<div class="flex-1-5">
|
||
<input type="checkbox" class="stats" name="attr_wilstate" value="1" />
|
||
<button type='action' class="major-stat" name='act_wil' value="">Willpower</button>
|
||
</div>
|
||
<div class='flex-1-6'></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="block-b">
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
<div>
|
||
<h5 style="float: left;" class="col-1-20">
|
||
<div>
|
||
<input type="checkbox" name="attr_skillmanagement" class="ro-checkbox" /><span style="position: relative; font-size: 16px; color: black; background: white; border: 1px solid black; border-radius: 1px; padding-left: 3px; padding-right: 3px; left: -15px; bottom: 4px;"><b>+</b></span>
|
||
<div class="ro-modal padl padr">
|
||
<div class="border">
|
||
<div class="ro-close-wrapper">
|
||
<input type="checkbox" name="attr_skillmanagement" class="ro-close-checkbox" value="1" />
|
||
<span class="ro-close-label"></span>
|
||
</div>
|
||
<div class="row ro-header padb">
|
||
<div class="padt">
|
||
<h3 class="col-1-2 border">
|
||
<div class="row">
|
||
<div class="col-1-12"><span></span></div>
|
||
<div class="col-3-4 padr"><span>Skill</span></div>
|
||
<div class="col-1-6 padr"><span>Cost</span></div>
|
||
</div>
|
||
<fieldset class="repeating_skilltemplate">
|
||
<div class="row">
|
||
<div class="col-1-12"><button style="background: white; border: 1px solid black; border-radius: 1px; padding-left: 5px; padding-right: 5px;" type="action" name="act_addskill"><span style="position: relative; font-size: 14px; color: black;"><b>+</b></span></button></div>
|
||
<div class="col-3-4 padr tooltip">
|
||
<input type="text" name="attr_label" value="" readonly />
|
||
<h3><span class="tooltip"><textarea class="tooltip" name="attr_description" value="" readonly ></textarea></span></h3>
|
||
</div>
|
||
<div class="col-1-6 padr">
|
||
<input style="text-align: center;" type="text" name="attr_cost" value="" placeholder="Cost" readonly />
|
||
<input type="hidden" name="attr_costperlevel" value="" />
|
||
<input type="hidden" name="attr_description" value="" />
|
||
<input type="hidden" name="attr_specializations" value="" />
|
||
<input type="hidden" name="attr_statmajor" value="" />
|
||
<input type="hidden" name="attr_statminor" value="" />
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</h5>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-trappings header"><h3 class="center" style="color: white">Trappings</h3>
|
||
<div class="padt padb">
|
||
<div class="row">
|
||
<div class="col-1-2 padr padl">
|
||
<h4 class="border center">
|
||
<span>Intentory
|
||
<fieldset class="repeating_inventory">
|
||
<div class="row">
|
||
<div class="col-3-4 center"><input type="text" name="attr_name" placeholder="Item Name" value="" /></div>
|
||
<div class="col-1-4 center"><input type="number" name="attr_quantity" value=1 /></div>
|
||
</div>
|
||
</fieldset>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
<div class="col-1-2 padr padl">
|
||
<h4 class="border center">
|
||
<span>Journal
|
||
<div class="center"><textarea name="attr_journal" style="height:400px; width:98%;"></textarea></div>
|
||
</span>
|
||
</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!--************************* Hidden Values *************************-->
|
||
|
||
<div>
|
||
<input type="hidden" name="attr_stat_cost_body" value=0 />
|
||
<input type="hidden" name="attr_stat_cost_mind" value=0 />
|
||
<input type="hidden" name="attr_stat_cost_soul" value=0 />
|
||
</div>
|
||
|
||
<!-- ************************ Roll Templates ************************ -->
|
||
|
||
<rolltemplate class="sheet-rolltemplate-besmDefault">
|
||
<div class="rt-card">
|
||
<div class="rt-header{{#attack}} attack{{/attack}}{{#defense}} defense{{/defense}}{{#rolls}} rolls{{/rolls}}{{#save}} save{{/save}}{{#deathsave}} deathsave{{/deathsave}}">
|
||
<div class="sheet-rt-title"><b>{{title}}</b></div>
|
||
</div>
|
||
<div class="sheet-main-content">
|
||
{{#attack}}
|
||
<div class="rt-emote"><i>{{character_name}} attacks {{target_name}} with {{pronoun}} {{weapon_name}}!</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Maneuver</div>
|
||
<div class="col-7-12 padr rt-value center">{{maneuver}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">ACV</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{acv}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Damage</div>
|
||
{{#rollTotal() roll 2}}
|
||
<div class="col-7-12 padr rt-value center">{{damage2}}</div>
|
||
{{/rollTotal() roll 2}} {{#rollTotal() roll 3}}
|
||
<div class="col-7-12 padr rt-value center">{{damage3}}</div>
|
||
{{/rollTotal() roll 3}} {{#rollTotal() roll 4}}
|
||
<div class="col-7-12 padr rt-value center">{{damage4}}</div>
|
||
{{/rollTotal() roll 4}} {{#rollTotal() roll 5}}
|
||
<div class="col-7-12 padr rt-value center">{{damage5}}</div>
|
||
{{/rollTotal() roll 5}} {{#rollTotal() roll 6}}
|
||
<div class="col-7-12 padr rt-value center">{{damage6}}</div>
|
||
{{/rollTotal() roll 6}} {{#rollTotal() roll 7}}
|
||
<div class="col-7-12 padr rt-value center">{{damage7}}</div>
|
||
{{/rollTotal() roll 7}} {{#rollTotal() roll 8}}
|
||
<div class="col-7-12 padr rt-value center">{{damage8}}</div>
|
||
{{/rollTotal() roll 8}} {{#rollTotal() roll 9}}
|
||
<div class="col-7-12 padr rt-value center">{{damage9}}</div>
|
||
{{/rollTotal() roll 9}} {{#rollTotal() roll 10}}
|
||
<div class="col-7-12 padr rt-value center">{{damage10}}</div>
|
||
{{/rollTotal() roll 10}} {{#rollTotal() roll 11}}
|
||
<div class="col-7-12 padr rt-value center">{{damage11}}</div>
|
||
{{/rollTotal() roll 11}} {{#rollTotal() roll 12}}
|
||
<div class="col-7-12 padr rt-value center">{{damage12}}</div>
|
||
{{/rollTotal() roll 12}}
|
||
</div>
|
||
{{/attack}} {{#area}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Area</div>
|
||
<div class="col-7-12 padr rt-value center">{{radius}} m radius</div>
|
||
</div>
|
||
{{/area}} {{#duration}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Duration</div>
|
||
<div class="col-7-12 padr rt-value center">{{time}}</div>
|
||
</div>
|
||
{{/duration}} {{#range}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Range</div>
|
||
<div class="col-7-12 padr rt-value center">{{distance}} {{kilometers}}m</div>
|
||
</div>
|
||
{{/range}} {{#autofire}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Autofire - Attack</div>
|
||
<div class="col-7-12 padr rt-value center">Number of Hits</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">>1-3</div>
|
||
<div class="col-7-12 padr rt-value center">1</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">>4-6</div>
|
||
<div class="col-7-12 padr rt-value center">2</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">>7-9</div>
|
||
<div class="col-7-12 padr rt-value center">3</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">>10-12</div>
|
||
<div class="col-7-12 padr rt-value center">4</div>
|
||
</div>
|
||
{{/autofire}} {{#blight}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Blight</div>
|
||
<div class="col-7-12 padr rt-value center">Body vs TN{{blight}}</div>
|
||
</div>
|
||
{{/blight}} {{#contact}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Contact</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/contact}} {{#contagious}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Contagious</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/contagious}} {{#continuing}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Continuing Damage</div>
|
||
{{#rollTotal() roll 2}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing2}}</div>
|
||
{{/rollTotal() roll 2}} {{#rollTotal() roll 3}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing3}}</div>
|
||
{{/rollTotal() roll 3}} {{#rollTotal() roll 4}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing4}}</div>
|
||
{{/rollTotal() roll 4}} {{#rollTotal() roll 5}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing5}}</div>
|
||
{{/rollTotal() roll 5}} {{#rollTotal() roll 6}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing6}}</div>
|
||
{{/rollTotal() roll 6}} {{#rollTotal() roll 7}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing7}}</div>
|
||
{{/rollTotal() roll 7}} {{#rollTotal() roll 8}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing8}}</div>
|
||
{{/rollTotal() roll 8}} {{#rollTotal() roll 9}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing9}}</div>
|
||
{{/rollTotal() roll 9}} {{#rollTotal() roll 10}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing10}}</div>
|
||
{{/rollTotal() roll 10}} {{#rollTotal() roll 11}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing11}}</div>
|
||
{{/rollTotal() roll 11}} {{#rollTotal() roll 12}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing12}}</div>
|
||
{{/rollTotal() roll 12}}
|
||
</div>
|
||
{{/continuing}} {{#drain}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Drain</div>
|
||
<div class="col-7-12 padr rt-value center">{{draintype}} -{{drain}}</div>
|
||
</div>
|
||
{{/drain}} {{#enervation}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Enervation</div>
|
||
<div class="col-7-12 padr rt-value center">Energy -{{enervation}}</div>
|
||
</div>
|
||
{{/enervation}} {{#flare}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Flare ({{sense}})</div>
|
||
<div class="col-7-12 padr rt-value center">{{obstacle}} Obstacle vs. TN 12</div>
|
||
</div>
|
||
{{/flare}} {{#flexible}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Flexible</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/flexible}} {{#helper}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Helper</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/helper}} {{#homing}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Homing</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/homing}} {{#incapacitating}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Incapacitating</div>
|
||
<div class="col-7-12 padr rt-value center">{{obstacle}} vs. TN 12</div>
|
||
</div>
|
||
{{/incapacitating}} {{#inconspicuous}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Inconspicuous</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/inconspicuous}} {{#incurable}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Incurable</div>
|
||
<div class="col-7-12 padr rt-value center">{{recovery}}</div>
|
||
</div>
|
||
{{/incurable}} {{#irritant}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Irritant</div>
|
||
<div class="col-7-12 padr rt-value center">{{obstacle}} vs. TN 12</div>
|
||
</div>
|
||
{{/irritant}} {{#knockback}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Knockback</div>
|
||
<div class="col-7-12 padr rt-value center">x{{kb}}</div>
|
||
</div>
|
||
{{/knockback}} {{#multidimensional}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Multidimensional</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/multidimensional}} {{#pen}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">{{penname}}</div>
|
||
<div class="col-7-12 padr rt-value center">{{pentype}} -{{pen}}</div>
|
||
</div>
|
||
{{/pen}} {{#psychic}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Psychic</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/psychic}} {{#quake}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Quake</div>
|
||
<div class="col-7-12 padr rt-value center">{{fissure}} m deep fissure</div>
|
||
</div>
|
||
{{/quake}} {{#reach}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Reach</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/reach}} {{#selective}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Selective</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/selective}} {{#spreading}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Spreading</div>
|
||
<div class="col-7-12 padr rt-value center">{{spreading}} additional target</div>
|
||
</div>
|
||
{{/spreading}} {{#stunonly}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Stun Only</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/stunonly}} {{#tangle}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Tangle</div>
|
||
<div class="col-7-12 padr rt-value center">{{tangle}} HP</div>
|
||
</div>
|
||
{{/tangle}} {{#targeted}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Targeted</div>
|
||
<div class="col-7-12 padr rt-value center">x2 vs {{hasenemy}}</div>
|
||
</div>
|
||
{{/targeted}} {{#vampiric}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Vampiric</div>
|
||
<div class="col-7-12 padr rt-value center">{{stolenhealth}} health</div>
|
||
</div>
|
||
{{/vampiric}} {{#ammo}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Ammo</div>
|
||
<div class="col-7-12 padr rt-value center">{{ammunition}}</div>
|
||
</div>
|
||
{{/ammo}} {{#backblast}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Backblast Affects</div>
|
||
<div class="col-7-12 padr rt-value center">{{bystander}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Backblast Damage</div>
|
||
{{#rollTotal() roll 2}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing2}}</div>
|
||
{{/rollTotal() roll 2}} {{#rollTotal() roll 3}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing3}}</div>
|
||
{{/rollTotal() roll 3}} {{#rollTotal() roll 4}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing4}}</div>
|
||
{{/rollTotal() roll 4}} {{#rollTotal() roll 5}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing5}}</div>
|
||
{{/rollTotal() roll 5}} {{#rollTotal() roll 6}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing6}}</div>
|
||
{{/rollTotal() roll 6}} {{#rollTotal() roll 7}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing7}}</div>
|
||
{{/rollTotal() roll 7}} {{#rollTotal() roll 8}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing8}}</div>
|
||
{{/rollTotal() roll 8}} {{#rollTotal() roll 9}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing9}}</div>
|
||
{{/rollTotal() roll 9}} {{#rollTotal() roll 10}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing10}}</div>
|
||
{{/rollTotal() roll 10}} {{#rollTotal() roll 11}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing11}}</div>
|
||
{{/rollTotal() roll 11}} {{#rollTotal() roll 12}}
|
||
<div class="col-7-12 padr rt-value center">{{continuing12}}</div>
|
||
{{/rollTotal() roll 12}}
|
||
</div>
|
||
{{/backblast}} {{#exclusive}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Exclusive</div>
|
||
<div class="col-7-12 padr rt-value center">{{hasenemy}}</div>
|
||
</div>
|
||
{{/exclusive}} {{#fieldless}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Fieldless</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/fieldless}} {{#nostun}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">No Stun</div>
|
||
<div class="col-7-12 padr rt-value center"></div>
|
||
</div>
|
||
{{/nostun}} {{#nonpenetrating}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Non-penetrating</div>
|
||
<div class="col-7-12 padr rt-value center">AR +{{wontpenetrate}}</div>
|
||
</div>
|
||
{{/nonpenetrating}} {{#stoppable}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Stoppable</div>
|
||
<div class="col-7-12 padr rt-value center">{{timetostop}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Stoppable</div>
|
||
<div class="col-7-12 padr rt-value center">{{stopdamage}}</div>
|
||
</div>
|
||
{{/stoppable}} {{#toxic}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Toxic</div>
|
||
<div class="col-7-12 padr rt-value center">{{escapable}}</div>
|
||
</div>
|
||
{{/toxic}} {{#unreliable}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Unreliable</div>
|
||
<div class="col-7-12 padr rt-value center">Die roll of {{failure}}</div>
|
||
</div>
|
||
{{/unreliable}} {{#defense}}
|
||
<div class="rt-emote"><i>{{character_name}} defends{{#target_name}} {{target_name}}{{/target_name}} with {{pronoun}} {{weapon_name}}!</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Maneuver</div>
|
||
<div class="col-7-12 padr rt-value center">{{maneuver}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">DCV</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{dcv}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{#forcefield}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Forcefield</div>
|
||
<div class="col-7-12 padr rt-value center">{{forcefield}}</div>
|
||
</div>
|
||
{{/forcefield}} {{#armor1}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Primary Armor</div>
|
||
<div class="col-7-12 padr rt-value center">{{armor1}}</div>
|
||
</div>
|
||
{{/armor1}} {{#armor2}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Secondary Armor</div>
|
||
<div class="col-7-12 padr rt-value center">{{armor2}}</div>
|
||
</div>
|
||
{{/armor2}} {{#armor3}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Tertiary Armor</div>
|
||
<div class="col-7-12 padr rt-value center">{{armor3}}</div>
|
||
</div>
|
||
{{/armor3}} {{#mindshield}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Mind Shield</div>
|
||
<div class="col-7-12 padr rt-value center">{{mindshield}}</div>
|
||
</div>
|
||
{{/mindshield}} {{#absorption1}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Absorption - Health</div>
|
||
<div class="col-7-12 padr rt-value center">{{absorption1}}</div>
|
||
</div>
|
||
{{/absorption1}} {{#absorption2}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Absorption - Energy</div>
|
||
<div class="col-7-12 padr rt-value center">{{absorption2}}</div>
|
||
</div>
|
||
{{/absorption2}} {{#conversion}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Conversion</div>
|
||
<div class="col-7-12 padr rt-value center">{{conversion}}</div>
|
||
</div>
|
||
{{/conversion}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Shock Value</div>
|
||
<div class="col-7-12 padr rt-value center">{{shock}}</div>
|
||
</div>
|
||
{{/defense}} {{#doesnothing}}
|
||
<div class="rt-emote"><i>{{character_name}} does nothing...</i></div>
|
||
{{#forcefield}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Forcefield</div>
|
||
<div class="col-7-12 padr rt-value center">{{forcefield}}</div>
|
||
</div>
|
||
{{/forcefield}} {{#shield}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Shield</div>
|
||
<div class="col-7-12 padr rt-value center">{{shield}}</div>
|
||
</div>
|
||
{{/shield}} {{#armor1}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Primary Armor</div>
|
||
<div class="col-7-12 padr rt-value center">{{armor1}}</div>
|
||
</div>
|
||
{{/armor1}} {{#armor2}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Secondary Armor</div>
|
||
<div class="col-7-12 padr rt-value center">{{armor2}}</div>
|
||
</div>
|
||
{{/armor2}} {{#armor3}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Tertiary Armor</div>
|
||
<div class="col-7-12 padr rt-value center">{{armor3}}</div>
|
||
</div>
|
||
{{/armor3}} {{#mindshield}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Mind Shield</div>
|
||
<div class="col-7-12 padr rt-value center">{{mindshield}}</div>
|
||
</div>
|
||
{{/mindshield}} {{#absorption1}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Absorption - Health</div>
|
||
<div class="col-7-12 padr rt-value center">{{absorption1}}</div>
|
||
</div>
|
||
{{/absorption1}} {{#absorption2}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Absorption - Energy</div>
|
||
<div class="col-7-12 padr rt-value center">{{absorption2}}</div>
|
||
</div>
|
||
{{/absorption2}} {{#conversion}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Conversion</div>
|
||
<div class="col-7-12 padr rt-value center">{{conversion}}</div>
|
||
</div>
|
||
{{/conversion}}
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Shock Value</div>
|
||
<div class="col-7-12 padr rt-value center">{{shock}}</div>
|
||
</div>
|
||
{{/doesnothing}} {{#twodsix}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls 2d6...</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/twodsix}} {{#acvroll}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} ACV</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">ACV</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{acv}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/acvroll}} {{#dcvroll}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} DCV</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">DCV</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{dcv}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/dcvroll}} {{#initiative}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} initiative</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Base</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{acv}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/initiative}} {{#perception}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} perception</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Base</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{perception}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/perception}} {{#statroll}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} stat(s)</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Base</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{base}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/statroll}} {{#skillroll}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} skill</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Base</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{base}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/skillroll}} {{#attrroll}}
|
||
<div class="rt-emote"><i>{{character_name}} rolls {{pronoun}} {{attribute}}</i></div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Base</div>
|
||
<div class="col-7-12 padr rt-value center"><b>{{base}}</b></div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Roll</div>
|
||
<div class="col-7-12 padr rt-value center">{{roll}}</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-5-12 padl padr rt-key">Total</div>
|
||
<div class="col-7-12 padr rt-value center">{{total}}</div>
|
||
</div>
|
||
{{/attrroll}}
|
||
</div>
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<!-- ********************* Sheet Worker Scripts ********************* -->
|
||
|
||
<script type="text/worker">
|
||
/** Global Variables **/
|
||
|
||
/**** User Configurable Template Variables ****/
|
||
const global_templates_race_default = "Human";
|
||
const global_templates_class_default = "None";
|
||
const global_templates_skills_json = "{\"template\":[{\"name\":\"Acrobatics\",\"description\":\"The ability to perform feats of agility with minimal chance for injury. Includes jumping, flipping, contorting, and reacting quickly.\",\"specializations\":\"Balance, Flexibility, Jumps, Tumbling\",\"statallaspect\":[\"body\"],\"statmajor\":[\"agi\"],\"cost\":[3,3,3,2,2,3,2,1,2,2,3,2,2,2,2,2,3,2,2,3,1,1,2,3,2,1,2,2,1,2]},{\"name\":\"Animal Training\",\"description\":\"The ability to teach and train animals with an intellect above that of instinctive insects. An animal usually has a Mind Stat of 1-2.\",\"specializations\":\"Any single animal such as bears, dogs, dolphins, horses, raccoons, etc.\",\"statallaspect\":[\"soul\"],\"statmajor\":[\"awa\"],\"cost\":[2,2,2,1,1,1,1,2,1,2,3,2,2,2,1,1,1,2,1,1,1,2,1,2,2,1,2,1,2,3]},{\"name\":\"Architecture\",\"description\":\"Knowledge of construction methods, architectural drafting, etc. A successful use of this Skill can also find weak points in constructions or help in locating old structural plans.\",\"specializations\":\"Aquatic, Bridges, Fortifications, Small Buildings, Skyscrapers\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"rea\"],\"cost\":[1,1,2,1,1,1,1,1,1,2,1,1,1,1,2,1,1,2,1,1,1,2,1,2,2,3,2,2,1,1]},{\"name\":\"Area Knowledge\",\"description\":\"Knowledge of the geography and people of a single area (choose one area) and a specific locale within it. The smaller the area, the more detailed and extensive the character’s knowledge. This Skill may be assigned multiple times to indicate knowledge of several areas.\",\"specializations\":\"One specific locale (city, forest, sea, desert, mountain) within the area\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[2,2,3,2,3,2,2,2,2,2,2,2,2,3,2,1,2,3,1,3,2,3,2,2,1,2,1,1,2,1]},{\"name\":\"Artisan\",\"description\":\"This Skill represents a character’s ability to workwith a variety of materials to repair or produce useful oraesthetically pleasing objects (not electronic or mechanical).\",\"specializations\":\"Bowyer / Fletcher, Blacksmithy, Carpentry, Enchanting Objects, Leatherworking, Metalworking, Plumbing, Pottery, Tailoring, Woodworking\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"dex\",\"cre\"],\"cost\":[1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2]},{\"name\":\"Biological Sciences\",\"description\":\"This diverse field covers scientific knowledge of howliving things survive, thrive, and function.\",\"specializations\":\"Astrobiology, Bacteria/Viruses, Bioengineering, Botany, Genetics, Physiology, Zoology\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[2,2,2,2,2,2,2,1,3,2,3,1,1,1,3,3,1,3,2,2,1,1,1,1,1,1,1,1,1,1]},{\"name\":\"Boating\",\"description\":\"The ability to safely operate a watercraft.\",\"specializations\":\"Hovercraft, Hydrofoils, Large Ships, Small Boats, Submarines\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"str\",\"per\"],\"cost\":[2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,1,1,1,2,2,3,1,2,1,2,1,1,1]},{\"name\":\"Burglary\",\"description\":\"The ability to open locks, quietly cut glass, hot-wire car ignitions, etc. The ability does not cover disarming electronic security systems, which is handled by Electronics (Security) Skill.\",\"specializations\":\"Breaking-and-Entering, Disarming Physical Traps, Hot-Wiring, Safe Cracking\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"dex\",\"per\"],\"cost\":[2,2,2,2,3,2,2,1,2,1,2,2,2,2,2,1,2,2,2,2,2,1,3,2,2,1,2,2,1,2]},{\"name\":\"Business\",\"description\":\"The ability to organise, run, and understand part or all of a business organisation (including governments, non-profits, and association). This Skill is also useful for locating new employees.\",\"specializations\":\"Accounting, Administration, Economics, Executive, Fraud, Government, Management, Marketing, Negotiating, Sales\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,1,1,1,2,1,2,1,1,2,1,2,1,2,1,1,2,1,2,1,1,1,3,1,1,1,1]},{\"name\":\"Civilisation\",\"description\":\"This reflects knowledge of the history, religion, ethics, social structure, and lifestyle of a distinct culture or population. Select one civilisation culture for each Skill Level – one of which will also be the focus or Specialisation of the knowledge.\",\"specializations\":\"One Specific Culture or Population\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[2,1,1,1,1,1,1,1,2,2,3,3,2,1,2,1,2,2,2,3,2,3,1,1,1,2,1,2,1,1]},{\"name\":\"Climbing\",\"description\":\"The ability to scale vertical surfaces with or without the use of dedicated climbing equipment.\",\"specializations\":\"Natural Surfaces, Poles, Ropes, Vegetation, Walls\",\"statallaspect\":[\"body\"],\"statmajor\":[\"str\"],\"cost\":[2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,1,1,2,2,1,2,1,3,1,1,1,1,2,2,1]},{\"name\":\"Computers\",\"description\":\"Practical and theoretical knowledge of computer systems and their general use. Computer engineering (hardware) is covered by Electronics.\",\"specializations\":\"Artificial Intelligence, Cryptography, Databases, Electronic Warfare, Intrusion/Security, Networks, Programming\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"tec\"],\"cost\":[2,3,1,3,3,3,2,2,3,2,0,0,0,2,3,3,3,2,2,2,2,0,0,0,0,0,0,0,0,0]},{\"name\":\"Controlled Breathing\",\"description\":\"The ability to control respiratory functions in order to maximise breathing efficiency or to perform tricks such as “playing dead.”\",\"specializations\":\"Calm, Cyclic Breathing, Holding Breath, Slow Heart Rate\",\"statallaspect\":[\"body\",\"soul\"],\"statmajor\":[\"con\",\"wil\"],\"cost\":[1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1]},{\"name\":\"Cultural Arts\",\"description\":\"Knowledge of aspects of human culture (or another species’ culture).\",\"specializations\":\"Gastronomy, History, Literature, Mythology, Nobility, Philosophy, Rare Object Appraisal, Urban Legends\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,1,1,2,2,1,2,2,1,1,2,1,1,2,1,2,1,1,2,1,2,2,2,1,2,1,1]},{\"name\":\"Demolitions\",\"description\":\"The ability to set explosive charges without getting hurt in the process or inflicting undesired collateral damage. It is also used for deactivating explosives set by someone else.\",\"specializations\":\"Artificial Structures, Bomb Disposal, Natural Structures, Safe Cracking, Underwater\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"dex\",\"per\"],\"cost\":[2,3,2,1,2,3,1,1,2,1,1,1,1,1,2,1,3,2,1,1,2,1,2,1,1,1,1,1,0,2]},{\"name\":\"Disguise\",\"description\":\"The ability to change one’s personal appearance in an attempt to deceive others.\",\"specializations\":\"Costume, Impersonation, Make-up, Prosthetics\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"cre\"],\"cost\":[2,2,2,2,2,3,2,2,3,2,1,2,2,2,2,1,1,1,1,3,2,1,2,2,2,1,2,2,1,2]},{\"name\":\"Domestic Arts\",\"description\":\"The ability to efficiently and effectively organise and run a domestic household.\",\"specializations\":\"Childrearing, Cleaning, Cooking, Decorating, Gardening, Home Budgeting\",\"statallaspect\":[\"mind\",\"soul\"],\"statmajor\":[\"rea\",\"awa\"],\"cost\":[1,1,1,1,1,2,3,3,1,1,1,1,2,1,1,1,1,2,2,1,1,2,2,2,1,2,2,2,3,2]},{\"name\":\"Driving\",\"description\":\"The ability to operate a powered ground vehicle. Skill checks are only necessary in difficult situations such as performing vehicular stunts, avoiding hazards, etc.\",\"specializations\":\"Armored Fighting Vehicle (tanks, APCs, etc.), Bicycle, Big Rig (large tractor/trailer trucks), Bus, Car, Giant Robot, Motorcycle, Small Truck (vans, pick-ups, hi-cubes), Teamster (Draft Animals), Walker\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"dex\",\"per\"],\"cost\":[2,3,1,2,3,2,2,2,2,2,0,0,0,2,2,2,3,2,2,2,3,1,1,1,1,1,1,3,2,1]},{\"name\":\"Engineering\",\"description\":\"The use of scientific principals and experimental data to design and build equipment, structures, and other useful devices.\",\"specializations\":\"Aerospace, Agricultural, Biomedical, Chemical, Civil, Computer, Electrical, Environmental, Mechanical, Mining\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"rea\"],\"cost\":[2,1,2,2,1,1,1,1,2,2,2,2,1,1,3,3,3,2,1,2,2,2,1,1,2,3,1,3,1,1]},{\"name\":\"Environmental Sciences\",\"description\":\"These scientific fields focus on the environment, with particular regard to the historical and current activities of sentient beings and their important impact on biodiversity and sustainability.\",\"specializations\":\"Climatology, Ecology, Geology, Geography, Geophysics, Hydrology, Meteorology, Oceanography\",\"statallaspect\":[\"soul\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,2,1,2,1,2,2,3,2,1,1,2,3,2,3,2,2,1,2,1,1,2,2,1,1,1,1]},{\"name\":\"Electronics\",\"description\":\"The ability to maintain, repair, build, modify (and at high Levels, design) electronic equipment.\",\"specializations\":\"Communications, Computers, Consumer Electronics, Robotics, Security, Sensors\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"rea\"],\"cost\":[2,2,1,2,2,2,1,1,2,2,1,1,1,1,3,3,3,2,2,2,2,0,0,0,0,0,0,0,0,0]},{\"name\":\"Empathy\",\"description\":\"The ability to understand, detect, and interpret the emotional state of people nearby, without having their experiences communicated explicitly.\",\"specializations\":\"Body Language, Calming, Interpreting Words, Intuition, Lie Detection, Listening\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"awa\"],\"cost\":[1,1,2,2,2,1,3,3,1,3,3,2,2,2,2,1,2,3,2,2,1,2,2,1,1,2,1,2,2,1]},{\"name\":\"Etiquette\",\"description\":\"The knowledge of the customary codes for polite, proper, and inoffensive behaviour in social settings.\",\"specializations\":\"Alien, Lower Class, Middle Class, Upper Class\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[1,1,1,1,1,1,2,2,1,1,2,2,1,1,1,1,2,1,1,1,1,2,1,3,2,2,1,2,1,1]},{\"name\":\"Forgery\",\"description\":\"The ability to realistically counterfeit documents and papers. This Skill can be used in conjunction with the Computers Skill.\",\"specializations\":\"Artwork, Electronic Documents, Financial Notes, Handwriting, Paper Documents, Physical Objects\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"rea\"],\"cost\":[1,1,1,1,2,1,2,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1]},{\"name\":\"Gaming\",\"description\":\"The ability to comprehend and play various games and simulations well.\",\"specializations\":\"Board Games, Card Games, Computer Games, Gambling, Military Simulations, Role-Playing Games\",\"statallaspect\":[\"mind\",\"soul\"],\"statmajor\":[\"int\",\"awa\"],\"cost\":[1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,3]},{\"name\":\"Interrogation\",\"description\":\"The ability to convince someone to provide specific information against their will. Interrogation can also be used to help withhold such information when being questioned by an enemy.\",\"specializations\":\"Business, Drugs, Physical, Psychological, Spiritual\",\"statallaspect\":[\"mind\",\"soul\"],\"statmajor\":[\"per\",\"com\"],\"cost\":[2,2,2,2,3,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,2]},{\"name\":\"Intimidation\",\"description\":\"The ability to convincingly project a “tough guy” image. A successful check means someone witnessing your performance is convinced you mean any threats you make. How they react after that will depend on how tough they are themselves in relation to the kind of threat you present – they may respond with respect, fear, hatred, or amusement.\",\"specializations\":\"Business, Emotional, Political, Physical, Spiritual, Street\",\"statallaspect\":[\"soul\"],\"statmajor\":[\"com\"],\"cost\":[2,3,2,3,2,2,2,1,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,3,2]},{\"name\":\"Languages\",\"description\":\"Reflects an aptitude for languages and their historical usage. Additionally, a character will be able to speak and write: 1 (Level 1), 2 (Level 2), 3-4 (Level 3), 5-7 (Level4), 8-11 (Level 5), or 12-16 (Level 6) foreign languages. Multiple Specialisations will be listed for Languages - the first is the character’s native language (a free Specialisation), while the others are foreign languages.\",\"specializations\":\"Any one language, Braille, Code Language, Lip Reading, Sign Language\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,2,1,1,1,2,1,3,2,2,1,1,1,1,1,1,3,1,1,2,2,1,1,2,1,1,1,1]},{\"name\":\"Law\",\"description\":\"Knowledge of legal procedure and practice. In addition to lawyers, many police officers, politicians, and even superbeings have the Law Skill at Level 1 or 2. All Specialisations, except International, are specific to one country or region only (for example, “American Criminal Law” or “Japanese Family Law”).\",\"specializations\":\"Civil, Criminal, Customs, Family, International, Political, Real Estate\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,3,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2]},{\"name\":\"Leadership\",\"description\":\"The talent of having inspirational visions and goals, and communicating them effectively to others. The objective is to motivate and rally others to adopt and work towards those objectives as well.\",\"specializations\":\"Business, Co-operative, Political, Spiritual, Strategic, Transformational\",\"statallaspect\":[\"soul\"],\"statmajor\":[\"com\"],\"cost\":[1,2,2,2,2,1,2,1,2,3,1,1,2,2,2,2,3,2,2,2,2,3,2,3,2,2,2,2,3,3]},{\"name\":\"Listening\",\"description\":\"The ability to listen attentively or to perceive unusual or out of place noises.\",\"specializations\":\"Background Noise, Discrimination, Eavesdropping, Spiritual\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[2,1,3,2,2,2,2,1,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,1,1,2,2,1,2]},{\"name\":\"Mechanics\",\"description\":\"The ability to maintain, repair, or build mechanical and electro-mechanical devices. This also includes knowledge of tool use, welding, etc. Armourer applies to heavy vehicle-mounted weapons while Gunsmith covers personal weaponry. Use Artisan for archaic weapons.\",\"specializations\":\"Aeronautical, Armourer, Automotive, Gunsmith, Locksmith, Nanotechology, Traps\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"rea\"],\"cost\":[2,2,1,1,2,1,1,2,2,2,1,1,1,2,2,2,3,3,2,2,2,2,1,1,1,3,1,3,0,1]},{\"name\":\"Medical\",\"description\":\"Knowledge of how to heal the body using a variety of techniques. A typical general practitioner would Specialise in Diagnosis, while most police officers or paramedics Specialise in Emergency Response.\",\"specializations\":\"Chiropractic, Dentistry, Diagnosis, Emergency Response, Family Practice, Nursing, Obstetrics, Pathology, Pharmacy, Surgery, Veterinary\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"dex\",\"rea\"],\"cost\":[2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,3,2,1,2]},{\"name\":\"Military Sciences\",\"description\":\"The character has military-style tactical, staff, or leadership training. In addition, SWAT (or other tactical police units) often include individuals who pick up similar Skills (and often recruit ex-military personnel).\",\"specializations\":\"Hardware Recognition, Intelligence Analysis, Logistics, Strategy, Tactics, Teamwork\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[2,2,2,2,2,1,1,1,2,1,2,3,2,1,2,2,3,2,2,2,3,2,2,2,2,1,2,2,1,2]},{\"name\":\"Naturopathy\",\"description\":\"The knowledge of alternative medical practices that emphasise prevention, treatment, and optimal health by encouraging the body’s self-healing process.\",\"specializations\":\"Acupuncture, Aromatherapy, Herbalism, Homoeopathy, Massage Therapy, Reflexology\",\"statallaspect\":[\"mind\",\"soul\"],\"statmajor\":[\"per\",\"awa\"],\"cost\":[1,1,1,1,1,1,1,2,1,3,3,2,2,1,2,1,1,2,2,1,1,1,1,1,2,1,1,1,3,2]},{\"name\":\"Navigation\",\"description\":\"The ability to read maps or use specialised navigation equipment (including electronic sensors, if appropriate to the setting). The Navigation Skill will help a character find the fastest/safest route to a destination. The commander of a large vessel is usually a skilled navigator, even if they have only slight knowledge of Boating or Piloting.\",\"specializations\":\"Air, Highway, Sea, Space, Undersea, Urban, Wilderness\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,3,2,2,3,2,2,3,2,2,2,2,2,2,2]},{\"name\":\"Occult\",\"description\":\"Knowledge of the arcane and mystical arts, and their applications in both historical and modern society.\",\"specializations\":\"Astrology, Augury, Channelling, Dream Interpretation, Numerology, Rituals, Spellcraft, Spirits, Tarot, Voodoo, Witchcraft\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[2,1,1,3,1,1,1,1,2,3,3,3,2,3,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2]},{\"name\":\"Occupation\",\"description\":\"The skills, talent, activities, and experience required to carry out one specific occupation that may have interdisciplinary applications not adequately addressed by an alternate single Skill.\",\"specializations\":\"One Specific Occupation\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,1,2,1,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1]},{\"name\":\"Performing Arts\",\"description\":\"The ability to perform well before an audience of any size and composition, and to evoke an emotional response through the art form.\",\"specializations\":\"Comedy, Dance, Drama, Musical Instrument, Public Speaking, Singing\",\"statallaspect\":[\"body\",\"mind\",\"soul\"],\"statmajor\":[\"agi\",\"cre\",\"chr\"],\"cost\":[1,1,2,1,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1]},{\"name\":\"Persuasion\",\"description\":\"The ability to convince people to see new perspectives, consider other alternatives, change their minds, make different decisions, and even modify their actions as a result of the persuasion.\",\"specializations\":\"Bluffing, Bribery, Diplomacy, Emotional, Fast Talking, Hypnosis, Logic, Mediation, Rhetoric, Social Networking, Storytelling\",\"statallaspect\":[\"soul\"],\"statmajor\":[\"chr\"],\"cost\":[3,3,2,1,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,2,2,2,2]},{\"name\":\"Physical Sciences\",\"description\":\"Scientific training in the way the physical realm functions and manifests itself as reality, including the necessary background knowledge concerning universal laws and constants.\",\"specializations\":\"Alchemy, Astronomy, Biochemistry, Chemistry, Mathematics, Physics\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[2,1,1,1,2,2,1,1,2,2,2,1,1,1,1,3,2,2,2,2,1,1,1,1,1,2,1,2,1,1]},{\"name\":\"Piloting\",\"description\":\"The ability to operate atmospheric or space vehicles, as well as walking or transformable giant robots with familiar aircraft-style control layouts – even if such mecha are restricted to ground movement only. Skill checks are normally only necessary during play when performing an unusual manoeuvre, avoiding a hazard, piloting an unfamiliar aircraft, etc.\",\"specializations\":\"Giant Robot, Heavy Airplane (usually multi-engine), Helicopter, Jet Fighter, Light Airplane (usually single-engine), Lighter than Air Craft, Spacecraft\",\"statallaspect\":[\"body\",\"mind\"],\"statmajor\":[\"dex\",\"per\"],\"cost\":[2,2,1,2,2,2,1,1,2,1,1,1,0,1,2,2,2,2,2,3,3,0,0,0,0,0,0,3,0,0]},{\"name\":\"Poisons\",\"description\":\"The ability to recognise, concoct, apply, and neutralise a variety of poisons and toxins. For additional information on poisons, see page 89.\",\"specializations\":\"Alien, Natural, Synthetic, Technological\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"tec\"],\"cost\":[1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1]},{\"name\":\"Police Sciences\",\"description\":\"This is the science and methodology behind detective work. Ballistics is the study of the wounds inflicted by projectiles; criminology focuses on studies of criminal behaviour and strategies; forensics covers evidence gathering (including hair-and-fibre, fingerprint and DNA-based identification techniques).\",\"specializations\":\"Ballistics, Community Policing, Criminology, Forensics, International\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[2,2,1,2,3,1,1,1,2,1,1,1,1,2,2,2,2,1,1,1,1,1,0,0,0,1,0,1,0,1]},{\"name\":\"Power Lifting\",\"description\":\"The ability to perform feats of strength with minimal chance for injury. Includes lifting or pushing heavy objects, stopping objects in motion, and supporting large masses for extended periods of time. This Skill is independent of the Superstrength Attribute (BESM4, page 124), and does not reflect strength directly. Rather, it represents a character’s efficiency and effectiveness of using the strength that they possess.\",\"specializations\":\"Bulky Objects, Free Weights, Humans, Moving Objects, Small Objects (Hand-Held)\",\"statallaspect\":[\"body\"],\"statmajor\":[\"str\"],\"cost\":[2,3,2,2,2,3,1,1,2,1,1,2,2,2,2,2,1,1,1,2,2,1,2,2,1,1,2,2,3,2]},{\"name\":\"Religion\",\"description\":\"The understanding and knowledge concerning the nature of a god or gods, including ceremonies and rituals, ethical standards, and historical origins.\",\"specializations\":\"Academic, Dogma, Congregational, Context, Enlightenment, Guidance, Interpretation, Scripture\",\"statallaspect\":[\"mind\",\"soul\"],\"statmajor\":[\"int\",\"wil\"],\"cost\":[1,1,1,3,1,1,1,1,2,3,2,2,2,2,1,1,1,1,1,2,1,2,1,2,3,1,2,1,1,1]},{\"name\":\"Riding\",\"description\":\"This is the knowledge of how to care for a riding beast, how to saddle, mount, and dismount the animal, how to get it to perform difficult or dangerous manoeuvres safely and without balking, and how to best pace it for longdistance rides.\",\"specializations\":\"By species (Camel, Horse, Tiger, etc.)\",\"statallaspect\":[\"body\",\"mind\",\"soul\"],\"statmajor\":[\"agi\",\"per\",\"awa\"],\"cost\":[1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,1,1,1,2,2,3,2,1,3,1,2,3]},{\"name\":\"Search\",\"description\":\"This Skill allows the character to find secret, hidden, or concealed objects.\",\"specializations\":\"Compartments, Detail Work, Electronics, Irregularities\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[2,2,2,2,3,1,1,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2]},{\"name\":\"Seduction\",\"description\":\"A character with this Skill is adept at exploiting their sex appeal. A successful Skill check will convince another person that the character is genuinely interested in them. Whether or not the subject responds will depend on their own romantic inclinations and sexual preferences.\",\"specializations\":\"Emotional, Mental, Physical, Political, Social, Spiritual, Verbal\",\"statallaspect\":[\"soul\"],\"statmajor\":[\"chr\"],\"cost\":[2,2,2,2,2,1,3,2,2,3,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,2,2,2,2,3]},{\"name\":\"Sleight of Hand\",\"description\":\"A character with this Skill (also known as “prestidigitation”) has superior manual dexterity, greater than that suggested by their Body Stat. This includes the ability to perform “magic” tricks, palm small objects, cheat at cards, plant an item on someone, etc.\",\"specializations\":\"Card Sharking, Lock Picking, Pick Pocketing, Stage Magic\",\"statallaspect\":[\"body\"],\"statmajor\":[\"dex\"],\"cost\":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,2,1,1,1,1,1,1,2]},{\"name\":\"Social Sciences\",\"description\":\"Understanding of the way populations and individual people function in and contribute to society, as well as larger societal behavioural patterns.\",\"specializations\":\"Archaeology, Anthropology, Communication, Education, Politics, Psychology, Social Work, Sociology\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"int\"],\"cost\":[1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,2,2,2,3,1,1,2,1,1,1,1,1,2,1,1]},{\"name\":\"Sports\",\"description\":\"The ability to play well with others in a team or individual sporting event with specialised rules, in a manner that minimises associated injury risks.\",\"specializations\":\"One specific sport\",\"statallaspect\":[\"body\",\"mind\",\"soul\"],\"statmajor\":[\"agi\",\"per\",\"wil\"],\"cost\":[1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,1,1]},{\"name\":\"Stealth\",\"description\":\"The ability to disguise objects or people so that they blend into their surroundings. This also includes the ability to conceal small objects on one’s person and the ability to move silently.\",\"specializations\":\"Camouflage, Concealment, Silent Movement\",\"statallaspect\":[\"body\"],\"statmajor\":[\"agi\"],\"cost\":[3,2,3,2,2,2,2,2,3,2,2,2,3,3,2,2,2,3,2,2,2,2,2,2,2,1,2,2,2,2]},{\"name\":\"Street Sense\",\"description\":\"The knowledge of street activity within a particular urban region or city. This is a vital survival Skill for a person on the streets.\",\"specializations\":\"Gang Activity, Influential Individuals, Territorial Divisions (all by region)\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[2,2,1,2,3,2,2,2,3,2,1,1,2,2,3,2,2,3,2,2,2,1,2,2,2,2,3,1,1,2]},{\"name\":\"Survival\",\"description\":\"The ability to find food and shelter in the outdoors, to avoid natural hazards, and to identify edible and useful wild plants and animals. This Skill is often a learned area of expertise for more advanced cultures, but a natural way of life for more primitive ones.\",\"specializations\":\"Aquatic, Arctic, Desert, Dimensional, Forest, Jungle, Mountain, Plains\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[2,2,3,2,2,2,1,1,2,2,2,2,3,1,1,1,1,3,1,1,2,2,3,2,2,2,2,2,3,2]},{\"name\":\"Swimming\",\"description\":\"The character is skilled at swimming or diving. The GM may assume that any character in a modern setting can swim even without this Skill. A swimmer can usually move at a speed equal to their Body Stat in kilometres per hour for short distances.\",\"specializations\":\"Aquabatics, Competition, Deep-Sea Diving, Free Diving, Recreational, Scuba, Snorkelling\",\"statallaspect\":[\"body\"],\"statmajor\":[\"agi\"],\"cost\":[1,1,2,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1]},{\"name\":\"Urban Tracking\",\"description\":\"Urban Tracking is the ability to “shadow” someone through an industrialised, populated area or, alternatively, to find certain people in a particular sub-culture or environment by asking the right questions.\",\"specializations\":\"Academic, Corporate, Political, Residential, Underworld\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[2,1,2,3,3,1,2,1,2,3,1,1,1,2,3,1,2,2,1,1,2,1,1,1,1,2,2,1,0,2]},{\"name\":\"Visual Arts\",\"description\":\"The ability to produce a work of fine or commercial art in a particular visual field.\",\"specializations\":\"Animation, Carving, Drawing, Flower Arranging, Painting, Photography, Sculpting, Video\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"cre\"],\"cost\":[1,1,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1]},{\"name\":\"Wilderness Tracking\",\"description\":\"The ability to successfully trail or track someone or something while outdoors in a rural or wilderness setting.\",\"specializations\":\"Aquatic, Arctic, Desert, Forest, Jungle, Mountain, Plains\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"per\"],\"cost\":[1,1,2,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,1,1,2,2,3,2,2,1,2,2,3,2]},{\"name\":\"Writing\",\"description\":\"The ability to communicate ideas or emotions in a written work, though a person without this Skill may still know how to read and write.\",\"specializations\":\"Academic, Fiction, Journalistic, Poetic, Religious, Technical\",\"statallaspect\":[\"mind\"],\"statmajor\":[\"cre\"],\"cost\":[1,1,1,1,1,1,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1]}]}";
|
||
const global_templates_game_genre = 0;
|
||
|
||
/**** DO NOT CHANGE THESE VARIABLES ****/
|
||
const global_templates_size_json = "{\"template\":[{\"name\":\"Point\",\"rank\":\"-10\",\"height\":\"100-400μm\",\"mass\":\"1-40 μg\",\"lift\":0.0000002,\"strdmg\":-100,\"ar\":0,\"extradmg\":100,\"rnghitdef\":20,\"rngspd\":0.001},{\"name\":\"Mote\",\"rank\":\"-9\",\"height\":\"500-900μm\",\"mass\":\"50-500 μg\",\"lift\":0.000001,\"strdmg\":-90,\"ar\":0,\"extradmg\":90,\"rnghitdef\":18,\"rngspd\":0.002},{\"name\":\"Speck\",\"rank\":\"-8\",\"height\":\"1-4 mm\",\"mass\":\"1-5 mg\",\"lift\":0.000004,\"strdmg\":-80,\"ar\":0,\"extradmg\":80,\"rnghitdef\":16,\"rngspd\":0.004},{\"name\":\"Minute\",\"rank\":\"-7\",\"height\":\"5-9 mm\",\"mass\":\"6-40 mg\",\"lift\":0.00002,\"strdmg\":-70,\"ar\":0,\"extradmg\":70,\"rnghitdef\":14,\"rngspd\":0.008},{\"name\":\"Wee\",\"rank\":\"-6\",\"height\":\"1-2 cm\",\"mass\":\"50-500 mg\",\"lift\":0.0001,\"strdmg\":-60,\"ar\":0,\"extradmg\":60,\"rnghitdef\":12,\"rngspd\":0.01667},{\"name\":\"Teeny\",\"rank\":\"-5\",\"height\":\"3-4 cm\",\"mass\":\"1-5 g\",\"lift\":0.0004,\"strdmg\":-50,\"ar\":0,\"extradmg\":50,\"rnghitdef\":10,\"rngspd\":0.0333},{\"name\":\"Fine\",\"rank\":\"-4\",\"height\":\"5-9 cm\",\"mass\":\"6-30 g\",\"lift\":0.002,\"strdmg\":-40,\"ar\":0,\"extradmg\":40,\"rnghitdef\":8,\"rngspd\":0.06667},{\"name\":\"Diminutive\",\"rank\":\"-3\",\"height\":\"10-24 cm\",\"mass\":\"50-300 g\",\"lift\":0.01,\"strdmg\":-30,\"ar\":0,\"extradmg\":30,\"rnghitdef\":6,\"rngspd\":0.125},{\"name\":\"Tiny\",\"rank\":\"-2\",\"height\":\"25-49 cm\",\"mass\":\"500 g - 2 kg\",\"lift\":0.04,\"strdmg\":-20,\"ar\":0,\"extradmg\":20,\"rnghitdef\":4,\"rngspd\":0.25},{\"name\":\"Small\",\"rank\":\"-1\",\"height\":\"50-99 cm\",\"mass\":\"6-20 kg\",\"lift\":0.2,\"strdmg\":-10,\"ar\":0,\"extradmg\":10,\"rnghitdef\":2,\"rngspd\":0.5},{\"name\":\"Medium\",\"rank\":\"0\",\"height\":\"1-2 m\",\"mass\":\"50-150 kg\",\"lift\":0,\"strdmg\":0,\"ar\":0,\"extradmg\":0,\"rnghitdef\":0,\"rngspd\":0},{\"name\":\"Large\",\"rank\":\"1\",\"height\":\"3-4 m\",\"mass\":\"200-1,200 kg\",\"lift\":5,\"strdmg\":10,\"ar\":10,\"extradmg\":0,\"rnghitdef\":-2,\"rngspd\":2},{\"name\":\"Huge\",\"rank\":\"2\",\"height\":\"5-8 m\",\"mass\":\"1.5-8 tonnes\",\"lift\":25,\"strdmg\":20,\"ar\":20,\"extradmg\":0,\"rnghitdef\":-4,\"rngspd\":4},{\"name\":\"Mammoth\",\"rank\":\"3\",\"height\":\"9-15 m\",\"mass\":\"10-60 tonnes\",\"lift\":100,\"strdmg\":30,\"ar\":30,\"extradmg\":0,\"rnghitdef\":-6,\"rngspd\":8},{\"name\":\"Gigantic\",\"rank\":\"4\",\"height\":\"16-30 m\",\"mass\":\"75-500 tonnes\",\"lift\":500,\"strdmg\":40,\"ar\":40,\"extradmg\":0,\"rnghitdef\":-8,\"rngspd\":15},{\"name\":\"Gargantuan\",\"rank\":\"5\",\"height\":\"31-60 m\",\"mass\":\"550-4,000 tonnes\",\"lift\":2500,\"strdmg\":50,\"ar\":50,\"extradmg\":0,\"rnghitdef\":-10,\"rngspd\":30},{\"name\":\"Colossal\",\"rank\":\"6\",\"height\":\"61-125 m\",\"mass\":\"4 k - 30 k tonnes\",\"lift\":10000,\"strdmg\":60,\"ar\":60,\"extradmg\":0,\"rnghitdef\":-12,\"rngspd\":60},{\"name\":\"Enormous\",\"rank\":\"7\",\"height\":\"126-250 m\",\"mass\":\"40 k – 250 k tonnes\",\"lift\":50000,\"strdmg\":70,\"ar\":70,\"extradmg\":0,\"rnghitdef\":-14,\"rngspd\":125},{\"name\":\"Monstrous\",\"rank\":\"8\",\"height\":\"251-500 m\",\"mass\":\"300 k – 2 M tonnes\",\"lift\":250000,\"strdmg\":80,\"ar\":80,\"extradmg\":0,\"rnghitdef\":-16,\"rngspd\":250},{\"name\":\"Titanic\",\"rank\":\"9\",\"height\":\"500-1000 m\",\"mass\":\"2 M – 15 M tonnes\",\"lift\":1000000,\"strdmg\":90,\"ar\":90,\"extradmg\":0,\"rnghitdef\":-18,\"rngspd\":500},{\"name\":\"Monumental\",\"rank\":\"10\",\"height\":\"1-2 km\",\"mass\":\"15 M - 125 M tonnes\",\"lift\":5000000,\"strdmg\":100,\"ar\":100,\"extradmg\":0,\"rnghitdef\":-20,\"rngspd\":1000}]}";
|
||
const global_templates_size_names = ["Point", "Mote", "Speck", "Minute", "Wee", "Teeny", "Fine", "Diminutive", "Tiny", "Small", "Medium", "Large", "Huge", "Mammoth", "Gigantic", "Gargantuan", "Colossal", "Enormous", "Monstrous", "Titanic", "Monumental"];
|
||
const global_templates_size_default = "Medium";
|
||
const global_initialized = 0;
|
||
const global_attribute_data_json = '{"defects":[{"name":"achilliesheel","cost":-2},{"name":"awkwardsize","cost":-2},{"name":"bane","cost":-2},{"name":"blindfury","cost":-2},{"name":"conditionalownership","cost":-1},{"name":"confined","cost":-3},{"name":"cursed","cost":-2},{"name":"demure","cost":-1},{"name":"easilydistracted","cost":-1},{"name":"fragile","cost":-1},{"name":"hounded","cost":-2},{"name":"impairedmanipulation","cost":-3},{"name":"impairedspeech","cost":-3},{"name":"ineptattack","cost":-1},{"name":"ineptdefense","cost":-1},{"name":"involuntarychange","cost":-1},{"name":"ism","cost":-2},{"name":"magnet","cost":-1},{"name":"marked","cost":-1},{"name":"nemesis","cost":-1},{"name":"nightmares","cost":-1},{"name":"nohealing","cost":-2},{"name":"obligated","cost":-2},{"name":"phobia","cost":-1},{"name":"physicalimpairment","cost":-3},{"name":"redtape","cost":-1},{"name":"reduceddamage","cost":-3},{"name":"sensoryimpairment","cost":-3},{"name":"shortcoming","cost":-4},{"name":"significantother","cost":-1},{"name":"skeletoninthecloset","cost":-2},{"name":"socialfault","cost":-1},{"name":"specialrequirement","cost":-3},{"name":"unappealing","cost":-1},{"name":"uniquedefect","cost":0},{"name":"unsettled","cost":-1},{"name":"vulnerability","cost":-2},{"name":"wanted","cost":-2},{"name":"weakpoint","cost":-2}],"attributes":[{"name":"absorption","cost":5,"major":"body","minor":"con"},{"name":"alternateform","cost":4,"major":"body","minor":""},{"name":"alternateidentity","cost":1,"major":"body","minor":""},{"name":"armor","cost":2,"major":"","minor":""},{"name":"attackmastery","cost":1,"major":"","minor":""},{"name":"augmented","cost":4,"major":"","minor":""},{"name":"capacity","cost":1,"major":"","minor":""},{"name":"changestate","cost":3,"major":"body","minor":""},{"name":"cognition","cost":2,"major":"mind","minor":""},{"name":"combattechnique","cost":1,"major":"","minor":""},{"name":"companion","cost":4,"major":"","minor":""},{"name":"connected","cost":1,"major":"soul","minor":""},{"name":"controlenvironment","cost":1,"major":"soul","minor":""},{"name":"conversion","cost":3,"major":"body","minor":""},{"name":"dataaccess","cost":2,"major":"mind","minor":""},{"name":"defensemastery","cost":1,"major":"","minor":""},{"name":"dimensionwalk","cost":5,"major":"soul","minor":""},{"name":"dynamicpowers","cost":10,"major":"","minor":""},{"name":"elasticity","cost":1,"major":"body","minor":""},{"name":"enemyattack","cost":1,"major":"","minor":""},{"name":"enemydefense","cost":1,"major":"","minor":""},{"name":"energized","cost":1,"major":"","minor":""},{"name":"exorcism","cost":1,"major":"soul","minor":""},{"name":"extraactons","cost":4,"major":"","minor":""},{"name":"extraarms","cost":1,"major":"","minor":""},{"name":"extradefenses","cost":2,"major":"mind","minor":""},{"name":"features","cost":1,"major":"","minor":""},{"name":"flight","cost":3,"major":"body","minor":""},{"name":"forcefield","cost":4,"major":"body","minor":""},{"name":"gear","cost":1,"major":"","minor":""},{"name":"groundspeed","cost":1,"major":"body","minor":""},{"name":"healing","cost":1,"major":"soul","minor":""},{"name":"heightenedawareness","cost":1,"major":"mind","minor":""},{"name":"heightenedsenses","cost":1,"major":"body","minor":""},{"name":"illusion","cost":1,"major":"mind","minor":""},{"name":"immovable","cost":1,"major":"body","minor":""},{"name":"immunity","cost":3,"major":"body","minor":""},{"name":"immutable","cost":1,"major":"body or soul","minor":""},{"name":"inspire","cost":1,"major":"soul","minor":""},{"name":"jumping","cost":1,"major":"body","minor":""},{"name":"massivedamage","cost":3,"major":"","minor":""},{"name":"meleeattack","cost":1,"major":"","minor":""},{"name":"meleedefense","cost":1,"major":"","minor":""},{"name":"merge","cost":4,"major":"","minor":""},{"name":"metamorphosis","cost":2,"major":"mind or soul","minor":""},{"name":"mimic","cost":2,"major":"mind","minor":""},{"name":"mindcontrol","cost":5,"major":"mind","minor":""},{"name":"mindshield","cost":1,"major":"mind","minor":""},{"name":"minions","cost":2,"major":"soul","minor":""},{"name":"mulligan","cost":1,"major":"soul","minor":""},{"name":"nullify","cost":5,"major":"body or soul","minor":""},{"name":"plantcontrol","cost":1,"major":"mind","minor":""},{"name":"pocketdimension","cost":1,"major":"","minor":""},{"name":"portal","cost":2,"major":"soul","minor":""},{"name":"powerflux","cost":10,"major":"","minor":""},{"name":"powervariation","cost":4,"major":"","minor":""},{"name":"projection","cost":3,"major":"mind","minor":""},{"name":"rangedattack","cost":1,"major":"","minor":""},{"name":"rangeddefense","cost":1,"major":"","minor":""},{"name":"regeneration","cost":5,"major":"body","minor":""},{"name":"reincarnation","cost":2,"major":"soul","minor":""},{"name":"resilient","cost":2,"major":"body","minor":""},{"name":"sensoryblock","cost":1,"major":"mind","minor":""},{"name":"sixthsense","cost":1,"major":"soul","minor":""},{"name":"sizechange","cost":10,"major":"body","minor":""},{"name":"socialmastery","cost":1,"major":"","minor":""},{"name":"spaceflight","cost":1,"major":"body","minor":""},{"name":"specialmovement","cost":1,"major":"body","minor":""},{"name":"summoncreatures","cost":2,"major":"mind","minor":""},{"name":"supersense","cost":1,"major":"mind","minor":""},{"name":"superspeed","cost":3,"major":"body","minor":""},{"name":"superstrength","cost":4,"major":"body","minor":""},{"name":"swarm","cost":2,"major":"body","minor":""},{"name":"telekinesis","cost":4,"major":"mind","minor":""},{"name":"telepathy","cost":3,"major":"mind","minor":""},{"name":"teleport","cost":3,"major":"mind","minor":""},{"name":"tough","cost":1,"major":"","minor":""},{"name":"transfer","cost":3,"major":"soul","minor":""},{"name":"transmute","cost":3,"major":"mind or soul","minor":""},{"name":"tunneling","cost":1,"major":"body","minor":""},{"name":"unaffected","cost":2,"major":"body","minor":""},{"name":"unassailable","cost":1,"major":"","minor":""},{"name":"undetectable","cost":2,"major":"body","minor":""},{"name":"uniqueattribute","cost":0,"major":"","minor":""},{"name":"unknownpower","cost":1,"major":"","minor":""},{"name":"waterspeed","cost":1,"major":"body","minor":""},{"name":"wealth","cost":3,"major":"","minor":""},{"name":"weapon","cost":2,"major":"","minor":""}]}';
|
||
|
||
const allaspects_stats_array = ['body', 'mind', 'soul'];
|
||
const allaspects_stats_regex = /(body|mind|soul)/i;
|
||
const major_stats_array = ['agi', 'con', 'dex', 'str', 'cre', 'int', 'per', 'rea', 'awa', 'cha', 'com', 'wil'];
|
||
const major_stats_regex = /(str|agi|dex|con|int|rea|per|cre|wil|cha|awa|com)/i;
|
||
const all_stats_array = ['body', 'mind', 'soul', 'agi', 'con', 'dex', 'str', 'cre', 'int', 'per', 'rea', 'awa', 'cha', 'com', 'wil'];
|
||
const all_stats_regex = /(body|mind|soul|str|agi|dex|con|int|rea|per|cre|wil|cha|awa|com)/i;
|
||
const stat_aspects_obj = {
|
||
"body":["agi","dex","con","str"],
|
||
"mind":["cre","int","pre","rea"],
|
||
"soul":["awa","cha","com","wil"]
|
||
};
|
||
const conditions_array = ['bleeding', 'blinded', 'contagious', 'continuing', 'dead', 'drained', 'fractured', 'incurable', 'prone', 'stunned', 'tangled', 'unconscious'];
|
||
const conditions_regex = /(bleeding|blinded|contagious|continuing|dead|drained|fractured|incurable|prone|stunned|tangled|unconscious)/i;
|
||
const heightenedsense_array = ['heightenedsight', 'heightenedhearing', 'heightenedtouch', 'heightenedsmell', 'heightenedtaste'];
|
||
const sense_array = ['sight', 'hearing', 'touch', 'smell', 'taste'];
|
||
const attack_manuevers_array = ['attack', 'bite', 'bypassarmor', 'disarm', 'grab', 'lock', 'pin', 'reducearmor', 'throw', 'vitalspot', 'weakpoint'];
|
||
const attack_maneuvers_regex = /(attack|bite|bypassarmor|disarm|grab|lock|pin|reducearmor|throw|vitalspot|weakpoint)/i;
|
||
const defense_manuevers_array = ['defend', 'defendother', 'doesnothing', 'escape'];
|
||
const defense_maneuvers_regex = /(defend|defendother|doesnothing|escape)/i;
|
||
const non_damaging_attack_regex = /(disarm|grab|pin|defend|defendother|doesnothing|escape)/i;
|
||
const minor_obstacle_maneuvers_regex = /(bite|reducearmor|defendother)/i;
|
||
const major_obstacle_maneuvers_regex = /(bypassarmor|vitalspot)/i;
|
||
const weapon_customizations_array = ['accurate', 'area', 'duration', 'range', 'aura', 'autofire', 'blight', 'contact', 'contageous', 'continuing', 'drain', 'enervation', 'flare', 'flexible', 'homing', 'inaccurate', 'incapacitating', 'incurable', 'insidious', 'irritant', 'knockback', 'multidimensional', 'penetrating', 'piercing', 'psychic', 'quake', 'reach', 'selective', 'spreading', 'stun', 'tangle', 'trap', 'vampiric'];
|
||
const combattechniques_array = ['blackout', 'blindfighting', 'blindshooting', 'criticalstrike', 'enhancedknockback', 'extendedrange', 'farshot', 'lethalblow', 'multipletargets', 'perciseaim', 'rushattack', 'twoweapons'];
|
||
const stats_array = ['static_stat_type_set', 'static_stat_temp_energy', 'static_stat_temp_health', 'stat_total_social', 'static_stat_total_shame', 'stat_total_sanity', 'static_stat_total_maddness', 'stat_total_energy', 'static_stat_total_fatigue', 'stat_total_health', 'static_stat_total_wounds', 'stat_total_shock', 'static_character_points_spent', 'bodystate', 'mindstate', 'soulstate', 'static_stat_base_body', 'static_stat_base_mind', 'static_stat_base_soul', 'stat_total_body', 'stat_total_mind', 'stat_total_soul', 'stat_total_acv', 'stat_total_dcv', 'stat_total_str', 'stat_total_cre', 'stat_total_com', 'stat_total_awa', 'stat_total_dex', 'stat_total_agi', 'stat_total_con', 'stat_total_int', 'stat_total_per', 'stat_total_rea', 'stat_total_wil', 'stat_total_cha', 'strstate', 'agistate', 'dexstate', 'constate', 'intstate', 'reastate', 'perstate', 'crestate', 'wilstate', 'chastate', 'awastate', 'comstate'];
|
||
const rolls_array = ['static_roll_type_selection','static_button_personal_defense','static_button_movement_defense'];
|
||
const combat_stats_array = ['mainhand_state', 'offhand_state', 'mainhand_source', 'offhand_source', 'extraarms', 'extraarms_inuse', 'attrdb', 'static_button_targeted_damage', 'static_button_targeted_attack', 'static_button_targeted_defense', 'massivedamage_targeted', 'massivedamage', 'enemyattack', 'enemydefense'];
|
||
const size_template_values_array = ['size', 'height', 'mass', 'size_lift', 'size_strdmg', 'size_ar', 'size_extradmg', 'size_rnghitdef', 'size_rngspd'];
|
||
const all_attributes_array = ['absorption','alternate form','alternate identity','armor','attack mastery','augmented','capacity','change state','cognition','combat technique','companion','connected','control environment','conversion','data access','defect','defense mastery','dimension walk','dynamic powers','elasticity','enemy attack','enemy defense','energized','exorcism','extra actions','extra arms','extra defenses','features','flight','forcefield','gear','ground speed','healing','heightened awareness','heightened senses','illusion','immovable','immunity','immutable','inspire','jumping','massive damage','melee attack','melee defense','merge','metamorphosis','mimic','mind control','mind shield','minions','mulligan','nullify','plant control','pocket dimension','portal','power flux','power variation','projection','ranged attack','ranged defense','regeneration','reincarnation','resilient','sensory block','shield','sixth sense','size change','skill','social mastery','spaceflight','special movement','summon creatures','supersense','superspeed','superstrength','swarm','telekinesis','telepathy','teleport','tough','transfer','transmute','tunneling','unaffected','unassailable','undetectable','unique attribute','unknown power','water speed','wealth','weapon'];
|
||
const all_attributes_regex = /(absorption|alternate form|alternate identity|armor|attack mastery|augmented|capacity|change state|cognition|combat technique|companion|connected|control environment|conversion|data access|defect|defense mastery|dimension walk|dynamic powers|elasticity|enemy attack|enemy defense|energized|exorcism|extra actions|extra arms|extra defenses|features|flight|forcefield|gear|ground speed|healing|heightened awareness|heightened senses|illusion|immovable|immunity|immutable|inspire|jumping|massive damage|melee attack|melee defense|merge|metamorphosis|mimic|mind control|mind shield|minions|mulligan|nullify|plant control|pocket dimension|portal|power flux|power variation|projection|ranged attack|ranged defense|regeneration|reincarnation|resilient|sensory block|shield|sixth sense|size change|skill|social mastery|spaceflight|special movement|summon creatures|supersense|superspeed|superstrength|swarm|telekinesis|telepathy|teleport|tough|transfer|transmute|tunneling|unaffected|unassailable|undetectable|unique attribute|unknown power|water speed|wealth|weapon)/i;
|
||
const all_defects_array = ["achilles heel","awkward size","bane","blind fury","conditional ownership","confined","cursed","demure","easily distracted","fragile","hounded","impaired manipulation","impaired speech","inept attack","inept defense","involuntary change","ism","magnet","marked","nemesis","nightmares","no healing","obligated","phobia","physical impairment","red tape","reduced damage","sensory impairment","shortcoming","significant other","skeleton in the closet","social fault","special requirement","unappealing","unique defect","unsettled","vulnerability","wanted","weak point"];
|
||
const all_defects_regex = /(achilles heel|awkward size|bane|blind fury|conditional ownership|confined|cursed|demure|easily distracted|fragile|hounded|impaired manipulation|impaired speech|inept attack|inept defense|involuntary change|ism|magnet|marked|nemesis|nightmares|no healing|obligated|phobia|physical impairment|red tape|reduced damage|sensory impairment|shortcoming|significant other|skeleton in the closet|social fault|special requirement|unappealing|unique defect|unsettled|vulnerability|wanted|weak point)/i;
|
||
const lesser_defects_regex = /(conditionalownership|demure|easilydistracted|fragile|ineptattack|ineptdefense|involuntarychange|magnet|marked|nemesis|nightmares|phobia|redtape|shortcoming|significantother|socialfault|unappealing|unsettled)/i;
|
||
const serious_defects_regex = /(confined|impairedmanipulation|impairedspeech|nohealing|physicalimpairment|reduceddamage|sensoryimpairment|specialrequirement)/i;
|
||
const greater_defects_regex = /(achillesheel|awkwardsize|bane|blindfury|cursed|hounded|ism|obligated|skeletoninthecloset|vulnerability|wanted|weakpoint)/i;
|
||
const special_defects_regex = /uniquedefect/i;
|
||
const rollable_attributes_regex = /(healing|inspire|unaffected|exorcism|illusion|metamorphosis|mimic|mindcontrol|nullify|powerflux|powervariation|projection|sixthsense|supersense|telepathy|transfer|transmute)/i;
|
||
const targetable_attributes_regex = /(healing|exorcism|illusion|metamorphosis|mimic|mindcontrol|nullify|telepathy|transfer)/i;
|
||
|
||
const upgrade_to_1_2_2_array = ["upgraded_1_2_2", "name", "charactername"];
|
||
const global_initialized_array = ["global_initialized"];
|
||
const on_sheet_open_array = _.chain([upgrade_to_1_2_2_array, global_initialized_array])
|
||
.flatten()
|
||
.value();
|
||
|
||
/** Utility Functions **/
|
||
function capital(str) {
|
||
if (str.length == 0) return;
|
||
const whitespace = /\s/g.test(str);
|
||
let result = '';
|
||
|
||
if (whitespace) { str = str.split(" "); }
|
||
else { str = [`${str}`]; }
|
||
|
||
for (let i = 0, x = str.length; i < x; i++) {
|
||
str[i] = str[i][0].toUpperCase() + str[i].substr(1);
|
||
}
|
||
if (whitespace) { result = str.join(" "); } else { result = str[0]; }
|
||
return result;
|
||
}
|
||
|
||
function allcaps(str) {
|
||
return str.toUpperCase();
|
||
}
|
||
|
||
function getIsObject(obj) {
|
||
return Object.prototype.toString.call(obj) === '[object Object]';
|
||
}
|
||
|
||
function get1or3(level, start) {
|
||
let result = 0;
|
||
if (start == 1) {
|
||
result = (level & 1) ? 1 : 3;
|
||
} else if (start == 3) {
|
||
result = (level & 1) ? 3 : 1;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function setPreviousValue(eventInfo){
|
||
eventInfo.previousValue = eventInfo.previousValue == eventInfo.newValue ?
|
||
Number.isInteger(eventInfo.newValue) ? 0 :
|
||
typeof eventInfo.newValue === 'string' || eventInfo.newValue instanceof String ? '' :
|
||
undefined :
|
||
eventInfo.previousValue;
|
||
}
|
||
|
||
function removeWhiteSpace(str){
|
||
return str.replace(/\s+/g, '');
|
||
}
|
||
|
||
function doUpgrade(value, setObj){
|
||
upgradeTo_1_2_2(value, setObj);
|
||
}
|
||
|
||
function upgradeTo_1_2_2(value, setObj){
|
||
if(value.upgraded_1_2_2 == true){
|
||
return;
|
||
}
|
||
const oldname = value.name || '';
|
||
const newname = value.charactername || '';
|
||
if(oldname.length > 0 && newname.length == 0){
|
||
setObj.charactername = oldname;
|
||
}
|
||
setObj.upgraded_1_2_2 = true;
|
||
}
|
||
|
||
/** Build UI Functions **/
|
||
|
||
function buildSizeUI(sizes, setObj) {
|
||
var json = JSON.parse(global_templates_size_json);
|
||
_.each(sizes, (size, i) => {
|
||
let rowID = generateRowID();
|
||
let description = "Name: " + json.template[`${i}`].name + "\r\nRank: " + json.template[`${i}`].rank + "\r\nHeight/Length: " + json.template[`${i}`].height + "\r\nMass: " + json.template[`${i}`].mass + "\r\nLift: " + json.template[`${i}`].lift + "\r\nStrength Damage: " + json.template[`${i}`].strdmg + "\r\nArmor Rating: " + json.template[`${i}`].ar + "\r\nExtra Damage Taken: " + json.template[`${i}`].extradmg + "\r\nRanged Hit/Defend: " + json.template[`${i}`].rnghitdef + "\r\nRange Speed: " + json.template[`${i}`].rngspd;
|
||
if (size == global_templates_size_default) {
|
||
setObj[`repeating_sizetemplate_${rowID}_selection`] = "1";
|
||
setObj[`static_template_size_name`] = size;
|
||
setObj[`static_template_size_selection`] = `repeating_sizetemplate_${rowID}`;
|
||
setObj.height = json.template[`${i}`].height;
|
||
setObj.mass = json.template[`${i}`].mass;
|
||
}
|
||
setObj[`repeating_sizetemplate_${rowID}_label`] = size;
|
||
setObj[`repeating_sizetemplate_${rowID}_description`] = description;
|
||
setObj[`repeating_sizetemplate_${rowID}_height`] = json.template[`${i}`].height;
|
||
setObj[`repeating_sizetemplate_${rowID}_mass`] = json.template[`${i}`].mass;
|
||
setObj[`repeating_sizetemplate_${rowID}_lift`] = json.template[`${i}`].lift;
|
||
setObj[`repeating_sizetemplate_${rowID}_strdmg`] = json.template[`${i}`].strdmg;
|
||
setObj[`repeating_sizetemplate_${rowID}_ar`] = json.template[`${i}`].ar;
|
||
setObj[`repeating_sizetemplate_${rowID}_extradmg`] = json.template[`${i}`].extradmg;
|
||
setObj[`repeating_sizetemplate_${rowID}_rnghitdef`] = json.template[`${i}`].rnghitdef;
|
||
setObj[`repeating_sizetemplate_${rowID}_rngspd`] = json.template[`${i}`].rngspd;
|
||
});
|
||
}
|
||
|
||
function getSkillStatsDisplay(stats, debug = false) {
|
||
var result = "";
|
||
_.each(stats, (stat, i) => {
|
||
stat = stat.length > 3 ? capital(stat): allcaps(stat);
|
||
if (i == 0) result = stat;
|
||
if (i == 1) result = `Avg ${result}, ${stat}`;
|
||
if (i > 1) result = `${result}, ${stat}`;
|
||
});
|
||
if(debug) console.log(`[getSkillStatsDisplay()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function buildSkillsUI() {
|
||
const json = JSON.parse(global_templates_skills_json);
|
||
const skills = json.template;
|
||
_.each(skills, skill => {
|
||
let writeSkill = {};
|
||
const rowID = generateRowID();
|
||
const majorstat = getSkillStatsDisplay(skill.statallaspect);
|
||
const minorstat = getSkillStatsDisplay(skill.statmajor);
|
||
const description = "Name: " + skill.name + "\r\n\r\nDescription: " + skill.description + "\r\n\r\nSpecializations: " + skill.specializations + "\r\n\r\nStat: " + capital(majorstat) + " (" + allcaps(minorstat) + ")\r\n\r\nCost: " + skill.cost[global_templates_game_genre];
|
||
writeSkill[`repeating_skilltemplate_${rowID}_label`] = skill.name;
|
||
writeSkill[`repeating_skilltemplate_${rowID}_description`] = description;
|
||
writeSkill[`repeating_skilltemplate_${rowID}_specializations`] = skill.specializations;
|
||
writeSkill[`repeating_skilltemplate_${rowID}_statallaspect`] = skill.statallaspect;
|
||
writeSkill[`repeating_skilltemplate_${rowID}_statmajor`] = skill.statmajor;
|
||
writeSkill[`repeating_skilltemplate_${rowID}_cost`] = skill.cost[global_templates_game_genre];
|
||
setAttrs(writeSkill);
|
||
});
|
||
}
|
||
|
||
function buildAttrGroupValuesArray() {
|
||
let result = [];
|
||
for (groupID = 1; groupID < 11; groupID++) {
|
||
let groupAttrs = [`static_attrgroup_${groupID}_source`,`static_attrgroup_${groupID}_active`,`static_attrgroup_${groupID}_dynamicgroupsource`, `static_attrgroup_${groupID}_groupcost`, `static_attrgroup_${groupID}_isitem`, `static_attrgroup_${groupID}_name`, `static_attrgroup_${groupID}_groupmax`, `static_attrgroup_${groupID}_spent`, `static_attrgroup_${groupID}_stat`, `static_attrgroup_${groupID}_source`, `static_attrgroup_${groupID}_changegroup`, `static_attrgroup_${groupID}_type`];
|
||
result = result.concat(groupAttrs);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function buildConditionStateArray() {
|
||
const result = _.map(conditions_array, condition => {
|
||
return `${condition}state`;
|
||
})
|
||
return result;
|
||
}
|
||
|
||
function buildSkillGroupValuesArray() {
|
||
let result = [];
|
||
for (groupID = 1; groupID < 6; groupID++) {
|
||
let groupSkills = [`static_skillgroup_${groupID}_name`, `static_skillgroup_${groupID}_type`, `static_skillgroup_${groupID}_source`, `static_skillgroup_${groupID}_groupmax`, `static_skillgroup_${groupID}_spent`];
|
||
result = result.concat(groupSkills);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function buildProtectionValuesArray() {
|
||
var protections = ["forcefield", "shield", "armor1", "armor2", "armor3", "mindshield", "absorption1", "absorption2", "conversion"],
|
||
result = [];
|
||
_.each(protections, (protection) => {
|
||
result[result.length] = `protection_${protection}_state`;
|
||
result[result.length] = `protection_${protection}_source`;
|
||
result[result.length] = `protection_${protection}_name`;
|
||
result[result.length] = `protection_${protection}_ar`;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function buildReapeatingAttrValuesArray(attrIDs) {
|
||
var result = [];
|
||
const attrs = [
|
||
`activate`,
|
||
`ammo`,
|
||
`armorlayer`,
|
||
`attrdefecttoggle`,
|
||
`attribute`,
|
||
`attrsrc`,
|
||
`augmentedstat`,
|
||
`bonus`,
|
||
`capacitytype`,
|
||
`characteristic`,
|
||
`charges`,
|
||
`collectiontype`,
|
||
`conditions`,
|
||
`continuingtype`,
|
||
`conversiontype`,
|
||
`costperlevel`,
|
||
`customizations`,
|
||
`damagetype`,
|
||
`defect`,
|
||
`defenseclass`,
|
||
`display`,
|
||
`draintype`,
|
||
`effect`,
|
||
`effectivelevel`,
|
||
`endurance`,
|
||
`enemy`,
|
||
`enhancementassignments`,
|
||
`extraarms`,
|
||
`fluxenable`,
|
||
`group`,
|
||
`immunityrole`,
|
||
`isflux`,
|
||
`level`,
|
||
`limiterassignments`,
|
||
`lock`,
|
||
`name`,
|
||
`new`,
|
||
`object`,
|
||
`options`,
|
||
`rollable`,
|
||
`seeinto`,
|
||
`skill`,
|
||
`skillgroup`,
|
||
`source`,
|
||
`stat`,
|
||
`supersense`,
|
||
`totalcost`,
|
||
`uniquephenomena`,
|
||
`visible`,
|
||
`weaponclass`
|
||
];
|
||
_.each(attrIDs, id => {
|
||
_.each(attrs, attr => {
|
||
result[result.length] = `repeating_attr_${id}_${attr}`;
|
||
});
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function buildReapeatingSkillValuesArray(attrIDs) {
|
||
var result = [];
|
||
_.each(attrIDs, (rowID) => {
|
||
let attrs = [`repeating_skill_${rowID}_totalcost`,`repeating_skill_${rowID}_option`,`repeating_skill_${rowID}_statselection`,`repeating_skill_${rowID}_visible`, `repeating_skill_${rowID}_skillrollvalue`, `repeating_skill_${rowID}_name`, `repeating_skill_${rowID}_skillspecilizations`, `repeating_skill_${rowID}_group`, `repeating_skill_${rowID}_new`, `repeating_skill_${rowID}_level`, `repeating_skill_${rowID}_majorstat`, `repeating_skill_${rowID}_minorstat`, `repeating_skill_${rowID}_specializations`, `repeating_skill_${rowID}_skillspecilizations`, `repeating_skill_${rowID}_costperlevel`];
|
||
const stats = allaspects_stats_array.concat(major_stats_array);
|
||
_.each(stats,stat=>{
|
||
attrs[attrs.length] = `repeating_skill_${rowID}_${stat.toLowerCase()}state`;
|
||
})
|
||
result = result.concat(attrs);
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function buildSizeTemplateValuesArray(rowID) {
|
||
const result = [`repeating_sizetemplate_${rowID}_height`, `repeating_sizetemplate_${rowID}_mass`, `repeating_sizetemplate_${rowID}_lift`, `repeating_sizetemplate_${rowID}_strdmg`, `repeating_sizetemplate_${rowID}_ar`, `repeating_sizetemplate_${rowID}_extradmg`, `repeating_sizetemplate_${rowID}_rnghitdef`, `repeating_sizetemplate_${rowID}_rngspd`, `repeating_sizetemplate_${rowID}_selection`, `repeating_sizetemplate_${rowID}_description`, `repeating_sizetemplate_${rowID}_label`];
|
||
return result;
|
||
}
|
||
|
||
function buildRepeatingExtraArmValuesArray(extraarms) {
|
||
var result = [];
|
||
if (extraarms != undefined) {
|
||
_.each(extraarms, (extraarm) => {
|
||
let attrs = [`repeating_extraarm_${extraarm}_state`, `repeating_extraarm_${extraarm}_name`, `repeating_extraarm_${extraarm}_type`, `repeating_extraarm_${extraarm}_source`, `repeating_extraarm_${extraarm}_label`];
|
||
result = result.concat(attrs);
|
||
});
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function getStatType(value){
|
||
const type = value.static_stat_type_set;
|
||
const major = (type == 'major') ? 0 : 1;
|
||
const minor = (type == 'minor') ? 1 : 0;
|
||
return { major: major, minor: minor };
|
||
}
|
||
|
||
function setStatType(type, setObj) {
|
||
setObj.majorstats = type.major;
|
||
setObj.minorstats = type.minor;
|
||
}
|
||
|
||
function switchStatRollType(type, setObj){
|
||
setObj.dynamic_roll_base = 0;
|
||
clearStatStates(type, setObj);
|
||
}
|
||
|
||
function setSkillStatDisplay(debug, value, skillID, sourceAttr, setObj, type){
|
||
const skillStatDisplay = getSkillStatTypeDisplay(debug, value, skillID, sourceAttr, setObj, type);
|
||
setObj[`repeating_skill_${skillID}_stat`] = skillStatDisplay;
|
||
if(debug) console.log(`[setSkillStatDisplay()] skillStatDisplay = ${skillStatDisplay}`);
|
||
}
|
||
|
||
function setSkillStatType(debug, value, skillIDs, sourceAttr, type, setObj){
|
||
_.each(skillIDs, skillID => {
|
||
setSkillStatDisplay(debug, value, skillID, sourceAttr, setObj, type);
|
||
setObj[`repeating_skill_${skillID}_majorstats`] = type.major;
|
||
setObj[`repeating_skill_${skillID}_minorstats`] = type.minor;
|
||
});
|
||
}
|
||
|
||
function getSkillStatTypeDisplay(debug, value, skillID, sourceAttr, setObj, type){
|
||
var statsarray = type.major==1 ? major_stats_array: allaspects_stats_array;
|
||
const stats = _.chain(statsarray)
|
||
.map(stat => {
|
||
const state = (stat==sourceAttr ? parseInt(setObj[`repeating_skill_${skillID}_${stat}state`]):
|
||
parseInt(value[`repeating_skill_${skillID}_${stat}state`])) || 0;
|
||
const active = state>0 ? stat: '';
|
||
return active;
|
||
})
|
||
.compact()
|
||
.value();
|
||
return getSkillStatsDisplay(stats, debug);
|
||
}
|
||
|
||
function setStatCost(debug, eventInfo, setObj, sourceAttr) {
|
||
let newValue = parseInt(eventInfo.newValue) || 0,
|
||
previousValue = (parseInt(eventInfo.previousValue) == newValue) ? 0 : parseInt(eventInfo.previousValue) || 0,
|
||
diffValue = newValue - previousValue,
|
||
statCost = (newValue > 12 && previousValue > 12) ? diffValue * 8 : (newValue <= 12 && previousValue <= 12) ? diffValue * 4 : (newValue > 12 && previousValue <= 12) ? (((newValue - 12) * 8) + 48) - (previousValue * 4) : (newValue <= 12 && previousValue > 12) ? (newValue * 4) - (((previousValue - 12) * 8) + 48) : 0;
|
||
setObj[`stat_cost_${sourceAttr}`] = statCost;
|
||
if (debug) console.log(`[setStatCost(${sourceAttr})] statCost = ${statCost}`);
|
||
}
|
||
|
||
function getDefectPointsByCategory(attrdb, rowID, defect){
|
||
const defectdb = attrdb.defect;
|
||
const defectobj = _.find(defectdb, o => {
|
||
const result = o.source == rowID ? true : false;
|
||
return result;
|
||
})
|
||
const aspect = defectobj.aspect;
|
||
const result = defect == 'shortcoming' ? aspect.length > 3 ? -4 : -1 :
|
||
lesser_defects_regex.test(defect) ? -1 :
|
||
serious_defects_regex.test(defect) ? -2 :
|
||
greater_defects_regex.test(defect) ? -3 :
|
||
0;
|
||
return result;
|
||
}
|
||
|
||
function setGroupDefectPointsOnActivation(debug, attrIDs, attrdb, value, sectionName, rowID, setObj){
|
||
const groupid = getGroupID(value, 'attr');
|
||
const groupType = value[`static_attrgroup_${groupid}_type`] || 'standard';
|
||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||
const isPowerFlux = /flux/i.test(groupType);
|
||
const fluxcost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]);
|
||
const aggregateAttrGroupCost = getAggregateAttrGroupCost(debug, attrIDs, value, sectionName, rowID, setObj);
|
||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
const groupcost = isPowerFlux ?
|
||
fluxcost + aggregateDefectPoints :
|
||
aggregateAttrGroupCost + aggregateDefectPoints;
|
||
//const groupid = parseInt(value[`repeating_attr_${rowID}_group`]) || 0;
|
||
setObj[`static_attrgroup_${groupid}_groupcost`] = groupcost;
|
||
}
|
||
|
||
function setDefectPointsByRankChange(debug, attrdb, attrIDs, eventInfo, value, sectionName, rowID, setObj) {
|
||
const defects = attrdb.defect;
|
||
const defect = _.find(defects, o => {
|
||
const match = o.source === rowID ? true : false;
|
||
return match;
|
||
});
|
||
const category = getDefectPointsByCategory(attrdb, rowID, defect.name);
|
||
const rank = parseInt(eventInfo.newValue) || parseInt(defect.rank) || 0;
|
||
const cost = rank * category;
|
||
setObj[`repeating_attr_${rowID}_totalcost`] = cost;
|
||
}
|
||
|
||
function setEffectiveLevelByLevelChange(debug, eventInfo, value, sectionName, rowID, sourceAttr, setObj) {
|
||
let newLevel = parseInt(eventInfo.newValue) || 0,
|
||
previousLevel = (parseInt(eventInfo.previousValue) == newLevel) ? 0 : parseInt(eventInfo.previousValue) || 0,
|
||
diffLevel = newLevel - previousLevel,
|
||
effectivelevel = parseInt(getAttrValue(value, `repeating_${sectionName}_${rowID}`, "effectivelevel", setObj) + diffLevel) || 0;
|
||
if (debug) console.log(`[setEffectiveLevelByLevelChange(${sourceAttr})] effectivelevel = ${effectivelevel}`);
|
||
setObj[`repeating_${sectionName}_${rowID}_effectivelevel`] = effectivelevel;
|
||
}
|
||
|
||
function getFluxGroupIsActive(debug, value, rowID){
|
||
const debugtext = '[getFluxGroupIsActive()]';
|
||
const groupid = getGroupID(value, 'attr');
|
||
const groupType = value[`static_attrgroup_${groupid}_type`];
|
||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||
const isGroupActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0;
|
||
const result = groupType == 'power flux' ? groupSourceID == rowID ? true :
|
||
isGroupActive ? true : false : true;
|
||
if(debug){
|
||
console.log(`${debugtext} groupid = ${groupid}`);
|
||
console.log(`${debugtext} groupType = ${groupType}`);
|
||
console.log(`${debugtext} groupSourceID = ${groupSourceID}`);
|
||
console.log(`${debugtext} isGroupActive = ${isGroupActive}`);
|
||
console.log(`${debugtext} result = ${result}`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function setPoolCostIfGroupIsVariation(debug, isActive, attrIDs, value, rowID, setObj){
|
||
const debugtext = '[setPoolCostIfGroupIsVariation()]';
|
||
const groupid = getGroupID(value, 'attr');
|
||
const groupType = value[`static_attrgroup_${groupid}_type`] || 'standard';
|
||
const isPowerVariation = /variation/i.test(groupType);
|
||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]);
|
||
if(!isPowerVariation || !groupIsActive){
|
||
if(debug){
|
||
console.log(`${debugtext} isPowerVariation = ${isPowerVariation}`);
|
||
console.log(`${debugtext} groupIsActive = ${groupIsActive}`);
|
||
}
|
||
return;
|
||
}
|
||
const groupCost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]);
|
||
const isDefect = /defect/i.test(value[`repeating_attr_${rowID}_attribute`]);
|
||
const attrcost = groupSourceID == rowID ? 0 :
|
||
isDefect ? 0 :
|
||
parseInt(value[`repeating_attr_${rowID}_totalcost`]);
|
||
const aggregateAttrCost =
|
||
getAggregateAttrGroupCost(debug, attrIDs, value, 'attr', rowID, setObj);
|
||
//const poolcost = isActive ? aggregateAttrCost - groupCost : 0;
|
||
const poolcost = aggregateAttrCost - groupCost;
|
||
const setAttrCostIfVariation = isVariation => isVariation ?
|
||
setObj[`static_attrgroup_${groupid}_spent`] = poolcost : false;
|
||
setAttrCostIfVariation(isPowerVariation);
|
||
if(debug){
|
||
console.log(`${debugtext} isPowerVariation = ${isPowerVariation}`);
|
||
console.log(`${debugtext} isActive = ${isActive}`);
|
||
console.log(`${debugtext} attrcost = ${attrcost}`);
|
||
console.log(`${debugtext} groupSourceID = ${groupSourceID}`);
|
||
console.log(`${debugtext} rowID = ${rowID}`);
|
||
console.log(`${debugtext} aggregateAttrCost = ${aggregateAttrCost}`);
|
||
console.log(`${debugtext} poolcost = ${poolcost}`);
|
||
}
|
||
}
|
||
|
||
function setPoolCostIfGroupIsFlux(debug, isActive, attrIDs, value, rowID, setObj){
|
||
const debugtext = '[setPoolCostIfGroupIsFlux()]';
|
||
const groupid = getGroupID(value, 'attr');
|
||
const groupType = value[`static_attrgroup_${groupid}_type`] || 'standard';
|
||
const isPowerFlux = /flux/i.test(groupType);
|
||
if(!isPowerFlux){
|
||
if(debug) console.log(`${debugtext} isPowerFlux = ${isPowerFlux}`);
|
||
return;
|
||
}
|
||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||
const groupCost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]);
|
||
const isDefect = /defect/i.test(value[`repeating_attr_${rowID}_attribute`]);
|
||
const attrcost = groupSourceID == rowID ? 0 :
|
||
isDefect ? 0 :
|
||
parseInt(value[`repeating_attr_${rowID}_totalcost`]);
|
||
const aggregateAttrCost = getAggregateAttrGroupCost(debug, attrIDs, value, 'attr', rowID, setObj);
|
||
//const poolcost = isActive ? aggregateAttrCost - groupCost : 0;
|
||
const poolcost = aggregateAttrCost - groupCost;
|
||
const setAttrCostIfFlux = isFlux => isFlux ?
|
||
setObj[`static_attrgroup_${groupid}_spent`] = poolcost : false;
|
||
setAttrCostIfFlux(isPowerFlux);
|
||
if(debug){
|
||
console.log(`${debugtext} isPowerFlux = ${isPowerFlux}`);
|
||
console.log(`${debugtext} isActive = ${isActive}`);
|
||
console.log(`${debugtext} attrcost = ${attrcost}`);
|
||
console.log(`${debugtext} groupSourceID = ${groupSourceID}`);
|
||
console.log(`${debugtext} rowID = ${rowID}`);
|
||
console.log(`${debugtext} aggregateAttrCost = ${aggregateAttrCost}`);
|
||
console.log(`${debugtext} poolcost = ${poolcost}`);
|
||
}
|
||
}
|
||
|
||
function cleanupSkillCosts(debug, skillIDs, value, rowID, setObj){
|
||
const groupid = getGroupID(value, 'skill');
|
||
const aggregateSkillCost = getAggregateSkillGroupCost(debug, skillIDs, value, rowID, groupid, setObj);
|
||
setObj[`static_skillgroup_${groupid}_spent`] = aggregateSkillCost;
|
||
}
|
||
|
||
function cleanupCosts(debug, attrIDs, attrdb, value, sectionName, rowID, setObj){
|
||
const debugtext = `[cleanupCosts()]`;
|
||
const groupid = getGroupID(value, sectionName);
|
||
const groupType = value[`static_${sectionName}group_${groupid}_type`] || 'standard';
|
||
const isPowerFlux = /flux/i.test(groupType);
|
||
const isPowerVariation = /variation/i.test(groupType);
|
||
const groupSourceID = value[`static_${sectionName}group_${groupid}_source`];
|
||
const groupActive = parseInt(value[`static_${sectionName}group_${groupid}_active`]) || 0;
|
||
const removedIsGroupSource = groupSourceID == rowID ? true : false;
|
||
const poolCost = parseInt(value[`repeating_${sectionName}_${groupSourceID}_totalcost`]) || 0;
|
||
const aggregateAttrCost = getAggregateAttrGroupCost(debug, attrIDs, value, sectionName, rowID, setObj);
|
||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
|
||
const poolSpent = isPowerFlux ? removedIsGroupSource ? 0 :
|
||
groupActive ? aggregateAttrCost : 0 :
|
||
isPowerVariation ? removedIsGroupSource ? 0 :
|
||
groupActive ? aggregateAttrCost : 0 : 0;
|
||
const groupCost = isPowerFlux ? removedIsGroupSource ?
|
||
aggregateAttrCost + aggregateDefectPoints :
|
||
groupActive ? poolCost :
|
||
aggregateAttrCost + aggregateDefectPoints + poolCost :
|
||
isPowerVariation ? removedIsGroupSource ?
|
||
aggregateAttrCost + aggregateDefectPoints :
|
||
aggregateAttrCost + aggregateDefectPoints + poolCost :
|
||
aggregateAttrCost + aggregateDefectPoints;
|
||
setObj[`static_${sectionName}group_${groupid}_spent`] = poolSpent;
|
||
setObj[`static_${sectionName}group_${groupid}_groupcost`] = groupCost;
|
||
if(debug){
|
||
console.log(`${debugtext} groupid = ${groupid}`);
|
||
console.log(`${debugtext} groupType = ${groupType}`);
|
||
console.log(`${debugtext} isPowerFlux = ${isPowerFlux}`);
|
||
console.log(`${debugtext} isPowerVariation = ${isPowerVariation}`);
|
||
console.log(`${debugtext} groupSourceID = ${groupSourceID}`);
|
||
console.log(`${debugtext} poolCost = ${poolCost}`);
|
||
console.log(`${debugtext} groupActive = ${groupActive}`);
|
||
console.log(`${debugtext} aggregateAttrCost = ${aggregateAttrCost}`);
|
||
console.log(`${debugtext} poolSpent = ${poolSpent}`);
|
||
console.log(`${debugtext} groupCost = ${groupCost}`);
|
||
}
|
||
}
|
||
|
||
function cleanupGroupType(debug, removedInfo, attrIDs, attrdb, value, rowID, setObj){
|
||
const attribute = _.find(removedInfo, o=>{ return /(flux|variation)/i.test(o); });
|
||
const wasDynamicGroup = attr => attr === undefined ? false : true;
|
||
if(debug) console.log(`[cleanupGroupType()] attribute = ${attribute}`);
|
||
if(wasDynamicGroup(attribute)) convertToStandardGroup(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
}
|
||
|
||
function restoreActiveAttribute(removedInfo){
|
||
setAttrs(removedInfo);
|
||
}
|
||
|
||
function getRemovedAttribute(removedInfo){
|
||
return _.find(removedInfo,o=>{ return all_attributes_regex.test(o); });
|
||
}
|
||
|
||
function getWasActive(removedInfo, originalCaseRowID){
|
||
const result = parseInt(removedInfo[`repeating_attr_${originalCaseRowID}_activate`]) > 0 ?
|
||
true : false;
|
||
return result;
|
||
}
|
||
|
||
function getAggregateGroupDefectPoints(debug, ids, attrdb, value, rowID, setObj){
|
||
const groupid = getGroupID(value, 'attr');
|
||
const aggregateGroupDefectPoints = _.chain(ids)
|
||
.map(id=>{
|
||
if(value[`repeating_attr_${id}_attribute`] != 'defect') return 0;
|
||
const defectdb = attrdb.defect;
|
||
const defectobj = _.find(defectdb, o => {
|
||
const defectmatch = o.source == id ? true : false;
|
||
return defectmatch;
|
||
});
|
||
const defect = defectobj.name;
|
||
const defectcategory = getDefectPointsByCategory(attrdb, defectobj.source, defect);
|
||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||
const activated = isNaN(parseInt(setObj[`repeating_attr_${id}_activate`])) ?
|
||
parseInt(value[`repeating_attr_${id}_activate`]) :
|
||
parseInt(setObj[`repeating_attr_${id}_activate`]);
|
||
const defectpoints = defectobj.rank * defectcategory;
|
||
const appliedPoints = group == groupid ?
|
||
activated ? defectpoints : 0 : 0;
|
||
return appliedPoints;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
return aggregateGroupDefectPoints;
|
||
}
|
||
|
||
function getAggregatePoolCost(debug, ids, eventInfo, value, sectionName, rowID, setObj){
|
||
const groupid = getGroupID(value, sectionName);
|
||
const groupType = value[`static_${sectionName}group_${groupid}_type`] ||
|
||
'standard';
|
||
const groupSourceID = value[`static_${sectionName}group_${groupid}_source`];
|
||
const aggregatePoolCost = _.chain(ids)
|
||
.map(id=>{
|
||
const attribute = value[`repeating_${sectionName}_${id}_attribute`];
|
||
const group = parseInt(value[`repeating_${sectionName}_${id}_group`]);
|
||
const activated = sectionName == 'skill' ? 1 :
|
||
isNaN(parseInt(setObj[`repeating_${sectionName}_${id}_activate`])) ?
|
||
parseInt(value[`repeating_${sectionName}_${id}_activate`]) :
|
||
parseInt(setObj[`repeating_${sectionName}_${id}_activate`]);
|
||
const attrcost = id == rowID ?
|
||
parseInt(eventInfo.newValue) * getAttrCostPerLevel(debug, value, rowID) :
|
||
parseInt(value[`repeating_${sectionName}_${id}_totalcost`]);
|
||
const appliedCost = group == groupid ?
|
||
/defect/i.test(attribute) ? 0 :
|
||
/standard/i.test(groupType) ? 0 :
|
||
id == groupSourceID ? 0 :
|
||
/flux/i.test(groupType) ? activated ? attrcost : 0 :
|
||
attrcost : 0;
|
||
return appliedCost;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
return aggregatePoolCost;
|
||
}
|
||
|
||
function getAggregateAttrGroupCost(debug, ids, value, sectionName, rowID, setObj){
|
||
const groupid = getGroupID(value, sectionName);
|
||
const groupType = removeWhiteSpace(setObj[`static_${sectionName}group_${groupid}_type`] ||
|
||
value[`static_${sectionName}group_${groupid}_type`] || 'standard');
|
||
console.log(`[getAggregateAttrGroupCost()] groupType = ${groupType}`);
|
||
const groupSourceID = value[`static_${sectionName}group_${groupid}_source`];
|
||
const aggregateGroupCost = _.chain(ids)
|
||
.map(id=>{
|
||
const attribute = value[`repeating_${sectionName}_${id}_attribute`];
|
||
const group = parseInt(value[`repeating_${sectionName}_${id}_group`]);
|
||
const activated = isNaN(parseInt(setObj[`repeating_${sectionName}_${id}_activate`])) ?
|
||
parseInt(value[`repeating_${sectionName}_${id}_activate`]) :
|
||
parseInt(setObj[`repeating_${sectionName}_${id}_activate`]);
|
||
const attrcost = isNaN(parseInt(setObj[`repeating_${sectionName}_${id}_totalcost`])) ?
|
||
parseInt(value[`repeating_${sectionName}_${id}_totalcost`]) :
|
||
parseInt(setObj[`repeating_${sectionName}_${id}_totalcost`]);
|
||
const appliedCost = group == groupid ?
|
||
attribute == 'defect' ? 0 :
|
||
groupType == 'powerflux' ?
|
||
id == groupSourceID ? attrcost :
|
||
activated ? attrcost : 0 :
|
||
attrcost : 0;
|
||
return appliedCost;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
return aggregateGroupCost;
|
||
}
|
||
|
||
function getSkillCost(debug, name){
|
||
const json = JSON.parse(global_templates_skills_json);
|
||
const skills = json.template;
|
||
const skill = _.find(skills, s => {
|
||
const result = s.name == name ? true : false;
|
||
return result;
|
||
});
|
||
if (debug) console.log(`[getSkillCost(${name}) cost = ${skill.cost[global_templates_game_genre]}]`);
|
||
return skill.cost[global_templates_game_genre];
|
||
}
|
||
|
||
function getAggregateSkillGroupCost(debug, skillIDs, value, rowID, groupID, setObj){
|
||
const debugtext = '[getAggregateSkillGroupCost()]';
|
||
const result = _.chain(skillIDs)
|
||
.map(id => {
|
||
const group = parseInt(value[`repeating_skill_${id}_group`]);
|
||
const totalcost = isNaN(parseInt(setObj[`repeating_skill_${id}_totalcost`])) ?
|
||
parseInt(value[`repeating_skill_${id}_totalcost`]) :
|
||
parseInt(setObj[`repeating_skill_${id}_totalcost`]);
|
||
const appliedCost = group == groupID ?
|
||
id == rowID ? 0 :
|
||
totalcost : 0;
|
||
return appliedCost;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
if (debug) console.log(`${debugtext} result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setSkillCostByRankChange(debug, skillIDs, value, rowID, setObj){
|
||
const debugtext = `[setSkillCostByRankChange()]`;
|
||
const groupid = getGroupID(value, 'skill');
|
||
const skillname = value[`repeating_skill_${rowID}_name`];
|
||
const skillcost = getSkillCost(debug, skillname);
|
||
const skillrank = isNaN(parseInt(setObj[`repeating_skill_${rowID}_level`])) ?
|
||
parseInt(value[`repeating_skill_${rowID}_level`]) :
|
||
parseInt(setObj[`repeating_skill_${rowID}_level`]);
|
||
const totalcost = skillcost * skillrank;
|
||
const spent = getAggregateSkillGroupCost(debug, skillIDs, value, rowID, groupid, setObj);
|
||
setObj[`repeating_skill_${rowID}_totalcost`] = totalcost;
|
||
setObj[`static_skillgroup_${groupid}_spent`] = spent + totalcost;
|
||
if (debug) {
|
||
console.log(`${debugtext} totalcost = ${totalcost}`);
|
||
console.log(`${debugtext} spent = ${spent}`);
|
||
}
|
||
}
|
||
|
||
function setAttrCostByLevelChange(debug, attrdb, eventInfo, value, attrIDs, sectionName, rowID, sourceAttr, setObj) {
|
||
const debugtext = `[setAttrCostByLevelChange(${sourceAttr})]`;
|
||
const groupid = getGroupID(value, sectionName);
|
||
const groupType = value[`static_${sectionName}group_${groupid}_type`] || 'standard';
|
||
const isPowerFlux = /flux/i.test(groupType);
|
||
const isPowerVariation = /variation/i.test(groupType);
|
||
const groupSourceID = value[`static_${sectionName}group_${groupid}_source`];
|
||
const lockGroupCost = parseInt(value[`static_${sectionName}group_${groupid}_groupcost`]);
|
||
const poolCost = parseInt(value[`repeating_${sectionName}_${groupSourceID}_totalcost`]) || 0;
|
||
const groupActive = parseInt(value[`static_${sectionName}group_${groupid}_active`]) || 0;
|
||
const level = parseInt(value[`repeating_${sectionName}_${rowID}_level`]) || 0;
|
||
const cost = parseInt(value[`repeating_${sectionName}_${rowID}_costperlevel`]) || 0;
|
||
const attrcost = level * cost;
|
||
|
||
const aggregateAttrCost = getAggregateAttrGroupCost(debug, attrIDs, value, sectionName, rowID, setObj);
|
||
const aggregatePoolCost = getAggregatePoolCost(debug, attrIDs, eventInfo, value, sectionName, rowID, setObj);
|
||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
const poolSpent = aggregatePoolCost;
|
||
const groupCost = isPowerFlux ? groupActive ? poolCost :
|
||
groupSourceID == rowID ? attrcost :
|
||
poolCost + aggregateAttrCost + aggregateDefectPoints + attrcost :
|
||
isPowerVariation ? groupActive ? lockGroupCost :
|
||
aggregateAttrCost + aggregateDefectPoints + attrcost :
|
||
aggregateAttrCost + aggregateDefectPoints + attrcost;
|
||
|
||
if(debug){
|
||
console.log(`${debugtext} groupid = ${groupid}`);
|
||
console.log(`${debugtext} groupType = ${groupType}`);
|
||
console.log(`${debugtext} isPowerFlux = ${isPowerFlux}`);
|
||
console.log(`${debugtext} isPowerVariation = ${isPowerVariation}`);
|
||
console.log(`${debugtext} groupSourceID = ${groupSourceID}`);
|
||
console.log(`${debugtext} poolCost = ${poolCost}`);
|
||
console.log(`${debugtext} groupActive = ${groupActive}`);
|
||
console.log(`${debugtext} level = ${level}`);
|
||
console.log(`${debugtext} cost = ${cost}`);
|
||
console.log(`${debugtext} attrcost = ${attrcost}`);
|
||
console.log(`${debugtext} aggregateAttrCost = ${aggregateAttrCost}`);
|
||
console.log(`${debugtext} groupCost = ${groupCost}`)
|
||
console.log(`${debugtext} poolSpent = ${poolSpent}`);
|
||
console.log(`${debugtext} aggregatePoolCost = ${aggregatePoolCost}`);;
|
||
}
|
||
|
||
setObj[`static_${sectionName}group_${groupid}_spent`] = poolSpent;
|
||
if (sectionName == 'attr') {
|
||
setObj[`static_${sectionName}group_${groupid}_groupcost`] = groupCost;
|
||
}
|
||
setObj[`repeating_${sectionName}_${rowID}_totalcost`] = attrcost;
|
||
}
|
||
|
||
function getAllAttrNames() {
|
||
const names = [`absorption`, `alternateform`, `alternateidentity`, `armor`, `attackmastery`, `augmented`, `capacity`, `changestate`, `cognition`, `combattechnique`, `companion`, `connected`, `controlenvironment`, `conversion`, `dataaccess`, `defensemastery`, `dimensionwalk`, `dynamicpowers`, `elasticity`, `enemyattack`, `enemydefense`, `energized`, `exorcism`, `extraactions`, `extraarms`, `extradefenses`, `features`, `flight`, `forcefield`, `gear`, `groundspeed`, `healing`, `heightenedawareness`, `heightenedsenses`, `illusion`, `immovable`, `immunity`, `immutable`, `inspire`, `jumping`, `massivedamage`, `meleeattack`, `meleedefense`, `merge`, `metamorphosis`, `mimic`, `mindcontrol`, `mindshield`, `minions`, `mulligan`, `nullify`, `plantcontrol`, `pocketdimension`, `portal`, `powerflux`, `powervariation`, `projection`, `rangedattack`, `rangeddefense`, `regeneration`, `reincarnation`, `resilient`, `sensoryblock`, `shield`, `sixthsense`, `sizechange`, `skill`, `socialmastery`, `spaceflight`, `specialmovement`, `summoncreatures`, `supersense`, `superspeed`, `superstrength`, `swarm`, `telekinesis`, `telepathy`, `teleport`, `tough`, `transfer`, `transmute`, `tunneling`, `unaffected`, `unassailable`, `undetectable`, `uniqueattribute`, `unknownpower`, `waterspeed`, `wealth`, `weapon`];
|
||
return names;
|
||
}
|
||
|
||
function getStatBase(debug, value, stat) {
|
||
const level = parseInt(value[`static_stat_base_${stat}`]) || 0;
|
||
if (debug) console.log(`[getStatBase()] level = ${level}`);
|
||
return level;
|
||
}
|
||
|
||
function getShortcomingRank(debug, attrdb, value, stat) {
|
||
const defectdb = attrdb.defect;
|
||
const aggregateRank = _.chain(defectdb)
|
||
.map(defect => {
|
||
const result = defect.name == 'shortcoming' ? defect.aspect == stat ?
|
||
parseInt(value[`repeating_attr_${defect.source}_activate`]) > 0 ?
|
||
defect.rank : 0 : 0 : 0;
|
||
return result;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
if (debug) console.log(`[getShortcomingRank()] aggregateRank = ${aggregateRank}`);
|
||
return aggregateRank;
|
||
}
|
||
|
||
function setAllAspectStats(debug, eventInfo, attrdb, value, setObj, stat) {
|
||
if (/(body|mind|soul)/i.test(stat) == false) return;
|
||
const newValue = getStatBase(debug, value, stat);
|
||
const augmented = getSumOfActiveAttrLevels(attrdb, 'augmented', stat) || 0;
|
||
const shortcoming = getShortcomingRank(debug, attrdb, value, stat);
|
||
const result = newValue + augmented - shortcoming;
|
||
setObj[`stat_total_${stat}`] = result;
|
||
if (debug) console.log(`[setAllAspectStats(sourceAttr)] result = ${result}`);
|
||
setStatCost(debug, eventInfo, setObj, stat);
|
||
setStatAspectLevels(debug, attrdb, value, stat, result, setObj)
|
||
}
|
||
|
||
function setStatAspectLevels(debug, attrdb, value, stat, statbase, setObj) {
|
||
const minorstats =
|
||
(stat == 'body') ? ['agi', 'con', 'dex', 'str'] :
|
||
(stat == 'mind') ? ['cre', 'int', 'per', 'rea'] :
|
||
(stat == 'soul') ? ['awa', 'cha', 'com', 'wil'] :
|
||
[];
|
||
const result = _.chain(minorstats)
|
||
.map(minorstat => {
|
||
const result = getShortcomingRank(debug, attrdb, value, minorstat);
|
||
return result;
|
||
})
|
||
.map(shortcoming => {
|
||
return statbase - shortcoming;
|
||
})
|
||
.value();
|
||
_.each(minorstats, (minorstat, i) => {
|
||
setObj[`stat_total_${minorstat}`] = result[i];
|
||
});
|
||
if (debug) {
|
||
console.log(`[setStatAspectLevels(${stat})] result:`);
|
||
console.log(result);
|
||
}
|
||
}
|
||
|
||
function getAggregateShortcomingRanks(debug, value, defectdb, stat, setObj) {
|
||
const result = _.chain(defectdb)
|
||
.map(defect => {
|
||
const isActive = isNaN(parseInt(setObj[`repeating_attr_${defect.source}_activate`])) ?
|
||
parseInt(value[`repeating_attr_${defect.source}_activate`]) :
|
||
parseInt(setObj[`repeating_attr_${defect.source}_activate`]);
|
||
const rank = defect.name == 'shortcoming' ? defect.aspect == `${stat}` ?
|
||
isActive > 0 ?
|
||
parseInt(defect.rank) : 0 : 0 : 0;
|
||
return rank;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
if(debug) console.log(`[getAggregateShortcomingRanks(${stat})] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getStatAspectLevel(debug, attrdb, value, defectdb, aspect, setObj) {
|
||
const allaspectstat = aspect.length > 3 ?
|
||
aspect : getAllAspectStat(aspect);
|
||
const statbase = getStatBase(debug, value, allaspectstat);
|
||
const augmented = getSumOfActiveAttrLevels(attrdb, 'augmented', allaspectstat) || 0;
|
||
const aggregateShorcomingRanks = getAggregateShortcomingRanks(debug, value, defectdb, aspect, setObj);
|
||
const result = statbase + augmented - aggregateShorcomingRanks;
|
||
if(debug){
|
||
console.log(`[getStatAspectLevel(${aspect})] result = ${result}`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function setStatAspectLevel(debug, attrdb, value, defectdb, defectobj, setObj) {
|
||
const aspect = defectobj.aspect;
|
||
const stataspectlevel = getStatAspectLevel(debug, attrdb, value, defectdb, aspect, setObj);
|
||
if(aspect.length > 3){
|
||
const aspects = stat_aspects_obj[`${aspect}`];
|
||
_.each(aspects, a => {
|
||
const aggregateaspectlevel = getAggregateShortcomingRanks(debug, value, defectdb, a, setObj);
|
||
setObj[`stat_total_${a}`] = stataspectlevel - aggregateaspectlevel;
|
||
})
|
||
}
|
||
setObj[`stat_total_${aspect}`] = stataspectlevel;
|
||
if(debug){
|
||
console.log(`[setStatAspectLevel(${defectobj.aspect})] stataspectlevel = ${stataspectlevel}`);
|
||
}
|
||
}
|
||
|
||
function getIsMajorAspectInUse(debug, attrdb, value, setObj){
|
||
const defectdb = attrdb.defect;
|
||
const result = _.chain(defectdb)
|
||
.map(defect => {
|
||
console.log(`[TEST getIsMajorAspectInUse] defect:`); console.log(defect);
|
||
const isActive = isNaN(parseInt(setObj[`repeating_attr_${defect.source}_activate`])) ?
|
||
parseInt(value[`repeating_attr_${defect.source}_activate`]) :
|
||
parseInt(setObj[`repeating_attr_${defect.source}_activate`]);
|
||
console.log(`[TEST getIsMajorAspectInUse] isActive = ${isActive}`);
|
||
const rank = defect.name == 'shortcoming' ?
|
||
major_stats_regex.test(defect.aspect) ?
|
||
isActive > 0 ?
|
||
parseInt(defect.rank) > 0 ?
|
||
1 : 0 : 0 : 0 : 0;
|
||
console.log(`[TEST getIsMajorAspectInUse] rank = ${rank}`);
|
||
return rank;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
console.log(`[TEST getIsMajorAspectInUse] result = ${result}`);
|
||
const majorAspectInUse = result > 0 ? true : false;
|
||
if(debug) console.log(`[getIsMajorAspectInUse()] majorAspectInUse = ${majorAspectInUse}`);
|
||
return majorAspectInUse;
|
||
}
|
||
|
||
function setStatAspectView(debug, attrdb, value, setObj) {
|
||
const majorAspectInUse = getIsMajorAspectInUse(debug, attrdb, value, setObj);
|
||
const showAllAspectsStats = majorAspectInUse ? 1 : 0;
|
||
const showMajorAspectStats = majorAspectInUse ? 1 : 0;
|
||
setObj.showallaspectsstats = showAllAspectsStats;
|
||
setObj.showmajoraspectstats = showMajorAspectStats;
|
||
if(debug){
|
||
console.log(`[setStatAspectView()] showallaspectsstats = ${showAllAspectsStats}`);
|
||
console.log(`[setStatAspectView()] showmajoraspectstats = ${showMajorAspectStats}`);
|
||
}
|
||
}
|
||
|
||
function setDamageLevelByDamageTaken(debug, value, setObj, sourceAttr) {
|
||
const isDamage = /(wounds|fatigue|maddness|shame|health|energy)/i.test(`${sourceAttr}`); if (!isDamage) return;
|
||
let source = (`${sourceAttr}` == "wounds") ? "health" : (`${sourceAttr}` == "fatigue") ? "energy" : (`${sourceAttr}` == "maddness") ? "sanity" : (`${sourceAttr}` == "shame") ? "social" : `${sourceAttr}`,
|
||
damage = parseInt(value[`static_stat_total_${sourceAttr}`]) || 0,
|
||
health = parseInt(setObj[`stat_total_${source}`]) || parseInt(value[`stat_total_${source}`]) || 0,
|
||
status = Math.floor(10 - (damage / health) * 10);
|
||
status = (damage < 1) ? 10 : status;
|
||
status = (status < 0) ? 0 : status;
|
||
setObj[`${source}`] = status;
|
||
if (debug) console.log(`[setDamageLevelByDamageTaken(${sourceAttr})] status3 = ${status}`);
|
||
}
|
||
|
||
function setDamageLevelByTempChange(debug, value, setObj, sourceAttr) {
|
||
const isDamage = /(health|energy)/i.test(`${sourceAttr}`); if (!isDamage) return;
|
||
let source = (`${sourceAttr}` == "health") ? "wounds" : (`${sourceAttr}` == "energy") ? "fatigue" : 0,
|
||
damage = parseInt(value[`static_stat_total_${source}`]) || 0,
|
||
health = parseInt(setObj[`stat_total_${sourceAttr}`]) || parseInt(value[`stat_total_${sourceAttr}`]) || 0,
|
||
status = Math.floor(10 - (damage / health) * 10);
|
||
status = (damage < 1) ? 10 : status;
|
||
status = (status < 0) ? 0 : status;
|
||
setObj[`${sourceAttr}`] = status;
|
||
if (debug) console.log(`[setDamageLevelByTempChange(${sourceAttr})] status3 = ${status}`);
|
||
}
|
||
|
||
function setDerivedValue(debug, attrdb, value, setObj, derivedvalue = '') {
|
||
if (/(health|energy|sanity|social)/i.test(derivedvalue) == false) return;
|
||
const stat = (derivedvalue == 'health') ? 'body' : 'mind';
|
||
const bodyormind = parseInt(setObj[`stat_total_${stat}`]) ||
|
||
parseInt(value[`stat_total_${stat}`]) || 0;
|
||
const soul = parseInt(setObj.stat_total_soul) ||
|
||
parseInt(value.stat_total_soul) || 0;
|
||
const attribute =
|
||
(derivedvalue == 'health') ? 'tough' :
|
||
(derivedvalue == 'energy') ? 'energized' :
|
||
(derivedvalue == 'sanity') ? 'unassailable' :
|
||
(derivedvalue == 'social') ? 'socialmastery' :
|
||
'';
|
||
const bonusattribute = attrdb[`${attribute}`];
|
||
const bonus = _.chain(bonusattribute)
|
||
.map(o => {
|
||
const result = parseInt(o.level) || 0;
|
||
return result;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
const temp = parseInt(setObj[`static_stat_temp_${derivedvalue}`]) ||
|
||
parseInt(value[`static_stat_temp_${derivedvalue}`]) || 0;
|
||
const result = (derivedvalue == 'health' || derivedvalue == 'energy') ?
|
||
(bodyormind + soul) * 5 + bonus + temp :
|
||
(derivedvalue == 'sanity') ? (bodyormind + soul) + bonus + temp :
|
||
(derivedvalue == 'social') ? Math.round((bodyormind + soul) / 2) + bonus + temp :
|
||
0;
|
||
setObj[`stat_total_${derivedvalue}`] = result;
|
||
if (debug) console.log(`[setDerivedValue(${derivedvalue})] result = ${result}`);
|
||
}
|
||
|
||
function setTotalShock(debug, attrdb, setObj, sourceAttr) {
|
||
const health = parseInt(setObj.stat_total_health) ||
|
||
parseInt(value.stat_total_health) || 0;
|
||
const hardboiled = getSumOfActiveSubAttrRanks(attrdb, 'combattechnique',
|
||
'hardboiled') || 0;
|
||
const result = Math.round(health / 5) + hardboiled;
|
||
setObj.stat_total_shock = result;
|
||
if (debug) console.log(`[setTotalShock(${sourceAttr})] result = ${result}`);
|
||
}
|
||
|
||
function setTotalMovement(debug, value, attrdb, setObj, sourceAttr) {
|
||
const body = parseInt(setObj.stat_total_body) ||
|
||
parseInt(value.stat_total_body) || 0;
|
||
const fast = getSumOfActiveSubAttrRanks(attrdb, 'specialmovement', 'fast') || 0;
|
||
const move = (fast > 0) ? body * (2 * fast) : body || 0;
|
||
const walk_swim = move;
|
||
const jog = Math.ceil(move * 1.5);
|
||
const jump = Math.ceil(move * 0.25);
|
||
const jumpup = Math.ceil(move * 0.125);
|
||
const run_swimsprint = move * 2;
|
||
const sprint = move * 4;
|
||
setObj.stat_total_walk = walk_swim;
|
||
setObj.stat_total_leap = walk_swim;
|
||
setObj.stat_total_jog = jog;
|
||
setObj.stat_total_jump = jump;
|
||
setObj.stat_total_jumpup = jumpup;
|
||
setObj.stat_total_run = run_swimsprint;
|
||
setObj.stat_total_swim = walk_swim;
|
||
setObj.stat_total_sprint = sprint;
|
||
setObj.stat_total_sswim = run_swimsprint;
|
||
if (debug) console.log(`[setTotalMovement(${sourceAttr})] move = ${move}`);
|
||
}
|
||
|
||
function setAttrVisibilityByGroup(debug, value, eventInfo, attrIDs, setObj, sectionName) {
|
||
var section = sectionName.replace(/group/i, "");
|
||
_.each(attrIDs, (id) => {
|
||
let group = parseInt(value[`repeating_${section}_${id}_group`]),
|
||
currGroup = eventInfo.newValue.match(/[0-9].?/);
|
||
if (group == currGroup) {
|
||
setObj[`repeating_${section}_${id}_visible`] = 0;
|
||
} else { setObj[`repeating_${section}_${id}_visible`] = 1; }
|
||
if (debug) {
|
||
console.log(`[setAttrVisibilityByGroup(${eventInfo.newValue})] id = ${id}`);
|
||
console.log(`[setAttrVisibilityByGroup(${eventInfo.newValue})] group = ${group}`);
|
||
console.log(`[setAttrVisibilityByGroup(${eventInfo.newValue})] currGroup = ${currGroup}`);
|
||
}
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return;
|
||
});
|
||
}
|
||
|
||
function isPowerFlux(attribute) {
|
||
const result = (attribute == "power flux") ? true : false;
|
||
return result;
|
||
}
|
||
|
||
function isPowerVariation(attribute) {
|
||
const result = (attribute == "power variation") ? true : false;
|
||
return result;
|
||
}
|
||
|
||
function convertToDynamicGroup(debug, attrIDs, attrdb, eventInfo, value, rowID, setObj){
|
||
const groupType = eventInfo.newValue.toLowerCase();
|
||
if(debug) console.log(`[convertToDynamicGroup()] groupType = ${groupType}`);
|
||
if(groupType == 'power flux'){
|
||
makeGroupPowerFlux(debug, attrIDs, attrdb, eventInfo, value, rowID, setObj);
|
||
}else if(groupType == 'power variation'){
|
||
makeGroupPowerVariation(debug, attrIDs, attrdb, eventInfo, value, rowID, setObj);
|
||
}else{
|
||
return;
|
||
}
|
||
setObj[`static_attrgroup_${getGroupID(value, 'attr')}_source`] = rowID;
|
||
}
|
||
|
||
function makeGroupPowerFlux(debug, attrIDs, attrdb, eventInfo, value, rowID, setObj){
|
||
const groupid = getGroupID(value, 'attr');
|
||
const aggregateAttrCost = getAggregateAttrGroupCost(debug, attrIDs, value, 'attr', rowID, setObj);
|
||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
const aggregatePoolCost = getAggregatePoolCost(debug, attrIDs, eventInfo, value, 'attr', rowID, setObj);
|
||
if(debug) console.log(`[makeGroupPowerFlux()] groupid = ${groupid}`);
|
||
setObj[`static_attrgroup_${groupid}_changemax`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 1;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = 'Flux Points';
|
||
setObj[`static_attrgroup_${groupid}_type`] = 'power flux';
|
||
setObj[`static_attrgroup_${groupid}_spent`] = aggregatePoolCost;
|
||
setObj[`static_attrgroup_${groupid}_groupcost`] = aggregateAttrCost + aggregateDefectPoints;
|
||
}
|
||
|
||
function makeGroupPowerVariation(debug, attrIDs, attrdb, value, rowID, setObj){
|
||
const groupid = getGroupID(value, 'attr');
|
||
const aggregateAttrCost = getAggregateAttrGroupCost(debug, attrIDs, value, 'attr', rowID, setObj);
|
||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
const aggregatePoolCost = getAggregatePoolCost(debug, attrIDs, value, 'attr', rowID, setObj);
|
||
if(debug) console.log(`[makeGroupPowerVariation()] groupid = ${groupid}`);
|
||
setObj[`static_attrgroup_${groupid}_changemax`] = 1;
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 1;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = 'Character Points';
|
||
setObj[`static_attrgroup_${groupid}_type`] = 'power variation';
|
||
setObj[`static_attrgroup_${groupid}_spent`] = aggregatePoolCost;
|
||
setObj[`static_attrgroup_${groupid}_groupcost`] = aggregateAttrCost + aggregateDefectPoints;
|
||
}
|
||
|
||
function convertToStandardGroup(debug, attrIDs, attrdb, value, rowID, setObj){
|
||
const groupid = getGroupID(value, 'attr');
|
||
const aggregateAttrCost = getAggregateAttrGroupCost(debug, attrIDs, value, 'attr', rowID, setObj);
|
||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
if(debug) console.log(`[convertToStandardGroup()] groupid = ${groupid}`);
|
||
setObj[`static_attrgroup_${groupid}_changemax`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_groupmax`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_spent`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = '';
|
||
setObj[`static_attrgroup_${groupid}_type`] = '';
|
||
setObj[`static_attrgroup_${groupid}_source`] = '';
|
||
setObj[`static_attrgroup_${groupid}_groupcost`] = aggregateAttrCost + aggregateDefectPoints;
|
||
}
|
||
|
||
function setGroupType(debug, attrIDs, attrdb, eventInfo, value, sectionName, rowID, setObj){
|
||
const dymanicGrouRegex = /(flux|variation)/i;
|
||
const dynamicGroup = attr => dymanicGrouRegex.test(attr);
|
||
if(!dynamicGroup(eventInfo.newValue) && !dynamicGroup(eventInfo.previousValue)){
|
||
return;
|
||
}else if(!dynamicGroup(eventInfo.newValue) && dynamicGroup(eventInfo.previousValue)){
|
||
convertToStandardGroup(debug, attrIDs, attrdb, value, rowID, setObj);
|
||
}else{
|
||
convertToDynamicGroup(debug, attrIDs, attrdb, eventInfo, value, rowID, setObj);
|
||
}
|
||
cleanupCosts(debug, attrIDs, attrdb, value, sectionName, rowID, setObj);
|
||
}
|
||
|
||
function setAttrGroupType(debug, groupid, grouptype, setObj, sourceAttr) {
|
||
switch (grouptype) {
|
||
case `standard`: //standard
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = "";
|
||
setObj[`static_attrgroup_${groupid}_type`] = "standard";
|
||
break;
|
||
case `power flux`: //power flux
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 1;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = "Flux Points";
|
||
setObj[`static_attrgroup_${groupid}_type`] = "power flux";
|
||
break;
|
||
case `power variation`: //power variation
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 1;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = "Character Points";
|
||
setObj[`static_attrgroup_${groupid}_type`] = "power variation";
|
||
break;
|
||
default:
|
||
setObj[`static_attrgroup_${groupid}_changegroup`] = 0;
|
||
setObj[`static_attrgroup_${groupid}_pointype`] = "";
|
||
setObj[`static_attrgroup_${groupid}_type`] = "standard";
|
||
}
|
||
if (debug) {
|
||
console.log(`[setAttrGroupType(${sourceAttr})] grouptype = ${grouptype}`);
|
||
console.log(`[setAttrGroupType(${sourceAttr})] setObj:`);
|
||
console.log(setObj);
|
||
}
|
||
}
|
||
|
||
function removePoolCpFromGroupCost(value, source, setObj) {
|
||
let type = parseInt(value[`${source}_type`]);
|
||
if (type < 3) {
|
||
let groupcost = setObj[`${source}_groupcost`] - setObj[`${source}_poolcp`];
|
||
setObj[`${source}_groupcost`] = groupcost;
|
||
}
|
||
}
|
||
|
||
function setPoolCp(value, source, setObj) {
|
||
let type = parseInt(value[`${source}_type`]) || 0,
|
||
level = parseInt(value[`${source}_grouplevel`]) || 0,
|
||
groupenhancement = parseInt(value[`${source}_groupmodification`]) || 0,
|
||
groupmax = (type == 2) ? (level - groupenhancement) * 10 : 0;
|
||
setObj[`${source}_groupmax`] = groupmax;
|
||
}
|
||
|
||
function setEffectivePoolLevel(debug, value, source, sourceAttr, setObj) {
|
||
let poolenhancement = parseInt(value[`${source}_groupmodification`]) || 0,
|
||
poollevel = parseInt(value[`${source}_grouplevel`]) || 0,
|
||
effectivelevel = poollevel - poolenhancement;
|
||
setObj[`${source}_groupelevel`] = effectivelevel;
|
||
if (debug) { console.log(`[setEffectivePoolLevel(${sourceAttr})] effectivelevel = ${effectivelevel}`); }
|
||
}
|
||
|
||
function setLevelElevation(eventInfo, source, target, setObj) {
|
||
const level = parseInt(eventInfo.newValue) || 0;
|
||
if (level == 7) {
|
||
setObj[`${source}_${target}`] = 1;
|
||
} else if (level < 7) {
|
||
setObj[`${source}_${target}`] = 0;
|
||
}
|
||
}
|
||
|
||
function setPoolCost(debug, eventInfo, value, setObj, source, sourceAttr) {
|
||
let isSkill = /skill/i.test(source),
|
||
newlevel = parseInt(eventInfo.newValue) || 0,
|
||
previouslevel = (parseInt(eventInfo.previousValue) == newlevel) ? 0 : parseInt(eventInfo.previousValue) || 0,
|
||
poollevelelevation = parseInt(value[`${source}_grouplevelelevation`]) || 0,
|
||
poolenhancement = parseInt(value[`${source}_groupmodification`]) || 0,
|
||
groupcost = parseInt(value[`${source}_groupcost`]) || 0,
|
||
type = parseInt(value[`${source}_type`]) || 0,
|
||
groupmax = (type == 2) ? (newlevel - poolenhancement) * 5 : (type == 3) ? parseInt(value[`${source}_groupmax`]) : (isSkill) ? newlevel * 10 : 0;
|
||
setLevelElevation(eventInfo, `${source}`, `poollevelelevation`, setObj);
|
||
groupcost = groupcost + ((newlevel * groupcost) - (previouslevel * groupcost));
|
||
setObj[`${source}_groupmax`] = groupmax;
|
||
setObj[`${source}_groupcost`] = groupcost;
|
||
if (debug) { console.log(`[setPoolCost(${sourceAttr})] groupmax = ${groupmax}`); console.log(`[setPoolCost(${sourceAttr})] groupcost = ${groupcost}`); }
|
||
}
|
||
|
||
function isDynamicGroup(value, sectionName) {
|
||
const groupid = getGroupID(value, sectionName);
|
||
const result = /(flux|variation)/i.test(value[`static_attrgroup_${groupid}_type`]);
|
||
return result;
|
||
}
|
||
|
||
function getGroupID(value, sectionName) {
|
||
return parseInt(value[`static_${sectionName}group_selected_tab`].replace(/\D/g, '')) || 0;
|
||
}
|
||
|
||
function setDynamicGroupSourceID(debug, eventInfo, value, attrIDs, source, rowID, setObj) {
|
||
const isDynamicAttr = /power (flux|variation)/i.test(value[`${source}_attribute`]);
|
||
const wasDynamicAttr = /power (flux|variation)/i.test(eventInfo.previousValue);
|
||
const dynamicGroupSourceID = setObj[`repeating_attr_${rowID}_dynamicgroupsource`] ||
|
||
value[`repeating_attr_${rowID}_dynamicgroupsource`];
|
||
if (debug) {
|
||
console.log(`[setDynamicGroupSourceID()] isDynamicAttr = ${isDynamicAttr}`);
|
||
console.log(`[setDynamicGroupSourceID()] wasDynamicAttr = ${wasDynamicAttr}`);
|
||
console.log(`[setDynamicGroupSourceID(${rowID})] dynamicGroupSourceID = ${dynamicGroupSourceID}`);
|
||
}
|
||
if (isDynamicAttr && dynamicGroupSourceID === undefined) {
|
||
setObj[`${source}_dynamicgroupsource`] = rowID;
|
||
} else if (wasDynamicAttr && dynamicGroupSourceID === rowID) {
|
||
setObj[`${source}_dynamicgroupsource`] = undefined;
|
||
}
|
||
}
|
||
|
||
function resetOnAlreadyDynamicGroup(debug, eventInfo, value, sectionName, match, source, rowID, setObj) {
|
||
const isDynamicAttr = /(flux|variation)/i.test(value[`${source}_attribute`]);
|
||
var debugtext = '[resetOnAlreadyDynamicGroup()]';
|
||
var result = false;
|
||
if (isDynamicAttr && isDynamicGroup(value, sectionName)) {
|
||
setObj[`${match}`] = eventInfo.previousValue;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
result = true;
|
||
debugtext = `${debugtext} group is dynamic, resetting attribute selection.`;
|
||
} else {
|
||
debugtext = `${debugtext} group is not dynamic.`;
|
||
}
|
||
if(debug) console.log(debugtext);
|
||
return result;
|
||
}
|
||
|
||
function setGroupCostByType(debug, value, source, rowID, sourceAttr, setObj) {
|
||
let type = parseInt(value[`${source}_type`]) || 0,
|
||
poolcp = parseInt(value[`${source}_poolcp`]),
|
||
poollevel = parseInt(value[`${source}_grouplevel`]) || 0,
|
||
attributescost = parseInt(value[`${source}_attributescost`]) || 0,
|
||
groupcost = (type == 2) ? 10 * poollevel : (type == 3) ? (4 * poollevel) + poolcp : attributescost || 0,
|
||
poolspent = (type == 3) ? attributescost : 0;
|
||
setObj[`${source}_groupcost`] = groupcost;
|
||
setObj[`${source}_groupspent`] = poolspent;
|
||
if (debug) { console.log(`[setGroupCostByType(${sourceAttr})] groupcost = ${groupcost}`); console.log(`[setGroupCostByType(${sourceAttr})] poolspent = ${poolspent}`); }
|
||
}
|
||
|
||
function setGroupMembership(value, setObj, source, sectionName) {
|
||
const tab = value[`static_${sectionName}group_selected_tab`];
|
||
const currGroup = tab.replace(/attrgroup/g, '');
|
||
setObj[`${source}_new`] = 0;
|
||
setObj[`${source}_group`] = currGroup;
|
||
}
|
||
|
||
function resetOnActive(debug, eventInfo, value, match, rowID, setObj) {
|
||
let activate = parseInt(value[`repeating_attr_${rowID}_activate`]),
|
||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||
if (activate) {
|
||
if (debug) console.log(`[resetOnActive(${match})] attribute is active, exiting`);
|
||
setObj[`${match}`] = reset;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return true;
|
||
} else { return false; }
|
||
}
|
||
|
||
function resetOnLocked(debug, eventInfo, value, match, rowID, setObj) {
|
||
const locked = parseInt(value[`repeating_attr_${rowID}_lock`]),
|
||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||
if (locked) {
|
||
if (debug) console.log(`[resetOnLocked(${match})] attribute is locked, exiting`);
|
||
setObj[`${match}`] = reset;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return true;
|
||
} else { return false; }
|
||
}
|
||
|
||
function getIsLocked(debug, value, rowID, sourceAttr) {
|
||
const locked = parseInt(value[`repeating_attr_${rowID}_lock`]),
|
||
result = (locked) ? true : false;
|
||
if (debug) console.log(`[getIsLocked(${sourceAttr})] result = ${result}`)
|
||
return result;
|
||
}
|
||
|
||
function resetOnLevelNotZero(debug, eventInfo, value, match, rowID, setObj) {
|
||
let level = parseInt(value[`repeating_attr_${rowID}_level`]),
|
||
elevel = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]),
|
||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||
if (level || elevel) {
|
||
if (debug) console.log(`[resetOnLevelNotZero(${match})] can't change Attribute when Level or Effective Level is greater than 0, exiting`);
|
||
setObj[`${match}`] = reset;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return true;
|
||
} else { return false; }
|
||
}
|
||
|
||
function resetOnPoolLevelNotZero(debug, eventInfo, value, match, source, setObj) {
|
||
if (eventInfo.sourceType === "sheetworker") return;
|
||
let level = parseInt(value[`${source}_grouplevel`]),
|
||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||
if (level) {
|
||
if (debug) console.log(`[resetOnPoolLevelNotZero(${match})] can't change Type when Level is greater than 0, exiting`);
|
||
setObj[`${match}`] = reset;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return true;
|
||
} else { return false; }
|
||
}
|
||
|
||
function resetOnNoAttr(debug, eventInfo, value, match, rowID, setObj) {
|
||
if (eventInfo.sourceType === "sheetworker") return;
|
||
let attr = value[`repeating_attr_${rowID}_attribute`];
|
||
if (attr.length == 0) {
|
||
if (debug) console.log(`[resetOnNoAttr(${match})] can't change Level when no Attribute is selected, exiting`);
|
||
setObj[`${match}`] = 0;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return true;
|
||
} else { return false; }
|
||
}
|
||
|
||
function resetOnActiveGroup(debug, eventInfo, value, match, source, setObj) {
|
||
if (eventInfo.sourceType === "sheetworker") return;
|
||
let groupCost = parseInt(value[`${source}_groupcost`]),
|
||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 1 : eventInfo.previousValue;
|
||
if (groupCost > 0) {
|
||
if (debug) console.log(`[resetOnActiveGroup(${match})] can't change Group Type when group Attributes have a level > 0, exiting`);
|
||
setObj[`${match}`] = reset;
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return true;
|
||
} else { return false; }
|
||
}
|
||
|
||
function resetOnActiveFluxGroup(debug, eventInfo, value, match, groupID, attrIDs, setObj) {
|
||
if (eventInfo.sourceType === "sheetworker") return;
|
||
var result = false;
|
||
_.each(attrIDs, (rowID) => {
|
||
let group = parseInt(value[`repeating_attr_${rowID}_group`]),
|
||
fluxenable = parseInt(value[`repeating_attr_${rowID}_fluxenable`]),
|
||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 1 : eventInfo.previousValue;
|
||
if (fluxenable && group == groupID) {
|
||
result = true;
|
||
setObj[`static_attrgroup_${group}_type`] = reset;
|
||
}
|
||
});
|
||
if (result) {
|
||
if (debug) {
|
||
console.log(`[resetOnActiveFluxGroup(${match})] can't change Group Type when flux Attributes are active, exiting`);
|
||
console.log('[Changes To Sheet Values] setObj:');
|
||
console.log(setObj);
|
||
}
|
||
setAttrs(setObj);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function setAttrCostPerLevel(debug, value, rowID, setObj) {
|
||
let attribute = value[`repeating_attr_${rowID}_attribute`],
|
||
obj = {
|
||
"absorption": 5,
|
||
"alternateform": 4,
|
||
"alternate identity": 1,
|
||
"armor": 2,
|
||
"attack mastery": 1,
|
||
"augmented": 4,
|
||
"capacity": 1,
|
||
"change state": 3,
|
||
"cognition": 2,
|
||
"combat technique": 1,
|
||
"companion": 4,
|
||
"connected": 1,
|
||
"control environment": 1,
|
||
"conversion": 3,
|
||
"data access": 2,
|
||
"defense mastery": 1,
|
||
"dimension walk": 5,
|
||
"dynamic powers": 10,
|
||
"elasticity": 4,
|
||
"enemy attack": 1,
|
||
"enemy defense": 1,
|
||
"energized": 1,
|
||
"exorcism": 1,
|
||
"extra actions": 4,
|
||
"extra arms": 1,
|
||
"extra defenses": 2,
|
||
"features": 1,
|
||
"flight": 3,
|
||
"forcefield": 4,
|
||
"gear": 1,
|
||
"ground speed": 1,
|
||
"healing": 1,
|
||
"heightened awareness": 1,
|
||
"heightened senses": 1,
|
||
"illusion": 1,
|
||
"immovable": 1,
|
||
"immunity": 3,
|
||
"immutable": 1,
|
||
"inspire": 1,
|
||
"jumping": 1,
|
||
"massive damage": 3,
|
||
"melee attack": 1,
|
||
"melee defense": 1,
|
||
"merge": 4,
|
||
"metamorphosis": 2,
|
||
"mimic": 2,
|
||
"mind control": 5,
|
||
"mind shield": 1,
|
||
"minions": 2,
|
||
"mulligan": 1,
|
||
"nullify": 5,
|
||
"plant control": 1,
|
||
"pocket dimension": 1,
|
||
"portal": 2,
|
||
"power flux": 10,
|
||
"power variation": 4,
|
||
"projection": 3,
|
||
"ranged attack": 1,
|
||
"ranged defense": 1,
|
||
"regeneration": 5,
|
||
"reincarnation": 2,
|
||
"resilient": 2,
|
||
"sensory block": 1,
|
||
"shield": 2,
|
||
"sixth sense": 1,
|
||
"size change": 10,
|
||
"skill": 1,
|
||
"social mastery": 1,
|
||
"spaceflight": 1,
|
||
"special movement": 1,
|
||
"summon creatures": 2,
|
||
"supersense": 1,
|
||
"superspeed": 3,
|
||
"superstrength": 4,
|
||
"swarm": 2,
|
||
"telekinesis": 4,
|
||
"telepathy": 3,
|
||
"teleport": 3,
|
||
"tough": 1,
|
||
"transfer": 3,
|
||
"transmute": 3,
|
||
"tunneling": 1,
|
||
"unaffected": 2,
|
||
"unassailable": 1,
|
||
"undetectable": 2,
|
||
"unique attribute": 0,
|
||
"unknown power": 1,
|
||
"water speed": 1,
|
||
"wealth": 3,
|
||
"weapon": 2,
|
||
"default": 0
|
||
},
|
||
result = (obj[attribute] || obj["default"]);
|
||
if (debug) console.log(`[setAttrCostPerLevel()] result = ${result}`);
|
||
setObj[`repeating_attr_${rowID}_costperlevel`] = result;
|
||
}
|
||
|
||
function getAttrCostPerLevel(debug, value, rowID) {
|
||
const attribute = value[`repeating_attr_${rowID}_attribute`];
|
||
const obj = {
|
||
"absorption": 5,
|
||
"alternateform": 4,
|
||
"alternate identity": 1,
|
||
"armor": 2,
|
||
"attack mastery": 1,
|
||
"augmented": 4,
|
||
"capacity": 1,
|
||
"change state": 3,
|
||
"cognition": 2,
|
||
"combat technique": 1,
|
||
"companion": 4,
|
||
"connected": 1,
|
||
"control environment": 1,
|
||
"conversion": 3,
|
||
"data access": 2,
|
||
"defense mastery": 1,
|
||
"dimension walk": 5,
|
||
"dynamic powers": 10,
|
||
"elasticity": 4,
|
||
"enemy attack": 1,
|
||
"enemy defense": 1,
|
||
"energized": 1,
|
||
"exorcism": 1,
|
||
"extra actions": 4,
|
||
"extra arms": 1,
|
||
"extra defenses": 2,
|
||
"features": 1,
|
||
"flight": 3,
|
||
"forcefield": 4,
|
||
"gear": 1,
|
||
"ground speed": 1,
|
||
"healing": 1,
|
||
"heightened awareness": 1,
|
||
"heightened senses": 1,
|
||
"illusion": 1,
|
||
"immovable": 1,
|
||
"immunity": 3,
|
||
"immutable": 1,
|
||
"inspire": 1,
|
||
"jumping": 1,
|
||
"massive damage": 3,
|
||
"melee attack": 1,
|
||
"melee defense": 1,
|
||
"merge": 4,
|
||
"metamorphosis": 2,
|
||
"mimic": 2,
|
||
"mind control": 5,
|
||
"mind shield": 1,
|
||
"minions": 2,
|
||
"mulligan": 1,
|
||
"nullify": 5,
|
||
"plant control": 1,
|
||
"pocket dimension": 1,
|
||
"portal": 2,
|
||
"power flux": 10,
|
||
"power variation": 4,
|
||
"projection": 3,
|
||
"ranged attack": 1,
|
||
"ranged defense": 1,
|
||
"regeneration": 5,
|
||
"reincarnation": 2,
|
||
"resilient": 2,
|
||
"sensory block": 1,
|
||
"shield": 2,
|
||
"sixth sense": 1,
|
||
"size change": 10,
|
||
"skill": 1,
|
||
"social mastery": 1,
|
||
"spaceflight": 1,
|
||
"special movement": 1,
|
||
"summon creatures": 2,
|
||
"supersense": 1,
|
||
"superspeed": 3,
|
||
"superstrength": 4,
|
||
"swarm": 2,
|
||
"telekinesis": 4,
|
||
"telepathy": 3,
|
||
"teleport": 3,
|
||
"tough": 1,
|
||
"transfer": 3,
|
||
"transmute": 3,
|
||
"tunneling": 1,
|
||
"unaffected": 2,
|
||
"unassailable": 1,
|
||
"undetectable": 2,
|
||
"unique attribute": 0,
|
||
"unknown power": 1,
|
||
"water speed": 1,
|
||
"wealth": 3,
|
||
"weapon": 2,
|
||
"default": 0
|
||
};
|
||
const result = (obj[attribute] || obj["default"]);
|
||
if (debug) console.log(`[getAttrCostPerLevel()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getBonus(debug, setObj, attribute) {
|
||
var value = {
|
||
"absorption": 5,
|
||
"alternateform": 5,
|
||
"alternate identity": 1,
|
||
"armor": 5,
|
||
"attack mastery": 1,
|
||
"augmented": 1,
|
||
"capacity": 0,
|
||
"change state": 0,
|
||
"cognition": 2,
|
||
"combat technique": 1,
|
||
"companion": 10,
|
||
"connected": 0,
|
||
"control environment": 1,
|
||
"conversion": 1,
|
||
"data access": 0,
|
||
"defense mastery": 1,
|
||
"dimension walk": 0,
|
||
"dynamic powers": 0,
|
||
"elasticity": 0,
|
||
"enemy attack": 2,
|
||
"enemy defend": 2,
|
||
"energized": 10,
|
||
"exorcism": 2,
|
||
"extra actions": 1,
|
||
"extra arms": 0,
|
||
"features": 0,
|
||
"flight": 0,
|
||
"forcefield": 10,
|
||
"gear": 0,
|
||
"ground speed": 0,
|
||
"healing": 5,
|
||
"heightened awareness": 2,
|
||
"heightened senses": 1,
|
||
"illusion": 0,
|
||
"immunity": 0,
|
||
"immutable": 2,
|
||
"inspire": 1,
|
||
"jumping": 0,
|
||
"massive damage": 1,
|
||
"melee attack": 2,
|
||
"melee defense": 2,
|
||
"merge": 10,
|
||
"metamorphosis": 5,
|
||
"mimic": 1,
|
||
"mind control": 0,
|
||
"mind shield": 2,
|
||
"minions": 0,
|
||
"mulligan": 2,
|
||
"nullify": 1,
|
||
"plant control": 0,
|
||
"pocket dimension": 0,
|
||
"portal": 1,
|
||
"projection": 0,
|
||
"ranged attack": 2,
|
||
"ranged defense": 2,
|
||
"regeneration": 5,
|
||
"reincarnation": 0,
|
||
"resilient": 1,
|
||
"sensory block": 1,
|
||
"shield": 5,
|
||
"sixth sense": 1,
|
||
"size change": 1,
|
||
"skill": 0,
|
||
"spaceflight": 0,
|
||
"special movement": 1,
|
||
"summon creatures": 0,
|
||
"supersense": 0,
|
||
"superspeed": 0,
|
||
"superstrength": 0,
|
||
"swarm": 0,
|
||
"telekinesis": 0,
|
||
"telepathy": 0,
|
||
"teleport": 0,
|
||
"tough": 10,
|
||
"transfer": 1,
|
||
"transmute": 5,
|
||
"tunneling": 0,
|
||
"unaffected": -2,
|
||
"undetectable": 1,
|
||
"unique attribute": 0,
|
||
"unknown power": 0,
|
||
"water speed": 0,
|
||
"wealth": 0,
|
||
"weapon": 1,
|
||
"default": 0
|
||
},
|
||
result = (value[attribute] || 0);
|
||
if (debug) console.log(`[getBonus()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getFastValue(debug, newValue) {
|
||
var value = {
|
||
0: 0,
|
||
1: 1,
|
||
2: 10,
|
||
3: 100,
|
||
4: 1,
|
||
5: 10,
|
||
6: 100,
|
||
7: 1,
|
||
8: 10,
|
||
9: 100,
|
||
10: 1,
|
||
11: 10,
|
||
12: 100,
|
||
13: 1,
|
||
14: 10,
|
||
15: 100,
|
||
16: 1
|
||
},
|
||
result = (value[newValue] || 0);
|
||
if (debug) console.log(`[getFastValue()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getFastUnit(debug, newValue) {
|
||
var value = {
|
||
0: "",
|
||
1: "",
|
||
2: "",
|
||
3: "",
|
||
4: " k",
|
||
5: " k",
|
||
6: " k",
|
||
7: " M",
|
||
8: " M",
|
||
9: " M",
|
||
10: " B",
|
||
11: " B",
|
||
12: " B",
|
||
13: " T",
|
||
14: " T",
|
||
15: " T",
|
||
16: " Q"
|
||
},
|
||
result = (value[newValue] || "");
|
||
if (debug) console.log(`[getFastUnit()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getMediumValue(debug, newValue) {
|
||
var value = {
|
||
0: 0,
|
||
1: 1,
|
||
2: 3,
|
||
3: 10,
|
||
4: 30,
|
||
5: 100,
|
||
6: 300,
|
||
7: 1,
|
||
8: 3,
|
||
9: 10,
|
||
10: 30,
|
||
11: 100,
|
||
12: 300,
|
||
13: 1,
|
||
14: 3,
|
||
15: 10,
|
||
16: 100
|
||
},
|
||
result = (value[newValue] || 0);
|
||
if (debug) console.log(`[getMediumValue()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getMediumUnit(debug, newValue) {
|
||
var value = {
|
||
0: "",
|
||
1: "",
|
||
2: "",
|
||
3: "",
|
||
4: "",
|
||
5: "",
|
||
6: "",
|
||
7: " k",
|
||
8: " k",
|
||
9: " k",
|
||
10: " k",
|
||
11: " k",
|
||
12: " k",
|
||
13: " M",
|
||
14: " M",
|
||
15: " M",
|
||
16: " M"
|
||
},
|
||
result = (value[newValue] || "");
|
||
if (debug) console.log(`[getMediumUnit()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getSlowValue(debug, newValue) {
|
||
var value = {
|
||
0: 0,
|
||
1: 1,
|
||
2: 2,
|
||
3: 4,
|
||
4: 8,
|
||
5: 15,
|
||
6: 30,
|
||
7: 60,
|
||
8: 125,
|
||
9: 250,
|
||
10: 500,
|
||
11: 1,
|
||
12: 2,
|
||
13: 4,
|
||
14: 8,
|
||
15: 15,
|
||
16: 30
|
||
},
|
||
result = (value[newValue] || 0);
|
||
if (debug) console.log(`[getSlowValue()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getSlowUnit(debug, newValue) {
|
||
var value = {
|
||
0: "",
|
||
1: "",
|
||
2: "",
|
||
3: "",
|
||
4: "",
|
||
5: "",
|
||
6: "",
|
||
7: "",
|
||
8: "",
|
||
9: "",
|
||
10: "",
|
||
11: " k",
|
||
12: " k",
|
||
13: " k",
|
||
14: " k",
|
||
15: " k",
|
||
16: " k"
|
||
},
|
||
result = (value[newValue] || "");
|
||
if (debug) console.log(`[getSlowUnit()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getTimeValue(debug, newValue) {
|
||
var value = {
|
||
0: 0,
|
||
1: 1,
|
||
2: 5,
|
||
3: 1,
|
||
4: 10,
|
||
5: 1,
|
||
6: 4,
|
||
7: 12,
|
||
8: 1,
|
||
9: 1,
|
||
10: 1,
|
||
11: 1,
|
||
12: 1,
|
||
13: 10,
|
||
14: 100,
|
||
15: 1000,
|
||
16: 0
|
||
},
|
||
result = (value[newValue] || 0);
|
||
if (debug) console.log(`[getTimeValue()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getTimeUnit(debug, newValue) {
|
||
var value = {
|
||
0: "",
|
||
1: " round",
|
||
2: " rounds",
|
||
3: " minute",
|
||
4: " minutes",
|
||
5: " hour",
|
||
6: " hours",
|
||
7: " hours",
|
||
8: " day",
|
||
9: " week",
|
||
10: " month",
|
||
11: " season",
|
||
12: " year",
|
||
13: " years",
|
||
14: " years",
|
||
15: " years",
|
||
16: "Permanent"
|
||
},
|
||
result = (value[newValue] || "");
|
||
if (debug) console.log(`[getTimeUnit()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setDefectCharacteristic(attrdb, value, rowID, setObj){
|
||
const defectdb = attrdb.defect;
|
||
const defectobj = _.find(defectdb, o => {
|
||
const result = o.source == rowID ? true : false;
|
||
return result;
|
||
});
|
||
const defect = value[`repeating_attr_${rowID}_defect`];
|
||
const defectid = removeWhiteSpace(defect);
|
||
const rank = defect == 'shortcoming' ? defectobj.aspect :
|
||
defectobj.rank;
|
||
const defectCharacteristics = {
|
||
"achillesheel":{
|
||
1: "rare attack form",
|
||
2: "uncommon attack form",
|
||
3: "common attack form",
|
||
"default": ""
|
||
},
|
||
"awkwardsize":{
|
||
0: "Medium",
|
||
1: "Large",
|
||
2: "Huge",
|
||
3: "Mammoth",
|
||
4: "Gigantic",
|
||
5: "Gargantuan",
|
||
6: "Colossal",
|
||
7: "Enormous",
|
||
8: "Monstrous",
|
||
9: "Titanic",
|
||
10: "Monumental"
|
||
},
|
||
"bane":{
|
||
1: "10 damage/round exposed",
|
||
2: "20 damage/round exposed",
|
||
3: "30 damage/round exposed",
|
||
"default": ""
|
||
},
|
||
"blindfury":{
|
||
1: "difficult initiate; easy revert",
|
||
2: "moderately difficult initiate/revert",
|
||
3: "easy initiate; difficult revert",
|
||
"default": ""
|
||
},
|
||
"conditionalownership":{
|
||
1: "mild conditions",
|
||
2: "strict conditions",
|
||
3: "severe conditions",
|
||
"default": ""
|
||
},
|
||
"confined":{
|
||
1: "large area (100 km radius)",
|
||
2: "moderate area (1 km radius)",
|
||
3: "small area (100 m radius)",
|
||
"default": ""
|
||
},
|
||
"cursed":{
|
||
1: "slight disadvantage",
|
||
2: "moderate disadvantage",
|
||
3: "severe disadvantage",
|
||
"default": ""
|
||
},
|
||
"demure":{
|
||
1: "Social Combat Value -2",
|
||
2: "Social Combat Value -4",
|
||
3: "Social Combat Value -6",
|
||
"default": ""
|
||
},
|
||
"easilydistracted":{
|
||
1: "triggered infrequently",
|
||
2: "triggered frequently",
|
||
3: "triggered constantly",
|
||
"default": ""
|
||
},
|
||
"fragile":{
|
||
1: "Health Points -10",
|
||
2: "Health Points -20",
|
||
3: "Health Points -30",
|
||
"default": ""
|
||
},
|
||
"hounded":{
|
||
1: "slightly inconvenient",
|
||
2: "moderately inconvenient",
|
||
3: "severely inconvenient",
|
||
"default": ""
|
||
},
|
||
"impairedmanipulation":{
|
||
1: "only one usable arm",
|
||
2: "rudimentary manipulative ability",
|
||
3: "no usable arms",
|
||
"default": ""
|
||
},
|
||
"impairedspeech":{
|
||
1: "severe speech impediment",
|
||
2: "sounds that carry emotional content",
|
||
3: "completely mute",
|
||
"default": ""
|
||
},
|
||
"ineptattack":{
|
||
1: "-1 Attack Combat Value",
|
||
2: "-2 Attack Combat Value",
|
||
3: "-3 Attack Combat Value",
|
||
"default": ""
|
||
},
|
||
"ineptdefence":{
|
||
1: "-1 Defence Combat Value",
|
||
2: "-2 Defence Combat Value",
|
||
3: "-3 Defence Combat Value",
|
||
"default": ""
|
||
},
|
||
"involuntarychange":{
|
||
1: "Difficult to trigger",
|
||
2: "Moderately easy to trigger",
|
||
3: "Easy to trigger",
|
||
"default": ""
|
||
},
|
||
"ism":{
|
||
1: "slight discrimination",
|
||
2: "moderate discrimination",
|
||
3: "severe discrimination",
|
||
"default": ""
|
||
},
|
||
"magnet":{
|
||
1: "few adoring fans",
|
||
2: "handful of adoring fans",
|
||
3: "swarms of adoring fans",
|
||
"default": ""
|
||
},
|
||
"marked":{
|
||
1: "easily concealable",
|
||
2: "concealed with moderate difficulty",
|
||
3: "cannot be concealed in most circumstances",
|
||
"default": ""
|
||
},
|
||
"nemesis":{
|
||
1: "interferes infrequently",
|
||
2: "interferes frequently",
|
||
3: "interferes constantly",
|
||
"default": ""
|
||
},
|
||
"nightmares":{
|
||
1: "occur infrequently",
|
||
2: "occur frequently",
|
||
3: "occur constantly",
|
||
"default": ""
|
||
},
|
||
"nohealing":{
|
||
1: "healing/recovery at slight disadvantage",
|
||
2: "healing/recovery at moderate disadvantage",
|
||
3: "healing/recovery at severe disadvantage",
|
||
"default": ""
|
||
},
|
||
"obligated":{
|
||
1: "small obligation",
|
||
2: "moderate obligation",
|
||
3: "large obligation",
|
||
"default": ""
|
||
},
|
||
"phobia":{
|
||
1: "slight- encountered infrequently",
|
||
2: "moderate- encountered frequently",
|
||
3: "severe- encountered constantly",
|
||
"default": ""
|
||
},
|
||
"physicalimpairment":{
|
||
1: "slight inconvenience",
|
||
2: "moderate inconvenience",
|
||
3: "severe inconvenience",
|
||
"default": ""
|
||
},
|
||
"redtape":{
|
||
1: "generally easy to manage",
|
||
2: "moderately difficult to manage",
|
||
3: "difficult to manage",
|
||
"default": ""
|
||
},
|
||
"reduceddamage":{
|
||
1: "Damage Multiplier -1",
|
||
2: "Damage Multiplier -2",
|
||
3: "Damage Multiplier -3",
|
||
"default": ""
|
||
},
|
||
"sensoryimpairment":{
|
||
1: "minor obstacle",
|
||
2: "major obstacle",
|
||
3: "loss of sense",
|
||
"default": ""
|
||
},
|
||
"shortcoming":{
|
||
"body": `Body -${defectobj.rank}`,
|
||
"mind": `Mind -${defectobj.rank}`,
|
||
"soul": `Soul -${defectobj.rank}`,
|
||
"agi": `Agility -${defectobj.rank}`,
|
||
"con": `Constitution -${defectobj.rank}`,
|
||
"dex": `Dexterity -${defectobj.rank}`,
|
||
"str": `Strength -${defectobj.rank}`,
|
||
"cre": `Creativity -${defectobj.rank}`,
|
||
"int": `Intellect -${defectobj.rank}`,
|
||
"per": `Perception -${defectobj.rank}`,
|
||
"rea": `Reasoning -${defectobj.rank}`,
|
||
"awa": `Awareness -${defectobj.rank}`,
|
||
"cha": `Charisma -${defectobj.rank}`,
|
||
"com": `Composure -${defectobj.rank}`,
|
||
"wil": `Willpower -${defectobj.rank}`
|
||
},
|
||
"significantother":{
|
||
1: "appears infrequently",
|
||
2: "appears frequently",
|
||
3: "appears constantly",
|
||
"default": ""
|
||
},
|
||
"skeletoninthecloset":{
|
||
1: "difficult to discover",
|
||
2: "moderately easy to discover",
|
||
3: "easy to discover",
|
||
"default": ""
|
||
},
|
||
"socialfault":{
|
||
1: "slight disadvantage",
|
||
2: "moderate disadvantage",
|
||
3: "severe disadvantage",
|
||
"default": ""
|
||
},
|
||
"specialrequirement":{
|
||
1: "easy/infrequent",
|
||
2: "moderately difficult/frequent",
|
||
3: "difficult/constant",
|
||
"default": ""
|
||
},
|
||
"unappealing":{
|
||
1: "slightly",
|
||
2: "moderately",
|
||
3: "severely",
|
||
"default": ""
|
||
},
|
||
"unique":{
|
||
1: "infrequent/slight effect",
|
||
2: "frequent/moderate effect",
|
||
3: "constant/severe effect",
|
||
"default": ""
|
||
},
|
||
"unsettled":{
|
||
1: "Sanity Points -2",
|
||
2: "Sanity Points -4",
|
||
3: "Sanity Points -6",
|
||
"default": ""
|
||
},
|
||
"vulnerability":{
|
||
1: "drop by one quarter",
|
||
2: "drop by one half",
|
||
3: "cannot be used",
|
||
"default": ""
|
||
},
|
||
"wanted":{
|
||
1: "incentive offered is slight",
|
||
2: "incentive offered is moderate",
|
||
3: "incentive offered is extreme",
|
||
"default": ""
|
||
},
|
||
"weakpoint":{
|
||
1: "difficult to hit",
|
||
2: "moderately easy to hit",
|
||
3: "easy to hit",
|
||
"default": ""
|
||
}
|
||
};
|
||
const characteristic = defectCharacteristics[`${defectid}`][rank] ||
|
||
defectCharacteristics[`${defectid}`]["default"];
|
||
const result = `${capital(defect)}, ${characteristic}`;
|
||
setObj[`repeating_attr_${rowID}_characteristic`] = result;
|
||
}
|
||
|
||
function setAttrCharacteristic(debug, value, rowID, setObj) {
|
||
const attribute = value[`repeating_attr_${rowID}_attribute`].toLowerCase().replace(/\s+/g, '');
|
||
if (attribute == 'defect') return;
|
||
const level = parseInt(setObj[`repeating_attr_${rowID}_effectivelevel`]) ||
|
||
parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||
let characteristic = "";
|
||
switch (attribute) {
|
||
case "absorption": characteristic = `${level * 5} Damage Absorbed`; break;
|
||
case "alternateform": characteristic = `${level * 5} Character Points`; break;
|
||
case "alternateidentity": characteristic = `${level} Alternate Identities`; break;
|
||
case "armor": characteristic = `${level * 5} Armor Rating`; break;
|
||
case "attackmastery": characteristic = `ACV +${level}`; break;
|
||
case "augmented": const stat = value[`repeating_attr_${rowID}_augmentedstat`]; characteristic = `${stat} +${level}`; break;
|
||
case "capacity": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "changestate": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "cognition": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "combattechnique": characteristic = `${level} Techniques Remaining`; break;
|
||
case "companion": characteristic = `${level * 10} Character Points`; break;
|
||
case "connected": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "controlenvironment": characteristic = getCharacteristicByCustomizations(debug, value, rowID, attribute); break;
|
||
case "conversion": characteristic = `${level} Character Points/10 Damage`; break;
|
||
case "dataaccess": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "defensemastery": characteristic = `DCV +${level}`; break;
|
||
case "dimensionwalk": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "dynamicpowers": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "elasticity": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "enemyattack": characteristic = `ACV +${level * 2} vs. ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)}`; break;
|
||
case "enemydefense": characteristic = `DCV +${level * 2} vs. ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)}`; break;
|
||
case "energized": characteristic = `Energy Points +${level * 10}`; break;
|
||
case "exorcism": characteristic = `Soul +${level * 2}`; break;
|
||
case "extraactions": characteristic = `+${level} additional actions each round`; break;
|
||
case "extraarms": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "extradefenses": characteristic = `+${level} defensive actions each round`; break;
|
||
case "features": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "flight": characteristic = `Flight speed up to ${get1or3(level, 1) * (10 ** (Math.ceil((level) / 2)))} kph`; break;
|
||
case "forcefield": characteristic = `${level * 10} Armor Rating`; break;
|
||
case "gear": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "groundspeed": characteristic = `${level} kph`; break;
|
||
case "healing": characteristic = `Restore ${level * 5} Health Points`; break;
|
||
case "heightenedawareness": characteristic = `${level} Awareness Bonus`; break;
|
||
case "heightenedsenses": characteristic = `${level} Enhanced Senses`; break;
|
||
case "illusion": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "immovable": characteristic = `Knockback reduced by ${level * 10} m`; break;
|
||
case "immunity": characteristic = `Immune to ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)}`; break;
|
||
case "immutable": const immutablestat = getCharacteristicSpecializationByAttr(debug, value, rowID, attribute); characteristic = `+${level * 2} ${capital(immutablestat)} roll to resist effects`; break;
|
||
case "inspire": characteristic = `Stat/Skill Rolls +${level}`; break;
|
||
case "jumping": characteristic = `${get1or3(level, 3) * (10 ** (Math.ceil((level - 1) / 2)))} Times Normal Distance`; break;
|
||
case "massivedamage": characteristic = setMassiveDamageCharacteristic(debug, value, rowID, level, setObj); break;
|
||
case "meleeattack": characteristic = `ACV +${level * 2} with ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)} weapons`; break;
|
||
case "meleedefense": characteristic = `DCV +${level * 2} with ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)} weapons`; break;
|
||
case "merge": characteristic = `Contribute ${level * 10} Character Points`; break;
|
||
case "metamorphosis": characteristic = `Race Template +/- ${level * 5} Character Points`; break;
|
||
case "mimic": characteristic = `Mimic Level ${level} Attributes`; break;
|
||
case "mindcontrol": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "mindshield": characteristic = `${level} + Mind`; break;
|
||
case "minions": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "mulligan": characteristic = `${level * 2} re-rolls each game session`; break;
|
||
case "nullify": characteristic = `Nullify ${level} Levels of an attribute`; break;
|
||
case "plantcontrol": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "pocketdimension": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "portal": characteristic = `${level} one-way portals`; break;
|
||
case "powerflux": characteristic = `${level * 5} Flux Points`; break;
|
||
case "powervariation": characteristic = `${level + 1} Variable Attributes`; break;
|
||
case "projection": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "rangedattack": characteristic = `ACV +${level * 2} with ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)} weapons`; break;
|
||
case "rangeddefense": characteristic = `DCV +${level * 2} ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)} Ranged Defense`; break;
|
||
case "regeneration": characteristic = `Regenerate ${level * 5} Heath Points/Round`; break;
|
||
case "reincarnation": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "resilient": characteristic = `Resilient to ${getCharacteristicByCustomizations(debug, value, rowID, attribute)}`; break;
|
||
case "sensory block": characteristic = `Block ${getCharacteristicByCustomizations(debug, value, rowID, attribute)}`; break;
|
||
case "shield": characteristic = `${level * 5} Armor Rating` + getShieldParryBonus(debug, value, rowID); break;
|
||
case "sixthsense": characteristic = getCharacteristicByCustomizations(debug, value, rowID, attribute); break;
|
||
case "sizechange": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "skill": characteristic = `${level * 10} Skill Points to Skill Group ${getCharacteristicSpecializationByAttr(debug, value, rowID, attribute)}`; break;
|
||
case "socialmastery": characteristic = `SCV +${level * 2}`; break;
|
||
case "spaceflight": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "specialmovement": characteristic = getCharacteristicByCustomizations(debug, value, rowID, attribute); break;
|
||
case "summoncreatures": characteristic = `Summon up to ${get1or3(level, 1) * (10 ** (Math.ceil((level) / 2)))} Creatures`; break;
|
||
case "supersense": characteristic = getCharacteristicByCustomizations(debug, value, rowID, attribute); break;
|
||
case "superspeed": characteristic = `Superspeed up to ${get1or3(level, 1) * (10 ** (Math.ceil((level + 2) / 2)))} kph`; break;
|
||
case "superstrength": characteristic = `${level} tonns`; break;
|
||
case "swarm": characteristic = `Health Points * ${level} Creatures`; break;
|
||
case "telekinesis": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "telepathy": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "teleport": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "tough": characteristic = `Health Points +${level * 10}`; break;
|
||
case "transfer": characteristic = `Transer Attributes as Level ${level}`; break;
|
||
case "transmute": characteristic = `Transmute objects of ${level * 5} Character Points`; break;
|
||
case "tunneling": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "unaffected": characteristic = `Attacker suffers ${level * -2} using Attributes`; break;
|
||
case "unassailable": characteristic = `Sanity Points +${level * 2}`; break;
|
||
case "undetectable": characteristic = getCharacteristicByCustomizations(debug, value, rowID, attribute); break;
|
||
case "uniqueattribute": characteristic = ""; break;
|
||
case "unknownpower": characteristic = `${level} Character Points`; break;
|
||
case "waterspeed": characteristic = `Water speed up tp ${get1or3(level, 1) * (10 ** (Math.ceil(level / 2)))} kph`; break;
|
||
case "wealth": characteristic = getCharacteristicByAttr(debug, value, rowID, attribute, setObj); break;
|
||
case "weapon": characteristic = `${level} Damage`; break;
|
||
default: characteristic = "";
|
||
}
|
||
if (debug) console.log(`[setAttrCharacteristic()] characteristic = ${characteristic}`);
|
||
setObj[`repeating_attr_${rowID}_characteristic`] = characteristic;
|
||
}
|
||
|
||
function getShieldParryBonus(debug, value, rowID) {
|
||
const parry = getCustomizationValue(debug, value, rowID, 'value', 'parry'),
|
||
result = (parry.rank == 2) ? `; Major Egde Parry` : (parry.rank == 1) ? '; Minor Edge Parry' : '';
|
||
if (debug) {
|
||
console.log(`[getShieldParryBonus()] parry:`); console.log(parry);
|
||
console.log(`[getShieldParryBonus()] result = ${result}`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function setMassiveDamageCharacteristic(debug, value, rowID, level, setObj) {
|
||
const targeted = getIsTargeted(debug, value, rowID, setObj),
|
||
focused = getCustomizationValue(debug, value, rowID, 'rank', 'focuseddamage'),
|
||
enemy = value[`repeating_attr_${rowID}_enemy`],
|
||
weaponclass = value[`repeating_attr_${rowID}_weaponclass`];
|
||
let characteristic = `DM +${level}`;
|
||
if (targeted) characteristic = characteristic + ` vs. ${enemy}`;
|
||
if (focused > 0) characteristic = characteristic + ` with ${weaponclass} weapons`;
|
||
return characteristic;
|
||
}
|
||
|
||
function getCharacteristicSpecializationByAttr(debug, value, rowID, attribute) {
|
||
let obj = {
|
||
"meleeattack": "weaponclass",
|
||
"meleedefense": "weaponclass",
|
||
"enemyattack": "enemy",
|
||
"enemydefense": "enemy",
|
||
"immunity": "immunityrole",
|
||
"immutable": "stat",
|
||
"rangeddefense": "defenseclass",
|
||
"skill": "skillgroup",
|
||
"default": ""
|
||
},
|
||
characteristic = (obj[attribute] || obj["default"]),
|
||
result = capital(value[`repeating_attr_${rowID}_${characteristic}`]);
|
||
if (debug) console.log(`[getCharacteristicSpecializationByAttr(${attribute})] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getCharacteristicByAttr(debug, value, rowID, attribute, setObj) {
|
||
const level = parseInt(setObj[`repeating_attr_${rowID}_effectivelevel`]) || parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0,
|
||
chardb = {
|
||
"capacity": {
|
||
0: {
|
||
1: "200 kg",
|
||
2: "500 kg",
|
||
3: "1 tonne",
|
||
4: "2 tonnes",
|
||
5: "5 tonnes",
|
||
6: "10 tonnes",
|
||
7: "25 tonnes",
|
||
8: "50 tonnes",
|
||
9: "100 tonnes",
|
||
10: "200 tonnes",
|
||
"default": ""
|
||
},
|
||
1: {
|
||
1: "+1 person",
|
||
2: "+2 people",
|
||
3: "+5 people",
|
||
4: "+10 people",
|
||
5: "+25 people",
|
||
6: "+50 people",
|
||
7: "+100 people",
|
||
8: "+250 people",
|
||
9: "+500 people",
|
||
10: "+1,000 people",
|
||
"default": ""
|
||
}
|
||
},
|
||
"changestate": {
|
||
1: "Liquid state, short duration",
|
||
2: "Liquid state, long duration",
|
||
3: "Gaseous state, short duration",
|
||
4: "Gaseous state, long duration",
|
||
5: "Incorpreal state, short duration",
|
||
6: "Incorpreal state, long duration",
|
||
7: "Energy state, short duration",
|
||
8: "Energy state, long duration",
|
||
"default": "Does not improve beyond level 8"
|
||
},
|
||
"cognition": {
|
||
1: "Future: a few seconds; Past: 1 minute",
|
||
2: "Future: 1 minute; Past: 1 hour",
|
||
3: "Future: 10 minutes; Past: 1 day",
|
||
4: "Future: 1 hour; Past: 1 week",
|
||
5: "Future: 1 day; Past: 1 month",
|
||
6: "Future: 1 week; Past: 1 year",
|
||
7: "Future: 1 month; Past: 2 years",
|
||
8: "Future: 1 year; Past: 4 years",
|
||
"default": ""
|
||
},
|
||
"connected": {
|
||
1: "Associated",
|
||
2: "Respected",
|
||
3: "Modest Authority",
|
||
4: "Local Authority",
|
||
5: "Regional Authority.",
|
||
6: "Provincial Authority",
|
||
7: "National Authority",
|
||
8: "International Authority",
|
||
9: "Planetary Authority",
|
||
10: "Extraplanetary Authority",
|
||
"default": "Does not improve beyond level 10"
|
||
},
|
||
"dataaccess": {
|
||
1: "10 cm radius",
|
||
2: "1 m radius",
|
||
3: "10 m radius",
|
||
4: "100 m radius",
|
||
5: "1 km radius",
|
||
6: "10 km radius",
|
||
"default": ""
|
||
},
|
||
"dimensionwalk": {
|
||
1: "Reflect insignificant changes",
|
||
2: "Reflect specific changes",
|
||
3: "Reflect minor changes",
|
||
4: "Reflect moderate changes",
|
||
5: "Reflect significant changes",
|
||
6: "Reflect major changes",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"dynamicpowers": {
|
||
1: "Minimal control",
|
||
2: "Minor control",
|
||
3: "Moderate control",
|
||
4: "Good control",
|
||
5: "Significant control",
|
||
6: "Major control",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"elasticity": {
|
||
1: "Stretch body up to 10 cm",
|
||
2: "Stretch body up to 30 cm",
|
||
3: "Stretch body up to 1 m",
|
||
4: "Stretch body up to 3 m",
|
||
5: "Stretch body up to 10 m",
|
||
6: "Stretch body up to 30 m",
|
||
"default": ""
|
||
},
|
||
"extraarms": {
|
||
1: "1 additional arm",
|
||
2: "2 additional arms",
|
||
3: "Up to 5 additional arms",
|
||
4: "Up to 10 additional arms",
|
||
5: "Up to 25 additional arms",
|
||
6: "Up to 50 additional arms",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"features": {
|
||
1: "Up to 2 features",
|
||
2: "Up to 5 features",
|
||
3: "Up to 10 features",
|
||
4: "Up to 25 features",
|
||
5: "Up to 50 features",
|
||
6: "Up to 100 features",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"gear": {
|
||
1: "Up to 2 pieces of gear",
|
||
2: "Up to 5 pieces of gear",
|
||
3: "Up to 10 pieces of gear",
|
||
4: "Up to 25 pieces of gear",
|
||
5: "Up to 50 pieces of gear",
|
||
6: "Up to 100 pieces of gear",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"groundspeed": {
|
||
1: "Ground speed up to 10 kph",
|
||
2: "Ground speed up to 25 kph",
|
||
3: "Ground speed up to 50 kph",
|
||
4: "Ground speed up to 100 kph",
|
||
5: "Ground speed up to 250 kph",
|
||
6: "Ground speed up to 500 kph",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"illusion": {
|
||
1: "Tiny-sized Illusions (10 cm)",
|
||
2: "Small-sized Illusions (1 m)",
|
||
3: "Moderate-sized Illusions (10 m)",
|
||
4: "Building-sized Illusions (100 m)",
|
||
5: "Neighbourhood-sized Illusions (1 km)",
|
||
6: "City-sized Illusions (10 km)",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"mindcontrol": {
|
||
1: "Extremely basic, non-aggressive suggestions",
|
||
2: "Simple, non-aggressive suggestions",
|
||
3: "Copmlex, non-aggressive suggestions",
|
||
4: "Complex, aggressive suggestions",
|
||
5: "Complex/aggressive suggestions, erase brief events",
|
||
6: "Complex/aggressive suggestions, alter events",
|
||
"default": ""
|
||
},
|
||
"minions": {
|
||
1: "Up to 5 Minions",
|
||
2: "Up to 10 Minions",
|
||
3: "Up to 25 Minions",
|
||
4: "Up to 50 Minions",
|
||
5: "Up to 100 Minions",
|
||
6: "Up to 200 Minions",
|
||
"default": ""
|
||
},
|
||
"plantcontrol": {
|
||
1: "Control 10 cm radius; Growth 3x",
|
||
2: "Control 1 m radius; Growth 10x",
|
||
3: "Control 10 m radius; Growth 30x",
|
||
4: "Control 100 m radius; Growth 100x",
|
||
5: "Control 1 km radius; Growth 300x",
|
||
6: "Control 10 km radius; Growth 1000x",
|
||
"default": ""
|
||
},
|
||
"pocketdimension": {
|
||
1: "Tiny dimension (10 cm radius)",
|
||
2: "Small dimension (1 m radius)",
|
||
3: "Moderately sized dimension (10 m radius)",
|
||
4: "Building-sized dimension (100 m radius)",
|
||
5: "Neighbourhood-sized dimension (1 km radius)",
|
||
6: "City-sized dimension (10 km radius)",
|
||
"default": ""
|
||
},
|
||
"projection": {
|
||
1: "Tiny Projection (10 cm radius)",
|
||
2: "Small Projection (1 m radius)",
|
||
3: "Moderately sized Projection (10 m radius)",
|
||
4: "Building-side Projection (100 m radius)",
|
||
5: "Neighbourhood-sized Projection (1 km radius)",
|
||
6: "City-sided Projection (10 km radius)",
|
||
"default": ""
|
||
},
|
||
"reincarnation": {
|
||
1: "Up to 1 month to reincarnate",
|
||
2: "Up to 1 week to reincarnate",
|
||
3: "Up to 1 day to reincarnate",
|
||
4: "Up to 12 hours to reincarnate",
|
||
5: "Up to 1 hour to reincarnate",
|
||
6: "Up to 1 minute to reincarnate",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"spaceflight": {
|
||
1: "Primitive near-planetary Spaceflight",
|
||
2: "Slow interplanetary Spaceflight",
|
||
3: "Average interplanetary Spaceflight",
|
||
4: "Fast interplanetary Spaceflight",
|
||
5: "Extrasolar Spaceflight",
|
||
6: "Slow faster-than-light Spaceflight",
|
||
"default": "Does not improve beyond level 6"
|
||
},
|
||
"telekinesis": {
|
||
1: "Move 1 kg",
|
||
2: "Move 10 kg",
|
||
3: "Move 100 kg",
|
||
4: "Move 1 tonne",
|
||
5: "Move 10 tonnes",
|
||
6: "Move 100 tonnes",
|
||
"default": ""
|
||
},
|
||
"telepathy": {
|
||
"default": "See rulebook for capabilities"
|
||
},
|
||
"teleport": {
|
||
1: "10 m teleportation distance",
|
||
2: "100 m teleportation distance",
|
||
3: "1 km teleportation distance",
|
||
4: "10 km teleportation distance",
|
||
5: "100 km teleportation distance",
|
||
6: "1000 km teleportation distance",
|
||
"default": ""
|
||
},
|
||
"tunneling": {
|
||
1: "10 meters per hour",
|
||
2: "30 meters per hour",
|
||
3: "100 meters per hour",
|
||
4: "300 meters per hour",
|
||
5: "1 kph",
|
||
6: "3 kph",
|
||
"default": ""
|
||
},
|
||
//"undetectable": {},
|
||
"wealth": {
|
||
1: "Financially stable ($300,000)",
|
||
2: "Well off ($1M)",
|
||
3: "Moderately rich ($3M)",
|
||
4: "Very rich ($10M)",
|
||
5: "Extremely rich ($30M)",
|
||
6: "Moderately wealthy ($100M)",
|
||
"default": ""
|
||
}
|
||
};
|
||
let characteristic = '';
|
||
if (level == 0) {
|
||
return characteristic;
|
||
} else if (attribute == 'capacity') {
|
||
const type = parseInt(setObj[`repeating_attr_${rowID}_capacitytype`]) || parseInt(value[`repeating_attr_${rowID}_capacitytype`]) || 0;
|
||
characteristic = (level < 11) ? (chardb[`${attribute}`][type][level] || chardb[`${attribute}`][type]["default"]) : (type == 0) ? `${(2 ** (level - 9)) * 100} tonnes` : (type == 1) ? `+${(2 ** (level - 10)) * 1000} people` : '';
|
||
} else if (attribute == 'cognition') {
|
||
characteristic = (level < 9) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Future: ${2 ** (level - 8)} years; Past: ${2 ** (level - 6)} years`;
|
||
} else if (attribute == 'dataaccess') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `${10 ** (level - 5)} km radius`;
|
||
} else if (attribute == 'elasticity') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Stretch body up to ${get1or3(level, 1) * (10 ** (Math.ceil((level - 4) / 2)))} km`;
|
||
} else if (attribute == 'mindcontrol') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : chardb[`${attribute}`][6];
|
||
} else if (attribute == 'minions') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Up to ${400 * (level - 6)} Minions`;
|
||
} else if (attribute == 'plantgrowth') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Control ${(10 ** (level - 5))} km radius; Growth ${get1or3(level, 3) * (10 ** (Math.ceil((level - 4) / 2)))}x`;
|
||
} else if (attribute == 'pocketdimension') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Massive dimension (${(10 ** (level - 5))} km radius)`;
|
||
} else if (attribute == 'projection') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Massive-sized projection (${(10 ** (level - 5))} km radius)`;
|
||
} else if (attribute == 'sizechange') {
|
||
characteristic = (level < 11) ? `Grow/Shrink by ${level} Size Ranks` : `Does not improve beyond level 10`;
|
||
} else if (attribute == 'telekinesis') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Move ${(10 ** (level - 4))} tonnes`;
|
||
} else if (attribute == 'teleport') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `${(10 ** (level - 3))} km teleportation distance`;
|
||
} else if (attribute == 'tunneling') {
|
||
const highlevel = `${get1or3(level, 1) * (10 ** (Math.ceil((level - 6) / 2)))} kph`;
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : highlevel;
|
||
} else if (attribute == 'wealth') {
|
||
characteristic = (level < 7) ? (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) : `Extremely wealthy ($${get1or3(level, 3) * (10 ** (Math.ceil((level - 3) / 2)))}M)`;
|
||
} else {
|
||
characteristic = (chardb[`${attribute}`][level] || chardb[`${attribute}`]["default"]) || '';
|
||
}
|
||
if (debug) console.log(`[getCharacteristicByAttr(${attribute})] characteristic = ${characteristic}`);
|
||
return characteristic;
|
||
}
|
||
|
||
function getCharacteristicByCustomizations(debug, value, rowID, attribute) {
|
||
const characteristics = (attribute == 'sixthsense') ? [`attrsrc`, `danger`, `dimensions`, `elements`, `emotions`, `extraplanarbeings`, `illusions`, `morality`, `objects`, `placesofpower`, `uniquephenomena`] :
|
||
(attribute == 'undetectable') ? [`hearing`, `sight`, `smell`, `taste`, `touch`, `echolocation`, `infrasound`, `radio`, `ultrasound`, `infrared`, `ultraviolet`, `x-ray`, `odorant`, `tastant`, `magnetic`, `radiation`, `seismic`, `thermal`] :
|
||
(attribute == 'controlenvironment') ? [`arid`, `clouds`, `cold`, `darkness`, `heat`, `humidity`, `light`, `liquid`, `gaseous`, `smell`, `sound`, `storms`, `unique`, `vacuum`] :
|
||
(attribute == "specialmovement") ? [`balance`, `catlike`, `fast`, `lightfooted`, `slithering`, `swinging`, `untrackable`, `wallbouncing`, `wallcrawling`, `waterwalking`, `zendirection`] :
|
||
[];
|
||
var result = [];
|
||
if (characteristics && characteristics.length > 0) {
|
||
_.each(characteristics, (characteristic) => {
|
||
if (getCustomizationValue(debug, value, rowID, 'rank', characteristic) > 0) {
|
||
let fetch = '';
|
||
if (/(attrsrc|objects|uniquephenomena)/i.test(characteristic)) {
|
||
fetch = capital(value[`repeating_attr_${rowID}_${characteristic}`]);
|
||
} else if (characteristic == "unique") {
|
||
fetch = capital(getCustomizationValue(debug, value, rowID, 'type', characteristic));
|
||
} else {
|
||
fetch = capital(getCustomizationValue(debug, value, rowID, 'name', characteristic));
|
||
}
|
||
if (fetch != undefined) result[result.length] = fetch;
|
||
}
|
||
});
|
||
result = result.join(", ")
|
||
} else {
|
||
result = capital(value[`repeating_attr_${rowID}_${attribute}`]);
|
||
}
|
||
if (debug) {
|
||
console.log(`[getCharacteristicByCustomizations(${attribute})] result:`);
|
||
console.log(result);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function setAttrStat(debug, value, rowID, setObj, type) {
|
||
const attribute = value[`repeating_attr_${rowID}_attribute`].replace(/\s+/g, '');
|
||
const obj = {
|
||
"major": {
|
||
"absorption": "body",
|
||
"alternateform": "body",
|
||
"alternateidentity": "body",
|
||
"changestate": "body",
|
||
"cognition": "mind",
|
||
"connected": "soul",
|
||
"controlenvironment": "soul",
|
||
"conversion": "body",
|
||
"dataaccess": "mind",
|
||
"dimensionwalk": "soul",
|
||
"dynamicpowers": "",
|
||
"elasticity": "body",
|
||
"exorcism": "soul",
|
||
"features": "",
|
||
"flight": "body",
|
||
"forcefield": "body",
|
||
"groundspeed": "body",
|
||
"healing": "soul",
|
||
"heightenedawareness": "mind",
|
||
"heightenedsenses": "mind",
|
||
"illusion": "mind",
|
||
"immovable": "body",
|
||
"immunity": "body",
|
||
"immutable": " body or soul",
|
||
"inspire": "soul",
|
||
"jumping": "body",
|
||
"metamorphosis": "mind or soul",
|
||
"mimic": "mind",
|
||
"mindcontrol": "mind",
|
||
"mindshield": "mind",
|
||
"minions": "soul",
|
||
"mulligan": "soul",
|
||
"nullify": "body or soul",
|
||
"plantcontrol": "mind",
|
||
"portal": "soul",
|
||
"powerflux": "",
|
||
"powervariation": "",
|
||
"projection": "mind",
|
||
"regeneration": "body",
|
||
"reincarnation": "soul",
|
||
"resilient": "body",
|
||
"sensoryblock": "mind",
|
||
"sixthsense": "soul",
|
||
"sizechange": "body",
|
||
"spaceflight": "body",
|
||
"specialmovement": "body",
|
||
"summoncreatures": "mind",
|
||
"supersense": "mind",
|
||
"superspeed": "body",
|
||
"superstrength": "body",
|
||
"swarm": "body",
|
||
"telekinesis": "mind",
|
||
"telepathy": "mind",
|
||
"teleport": "mind",
|
||
"transfer": "soul",
|
||
"transmute": "mind or soul",
|
||
"tunneling": "body",
|
||
"unaffected": "body",
|
||
"undetectable": "body",
|
||
"waterspeed": "body"
|
||
},
|
||
"minor": {
|
||
"absorption": "con",
|
||
"alternateform": "con",
|
||
"alternateidentity": "dex",
|
||
"changestate": "dex",
|
||
"cognition": "per",
|
||
"connected": "chr",
|
||
"controlenvironment": "wil",
|
||
"conversion": "con",
|
||
"dataaccess": "rea",
|
||
"dimensionwalk": "awa",
|
||
"dynamicpowers": "",
|
||
"elasticity": "dex",
|
||
"exorcism": "wil",
|
||
"features": "",
|
||
"flight": "dex",
|
||
"forcefield": "con",
|
||
"groundspeed": "dex",
|
||
"healing": "wil",
|
||
"heightenedawareness": "per",
|
||
"heightenedsenses": "per",
|
||
"illusion": "per",
|
||
"immovable": "str",
|
||
"immunity": "con",
|
||
"immutable": "con or wil",
|
||
"inspire": "chr",
|
||
"jumping": "dex",
|
||
"metamorphosis": "cre or awa",
|
||
"mimic": "per",
|
||
"mindcontrol": "int",
|
||
"mindshield": "int",
|
||
"minions": "chr",
|
||
"mulligan": "awa",
|
||
"nullify": "agi or wil",
|
||
"plantcontrol": "cre",
|
||
"portal": "wil",
|
||
"powerflux": "",
|
||
"powervariation": "",
|
||
"projection": "per",
|
||
"regeneration": "con",
|
||
"reincarnation": "wil",
|
||
"resilient": "con",
|
||
"sensoryblock": "per",
|
||
"sixthsense": "awa",
|
||
"sizechange": "str",
|
||
"spaceflight": "dex",
|
||
"specialmovement": "dex",
|
||
"summoncreatures": "int",
|
||
"supersense": "per",
|
||
"superspeed": "dex",
|
||
"superstrength": "str",
|
||
"swarm": "dex",
|
||
"telekinesis": "int",
|
||
"telepathy": "int",
|
||
"teleport": "int",
|
||
"transfer": "wil",
|
||
"transmute": "cre or awa",
|
||
"tunneling": "str",
|
||
"unaffected": "con",
|
||
"undetectable": "dex",
|
||
"waterspeed": "dex"
|
||
}
|
||
};
|
||
const result = (type == 'minor') ? obj.minor[attribute] || "" : obj.major[attribute] || "";
|
||
if (debug) console.log(`[setAttrStat()] result = ${result}`);
|
||
setObj[`repeating_attr_${rowID}_stat`] = result;
|
||
}
|
||
|
||
function setAttrDuration(debug, value, rowID, setObj) {
|
||
let attribute = value[`repeating_attr_${rowID}_attribute`],
|
||
obj = {
|
||
"illusion": 3,
|
||
"metamorphosis": 3,
|
||
"mimic": 3,
|
||
"mind control": 3,
|
||
"nullify": 3,
|
||
"plant control": 3,
|
||
"projection": 3,
|
||
"transfer": 3,
|
||
"transmute": 3,
|
||
"default": 0
|
||
},
|
||
result = (obj[attribute] || obj["default"]);
|
||
if (debug) console.log(`[setAttrDuration()] result = ${result}`);
|
||
setObj[`repeating_attr_${rowID}_customizationduration`] = result;
|
||
}
|
||
|
||
function setAttrRange(debug, value, rowID, setObj) {
|
||
let attribute = value[`repeating_attr_${rowID}_attribute`],
|
||
obj = {
|
||
"telekinesis": 1,
|
||
"telepathy": 1,
|
||
"default": 0
|
||
},
|
||
result = (obj[attribute] || obj["default"]);
|
||
if (debug) console.log(`[setAttrRange()] result = ${result}`);
|
||
setObj[`repeating_attr_${rowID}_customizationrange`] = result;
|
||
}
|
||
|
||
function setAttrArea(debug, value, rowID, setObj) {
|
||
let attribute = value[`repeating_attr_${rowID}_attribute`],
|
||
obj = {
|
||
"dimension walk": 2,
|
||
"portal": 1,
|
||
"control environment": 3,
|
||
"illusion": 5,
|
||
"projection": 5,
|
||
"sensory block": 2,
|
||
"sixth sense": 3,
|
||
"default": 0
|
||
},
|
||
result = (obj[attribute] || obj["default"]);
|
||
if (debug) console.log(`[setAttrArea()] result = ${result}`);
|
||
setObj[`repeating_attr_${rowID}_customizationarea`] = result;
|
||
}
|
||
|
||
function setRollUI(debug, value, setObj) {
|
||
const rolltype = value.static_roll_type_selection,
|
||
obj = {
|
||
"2d6": 1,
|
||
"acv": 2,
|
||
"dcv": 3,
|
||
"initiative": 4,
|
||
"perception": 5,
|
||
"stat": 6,
|
||
"default": 0
|
||
},
|
||
result = (obj[rolltype] || obj["default"]);
|
||
setObj.rolltab = result;
|
||
if (debug) console.log(`[setRollUI()] rolltab = ${result}`);
|
||
}
|
||
|
||
function setDynamicRollValue(debug, eventInfo, value, attrdb, rowID, sourceAttr, setObj) {
|
||
const rolltype = value.static_roll_type_selection;
|
||
let cv = 0;
|
||
let rollmod = 0;
|
||
let type = '';
|
||
let title = '';
|
||
let stat = '';
|
||
let base = 0;
|
||
let turntracker = '';
|
||
let result = '';
|
||
switch (rolltype) {
|
||
case '2d6':
|
||
type = '{{twodsix=1}}';
|
||
title = '{{title=Roll 2d6}}';
|
||
break;
|
||
case 'acv':
|
||
cv = getCV(debug, value, attrdb, setObj, sourceAttr, 'acv', '');
|
||
type = '{{acvroll=1}}';
|
||
title = '{{title=Roll ACV}}';
|
||
stat = `{{acv=${cv}}}`;
|
||
base = cv;
|
||
break;
|
||
case 'dcv':
|
||
cv = getCV(debug, value, attrdb, setObj, sourceAttr, 'dcv');
|
||
type = '{{dcvroll=1}}';
|
||
title = '{{title=Roll DCV}}';
|
||
stat = `{{dcv=${cv}}}`;
|
||
base = cv;
|
||
break;
|
||
case 'initiative':
|
||
cv = getCV(debug, value, attrdb, setObj, sourceAttr, 'acv', '');
|
||
rollmod = getSumOfActiveSubAttrRanks(attrdb, 'combattechnique', 'lightningreflexes') || 0;
|
||
type = '{{initiative=1}}';
|
||
title = '{{title=Roll Initiative}}';
|
||
stat = `{{acv=${cv}}}`;
|
||
base = cv;
|
||
turntracker = '&{tracker}';
|
||
break;
|
||
case 'perception':
|
||
const perception = getPerceptionRollBase(debug, value, attrdb, setObj);
|
||
type = '{{perception=1}}';
|
||
title = '{{title=Roll Perception}}';
|
||
stat = `{{perception=${perception}}}`;
|
||
base = perception;
|
||
setHeightendSenses(debug, attrdb, sourceAttr, setObj);
|
||
break;
|
||
case 'stat':
|
||
setStatButtonStatsAndRolls(debug, eventInfo, value, rowID, sourceAttr, setObj);
|
||
break;
|
||
}
|
||
result = `&{template:besmDefault} {{rolls=1}} ${type} ${title} {{character_name=@{charactername}}}` +
|
||
`{{pronoun=@{pronoun}}} ${stat} {{total=[[[[?{Roll is|Normal, ${setDice(rollmod)}` +
|
||
`|Minor Edge, ${setDice(rollmod, 1)}|Minor Obstacle, ${setDice(rollmod, -1)}` +
|
||
`|Major Edge, ${setDice(rollmod, 2)}|Major Obstacle, ${setDice(rollmod, -2)}}]]` +
|
||
`+[[${base}]] ${turntracker}]]}} {{roll=$[[0]]}}`;
|
||
setObj.dynamic_roll_value = result;
|
||
setObj.dynamic_roll_base = base;
|
||
}
|
||
|
||
function setAttrCustomizations(debug, value, rowID, setObj) {
|
||
let attribute = value[`repeating_attr_${rowID}_attribute`],
|
||
obj = {
|
||
"absorption": 6,
|
||
"armor": 2,
|
||
"change state": 17,
|
||
"combat technique": 4,
|
||
"connected": 16,
|
||
"control environment": 39,
|
||
"conversion": 7,
|
||
"dynamic powers": 8,
|
||
"flight": 11,
|
||
"forcefield": 12,
|
||
"illusion": 13,
|
||
"ground speed": 14,
|
||
"heightened senses": 37,
|
||
"massive damage": 15,
|
||
"merge": 10,
|
||
"metamorphosis": 18,
|
||
"mimic": 19,
|
||
"mind control": 20,
|
||
"nullify": 21,
|
||
"plant control": 22,
|
||
"power flux": 36,
|
||
"resilient": 23,
|
||
"projection": 24,
|
||
"regeneration": 25,
|
||
"reincarnation": 26,
|
||
"shield": 27,
|
||
"sixth sense": 38,
|
||
"size change": 28,
|
||
"special movement": 29,
|
||
"summon creatures": 5,
|
||
"telekinesis": 30,
|
||
"telepathy": 31,
|
||
"teleport": 32,
|
||
"transfer": 33,
|
||
"transmute": 34,
|
||
"unaffected": 3,
|
||
"undetectable": 9,
|
||
"weapon": 35,
|
||
"default": 1
|
||
},
|
||
result = (obj[attribute] || obj["default"]);
|
||
if (debug) console.log(`[setAttrCustomizations(${attribute})] result = ${result}`);
|
||
if (`${attribute}` == "defect") { setObj[`repeating_attr_${rowID}_attrdefecttoggle`] = 1; } else { setObj[`repeating_attr_${rowID}_attrdefecttoggle`] = 0; }
|
||
setObj[`repeating_attr_${rowID}_enhancementtab`] = result;
|
||
setObj[`repeating_attr_${rowID}_limitertab`] = result;
|
||
}
|
||
|
||
function exposeDefectSettingsOnDefectChange(debug, value, rowID, setObj){
|
||
const debugtext = `[exposeDefectSettingsOnDefectChange()]`;
|
||
const defect = removeWhiteSpace(value[`repeating_attr_${rowID}_defect`]);
|
||
_.each(all_defects_array, defectmatch => {
|
||
defectmatch = removeWhiteSpace(defectmatch);
|
||
const exposesetting = defectmatch == defect ? 1 : 0;
|
||
setObj[`repeating_attr_${rowID}_show${defectmatch}`] = exposesetting;
|
||
if(debug) {
|
||
console.log(`${debugtext} ${defectmatch} = ${exposesetting}`);
|
||
}
|
||
});
|
||
}
|
||
|
||
function exposeAttrSettingsOnAttributeChange(debug, value, match, source, setObj) {
|
||
const attribute = value[`${match}`] === undefined ? 'default' :
|
||
removeWhiteSpace(value[`${match}`]);
|
||
const settings = [
|
||
'showarmorlayer',
|
||
'showattrsrc',
|
||
'showaugmentedstat',
|
||
'showcapacitytype',
|
||
'showcollectiontype',
|
||
'showconditions',
|
||
'showconversiontype',
|
||
'showdamagetype',
|
||
'showdefect',
|
||
'showdefenseclass',
|
||
'showenemy',
|
||
'showextraarms',
|
||
'showimmunityrole',
|
||
'showseeinto',
|
||
'showskillgroup',
|
||
'showsupersense',
|
||
'showvariablestat',
|
||
'showweaponclass'
|
||
];
|
||
_.each(settings, (setting) => {
|
||
let set = 0;
|
||
switch (true) {
|
||
case attribute == 'absorption' && setting == 'showcollectiontype': set = 1; break;
|
||
case attribute == 'armor' && setting == 'showarmorlayer': set = 1; break;
|
||
case attribute == 'augmented' && setting == 'showaugmentedstat': set = 1; break;
|
||
case attribute == 'capacity' && setting == 'showcapacitytype': set = 1; break;
|
||
case attribute == 'cognition' && setting == 'showseeinto': set = 1; break;
|
||
case attribute == 'conversion' && setting == 'showconversiontype': set = 1; break;
|
||
case attribute == 'defect' && setting == 'showdefect': set = 1; break;
|
||
case attribute == 'dynamicpowers' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'enemyattack' && setting == 'showenemy': set = 1; break;
|
||
case attribute == 'enemydefense' && setting == 'showenemy': set = 1; break;
|
||
case attribute == 'extraarms' && setting == 'showextraarms': set = 1; break;
|
||
case attribute == 'features' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'immunity' && setting == 'showimmunityrole': set = 1; break;
|
||
case attribute == 'immutable' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'immutable' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'meleeattack' && setting == 'showweaponclass': set = 1; break;
|
||
case attribute == 'meleedefense' && setting == 'showweaponclass': set = 1; break;
|
||
case attribute == 'metamorphosis' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'mimic' && setting == 'showattrsrc': set = 1; break;
|
||
case attribute == 'nullify' && setting == 'showattrsrc': set = 1; break;
|
||
case attribute == 'nullify' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'powerflux' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'powervariation' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'rangeddefense' && setting == 'showdefenseclass': set = 1; break;
|
||
case attribute == 'regeneration' && setting == 'showcollectiontype': set = 1; break;
|
||
case attribute == 'resilient' && setting == 'showconditions': set = 1; break;
|
||
case attribute == 'skill' && setting == 'showskillgroup': set = 1; break;
|
||
case attribute == 'supersense' && setting == 'showsupersense': set = 1; break;
|
||
case attribute == 'transmute' && setting == 'showvariablestat': set = 1; break;
|
||
case attribute == 'weapon' && setting == 'showdamagetype': set = 1; break;
|
||
case attribute == 'weapon' && setting == 'showweaponclass': set = 1; break;
|
||
default: set = 0;
|
||
}
|
||
setObj[`${source}_${setting}`] = set;
|
||
if(debug) console.log(`[exposeAttrSettingsOnAttributeChange(${attribute})] setting = ${setting}`);
|
||
});
|
||
}
|
||
|
||
function exposeAttrSettingsOnCustomizationChange(debug, eventInfo, source, sourceAttr, setObj) {
|
||
const rank = parseInt(eventInfo.newValue),
|
||
attr = (/enhancement/i.test(sourceAttr)) ? sourceAttr.substring(11) : (/limiter/i.test(sourceAttr)) ? sourceAttr.substring(7) : `default`,
|
||
attribute = attr.replace(/\s+/g, '');
|
||
var set = (rank) ? 1 : 0,
|
||
result = "";
|
||
switch (attribute) {
|
||
case `ammo`: result = `showammo`; break;
|
||
case `attrsrc`: result = 'showattrsrc'; break;
|
||
case `charges`: result = `showcharges`; break;
|
||
case `continuing`: result = `showcontinuing`; break;
|
||
case `deplete`: result = `showendurance`; break;
|
||
case `drain`: result = `showdrain`; break;
|
||
case `enemy`: result = 'showenemy'; break;
|
||
case `focuseddamage`: result = 'showweaponclass'; break;
|
||
case `objects`: result = 'showobject'; break;
|
||
case `specialized`: result = 'showdamagetype'; break;
|
||
case `targeted`: result = 'showenemy'; break;
|
||
case `targeteddamage`: result = 'showenemy'; break;
|
||
case `uniquephenomena`: result = 'showuniquephenomena'; break;
|
||
case `unpredictable`: result = `showvariablestat`; break;
|
||
}
|
||
if (debug) {
|
||
console.log(`[exposeAttrSettingsOnCustomizationChange(${sourceAttr})] attribute = ${attribute}`);
|
||
console.log(`[exposeAttrSettingsOnCustomizationChange(${sourceAttr})] result = ${result}`);
|
||
console.log(`[exposeAttrSettingsOnCustomizationChange(${sourceAttr})] set = ${set}`);
|
||
}
|
||
setObj[`${source}_${result}`] = set;
|
||
}
|
||
|
||
function setProtection(isActive, debug, value, rowID, sourceAttr, attribute, setObj) {
|
||
const name = (isActive) ? value[`repeating_attr_${rowID}_name`] : '';
|
||
const elevel = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||
const attr = attribute.replace(/\s+/g, '');
|
||
const rating = (/(armor|shield|absorption)/i.test(attr) && isActive) ? elevel * 5 :
|
||
(/(forcefield|mindshield|conversion)/i.test(attr) && isActive) ? elevel * 10 : 0;
|
||
const layer = (attr == `armor`) ? parseInt(value[`repeating_attr_${rowID}_armorlayer`]) : '';
|
||
const type = (attr == `absorption` || attr == `conversion`) ?
|
||
parseInt(value[`repeating_attr_${rowID}_collectiontype`]) : '';
|
||
const attrstate = parseInt(value[`protection_${attr}${layer}${type}_state`]) || 0;
|
||
const source = value[`protection_${attr}${layer}${type}_source`] || '';
|
||
const state = (isActive) ? 1 : 0;
|
||
if (type == 2) {
|
||
if (debug) console.log(`[setProtection(${sourceAttr})] conversion:energy offers no protection, exiting...`);
|
||
return;
|
||
}
|
||
if (isActive && attrstate == 1) {
|
||
setObj[`repeating_attr_${source}_activate`] = 0;
|
||
if (debug) console.log(`[setProtection(${sourceAttr})] attrstate = ${attrstate}`);
|
||
}
|
||
if (attr == `armor`) {
|
||
const specialized = (isActive) ? parseInt(getCustomizationValue(debug, value, rowID, 'rank', "specialized")) : 0,
|
||
gap = (isActive) ? parseInt(getCustomizationValue(debug, value, rowID, 'rank', "gap")) : 0,
|
||
damagetype = (isActive) ? value[`repeating_attr_${rowID}_damagetype`] : "";
|
||
setObj[`protection_${attr}${layer}_specialized`] = specialized;
|
||
setObj[`protection_${attr}${layer}_gap`] = gap;
|
||
setObj[`protection_${attr}${layer}_damagetype`] = damagetype;
|
||
if (debug) {
|
||
console.log(`[setProtection(${sourceAttr})] specialized = ${specialized}`);
|
||
console.log(`[setProtection(${sourceAttr})] damagetype = ${damagetype}`);
|
||
console.log(`[setProtection(${sourceAttr})] gap = ${gap}`);
|
||
}
|
||
}
|
||
if (attr == `forcefield`) {
|
||
const impacting = (isActive) ? parseInt(getCustomizationValue(debug, value, rowID, 'rank', "impacting")) : 0;
|
||
setObj[`protection_${attr}_impacting`] = impacting;
|
||
if (debug) console.log(`[setProtection(${sourceAttr})] impacting = ${impacting}`);
|
||
}
|
||
if (attr == `absorption`) {
|
||
const synergistic = (isActive) ? getCustomizationValue(debug, value, rowID, 'rank', "synergistic") : 0,
|
||
capped = (isActive) ? getCustomizationValue(debug, value, rowID, 'rank', "capped") : 0;
|
||
setObj[`protection_${attr}${type}_synergistic`] = synergistic;
|
||
setObj[`protection_${attr}${type}_capped`] = capped;
|
||
if (debug) {
|
||
console.log(`[setProtection(${sourceAttr})] synergistic = ${synergistic}`);
|
||
console.log(`[setProtection(${sourceAttr})] capped = ${capped}`);
|
||
}
|
||
}
|
||
if (attr == `conversion` && type == 1) {
|
||
const escalate = (isActive) ? parseInt(getCustomizationValue(debug, value, rowID, 'rank', "escalate")) : 0;
|
||
setObj[`protection_${attr}_escalate`] = escalate;
|
||
if (debug) console.log(`[setProtection(${sourceAttr})] escalate = ${escalate}`);
|
||
}
|
||
setObj[`protection_${attr}${layer}${type}_state`] = state;
|
||
setObj[`protection_${attr}${layer}${type}_name`] = name;
|
||
setObj[`protection_${attr}${layer}${type}_source`] = rowID;
|
||
setObj[`protection_${attr}${layer}${type}_ar`] = rating;
|
||
if (debug) {
|
||
console.log(`[setProtection(${sourceAttr})] isActive = ${isActive}`);
|
||
console.log(`[setProtection(${sourceAttr})] name = ${name}`);
|
||
console.log(`[setProtection(${sourceAttr})] ar = ${rating}`);
|
||
console.log(`[setProtection(${sourceAttr})] source = ${rowID}`);
|
||
console.log(`[setProtection(${sourceAttr})] layer = ${layer}`);
|
||
console.log(`[setProtection(${sourceAttr})] type = ${type}`);
|
||
}
|
||
}
|
||
|
||
function setAugmented(isActive, debug, value, attrdb, rowID, sourceAttr, setObj) {
|
||
const stat = value[`repeating_attr_${rowID}_augmentedstat`] || "",
|
||
level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0,
|
||
base = parseInt(value[`static_stat_base_${stat}`]) || 0;
|
||
let adj = parseInt(value[`stat_adj_${stat}`]) || 0,
|
||
total = 0;
|
||
adj = (isActive) ? adj + level : adj - level;
|
||
total = base + adj;
|
||
setObj[`stat_adj_${stat}`] = adj;
|
||
setObj[`stat_total_${stat}`] = total;
|
||
if (debug) {
|
||
console.log(`[setAugmented(${sourceAttr})] stat = ${stat}`);
|
||
console.log(`[setAugmented(${sourceAttr})] level = ${level}`);
|
||
console.log(`[setAugmented(${sourceAttr})] base = ${base}`);
|
||
console.log(`[setAugmented(${sourceAttr})] adj = ${adj}`);
|
||
console.log(`[setAugmented(${sourceAttr})] total = ${total}`);
|
||
}
|
||
}
|
||
|
||
function setEnergized(isActive, debug, value, rowID, sourceAttr, setObj) {
|
||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) * 10 || 0,
|
||
mind = parseInt(value[`static_stat_base_mind`]) || 0,
|
||
soul = parseInt(value[`static_stat_base_soul`]) || 0,
|
||
prevAdj = parseInt(value[`stat_adj_energy`]) || 0,
|
||
newAdj = (isActive) ? prevAdj + level : prevAdj - level,
|
||
energy = ((mind + soul) * 5) + newAdj;
|
||
setObj.stat_total_energy = energy;
|
||
setObj.stat_adj_energy = newAdj;
|
||
if (debug) {
|
||
console.log(`[setEnergized(${sourceAttr})] prevAdj = ${prevAdj}`);
|
||
console.log(`[setEnergized(${sourceAttr})] newAdj = ${newAdj}`);
|
||
console.log(`[setEnergized(${sourceAttr})] energy = ${energy}`);
|
||
}
|
||
}
|
||
|
||
function setExtraArms(isActive, debug, value, rowID, sourceAttr, setObj) {
|
||
const extraarms = parseInt(value[`repeating_attr_${rowID}_extraarms`]) || 0,
|
||
label = value[`repeating_attr_${rowID}_name`];
|
||
if (isActive) {
|
||
var extraarmIDs = [];
|
||
for (let i = 0; i < extraarms; i++) {
|
||
const extraarmID = generateRowID();
|
||
setObj[`repeating_extraarm_${extraarmID}_label`] = label;
|
||
setObj[`repeating_extraarm_${extraarmID}_type`] = 1;
|
||
extraarmIDs[i] = extraarmID;
|
||
}
|
||
setObj[`repeating_attr_${rowID}_source`] = extraarmIDs.join();
|
||
} else {
|
||
const extraarmIDs = value[`repeating_attr_${rowID}_source`].split(',');
|
||
_.each(extraarmIDs, (extraarmID) => {
|
||
removeRepeatingRow(`repeating_extraarm_${extraarmID}`);
|
||
});
|
||
}
|
||
if (debug) {
|
||
console.log(`[setExtraArms(${sourceAttr})] extraarms = ${extraarms}`);
|
||
console.log(`[setExtraArms(${sourceAttr})] label = ${label}`);
|
||
}
|
||
}
|
||
|
||
function getPerception(debug, value, sourceAttr, setObj) {
|
||
const mind = parseInt(setObj.static_stat_base_mind) || parseInt(value.static_stat_base_mind) || 0,
|
||
augmented = parseInt(setObj.stat_adj_mind) || parseInt(value.stat_adj_mind) || 0,
|
||
shortcoming = parseInt(setObj.stat_adj_per) || parseInt(value.stat_adj_per) || 0,
|
||
result = mind + augmented + shortcoming;
|
||
if (debug) {
|
||
console.log(`[getPerception(${sourceAttr}) mind = ${mind}]`);
|
||
console.log(`[getPerception(${sourceAttr}) augmented = ${augmented}]`);
|
||
console.log(`[getPerception(${sourceAttr}) shortcoming = ${shortcoming}]`);
|
||
console.log(`[getPerception(${sourceAttr}) result = ${result}]`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function getPerceptionRollBase(debug, value, attrdb, setObj) {
|
||
const perception = parseInt(setObj.stat_total_per) || parseInt(value.stat_total_per) || 0,
|
||
heightenedawareness = getSumOfActiveAttrLevels(attrdb, 'heightenedawareness') || 0,
|
||
result = perception + heightenedawareness;
|
||
if (debug) {
|
||
console.log(`[getPerceptionRollBase()] perception = ${perception}`);
|
||
console.log(`[getPerceptionRollBase()] heightenedawareness = ${heightenedawareness}`);
|
||
console.log(`[getPerceptionRollBase()] result = ${result}`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function getHeightenedSenses(debug, attrdb, sourceAttr) {
|
||
var result = [0, 0, 0, 0, 0];
|
||
_.each(attrdb.heightenedsenses, (o) => {
|
||
const ranks = _.pluck(o.senses, 'rank');
|
||
_.map(ranks, (rank, i) => {
|
||
result[i] = result[i] + rank;
|
||
result[i] = result[i] > 2 ? 2 : result[i] < -2 ? -2 : result[i];
|
||
return result[i];
|
||
});
|
||
});
|
||
if (debug) console.log(`[getHeightenedSenses(${sourceAttr})] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setHeightendSenses(debug, attrdb, sourceAttr, setObj) {
|
||
const senseRanks = getHeightenedSenses(debug, attrdb, sourceAttr);
|
||
_.each(sense_array, (sense, i) => {
|
||
setObj[`enhanced${sense}tab`] = senseRanks[i];
|
||
});
|
||
if (debug) {
|
||
console.log(`[setHeightendSenses(${sourceAttr})] setObj:`);
|
||
console.log(setObj);
|
||
}
|
||
}
|
||
|
||
function getIsTargetedActive(debug, value, attrIDs, rowID, setObj) {
|
||
var attribute = value[`repeating_attr_${rowID}_attribute`].replace(/\s+/g, ''),
|
||
activeID = "";
|
||
_.each(attrIDs, (attrID) => {
|
||
const attrname = value[`repeating_attr_${attrID}_attribute`].replace(/\s+/g, ''),
|
||
active = parseInt(value[`repeating_attr_${attrID}_activate`]);
|
||
if (attrname == attribute && active && getIsTargeted(debug, value, attrID, setObj)) {
|
||
activeID = attrID;
|
||
}
|
||
});
|
||
return activeID;
|
||
}
|
||
|
||
function getIsTargeted(debug, value, rowID, setObj) {
|
||
const attribute = value[`repeating_attr_${rowID}_attribute`].replace(/\s+/g, ''),
|
||
customizations = setObj[`repeating_attr_${rowID}_customizations`] ||
|
||
value[`repeating_attr_${rowID}_customizations`] || [];
|
||
let isTargeted = false;
|
||
if (debug) { console.log(`[getIsTargeted(${attribute})] customizations:`); console.log(customizations); }
|
||
if (attribute == "massivedamage") {
|
||
_.each(customizations, (customization) => {
|
||
if (customization.name == 'targeteddamage' && customization.rank > 0) {
|
||
isTargeted = true;
|
||
}
|
||
});
|
||
} else if (attribute == "enemyattack" || attribute == "enemydefense") {
|
||
isTargeted = true;
|
||
}
|
||
if (debug) console.log(`[getIsTargeted(${attribute})] isTargeted = ${isTargeted}`);
|
||
return isTargeted;
|
||
}
|
||
|
||
function getTargetedLevel(attrdb, attribute) {
|
||
var result = 0;
|
||
_.find(attrdb[`${attribute}`], (o) => {
|
||
if (attribute == "massivedamage") {
|
||
if (o.targeted) result = o.level;
|
||
} else if (attribute == "enemyattack" || attribute == "enemydefense") {
|
||
result = o.level;
|
||
}
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function setTargeted(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj) {
|
||
if (attribute == "massivedamage" || attribute == "enemyattack" || attribute == "enemydefense") {
|
||
const targeted = getTargetedLevel(attrdb, attribute),
|
||
result = (isActive) ? targeted : 0,
|
||
enable = (result > 0) ? 1 : 0,
|
||
activeID = getIsTargetedActive(debug, value, attrIDs, rowID, setObj);
|
||
if (activeID != "") {
|
||
setActiveAttribute(0, debug, value, activeID, sourceAttr, setObj, attribute);
|
||
setObj[`repeating_attr_${activeID}_activate`] = 0;
|
||
}
|
||
if (debug) {
|
||
console.log(`[setTargeted(${sourceAttr})] attribute = ${attribute}`);
|
||
console.log(`[setTargeted(${sourceAttr})] targeted = ${targeted}`);
|
||
console.log(`[setTargeted(${sourceAttr})] result = ${result}`);
|
||
console.log(`[setTargeted(${sourceAttr})] enable = ${enable}`);
|
||
}
|
||
setObj[`enable_${attribute}`] = enable;
|
||
} else { return; }
|
||
}
|
||
|
||
function setExtraActions(debug, attrdb, attribute, setObj) {
|
||
const type = attribute.replace(/extra/g, '');
|
||
var result = (type == 'actions') ? 1 : 0;
|
||
_.each(attrdb[`extra${type}`], (v) => {
|
||
result += parseInt(v.level);
|
||
});
|
||
setObj[`${type}`] = result;
|
||
if (debug) console.log(`[setExtraActions(${type})] result = ${result}`);
|
||
}
|
||
|
||
function getCombatTechniques(debug, customizations) {
|
||
var result = [];
|
||
const combattechniques = ['blackout', 'brutal', 'criticalstrike', 'enhancedknockback', 'extendedrange', 'lethalblow'];
|
||
_.each(combattechniques, (technique) => {
|
||
let lookup = getCustomizationExists(technique, customizations) || { name: technique, value: 0 };
|
||
if (lookup.value > 0) result[result.length] = { name: lookup.name, value: lookup.value };
|
||
});
|
||
if (debug) { console.log(`[getCombatTechniques()] result:`); console.log(result); }
|
||
return result;
|
||
}
|
||
|
||
function getSubAttrs(debug, customizations, attribute) {
|
||
var result = [];
|
||
const subattrs =
|
||
(attribute == "combattechnique") ? [
|
||
'blackout', 'blindfighting', 'blindshooting', 'brutal', 'concealment',
|
||
'criticalstrike', 'deadeye', 'deflection', 'enhancedknockback', 'extendedrange',
|
||
'farshot', 'hardboiled', 'lethalblow', 'lightningreflexes', 'multipletargets',
|
||
'preciseaim', 'reflection', 'rushattack', 'steadyhand', 'twoweapons'
|
||
] :
|
||
(attribute == "heightenedsenses") ? [
|
||
`heightenedsight`, `heightenedhearing`, `heightenedtouch`, `heightenedsmell`,
|
||
`heightenedtaste`
|
||
] :
|
||
[];
|
||
_.each(subattrs, (subattr) => {
|
||
let lookup = getCustomizationExists(subattr, customizations) || { name: subattr, rank: 0 };
|
||
if (lookup.rank > 0) result[result.length] = { name: lookup.name, rank: lookup.rank };
|
||
});
|
||
if (debug) { console.log(`[getSubAttrs(${attribute})] result:`); console.log(result); }
|
||
return result;
|
||
}
|
||
|
||
function getSumOfActiveSubAttrRanks(attrdb, attribute, subattr) {
|
||
var result = 0;
|
||
_.each(attrdb[`${attribute}`], (o) => {
|
||
_.find(o, (i) => {
|
||
if (i.name == subattr) result = result + i.rank;
|
||
});
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function getActiveIdPosition(attrdb, attribute, activeID) {
|
||
const result = _.find(attrdb[`${attribute}`], (o, i) => { if (o.source == activeID) return i; });
|
||
}
|
||
|
||
function setHeightenedSensesLevels(attrdb, setObj) {
|
||
const senses = ['heightenedsenses', 'heightenedsight', 'heightenedhearing',
|
||
'heightenedtouch', 'heightenedsmell', 'heightenedtaste'];
|
||
const display = ['enhancedsighttab', 'enhancedhearingtab', 'enhancedtouchtab',
|
||
'enhancedsmelltab', 'enhancedtastetab'];
|
||
_.each(senses, (sense, i) => {
|
||
const heightenedsense = attrdb.heightenedsenses[`${sense}`];
|
||
setObj[`${display[i]}`] = heightenedsense.rank;
|
||
});
|
||
}
|
||
|
||
function setDefectdb(debug, attrdb, eventInfo, rowID, setObj){
|
||
let defectdb = attrdb.defect;
|
||
const newValue = isNaN(parseInt(eventInfo.newValue)) ?
|
||
eventInfo.newValue == undefined ? "" : removeWhiteSpace(eventInfo.newValue) :
|
||
parseInt(eventInfo.newValue);
|
||
const isStat = _.find(all_stats_array, stat => {
|
||
const result = stat == newValue ? true : false;
|
||
return result;
|
||
})
|
||
const update = isNaN(newValue) ?
|
||
isStat ? 'aspect' : 'name' : 'rank';
|
||
const updateDefect = _.find(defectdb, o => {
|
||
const result = o.source === rowID ? true : false;
|
||
return result;
|
||
});
|
||
const position = _.isEmpty(defectdb) ? 0 : defectdb.length;
|
||
const createDefect = updateDefect === undefined ?
|
||
newValue == 'shortcoming' ?
|
||
defectdb[position] = { "name": newValue, "aspect": "", "rank": 0, "source": rowID } :
|
||
defectdb[position] = { "name": newValue, "rank": 0, "source": rowID } : false;
|
||
if(createDefect == false){
|
||
if(update == 'name'){
|
||
updateDefect.rank = 0;
|
||
if(_.isString(eventInfo.previousValue)) {
|
||
setObj[`repeating_attr_${rowID}_defect${removeWhiteSpace(eventInfo.previousValue)}`] = 0;
|
||
}
|
||
}
|
||
updateDefect[`${update}`] = newValue;
|
||
}
|
||
setObj.attrdb = JSON.stringify(attrdb);
|
||
}
|
||
|
||
function setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj) {
|
||
const name = value[`repeating_attr_${rowID}_name`] || "";
|
||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||
const length = (attrdb[`${attribute}`] == undefined) ?
|
||
0 : attrdb[`${attribute}`].length;
|
||
let result = {};
|
||
let stat = 0;
|
||
let focused = 0;
|
||
let defense = 0;
|
||
let targeted = 0;
|
||
let damagetype = '';
|
||
let customizations = [];
|
||
switch (attribute) {
|
||
case 'augmented':
|
||
stat = value[`repeating_attr_${rowID}_augmentedstat`] || "";
|
||
result = { level: level, focus: stat, source: rowID };
|
||
break;
|
||
case `combattechnique`:
|
||
customizations = value[`repeating_attr_${rowID}_customizations`] || [];
|
||
result = { subattrs: getSubAttrs(debug, customizations, attribute), source: rowID };
|
||
break;
|
||
case `enemyattack`:
|
||
case `enemydefense`:
|
||
result = { level: level, targeted: 1, source: rowID };
|
||
break;
|
||
case `attackmastery`:
|
||
case `defensemastery`:
|
||
case `extraactions`:
|
||
case `extradefenses`:
|
||
case `heightenedawareness`:
|
||
case `socialmastery`:
|
||
case `superstrength`:
|
||
case `tough`:
|
||
case `unassailable`:
|
||
result = { level: level, source: rowID };
|
||
break;
|
||
case `meleeattack`:
|
||
case `rangedattack`:
|
||
case `meleedefense`:
|
||
focused = value[`repeating_attr_${rowID}_weaponclass`] || "";
|
||
result = { level: level, focus: focused, source: rowID };
|
||
break;
|
||
case `rangeddefense`:
|
||
defense = value[`repeating_attr_${rowID}_defenseclass`] || "";
|
||
result = { level: level, focus: defense, source: rowID };
|
||
break;
|
||
case `massivedamage`:
|
||
targeted = getCustomizationValue(debug, value, rowID, 'rank', "targeteddamage") || 0;
|
||
focused = value[`repeating_attr_${rowID}_weaponclass`] || "";
|
||
result = { level: level, targeted: targeted, focus: focused, source: rowID };
|
||
break;
|
||
case `heightenedsenses`:
|
||
result = {
|
||
senses: [
|
||
{
|
||
name: 'sight',
|
||
rank: getCustomizationValue(debug, value, rowID, 'rank', 'heightenedsight')
|
||
},
|
||
{
|
||
name: 'hearing',
|
||
rank: getCustomizationValue(debug, value, rowID, 'rank', 'heightenedhearing')
|
||
},
|
||
{
|
||
name: 'touch',
|
||
rank: getCustomizationValue(debug, value, rowID, 'rank', 'heightenedtouch')
|
||
},
|
||
{
|
||
name: 'smell',
|
||
rank: getCustomizationValue(debug, value, rowID, 'rank', 'heightenedsmell')
|
||
},
|
||
{
|
||
name: 'taste',
|
||
rank: getCustomizationValue(debug, value, rowID, 'rank', 'heightenedtaste')
|
||
}
|
||
],
|
||
source: rowID
|
||
};
|
||
break;
|
||
case `shield`:
|
||
customizations = value[`repeating_attr_${rowID}_customizations`] || [];
|
||
result = { name: name, level: level, source: rowID, customizations: customizations };
|
||
break;
|
||
case `telekinesis`:
|
||
case `swarm`:
|
||
case `weapon`:
|
||
focused = attribute == 'swarm' || attribute == 'telekinesis' ?
|
||
'unarmed' :
|
||
value[`repeating_attr_${rowID}_weaponclass`] || "";
|
||
damagetype = attribute == 'swarm' ?
|
||
'penetrating' :
|
||
attribute == 'telekinesis' ?
|
||
'blunt' :
|
||
value[`repeating_attr_${rowID}_damagetype`];
|
||
customizations = value[`repeating_attr_${rowID}_customizations`] || [];
|
||
result = { name: name, level: level, focus: focused, damagetype: damagetype, source: rowID, customizations: customizations };
|
||
break;
|
||
default: result = {};
|
||
}
|
||
if (isActive) {
|
||
attrdb[`${attribute}`][`${length}`] = result;
|
||
if (getIsTargeted(debug, value, rowID, setObj)) {
|
||
const activeID = getIsTargetedActive(debug, value, attrIDs, rowID, setObj);
|
||
if (activeID != "") {
|
||
attrdb[`${attribute}`].splice(getActiveIdPosition(attrdb, attribute, activeID), 1);
|
||
}
|
||
}
|
||
} else {
|
||
attrdb[`${attribute}`].find((attr, i) => {
|
||
if (attr.source == rowID) {
|
||
delete attrdb[`${attribute}`][i]; return true;
|
||
}
|
||
});
|
||
attrdb[`${attribute}`] = attrdb[`${attribute}`].filter(() => { return true });
|
||
}
|
||
if (debug) {
|
||
console.log(`[setAttrdb(${sourceAttr})] attrdb:`);
|
||
console.log(attrdb);
|
||
}
|
||
//return attrdb;
|
||
}
|
||
|
||
function getUndetectableCharacteristic(debug, value, rowID, setObj) {
|
||
var methods = [];
|
||
const customizations = setObj[`repeating_attr_${rowID}_customizations`] || value[`repeating_attr_${rowID}_customizations`] || [];
|
||
_.each(customizations, (customization) => {
|
||
if (/(hearing|sight|smell|taste|touch|echolocation|infrasound|radio|ultrasound|infrared|ultraviolet|x-ray|odorant|tastant|magnetic|radiation|seismic|thermal)/i.test(customization.name) && customization.value == 1) {
|
||
methods[methods.length] = capital(customization.name);
|
||
}
|
||
});
|
||
if (methods.length > 0) methods.join(', ');
|
||
if (debug) console.log(`[getUndetectableCharacteristic()] methods = ${methods}`);
|
||
console.log(setObj);
|
||
return methods;
|
||
}
|
||
|
||
function setArmWeaponName(debug, value, rowID, sourceAttr) {
|
||
let weapon = value[`repeating_attr_${rowID}_name`] || "";
|
||
if (debug) console.log(`[setArmWeapon(${sourceAttr})] weapon = ${weapon}`);
|
||
return weapon;
|
||
}
|
||
|
||
function setArmWeaponClass(debug, value, rowID, sourceAttr) {
|
||
let wpnclass = getCustomizationValue(debug, value, rowID, 'rank', "wpnclass") || "";
|
||
if (debug) console.log(`[setArmWeaponClass(${sourceAttr})] wpnclass = ${wpnclass}`);
|
||
return wpnclass;
|
||
}
|
||
|
||
function setArmDamageType(debug, value, rowID, sourceAttr) {
|
||
let type = value[`repeating_attr_${rowID}_damagetype`] || "";
|
||
if (type != "") type = capital(type);
|
||
if (debug) console.log(`[setArmDamageType(${sourceAttr})] type = ${type}`);
|
||
return type;
|
||
}
|
||
|
||
function getIsMelee(debug, wpnclass) {
|
||
const result = (/(exotic|hafted|hilted|polearm|unarmed)/i.test(wpnclass)) ? 1 : 0;
|
||
if (debug) console.log(`[getIsMelee()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getAttackMod(debug, value, attrIDs, wpnclass, sourceAttr) {
|
||
var result = 0,
|
||
ismelee = getIsMelee(debug, wpnclass);
|
||
_.each(attrIDs, (rowID) => {
|
||
let wpnclassType = (ismelee) ? "maclass" : "raclass",
|
||
match = getCustomizationValue(debug, value, rowID, 'rank', `${wpnclassType}`);
|
||
if (wpnclass == match) {
|
||
let active = parseInt(value[`repeating_attr_${rowID}_activate`]);
|
||
if (active) result = result + parseInt(value[`repeating_attr_${rowID}_level`]);
|
||
}
|
||
});
|
||
if (debug) console.log(`[getAttackMod(sourceAttr)] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setArmACV(debug, value, attrIDs, rowID, sourceAttr) {
|
||
let accuracy = getCustomizationValue(debug, value, rowID, 'rank', "accuracy") || 0,
|
||
inacurracy = getCustomizationValue(debug, value, rowID, 'rank', "inacurracy") || 0,
|
||
acv = parseInt(value.stat_total_acv),
|
||
wpnclass = getCustomizationValue(debug, value, rowID, 'rank', "wpnclass") || "",
|
||
attackmod = getAttackMod(debug, value, attrIDs, wpnclass, sourceAttr),
|
||
result = accuracy + inacurracy + acv + attackmod;
|
||
if (debug) console.log(`[setArmACV(sourceAttr)] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setCV(debug, value, sourceAttr) {
|
||
let body = parseInt(value.body),
|
||
mind = parseInt(value.mind),
|
||
soul = parseInt(value.soul),
|
||
cv = Math.round((body + mind + soul) / 3);
|
||
if (debug) console.log(`[setCV(sourceAttr)] cv = ${cv}`);
|
||
return cv;
|
||
}
|
||
|
||
function getDefenseMod(debug, value, attrIDs, wpnclass, sourceAttr) {
|
||
var result = 0,
|
||
ismelee = getIsMelee(debug, wpnclass);
|
||
if (ismelee) {
|
||
_.each(attrIDs, (rowID) => {
|
||
let match = getCustomizationValue(debug, value, rowID, 'rank', "mdclass");
|
||
if (wpnclass == match) {
|
||
let active = parseInt(value[`repeating_attr_${rowID}_activate`]);
|
||
if (active) result = result + parseInt(value[`repeating_attr_${rowID}_level`]);
|
||
}
|
||
});
|
||
}
|
||
if (debug) console.log(`[getDefenseMod(sourceAttr)] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setArmDCV(debug, value, attrIDs, rowID, sourceAttr) {
|
||
let defense = getCustomizationValue(debug, value, rowID, 'rank', "defense") || 0,
|
||
unbalanced = getCustomizationValue(debug, value, rowID, 'rank', "unbalanced") || 0,
|
||
dcv = value.stat_total_dcv,
|
||
wpnclass = getCustomizationValue(debug, value, rowID, 'rank', "wpnclass") || "",
|
||
defensemod = getDefenseMod(debug, value, attrIDs, wpnclass, sourceAttr),
|
||
result = defense + unbalanced + dcv + defensemod;
|
||
if (debug) console.log(`[setArmDCV(sourceAttr)] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getSumOfActiveAttrLevels(attrdb, attribute, focus = '') {
|
||
var result = 0;
|
||
_.each(attrdb[`${attribute}`], (o) => {
|
||
if (o.targeted == undefined) {
|
||
if (focus == o.focus || o.focus == undefined) {
|
||
result = result + o.level;
|
||
}
|
||
}
|
||
});
|
||
console.log(`[getSumOfActiveAttrLevels(${attribute})] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setArmDamage(debug, value, attrIDs, rowID, sourceAttr) {
|
||
let damage = parseInt(value[`repeating_attr_${rowID}_level`]) || 0,
|
||
wpnclass = getCustomizationValue(debug, value, rowID, 'rank', "wpnclass") || "",
|
||
massivedamage = getMassiveDamage(debug, value, attrIDs, wpnclass, sourceAttr) || 0,
|
||
superstrength = getSuperStrength(debug, value, attrIDs, rowID, sourceAttr) || 0,
|
||
acv = parseInt(value.stat_total_acv);
|
||
damage = damage * (5 + massivedamage + superstrength) + acv;
|
||
if (debug) console.log(`[setArmDamage(sourceAttr)] damage = ${damage}`);
|
||
return damage;
|
||
}
|
||
|
||
function getAttrIDs(debug, value, attrIDs, sourceAttr, attribute) {
|
||
var result = [];
|
||
_.each(attrIDs, (rowID) => {
|
||
let attr = value[`repeating_attr_${rowID}_attribute`];
|
||
if (attr == attribute) result[result.length] = rowID;
|
||
});
|
||
if (debug) { console.log(`[getAttrID(sourceAttr)] result:`); console.log(result); }
|
||
return result;
|
||
}
|
||
|
||
function getHasTwoWeapon(debug, value, attrIDs, sourceAttr) {
|
||
var result = false;
|
||
let combattechnique = getAttrIDs(debug, value, attrIDs, sourceAttr, "combat technique");
|
||
_.each(combattechnique, (rowID) => {
|
||
let hasTwoWeapon = getCustomizationValue(debug, value, rowID, 'rank', "twoweapon") || 0;
|
||
if (hasTwoWeapon) result = true;
|
||
});
|
||
if (debug) console.log(`[getHasTwoWeapon(sourceAttr)] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setArms(debug, rowID, setObj, name, isActive, hand) {
|
||
const handsource = getHandSource(debug, hand);
|
||
const source = setObj[`repeating_attr_${rowID}_source`];
|
||
if (isActive) {
|
||
setObj[`${handsource}_name`] = name;
|
||
setObj[`${handsource}_source`] = rowID;
|
||
if (source === undefined || source === '') {
|
||
setObj[`repeating_attr_${rowID}_source`] = hand;
|
||
} else {
|
||
let twohanded = source + ',' + hand;
|
||
setObj[`repeating_attr_${rowID}_source`] = twohanded;
|
||
}
|
||
} else {
|
||
setObj[`${handsource}_name`] = '';
|
||
setObj[`${handsource}_source`] = '';
|
||
setObj[`repeating_attr_${rowID}_source`] = '';
|
||
}
|
||
if (debug) console.log(`[setArms(${isActive})] handsource = ${handsource}`);
|
||
}
|
||
|
||
function updateWeaponStates(debug, attrdb, extraarmIDs, value, source, sourceAttr, setObj){
|
||
const handsource = getHandSource(debug, source);
|
||
const state = parseInt(value[`${handsource}_state`]);
|
||
if(debug) console.log(`[updateWeaponStates()] state = ${state}`);
|
||
if(state > 0) {
|
||
setWeaponStates(debug, extraarmIDs, value, handsource, setObj);
|
||
setActiveWeapon(debug, value, handsource, setObj);
|
||
setCombatRoll(debug, value, attrdb, value[`${source}_source`], sourceAttr, setObj);
|
||
}
|
||
}
|
||
|
||
function setWeapon(isActive, debug, value, extraarmIDs, rowID, sourceAttr, setObj, attrdb, attribute) {
|
||
const name = value[`repeating_attr_${rowID}_name`] || "";
|
||
const hands = attribute == 'telekinesis' || attribute == 'swarm' ? 0 :
|
||
getCustomizationValue(debug, value, rowID, 'rank', 'hands') ? 2 :
|
||
getCustomizationValue(debug, value, rowID, 'rank', 'nohands') ? 0 : 1;
|
||
const mainsource = value.mainhand_source || "";
|
||
const offsource = value.offhand_source || "";
|
||
switch (hands) {
|
||
case 0: //no hands
|
||
if (isActive) {
|
||
const extraarmID = generateRowID();
|
||
setArms(debug, rowID, setObj, name, true, extraarmID);
|
||
setObj[`repeating_extraarm_${extraarmID}_type`] = 0;
|
||
setObj[`repeating_extraarm_${extraarmID}_label`] = capital(attribute);
|
||
//updateWeaponStates(debug, attrdb, extraarmIDs, value, extraarmID, sourceAttr, setObj);
|
||
} else {
|
||
var source = setObj[`repeating_attr_${rowID}_source`] ||
|
||
value[`repeating_attr_${rowID}_source`] || "";
|
||
var result = (source.length > 0) ? source.toLowerCase() : source;
|
||
if (result.indexOf(',') > 0) {
|
||
source = source.split(',');
|
||
result = result.split(',');
|
||
const mountid = _.intersection(result, extraarmIDs);
|
||
_.find(result, (c, i, extraarmIDs) => {
|
||
_.find(extraarmIDs, (id) => {
|
||
if (c == id) {
|
||
source.splice(i, 1).toString();
|
||
setObj[`repeating_attr_${rowID}_source`] = source;
|
||
return true;
|
||
}
|
||
});
|
||
});
|
||
result = mountid.toString();
|
||
}
|
||
//updateWeaponStates(debug, attrdb, extraarmIDs, value, result, sourceAttr, setObj);
|
||
removeRepeatingRow(`repeating_extraarm_${result}`);
|
||
}
|
||
break;
|
||
case 1: //single handed
|
||
if (isActive) {
|
||
const extrahands = _.chain(extraarmIDs)
|
||
.each((handID, i) => {
|
||
if (parseInt(value[`repeating_extraarm_${handID}_type`]) == 0 ||
|
||
value[`repeating_extraarm_${handID}_source`].length > 0) {
|
||
delete handID[i];
|
||
}
|
||
})
|
||
.compact()
|
||
.value();
|
||
if (mainsource == "" && attribute != 'shield') {
|
||
//arm mainhand
|
||
setArms(debug, rowID, setObj, name, true, "mainhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
} else if (offsource == "") {
|
||
//enable dualwield
|
||
setArms(debug, rowID, setObj, name, true, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "offhand", sourceAttr, setObj);
|
||
} else if (extrahands.length > 0) {
|
||
//enable dualwield w/extraarm
|
||
const id = extrahands[0];
|
||
//arm extraarm
|
||
setArms(debug, rowID, setObj, name, true, id);
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, id, sourceAttr, setObj);
|
||
} else if (mainsource == offsource) {
|
||
//determine if two-handed and arm mainhand, unarm two-handed or offhand
|
||
disableWeapon(debug, mainsource, attrdb, setObj);
|
||
if (attribute == `shield`) {
|
||
setArms(debug, rowID, setObj, name, false, "mainhand");
|
||
setArms(debug, rowID, setObj, name, true, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "offhand", sourceAttr, setObj);
|
||
} else {
|
||
setArms(debug, rowID, setObj, name, false, "offhand");
|
||
setArms(debug, rowID, setObj, name, true, "mainhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
}
|
||
} else {
|
||
//arm mainhand
|
||
if (attribute == `shield`) {
|
||
disableWeapon(debug, offsource, attrdb, setObj);
|
||
setArms(debug, rowID, setObj, name, true, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "offhand", sourceAttr, setObj);
|
||
} else {
|
||
disableWeapon(debug, mainsource, attrdb, setObj);
|
||
setArms(debug, rowID, setObj, name, true, "mainhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
}
|
||
}
|
||
} else {
|
||
let source = setObj[`repeating_attr_${rowID}_source`] ||
|
||
value[`repeating_attr_${rowID}_source`] || '';
|
||
if (source.indexOf(',') > 0) {
|
||
const twohanded = source.split(',');
|
||
setArms(debug, rowID, setObj, name, false, twohanded[0]);
|
||
setArms(debug, rowID, setObj, name, false, twohanded[1]);
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, twohanded[0], sourceAttr, setObj);
|
||
} else {
|
||
setArms(debug, rowID, setObj, name, false, source);
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, source, sourceAttr, setObj);
|
||
}
|
||
}
|
||
break;
|
||
case 2: //two-handed
|
||
if (isActive) {
|
||
const extrahands = _.chain(extraarmIDs)
|
||
.each((handID, i) => {
|
||
if (parseInt(value[`repeating_extraarm_${handID}_type`]) == 0 ||
|
||
value[`repeating_extraarm_${handID}_source`].length > 0) {
|
||
delete handID[i];
|
||
}
|
||
})
|
||
.compact()
|
||
.value();
|
||
if (mainsource == "" && offsource == "") {
|
||
//arm two-handed
|
||
setArms(debug, rowID, setObj, name, true, "mainhand");
|
||
setArms(debug, rowID, setObj, name, true, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
} else if (extrahands.length > 1) {
|
||
//are there two or more empty exraarms?
|
||
var twohands = _.first(extrahands, 2);
|
||
_.each(twohands, (hand) => {
|
||
setArms(debug, rowID, setObj, name, true, hand);
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, hand, sourceAttr, setObj);
|
||
});
|
||
} else if (mainsource == offsource) {
|
||
//already using two-handed weapon
|
||
disableWeapon(debug, mainsource, attrdb, setObj);
|
||
setArms(debug, rowID, setObj, name, true, "mainhand");
|
||
setArms(debug, rowID, setObj, name, true, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
} else {
|
||
//arm main&off hands, unarm main&off hands
|
||
if (mainsource != "") disableWeapon(debug, mainsource, attrdb, setObj);
|
||
if (offsource != "") disableWeapon(debug, offsource, attrdb, setObj);
|
||
setArms(debug, rowID, setObj, name, true, "mainhand");
|
||
setArms(debug, rowID, setObj, name, true, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
}
|
||
} else {
|
||
let source = setObj[`repeating_attr_${rowID}_source`] ||
|
||
value[`repeating_attr_${rowID}_source`] || '';
|
||
if (/(mainhand|offhand)/i.test(source)) {
|
||
setArms(debug, rowID, setObj, name, false, "mainhand");
|
||
setArms(debug, rowID, setObj, name, false, "offhand");
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, "mainhand", sourceAttr, setObj);
|
||
} else {
|
||
if (source.indexOf(',') > 1) source = source.split(',');
|
||
_.each(source, (extraarm, i) => {
|
||
if (extraarm === source[i]) {
|
||
setArms(debug, rowID, setObj, name, false, extraarm);
|
||
updateWeaponStates(debug, attrdb, extraarmIDs, value, extraarm, sourceAttr, setObj);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
if (debug) {
|
||
console.log(`[setWeapon(${sourceAttr})]`);
|
||
}
|
||
}
|
||
|
||
function disableWeapon(debug, source, attrdb, setObj) {
|
||
setObj[`repeating_attr_${source}_activate`] = 0;
|
||
attrdb.weapon.find((attr, i) => {
|
||
if (attr.source == source) { delete attrdb.weapon[i]; return true; }
|
||
});
|
||
attrdb.weapon = attrdb.weapon.filter(() => { return true });
|
||
if (debug) {
|
||
console.log(`[disableWeapon()] attrdb.weapon:`);
|
||
console.log(attrdb.weapon);
|
||
}
|
||
}
|
||
|
||
function setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level) {
|
||
const target = (attribute == 'supersense') ? `repeating_senses` : `repeating_active`;
|
||
if (isActive) {
|
||
const activeID = generateRowID(),
|
||
name = value[`repeating_attr_${rowID}_name`] || "",
|
||
characteristic = value[`repeating_attr_${rowID}_characteristic`] || "";
|
||
var source = setObj[`repeating_attr_${rowID}_source`] || value[`repeating_attr_${rowID}_source`] || '';
|
||
source = (source.length > 0) ? source + ',' + activeID : activeID;
|
||
setObj[`repeating_attr_${rowID}_source`] = source;
|
||
setObj[`${target}_${activeID}_name`] = `${name} (${attribute})`;
|
||
setObj[`${target}_${activeID}_characteristic`] = characteristic;
|
||
if (attribute == 'telepathy' && level > 3) {
|
||
setRollable(debug, value, rowID, activeID, setObj, attribute);
|
||
} else if (attribute != 'telepathy' && attribute != 'supersense') {
|
||
setRollable(debug, value, rowID, activeID, setObj, attribute);
|
||
}
|
||
if (debug) {
|
||
console.log(`[setActiveAttribute()] isActive = ${isActive}`);
|
||
console.log(`[setActiveAttribute()] activeID = ${activeID}`);
|
||
console.log(`[setActiveAttribute()] target = ${target}`);
|
||
console.log(`[setActiveAttribute()] source:`); console.log(source);
|
||
console.log(`[setActiveAttribute()] name = ${name}`);
|
||
console.log(`[setActiveAttribute()] characteristic = ${characteristic}`);
|
||
}
|
||
} else {
|
||
const source = setObj[`repeating_attr_${rowID}_source`] || value[`repeating_attr_${rowID}_source`] || "";
|
||
setObj[`repeating_attr_${rowID}_source`] = "";
|
||
if(source.length>0) removeRepeatingRow(`${target}_${source}`);
|
||
if (debug) {
|
||
console.log(`[setActiveAttribute()] isActive = ${isActive}`);
|
||
console.log(`[setActiveAttribute()] target = ${target}`);
|
||
console.log(`[setActiveAttribute()] source = ${source}`);
|
||
}
|
||
}
|
||
}
|
||
|
||
function setRollable(debug, value, rowID, activeID, setObj, attribute) {
|
||
const isRollable = rollable_attributes_regex.test(attribute);
|
||
const rollable = (isRollable) ? 1 : 0;
|
||
const attrstat = value[`repeating_attr_${rowID}_stat`] || '';
|
||
const base = isRollable ? `@{stat_total_${attrstat}}` : '';
|
||
const target = isRollable ? targetable_attributes_regex.test(attribute) ?
|
||
' {{target_name=@{target|charactername}}}' : '' : '';
|
||
const rollmod = 0;
|
||
const rollstring = isRollable ?
|
||
`&{template:besmDefault} {{rolls=1}} {{title=Attribute Roll}} {{attrroll=1}} ` +
|
||
`{{character_name=@{charactername}}} {{pronoun=@{pronoun}}} {{attribute=${attribute}}} ` +
|
||
`{{base=${base}}} {{total=[[[[?{Roll is|Normal, ${setDice(rollmod)}` +
|
||
`|Minor Edge, ${setDice(rollmod, 1)}|Minor Obstacle, ${setDice(rollmod, -1)}` +
|
||
`|Major Edge, ${setDice(rollmod, 2)}|Major Obstacle, ${setDice(rollmod, -2)}}]]+[[${base}]]]]}} ` +
|
||
`{{roll=$[[0]]}}${target}` : '';
|
||
setObj[`repeating_active_${activeID}_rollable`] = rollable;
|
||
setObj[`repeating_active_${activeID}_rollvalue`] = rollstring;
|
||
if (debug){
|
||
console.log(`[setRollable(${attribute})] isRollable = ${isRollable}`);
|
||
console.log(`[setRollable(${attribute})] rollstring = ${rollstring}`);
|
||
}
|
||
}
|
||
|
||
function setAttrEffects(debug, isActive, value, attrdb, extraarmIDs, attrIDs, sectionName, rowID, sourceAttr, setObj) {
|
||
const attribute = value[`repeating_attr_${rowID}_attribute`].replace(/\s+/g, '');
|
||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]);
|
||
switch (attribute) {
|
||
case "absorption":
|
||
case "armor":
|
||
case "forcefield":
|
||
case "mindshield":
|
||
setProtection(isActive, debug, value, rowID, sourceAttr, attribute, setObj);
|
||
break;
|
||
case "attackmastery":
|
||
case "defensemastery":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "augmented":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setAugmented(isActive, debug, value, attrdb, rowID, sourceAttr, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "combattechnique":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
break;
|
||
case "conversion":
|
||
setProtection(isActive, debug, value, rowID, sourceAttr, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "defect":
|
||
setDefectEffect(isActive, debug, attrIDs, attrdb, value, rowID, setObj, attribute);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "enemyattack":
|
||
case "enemydefense":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setTargeted(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "energized":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setDerivedValue(debug, attrdb, value, setObj, 'energy');
|
||
break;
|
||
case "extraactions":
|
||
case "extradefenses":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setExtraActions(debug, attrdb, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "extraarms":
|
||
setExtraArms(isActive, debug, value, rowID, sourceAttr, setObj);
|
||
break;
|
||
case "heightenedawareness":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "heightenedsenses":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setHeightendSenses(debug, attrdb, sourceAttr, setObj);
|
||
break;
|
||
case "massivedamage":
|
||
case "meleeattack":
|
||
case "meleedefense":
|
||
case "rangedattack":
|
||
case "rangeddefense":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setTargeted(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "powerflux":
|
||
case "powervariation":
|
||
setPoolMax(isActive, value, attrIDs, sectionName, rowID, setObj);
|
||
convertAttrGroupCost(isActive, value, sectionName, attrIDs, rowID, setObj);
|
||
setPoolActive(isActive, value, sectionName, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "shield":
|
||
setProtection(isActive, debug, value, rowID, sourceAttr, attribute, setObj);
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setWeapon(isActive, debug, value, extraarmIDs, rowID, sourceAttr, setObj, attrdb, attribute);
|
||
break;
|
||
case "skill":
|
||
setSkillGroup(isActive, debug, value, rowID, setObj, level);
|
||
setSkillGroupMaxByLevelChange(isActive, debug, value, rowID, setObj);
|
||
break;
|
||
case "socialmastery":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setDerivedValue(debug, attrdb, value, setObj, 'social');
|
||
break;
|
||
case "specialmovement":
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "socialmastery":
|
||
case "superstrength":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "swarm":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setSwarmCritters(isActive, debug, value, attrdb, rowID, setObj);
|
||
setWeapon(isActive, debug, value, extraarmIDs, rowID, sourceAttr, setObj, attrdb, attribute);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "telekinesis":
|
||
//setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
//setWeapon(isActive, debug, value, extraarmIDs, rowID, sourceAttr, setObj, attrdb, attribute);
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
break;
|
||
case "tough":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setDerivedValue(debug, attrdb, value, setObj, 'health');
|
||
break;
|
||
case "unassailable":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setDerivedValue(debug, attrdb, value, setObj, 'sanity');
|
||
break;
|
||
case "weapon":
|
||
setAttrdb(isActive, debug, value, attrdb, attrIDs, rowID, sourceAttr, attribute, setObj);
|
||
setWeapon(isActive, debug, value, extraarmIDs, rowID, sourceAttr, setObj, attrdb, attribute);
|
||
break;
|
||
default:
|
||
setActiveAttribute(isActive, debug, value, rowID, sourceAttr, setObj, attribute, level);
|
||
}
|
||
if (debug) console.log(`[setAttrEffects(${sourceAttr})] attribute = ${attribute}`);
|
||
setObj.attrdb = JSON.stringify(attrdb);
|
||
}
|
||
|
||
function setSwarmCritters(isActive, debug, value, attrdb, rowID, setObj){
|
||
const debugtext = '[setSwarmCritters()]';
|
||
const body = parseInt(value.stat_total_body);
|
||
const soul = parseInt(value.stat_total_soul);
|
||
const health = (body+soul)*5;
|
||
const wounds = parseInt(value.static_stat_total_wounds) || 0;
|
||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]);
|
||
const critters = isActive ? health * level : 0;
|
||
let swarmobj = _.find(attrdb.swarm, o => {
|
||
if(o.source == rowID) return true;
|
||
});
|
||
if(isActive){
|
||
setObj.stat_total_health = critters;
|
||
setObj.static_stat_total_wounds = wounds * level;
|
||
const writecritters = getIsObject(swarmobj) ?
|
||
swarmobj.critters = critters :
|
||
false;
|
||
}else{
|
||
setObj.stat_total_health = health;
|
||
setObj.static_stat_total_wounds = Math.round(wounds/level);
|
||
}
|
||
if(debug){
|
||
console.log(`${debugtext} health = ${setObj.stat_total_health}`);
|
||
console.log(`${debugtext} wounds = ${setObj.static_stat_total_wounds}`);
|
||
}
|
||
}
|
||
|
||
function getAllAspectStat(minorstat) {
|
||
const result =
|
||
/(str|agi|dex|con)/i.test(minorstat) ? 'body' :
|
||
/(int|rea|per|cre)/i.test(minorstat) ? 'mind' :
|
||
/(wil|cha|awa|com)/i.test(minorstat) ? 'soul' :
|
||
'';
|
||
return result;
|
||
}
|
||
|
||
function setDefectEffect(isActive, debug, attrIDs, attrdb, value, rowID, setObj, attribute) {
|
||
const defectdb = attrdb.defect;
|
||
const defectobj = _.find(defectdb, o => {
|
||
const result = o.source == rowID ? true : false;
|
||
return result;
|
||
});
|
||
switch(defectobj.name){
|
||
case "shortcoming":
|
||
setStatAspectLevel(debug, attrdb, value, defectdb, defectobj, setObj);
|
||
if(defectobj.aspect.length > 3) {
|
||
const statbase = getStatBase(debug, value, defectobj.aspect);
|
||
setStatAspectLevels(debug, attrdb, value, defectobj.aspect, statbase, setObj);
|
||
}
|
||
setStatAspectView(debug, attrdb, value, setObj);
|
||
break;
|
||
default: return;
|
||
}
|
||
}
|
||
|
||
function setPoolActive(isActive, value, sectionName, setObj){
|
||
const groupid = getGroupID(value, sectionName);
|
||
setObj[`static_${sectionName}group_${groupid}_active`] = isActive;
|
||
}
|
||
|
||
function setPoolMax(isActive, value, attrIDs, sectionName, rowID, setObj){
|
||
const groupid = getGroupID(value, sectionName);
|
||
const groupType = value[`static_${sectionName}group_${groupid}_type`];
|
||
const groupCost = _.chain(attrIDs)
|
||
.map(id=>{
|
||
id = id.toLowerCase();
|
||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||
const activated = parseInt(setObj[`repeating_attr_${id}_activate`]) ||
|
||
parseInt(value[`repeating_attr_${id}_activate`]);
|
||
const totalcost = parseInt(value[`repeating_attr_${id}_totalcost`]);
|
||
const appliedCost = group == groupid ?
|
||
id == rowID ? 0 :
|
||
groupType == 'power flux' ? activated ? totalcost : 0 :
|
||
totalcost : 0;
|
||
return appliedCost;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
const max = isActive ? groupType == 'power flux' ?
|
||
parseInt(value[`repeating_${sectionName}_${rowID}_effectivelevel`]) * 5 :
|
||
groupType == 'power variation' ? groupCost : 0 : 0;
|
||
setObj[`static_${sectionName}group_${groupid}_groupmax`] = max;
|
||
}
|
||
|
||
function convertAttrGroupCost(isActive, value, sectionName, attrIDs, rowID, setObj){
|
||
const groupid = getGroupID(value, sectionName);
|
||
const groupType = value[`static_${sectionName}group_${groupid}_type`];
|
||
const dynamicGroupCost = parseInt(value[`repeating_${sectionName}_${rowID}_totalcost`]);
|
||
const aggregateAttrCost = _.chain(attrIDs)
|
||
.map(id=>{
|
||
const group = parseInt(value[`repeating_${sectionName}_${id}_group`]);
|
||
const activated = parseInt(setObj[`repeating_${sectionName}_${id}_activate`]) ||
|
||
parseInt(value[`repeating_${sectionName}_${id}_activate`]);
|
||
const totalcost = parseInt(value[`repeating_${sectionName}_${id}_totalcost`]);
|
||
const appliedCost = group == groupid ? groupType == 'power flux' ? activated ? totalcost : 0 :
|
||
groupType == 'power variation' ? totalcost : 0 : 0;
|
||
return appliedCost;
|
||
})
|
||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||
.value();
|
||
if(isActive){
|
||
const groupcost = groupType == 'power flux' ? dynamicGroupCost :
|
||
groupType == 'power variation' ? aggregateAttrCost : 0;
|
||
setObj[`static_${sectionName}group_${groupid}_spent`] = aggregateAttrCost - dynamicGroupCost;
|
||
setObj[`static_${sectionName}group_${groupid}_groupcost`] = groupcost;
|
||
}else{
|
||
setObj[`static_${sectionName}group_${groupid}_spent`] = 0;
|
||
setObj[`static_${sectionName}group_${groupid}_groupcost`] = aggregateAttrCost;
|
||
}
|
||
}
|
||
|
||
function setSkillGroup(isActive, debug, value, rowID, setObj, level) {
|
||
const group = getCharacteristicSpecializationByAttr(debug, value, rowID, 'skill');
|
||
const groupmax = (isActive) ? level * 10 : 0;
|
||
const source = (isActive) ? rowID : "";
|
||
if (debug) {
|
||
console.log(`[setSkillGroup(${group})] groupmax = ${groupmax}`);
|
||
console.log(`[setSkillGroup(${group})] source = ${source}`);
|
||
}
|
||
setObj[`static_skillgroup_${group}_groupmax`] = groupmax;
|
||
setObj[`static_skillgroup_${group}_source`] = source;
|
||
}
|
||
|
||
function setSkillGroupMaxByLevelChange(isActive, debug, value, rowID, setObj){
|
||
const isSkillAttr = attribute => attribute=='skill' ? true: false;
|
||
if(isSkillAttr(value[`repeating_attr_${rowID}_attribute`])==false) return;
|
||
const groupid = parseInt(value[`repeating_attr_${rowID}_skillgroup`]);
|
||
const skillpointmax = isActive ?
|
||
parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) * 10 : 0;
|
||
setObj[`static_skillgroup_${groupid}_groupmax`] = skillpointmax;
|
||
if(debug){
|
||
console.log(`[setSkillGroupMaxByLevelChange()] groupid = ${groupid}`);
|
||
console.log(`[setSkillGroupMaxByLevelChange()] skillpointmax = ${skillpointmax}`);
|
||
}
|
||
}
|
||
|
||
function getIsSheetworker(sourceType) {
|
||
let result = (sourceType == `sheetworker`) ? true : false;
|
||
return result;
|
||
}
|
||
|
||
function getIsPlayer(sourceType) {
|
||
let result = (sourceType == `player`) ? true : false;
|
||
return result;
|
||
}
|
||
|
||
function getGroupValue(value, sectionName, groupID, sourceAttr, setObj) {
|
||
let result = setObj[`static_${sectionName}group_${groupID}_${sourceAttr}`] || value[`static_${sectionName}group_${groupID}_${sourceAttr}`];
|
||
result = (Number.isInteger(parseInt(result))) ? parseInt(result) : result;
|
||
return result;
|
||
}
|
||
|
||
function getAttrValue(value, source, sourceAttr, setObj) {
|
||
let result = setObj[`${source}_${sourceAttr}`] || value[`${source}_${sourceAttr}`];
|
||
result = (Number.isInteger(parseInt(result))) ? parseInt(result) : result;
|
||
return result;
|
||
}
|
||
|
||
function showAttrValues(value, source, sourceAttr, setObj) {
|
||
const attrs = [
|
||
"attrdefecttoggle",
|
||
"attribute",
|
||
"bonus",
|
||
"characteristic",
|
||
"costperlevel",
|
||
"customizations",
|
||
"damagetype",
|
||
"display",
|
||
"effect",
|
||
"effectivelevel",
|
||
"endurance",
|
||
"enhancementassignments",
|
||
"activate",
|
||
"fluxenable",
|
||
"group",
|
||
"isflux",
|
||
"level",
|
||
"limiterassignments",
|
||
"name",
|
||
"new",
|
||
"options",
|
||
"rollable",
|
||
"skill",
|
||
"stat",
|
||
"totalcost",
|
||
"visible"
|
||
];
|
||
var result = [];
|
||
_.each(attrs, (attr) => {
|
||
let attrValue = getAttrValue(value, source, attr, setObj),
|
||
tempObj = { "name": `${attr}`, "value": attrValue };
|
||
result[result.length] = tempObj;
|
||
});
|
||
}
|
||
|
||
function getCustomizationExists(customization, customizations) {
|
||
return customizations.find(o => o.name === customization);
|
||
}
|
||
|
||
function getCustomizationValue(debug, value, rowID, type, customization) {
|
||
// type = 'rank' || 'name';
|
||
const customizations = value[`repeating_attr_${rowID}_customizations`] || [],
|
||
match = customizations.find((o) => {
|
||
if (o.name === customization) return o;
|
||
}),
|
||
result = match === undefined ? 0 : match[`${type}`];
|
||
if (debug) console.log(`[getCustomizationValue(${customization})] ${type} = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setCustomization(debug, eventInfo, value, rowID, customization, setObj) {
|
||
const rank = parseInt(eventInfo.newValue);
|
||
let customizations = setObj[`repeating_attr_${rowID}_customizations`] || value[`repeating_attr_${rowID}_customizations`] || [];
|
||
if (!customizations.length) {
|
||
customizations[0] = { "name": customization, "rank": rank }; //create array with first entry
|
||
} else {
|
||
const result = customizations.find((o, i) => {
|
||
if (o.name === customization) {
|
||
if (rank > 0) {
|
||
//update existing element
|
||
customizations[i] = { "name": customization, "rank": rank };
|
||
} else {
|
||
//remove existing element
|
||
customizations.splice(i, 1);
|
||
}
|
||
return true;
|
||
}
|
||
});
|
||
if (result === undefined) customizations[customizations.length] = { "name": customization, "rank": rank }; //add new
|
||
}
|
||
setObj[`repeating_attr_${rowID}_customizations`] = customizations;
|
||
if (debug) {
|
||
console.log(`[setCustomization(${customization})] customizations:`); console.log(customizations);
|
||
}
|
||
}
|
||
|
||
function isEmpty(str) {
|
||
return (!str || str.length === 0);
|
||
}
|
||
|
||
function setEffectiveLevelByCustomization(debug, eventInfo, value, type, rowID, setObj) {
|
||
const newAssignment = parseInt(eventInfo.newValue) || 0,
|
||
prevAssignment = (parseInt(eventInfo.previousValue) == newAssignment) ? 0 : parseInt(eventInfo.previousValue) || 0,
|
||
diffAssignment = newAssignment - prevAssignment,
|
||
enhancements = parseInt(setObj[`repeating_attr_${rowID}_enhancementassignments`]) || parseInt(value[`repeating_attr_${rowID}_enhancementassignments`]) || 0,
|
||
limiters = parseInt(setObj[`repeating_attr_${rowID}_limiterassignments`]) || parseInt(value[`repeating_attr_${rowID}_limiterassignments`]) || 0,
|
||
level = parseInt(setObj[`repeating_attr_${rowID}_level`]) || parseInt(value[`repeating_attr_${rowID}_level`]) || 0,
|
||
customization = (type == "enhancement") ? enhancements + diffAssignment : limiters + diffAssignment,
|
||
effectivelevel = (type == "enhancement") ? level - (enhancements + diffAssignment) + limiters : level - enhancements + (limiters + diffAssignment);
|
||
setObj[`repeating_attr_${rowID}_${type}assignments`] = customization;
|
||
setObj[`repeating_attr_${rowID}_effectivelevel`] = effectivelevel;
|
||
if (debug) {
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] isEmpty(eventInfo.newValue) = ${isEmpty(eventInfo.newValue)}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] newAssignment = ${newAssignment}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] isEmpty(eventInfo.previousValue) = ${isEmpty(eventInfo.previousValue)}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] prevAssignment = ${prevAssignment}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] diffAssignment = ${diffAssignment}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] enhancements = ${enhancements}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] limiters = ${limiters}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] level = ${level}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] customization = ${customization}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] effectivelevel = ${effectivelevel}`);
|
||
console.log(`[setEffectiveLevelByCustomization(${type})] value:`); console.log(value);
|
||
}
|
||
}
|
||
|
||
function setEnhancement(debug, eventInfo, value, rowID, enhancement, setObj) {
|
||
let enhancements = value[`repeating_attr_${rowID}_enhancements`] || [];
|
||
const cust = getCustomizationExists(customization, customizations);
|
||
if (cust) {
|
||
let obj = customizations.find((o, i) => {
|
||
if (o.name === customization) {
|
||
customizations[i] = { name: customization, value: eventInfo.newValue };
|
||
return true;
|
||
}
|
||
});
|
||
} else { customizations[customizations.length] = { name: customization, value: eventInfo.newValue }; }
|
||
setObj[`repeating_attr_${rowID}_customizations`] = customizations;
|
||
if (debug) { console.log(`[getCustomization(${customization})] customizations:`); console.log(customizations); }
|
||
}
|
||
|
||
function setDamageType(debug, source, sourceAttr, setObj) {
|
||
const hasDamageType = /(weapon|armor)/i.test(`${sourceAttr}`);
|
||
let setDamageType = (hasDamageType) ? 0 : 1;
|
||
setObj[`${source}_damagetypeenable`] = setDamageType;
|
||
if (debug) console.log(`[setDamageType(${sourceAttr})] setDamageType = ${setDamageType}`);
|
||
}
|
||
|
||
function getIsDefense(debug, maneuver, sourceAttr) {
|
||
let result = /(defend|nothing|escape)/i.test(maneuver);
|
||
if (debug) console.log(`[getIsDefense(${sourceAttr})] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function getCV(debug, value, attrdb, setObj, sourceAttr, type, focus = 'unarmed', invertState = false) {
|
||
const mastery =
|
||
(type == 'acv') ? getSumOfActiveAttrLevels(attrdb, 'attackmastery') :
|
||
(type == 'dcv') ? getSumOfActiveAttrLevels(attrdb, 'defensemastery') :
|
||
0;
|
||
const isMelee =
|
||
getIsMelee(debug, focus);
|
||
const specialty =
|
||
(isMelee && type == 'acv') ? getSumOfActiveAttrLevels(attrdb, 'meleeattack', focus) * 2 :
|
||
(isMelee && type == 'dcv') ? getSumOfActiveAttrLevels(attrdb, 'meleedefense', focus) * 2 :
|
||
(!isMelee && type == 'acv') ? getSumOfActiveAttrLevels(attrdb, 'rangedattack', focus) * 2 :
|
||
(!isMelee && type == 'dcv') ? getSumOfActiveAttrLevels(attrdb, 'rangeddefense', focus) * 2 :
|
||
0;
|
||
const state =
|
||
(type == 'acv') ? parseInt(value.static_button_targeted_attack) :
|
||
(type == 'dcv') ? parseInt(value.static_button_targeted_defense) :
|
||
0;
|
||
const enemy =
|
||
(type == 'acv') ? getTargetedLevel(attrdb, 'enemyattack') * 2 :
|
||
(type == 'dcv') ? getTargetedLevel(attrdb, 'enemydefense') * 2 :
|
||
0;
|
||
const targeted =
|
||
(type == 'acv') ? (invertState && sourceAttr == 'attack') ? (state > 0) ?
|
||
0 : enemy : (state > 0) ? enemy : 0 :
|
||
(type == 'dcv') ? (invertState && sourceAttr == 'defense') ? (state > 0) ?
|
||
0 : enemy : (state > 0) ? enemy : 0 :
|
||
0;
|
||
const cv =
|
||
Math.round((parseInt(setObj.stat_total_body) + parseInt(setObj.stat_total_mind) +
|
||
parseInt(setObj.stat_total_soul)) / 3) ||
|
||
Math.round((parseInt(value.stat_total_body) + parseInt(value.stat_total_mind) +
|
||
parseInt(value.stat_total_soul)) / 3) ||
|
||
0;
|
||
const result =
|
||
cv + targeted + specialty + mastery;
|
||
if (debug) console.log(`[getCV(${type})] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setDice(mod, eo = 0) {
|
||
const total = mod + eo,
|
||
hl = (total > 0) ? 'kh2' : (total < 0) ? 'kl2' : '',
|
||
dice = (total > 1 || total < -1) ? 4 : (total == 1 || total == -1) ? 3 : 2,
|
||
result = `${dice}d6${hl}`;
|
||
return result;
|
||
}
|
||
|
||
function setActiveWeapon(debug, value, rowID, setObj) {
|
||
const state = parseInt(setObj[`${rowID}_state`]) || 0;
|
||
const result = state > 0 ? value[`${rowID}_source`] : '';
|
||
setObj.active_weapon = result;
|
||
if (debug){
|
||
console.log(`[setActiveWeapon()] rowID = ${rowID}`);
|
||
console.log(`[setActiveWeapon()] state = ${state}`);
|
||
console.log(`[setActiveWeapon()] result = ${result}`);
|
||
}
|
||
}
|
||
|
||
function getIsGrappling(maneuver) {
|
||
return /(bite|disarm|grab|lock|pin|throw)/i.test(maneuver);
|
||
}
|
||
|
||
function setCombatRoll(debug, value, attrdb, rowID, sourceAttr, setObj, invertState = false) {
|
||
const activeweapon = setObj.active_weapon;
|
||
const weapon =
|
||
_.find(attrdb.weapon, o => { if (o.source == activeweapon) return o; }) ||
|
||
_.find(attrdb.swarm, o => { if (o.source == activeweapon) return o; });
|
||
const isWeapon =
|
||
getIsObject(weapon);
|
||
const isSwarm =
|
||
getIsObject(_.find(attrdb.swarm, o => { if (o.source == activeweapon) return o; }));
|
||
const targetedmdState =
|
||
parseInt(value.static_button_targeted_damage) || 0;
|
||
const targetedmdLevel =
|
||
getTargetedLevel(attrdb, 'massivedamage') || 0;
|
||
const targetedmd =
|
||
invertState && sourceAttr == 'damage' ?
|
||
targetedmdState > 0 ? 0 : targetedmdLevel :
|
||
targetedmdState > 0 ? targetedmdLevel : 0;
|
||
const name =
|
||
isWeapon ? weapon.name : 'Unarmed';
|
||
const level =
|
||
isWeapon ? weapon.level :
|
||
getSumOfActiveSubAttrRanks(attrdb, 'combattechnique', 'brutal') || 0;
|
||
const weaponclass =
|
||
isWeapon ? weapon.focus : 'unarmed';
|
||
const damagetype =
|
||
isWeapon ? weapon.damagetype : 'blunt';
|
||
const isMelee =
|
||
getIsMelee(debug, weaponclass);
|
||
const muscle =
|
||
isMelee > 0 ? 1 :
|
||
_.find(weapon.customizations, o => { if (o.name == 'muscle') return 1; }) || 0;
|
||
const massivedamage =
|
||
getSumOfActiveAttrLevels(attrdb, 'massivedamage', weaponclass) || 0;
|
||
const superstrength =
|
||
getSumOfActiveAttrLevels(attrdb, 'superstrength') || 0;
|
||
const shockvalue = parseInt(value.stat_total_shock) || 0;
|
||
const forcefield = parseInt(value.protection_forcefield_ar) || 0;
|
||
const shield = parseInt(value.protection_shield_ar) || 0;
|
||
const armor1 = parseInt(value.protection_armor1_ar) || 0;
|
||
const armor2 = parseInt(value.protection_armor2_ar) || 0;
|
||
const armor3 = parseInt(value.protection_armor3_ar) || 0;
|
||
const mindshield = parseInt(value.protection_mindshield_ar) || 0;
|
||
const absorption1 = parseInt(value.protection_absorption1_ar) || 0;
|
||
const absorption2 = parseInt(value.protection_absorption2_ar) || 0;
|
||
const conversion = parseInt(value.protection_conversion_ar) || 0;
|
||
let maneuver =
|
||
setObj.static_activity_maneuver_name || value.static_activity_maneuver_name;
|
||
maneuver =
|
||
`${maneuver.replace(/\s+/g, '')}`;
|
||
const acv =
|
||
attack_maneuvers_regex.test(maneuver) ?
|
||
isSwarm ? parseInt(weapon.level) + 4 :
|
||
getCV(debug, value, attrdb, setObj, sourceAttr, 'acv', weaponclass) : 0;
|
||
const dcv =
|
||
defense_maneuvers_regex.test(maneuver) ?
|
||
isSwarm ? 0 :
|
||
getCV(debug, value, attrdb, setObj, sourceAttr, 'dcv', weaponclass) : 0;
|
||
let damage = isSwarm ?
|
||
Math.round(weapon.critters/10) :
|
||
((level + (superstrength * muscle) + massivedamage + targetedmd) * 5) + acv;
|
||
let edge =
|
||
(isWeapon) ? _.find(weapon.customizations, c => {
|
||
if (c.name == 'accurate') return true;
|
||
}) || { rank: 0 } : { rank: 0 };
|
||
let obstacle =
|
||
(isWeapon) ? _.find(weapon.customizations, c => {
|
||
if (c.name == 'inaccurate') return true;
|
||
}) || { rank: 0 } : { rank: 0 };
|
||
let rollmod =
|
||
edge.rank + obstacle.rank;
|
||
damage =
|
||
non_damaging_attack_regex.test(maneuver) ? 0 : damage;
|
||
rollmod =
|
||
minor_obstacle_maneuvers_regex.test(maneuver) ? rollmod - 1 :
|
||
major_obstacle_maneuvers_regex.test(maneuver) ? rollmod - 2 :
|
||
maneuver == 'disarm' && isMelee ? rollmod - 1 :
|
||
maneuver == 'disarm' ? rollmod - 2 :
|
||
rollmod;
|
||
const weakpoint =
|
||
maneuver == 'weakpoint' ?
|
||
`{{weakpoint=[[ [[?{Weak Point is|Large, ${setDice(rollmod, -2)}|Small, ${setDice(rollmod, -1)}|Tiny, ${setDice(rollmod, -1)}}]] ]] }}` :
|
||
'';
|
||
var result = `&{template:besmDefault} {{ismelee=${isMelee}}} {{character_name=@{charactername}}} {{pronoun=@{pronoun}}} {{maneuver=${maneuver}}} {{weapon_name=${name}}} {{shock=${shockvalue}}}`;
|
||
if (acv > 0) {
|
||
result = `${result} {{title=Attack}} {{attack=1}} {{target_name=@{target|charactername}}} {{acv=${acv}}} {{damage_type=${damagetype}}} {{damage2=${Math.round(damage * 0.25)}}} {{damage3=${Math.round(damage * 0.35)}}} {{damage4=${Math.round(damage * 0.45)}}} {{damage5=${Math.round(damage * 0.55)}}} {{damage6=${Math.round(damage * 0.65)}}} {{damage7=${Math.round(damage * 0.75)}}} {{damage8=${Math.round(damage * 0.9)}}} {{damage9=${Math.round(damage * 1.05)}}} {{damage10=${Math.round(damage * 1.2)}}} {{damage11=${Math.round(damage * 1.35)}}} {{damage12=${Math.round(damage * 1.5)}}}`;
|
||
if (isWeapon > 0){
|
||
_.each(weapon.customizations, customization => {
|
||
switch (customization.name) {
|
||
case 'ammo':
|
||
const ammunition = parseInt(value[`repeating_attr_${rowID}_ammo`]) || 0;
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{ammunition=${ammunition}}}`;
|
||
break;
|
||
case 'area':
|
||
const radius = get1or3(customization.rank, 3) * (10 ** (Math.ceil((customization.rank) / 2)));
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{radius=${radius}}}`;
|
||
break;
|
||
case 'backblast':
|
||
const bystander = customization.rank > 1 ? 'User and bystanders' :
|
||
customization.rank > 0 ? 'Bystanders only' : '';
|
||
result = `${result} {{bystander=${bystander}}} {{${customization.name}=${customization.rank}}} {{continuing2=${Math.round((damage * 0.25)/5)}}} {{continuing3=${Math.round((damage * 0.35)/5)}}} {{continuing4=${Math.round((damage * 0.45)/5)}}} {{continuing5=${Math.round((damage * 0.55)/5)}}} {{continuing6=${Math.round((damage * 0.65)/5)}}} {{continuing7=${Math.round((damage * 0.75)/5)}}} {{continuing8=${Math.round((damage * 0.9)/5)}}} {{continuing9=${Math.round((damage * 1.05)/5)}}} {{continuing10=${Math.round((damage * 1.2)/5)}}} {{continuing11=${Math.round((damage * 1.35)/5)}}} {{continuing12=${Math.round((damage * 1.5)/5)}}}`;
|
||
break;
|
||
case 'blight':
|
||
const blightrank = customization.rank > 2 ? 18 :
|
||
customization.rank > 1 ? 15 :
|
||
customization.rank > 0 ? 12 : 0;
|
||
result = `${result} {{${customization.name}=${blightrank}}}`;
|
||
break;
|
||
case 'continuing':
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{continuing2=${Math.round((damage * 0.25)/5)}}} {{continuing3=${Math.round((damage * 0.35)/5)}}} {{continuing4=${Math.round((damage * 0.45)/5)}}} {{continuing5=${Math.round((damage * 0.55)/5)}}} {{continuing6=${Math.round((damage * 0.65)/5)}}} {{continuing7=${Math.round((damage * 0.75)/5)}}} {{continuing8=${Math.round((damage * 0.9)/5)}}} {{continuing9=${Math.round((damage * 1.05)/5)}}} {{continuing10=${Math.round((damage * 1.2)/5)}}} {{continuing11=${Math.round((damage * 1.35)/5)}}} {{continuing12=${Math.round((damage * 1.5)/5)}}}`;
|
||
break;
|
||
case 'drain':
|
||
const draintype = value[`repeating_attr_${rowID}_draintype`] || '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{draintype=${draintype}}}`;
|
||
break;
|
||
case 'duration':
|
||
const timeobj = {
|
||
1:"2 rounds",
|
||
2:"5 rounds",
|
||
3:"10 rounds",
|
||
4:"1 minute",
|
||
5:"1 hour",
|
||
6:"1 day",
|
||
10:"Permanent"
|
||
};
|
||
const time = timeobj[customization.rank] || "0";
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{time=${time}}}`;
|
||
break;
|
||
case 'enervation':
|
||
result = `${result} {{${customization.name}=${customization.rank * 5}}}`;
|
||
break;
|
||
case 'flareaudible':
|
||
case 'flarescent':
|
||
case 'flaretactile':
|
||
case 'flaretaste':
|
||
case 'flarevisual':
|
||
const sense = customization.name.replace(/flare/g, '');
|
||
const obstacle = customization.rank > 2 ? 'Major' :
|
||
customization.rank > 1 ? 'Minor' : 'No';
|
||
result = `${result} {{flare=${customization.rank}}} {{sense=${sense}}} {{obstacle=${obstacle}}}`;
|
||
break;
|
||
case `flexible`:
|
||
rollmod = (getIsGrappling(maneuver)) ? rollmod - customization.rank : rollmod;
|
||
result = `${result} {{${customization.name}=${customization.rank}}}`;
|
||
break;
|
||
case `homing`:
|
||
rollmod = rollmod + customization.rank;
|
||
result = `${result} {{${customization.name}=${customization.rank}}}`;
|
||
break;
|
||
case `indirect`:
|
||
rollmod = rollmod - 1;
|
||
result = `${result} {{${customization.name}=${customization.rank}}}`;
|
||
break;
|
||
case 'incapacitating':
|
||
case 'irritant':
|
||
const hasobstacle = customization.rank > 2 ? 'major' :
|
||
customization.rank > 1 ? 'minor' : 'none';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{obstacle=${hasobstacle}}}`;
|
||
break;
|
||
case 'incurable':
|
||
const recovery = customization.rank > 2 ? 'special' :
|
||
customization.rank > 1 ? 'slow' : 'normal';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{recovery=${recovery}}}`;
|
||
break;
|
||
case 'knockback':
|
||
const kb = 1 << customization.rank -1;
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{kb=${kb}}}`;
|
||
break;
|
||
case 'nonpenetrating':
|
||
const wontpenetrate = parseInt(customization.rank * 10);
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{wontpenetrate=${wontpenetrate}}}`;
|
||
break;
|
||
case 'penetrating':
|
||
case 'piercing':
|
||
const penname = customization.name == 'penetrating' ? 'Armor' :
|
||
customization.name == 'piercing' ? 'Forcefield' : '';
|
||
const pen = customization.rank * 10;
|
||
const pentype = capital(customization.name);
|
||
result = `${result} {{penname=${penname}}} {{pentype=${pentype}}} {{pen=${pen}}}`;
|
||
break;
|
||
case 'quake':
|
||
const fissureobj = {
|
||
1:"2",
|
||
2:"5",
|
||
3:"10",
|
||
4:"30",
|
||
5:"100",
|
||
6:"300"
|
||
};
|
||
const fissure = fissureobj[customization.rank] || "0";
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{fissure=${fissure}}}`;
|
||
break;
|
||
case 'range':
|
||
const extended = getSumOfActiveSubAttrRanks(attrdb, 'combattechnique', 'extendedrange') || 0;
|
||
const distanceobj = {
|
||
1:3,
|
||
2:10,
|
||
3:100,
|
||
4:1,
|
||
5:10,
|
||
6:100
|
||
};
|
||
const distance = distanceobj[customization.rank] * (extended + 1) || "0";
|
||
const kilometers = customization.rank > 3 ? 'k' : '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{distance=${distance}}} {{kilometers=${kilometers}}}`;
|
||
break;
|
||
case 'stoppable':
|
||
const stopdamage = parseInt(value[`repeating_attr_${rowID}_level`]) * 10;
|
||
const timetostop = customization.rank > 3 ? '1 hour' :
|
||
customization.rank > 2 ? '1 minute' :
|
||
customization.rank > 1 ? '5 rounds' :
|
||
customization.rank > 0 ? '1 round' : '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{timetostop=${timetostop}}} {{stopdamage=${stopdamage}}}`;
|
||
break;
|
||
case 'tangle':
|
||
result = `${result} {{${customization.name}=${customization.rank * 5}}}`;
|
||
break;
|
||
case 'exclusive':
|
||
case 'targeted':
|
||
const hasenemy = value[`repeating_attr_${rowID}_enemy`] || '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{hasenemy=${hasenemy}}}`;
|
||
break;
|
||
case 'toxic':
|
||
const escapable = customization.rank > 1 ? 'Escapable' :
|
||
customization.rank > 0 ? 'Non-escapable' : '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{escapable=${escapable}}}`;
|
||
break;
|
||
case 'unreliable':
|
||
const failure = customization.rank > 1 ? `${customization.rank + 1} or less` :
|
||
customization.rank > 0 ? '2' : '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{failure=${failure}}}`;
|
||
break;
|
||
case 'vampiric':
|
||
const stolenhealth = customization.rank > 2 ? 'Increase' :
|
||
customization.rank > 0 ? 'Restore' : '';
|
||
result = `${result} {{${customization.name}=${customization.rank}}} {{stolenhealth=${stolenhealth}}}`;
|
||
break;
|
||
case 'autofire':
|
||
case 'contact':
|
||
case 'contagious':
|
||
case 'fieldless':
|
||
case 'helper':
|
||
case 'inconspicuous':
|
||
case 'insidious':
|
||
case 'multidimensional':
|
||
case 'nostun':
|
||
case 'psychic':
|
||
case 'reach':
|
||
case 'selective':
|
||
case 'spreading':
|
||
case 'stunonly':
|
||
result = `${result} {{${customization.name}=${customization.rank}}}`;
|
||
}
|
||
});
|
||
}
|
||
result = `${result} {{total=[[[[?{Roll is|Normal, ${setDice(rollmod)}|Minor Edge, ${setDice(rollmod, 1)}|Minor Obstacle, ${setDice(rollmod, -1)}|Major Edge, ${setDice(rollmod, 2)}|Major Obstacle, ${setDice(rollmod, -2)}}]]+[[${acv}]]]]}} {{roll=$[[0]]}}`;
|
||
} else if (dcv > 0) {
|
||
if (maneuver == 'defendother') result = `${result} {{target_name=@{target|charactername}}}`;
|
||
result = `${result} {{dcv=${dcv}}} {{title=Defend}} {{defense=1}} {{total=[[[[?{Roll is|Normal, ${setDice(rollmod)}|Minor Edge, ${setDice(rollmod, 1)}|Minor Obstacle, ${setDice(rollmod, -1)}|Major Edge, ${setDice(rollmod, 2)}|Major Obstacle, ${setDice(rollmod, -2)}}]]+[[${dcv}]]]]}} {{roll=$[[0]]}}`;
|
||
if(forcefield > 0) result = `${result} {{forcefield=${forcefield}}}`;
|
||
if(armor1 > 0) result = `${result} {{armor1=${armor1}}}`;
|
||
if(armor2 > 0) result = `${result} {{armor2=${armor2}}}`;
|
||
if(armor3 > 0) result = `${result} {{armor3=${armor3}}}`;
|
||
if(mindshield > 0) result = `${result} {{mindshield=${mindshield}}}`;
|
||
if(absorption1 > 0) result = `${result} {{absorption1=${absorption1}}}`;
|
||
if(absorption2 > 0) result = `${result} {{absorption2=${absorption2}}}`;
|
||
if(conversion > 0) result = `${result} {{conversion=${conversion}}}`;
|
||
} else {
|
||
result = `&{template:besmDefault} {{character_name=@{charactername}}} {{maneuver=${sourceAttr}}} {{doesnothing=1}} {{title=Does Nothing}}`;
|
||
if(forcefield > 0) result = `${result} {{forcefield=${forcefield}}}`;
|
||
if(shield > 0) result = `${result} {{shield=${shield}}}`;
|
||
if(armor1 > 0) result = `${result} {{armor1=${armor1}}}`;
|
||
if(armor2 > 0) result = `${result} {{armor2=${armor2}}}`;
|
||
if(armor3 > 0) result = `${result} {{armor3=${armor3}}}`;
|
||
if(mindshield > 0) result = `${result} {{mindshield=${mindshield}}}`;
|
||
if(absorption1 > 0) result = `${result} {{absorption1=${absorption1}}}`;
|
||
if(absorption2 > 0) result = `${result} {{absorption2=${absorption2}}}`;
|
||
if(conversion > 0) result = `${result} {{conversion=${conversion}}}`;
|
||
}
|
||
if (debug){
|
||
console.log(`[setCombatRoll()] activeweapon = ${activeweapon}`);
|
||
console.log(`[setCombatRoll()] weapon = ${weapon}`);
|
||
console.log(`[setCombatRoll()] isWeapon = ${isWeapon}`);
|
||
console.log(`[setCombatRoll()] isSwarm = ${isSwarm}`);
|
||
console.log(`[setCombatRoll()] targetedmdState = ${targetedmdState}`);
|
||
console.log(`[setCombatRoll()] targetedmdLevel = ${targetedmdLevel}`);
|
||
console.log(`[setCombatRoll()] targetedmd = ${targetedmd}`);
|
||
console.log(`[setCombatRoll()] name = ${name}`);
|
||
console.log(`[setCombatRoll()] level = ${level}`);
|
||
console.log(`[setCombatRoll()] weaponclass = ${weaponclass}`);
|
||
console.log(`[setCombatRoll()] damagetype = ${damagetype}`);
|
||
console.log(`[setCombatRoll()] isMelee = ${isMelee}`);
|
||
console.log(`[setCombatRoll()] muscle = ${muscle}`);
|
||
console.log(`[setCombatRoll()] massivedamage = ${massivedamage}`);
|
||
console.log(`[setCombatRoll()] superstrength = ${superstrength}`);
|
||
console.log(`[setCombatRoll()] shockvalue = ${shockvalue}`);
|
||
console.log(`[setCombatRoll()] maneuver = ${maneuver}`);
|
||
console.log(`[setCombatRoll()] acv = ${acv}`);
|
||
console.log(`[setCombatRoll()] dcv = ${dcv}`);
|
||
console.log(`[setCombatRoll()] damage = ${damage}`);
|
||
console.log(`[setCombatRoll()] edge:`); console.log(edge);
|
||
console.log(`[setCombatRoll()] obstacle:`); console.log(obstacle);
|
||
console.log(`[setCombatRoll()] rollmod = ${rollmod}`);
|
||
console.log(`[setCombatRoll()] damage = ${damage}`);
|
||
console.log(`[setCombatRoll()] rollmod = ${rollmod}`);
|
||
console.log(`[setCombatRoll()] result = ${result}`);
|
||
}
|
||
setObj.maneuverroll = result;
|
||
}
|
||
/*
|
||
function getAttrStatValue(debug, value, rowID) {
|
||
const stat = value[`repeating_attr_${rowID}_stat`];
|
||
const statvalue = parseInt(value[`stat_total_${stat}`]);
|
||
if(debug) console.log(`[getAttrStatValue(${stat})] statvalue = ${statvalue}`);
|
||
return statvalue;
|
||
}
|
||
*/
|
||
function getDefaultSkillStats(debug, value, skill){
|
||
const json = JSON.parse(global_templates_skills_json);
|
||
const skills = json.template;
|
||
const type = value.static_stat_type_set;
|
||
const stat = _.find(skills,s=>{
|
||
const search = s.name==skill ? true: false;
|
||
return search;
|
||
});
|
||
if(debug){
|
||
console.log(`[getSkillStats(${skill})] stat:`);
|
||
console.log(stat);
|
||
}
|
||
return stat[`stat${type}`];
|
||
}
|
||
|
||
function getSelectedSkillStats(debug, eventInfo, value, rowID, sourceAttr){
|
||
var result = [];
|
||
const type = value.static_stat_type_set==major ?
|
||
allaspects_stats_array: major_stats_array;
|
||
const stats = _.each(type, stat=>{
|
||
const state = stat==sourceAttr ?
|
||
eventInfo.newValue: value[`repeating_skill_${rowID}_${stat}state`];
|
||
if(state>0) result[result.length] = stat;
|
||
});
|
||
if(debug){
|
||
console.log(`[getSelectedSkillStats()] result:`);
|
||
console.log(result);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function getSkillStatValue(value, rowID, setObj){
|
||
const type = getStatType(value);
|
||
const statarray = type.major=1 ? major_stats_array: allaspects_stats_array;
|
||
}
|
||
|
||
function setSizeTemplate(value, sizetempateIDs, rowID, setObj) {
|
||
_.each(sizetempateIDs, templateID => {
|
||
if (templateID!=rowID) setObj[`repeating_sizetemplate_${templateID}_selection`] = 0;
|
||
});
|
||
setObj.size = value[`repeating_sizetemplate_${rowID}_label`];
|
||
setObj.height = value[`repeating_sizetemplate_${rowID}_height`];
|
||
setObj.mass = value[`repeating_sizetemplate_${rowID}_mass`];
|
||
setObj.size_lift = value[`repeating_sizetemplate_${rowID}_lift`];
|
||
setObj.size_strdmg = value[`repeating_sizetemplate_${rowID}_strdmg`];
|
||
setObj.size_ar = value[`repeating_sizetemplate_${rowID}_ar`];
|
||
setObj.size_extradmg = value[`repeating_sizetemplate_${rowID}_extradmg`];
|
||
setObj.size_rnghitdef = value[`repeating_sizetemplate_${rowID}_rnghitdef`];
|
||
setObj.size_rngspd = value[`repeating_sizetemplate_${rowID}_rngspd`];
|
||
}
|
||
|
||
function writeHiddenDamageAttributes(setObj) {
|
||
var damage = [];
|
||
for (let i = 2; i == 12; i++) {
|
||
damage[damage.length] = `damage${i}`;
|
||
}
|
||
_.each(damage, (obj) => {
|
||
setObj[`${obj}`] = 0;
|
||
});
|
||
}
|
||
|
||
function disableActiveWeapon(debug, value, rowID, setObj) {
|
||
const state = parseInt(setObj[`repeating_attr_${rowID}_activate`]) ||
|
||
parseInt(value[`repeating_attr_${rowID}_activate`]);
|
||
const activeweapon = value.active_weapon;
|
||
if (!state) return;
|
||
if (activeweapon == rowID) {
|
||
setObj.active_weapon = '';
|
||
}
|
||
if (debug) {
|
||
console.log(`[disableActiveWeapon()] state = ${state}`);
|
||
console.log(`[disableActiveWeapon()] activeweapon = ${activeweapon}`);
|
||
}
|
||
}
|
||
|
||
function setButtonState(debug, value, source, rowID, sourceAttr, setObj) {
|
||
const theme = parseInt(value.theme),
|
||
attribute = sourceAttr,
|
||
setstate = value[`${source}_${attribute}`],
|
||
state = (setstate == 0) ? 1 : 0,
|
||
counterstate = state==0 ? 1 : 0,
|
||
counterdefense = rowID=='personal' ? 'movement': rowID=='movement' ? 'personal': '';
|
||
if (debug) {
|
||
console.log(`[setButtonState(${sourceAttr})] setstate = ${setstate}`);
|
||
console.log(`[setButtonState(${sourceAttr})] ${source}_${attribute} = ${state}`);
|
||
}
|
||
setObj[`${source}_${attribute}`] = state;
|
||
setObj[`${source}_activatetheme`] = theme;
|
||
if(counterdefense.length>0) setObj[`static_button_${counterdefense}_defense`] = counterstate;
|
||
return state;
|
||
}
|
||
|
||
function buildHandsArray(debug, extraarmIDs){
|
||
let result = ['mainhand', 'offhand'];
|
||
const extrahands = _.map(extraarmIDs, id => {
|
||
return `repeating_extraarm_${id}`;
|
||
});
|
||
result = result.concat(extrahands);
|
||
if(debug) {
|
||
console.log(`[buildHandsArray()] result:`);
|
||
console.log(result);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function getHandSource(debug, rowID){
|
||
const result = /(mainhand|offhand)/i.test(rowID) ?
|
||
rowID : `repeating_extraarm_${rowID}`;
|
||
if(debug) console.log(`[getHandSource()] result = ${result}`);
|
||
return result;
|
||
}
|
||
|
||
function setWeaponStates(debug, extraarmIDs, value, rowID, setObj) {
|
||
const armedID = setObj[`${rowID}_source`] ||
|
||
value[`${rowID}_source`] || '';
|
||
const handsArray = buildHandsArray(debug, extraarmIDs);
|
||
const handsStateArray = _.map(handsArray, hand => {
|
||
const source = value[`${hand}_source`];
|
||
const state = parseInt(value[`${hand}_state`]);
|
||
const handstate = source == armedID ?
|
||
state == 0 ? 1 : 0 : 0;
|
||
return handstate;
|
||
});
|
||
if(debug){
|
||
console.log(`[setWeaponStates()] rowID = ${rowID}`);
|
||
console.log(`[setWeaponStates()] armedID = ${armedID}`);
|
||
console.log(`[setWeaponStates()] handsStateArray:`);
|
||
console.log(handsStateArray);
|
||
}
|
||
_.each(handsArray, (hand, i) => {
|
||
setObj[`${hand}_state`] = handsStateArray[i];
|
||
});
|
||
}
|
||
|
||
function getStatStateArray(debug, value, sourceAttr, setObj, type, source = '') {
|
||
const stats = type.major == 1 ? major_stats_array: allaspects_stats_array;
|
||
const skill = source.length>0 ? `${source}_`: '';
|
||
let result = [];
|
||
_.each(stats, (stat) => {
|
||
result[result.length] = (sourceAttr == stat.toLowerCase()) ?
|
||
parseInt(setObj[`${skill}${stat.toLowerCase()}state`]) || 0 :
|
||
parseInt(value[`${skill}${stat.toLowerCase()}state`]) || 0;
|
||
});
|
||
if(debug){
|
||
console.log(`[getStatStateArray(${type})] stats = ${stats}`);
|
||
console.log(`[getStatStateArray(${type})] result = ${result}`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function getStatValuesArray(value, type) {
|
||
const stats = type.major == 1 ? major_stats_array: allaspects_stats_array;
|
||
let result = [];
|
||
_.each(stats, (stat) => {
|
||
result[result.length] = parseInt(value[`stat_total_${stat.toLowerCase()}`]) || 0;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function getStateDenominator(states) {
|
||
var result = 0;
|
||
_.each(states, (state) => { result = result + state; });
|
||
return result;
|
||
}
|
||
|
||
function getActivatedStatsBase(debug, states, values, denominator) {
|
||
const statsActivated = _.map(values, (v, i) => { return v * states[i]; });
|
||
const statsSum = statsActivated.reduce((a, b) => a + b, 0);
|
||
const result = (denominator > 0) ? Math.round(statsSum / denominator) : 0;
|
||
if(debug){
|
||
console.log(`[getActivatedStatsBase()] statsActivated = ${statsActivated}`);
|
||
console.log(`[getActivatedStatsBase()] statsSum = ${statsSum}`);
|
||
console.log(`[getActivatedStatsBase()] result = ${result}`);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function clearStatStates(type, setObj) {
|
||
//type = major or minor
|
||
const stattype = (type.major==1) ? major_stats_array : allaspects_stats_array;
|
||
_.each(stattype, (stat) => { setObj[`${stat.toLowerCase()}state`] = 0; });
|
||
}
|
||
|
||
function getStatRollBase(debug, value, sourceAttr, setObj, type, source = '') {
|
||
const statStates = getStatStateArray(debug, value, sourceAttr, setObj, type, source),
|
||
statValues = getStatValuesArray(value, type),
|
||
denominator = getStateDenominator(statStates),
|
||
base = getActivatedStatsBase(debug, statStates, statValues, denominator);
|
||
if(debug){
|
||
console.log(`[getStatRollBase()] statStates = ${statStates}`);
|
||
console.log(`[getStatRollBase()] statValues = ${statValues}`);
|
||
console.log(`[getStatRollBase()] denominator = ${denominator}`);
|
||
console.log(`[getStatRollBase()] base = ${base}`);
|
||
}
|
||
return base;
|
||
}
|
||
|
||
function getRollString(debug, category, type, title, base, rollmod=0, initiative=false){
|
||
const turntracker = initiative ? '&{tracker}': '';
|
||
const rollstring = `&{template:besmDefault} {{${category}=1}} {{${type}=1}} ` +
|
||
`{{title=${title}}} {{character_name=@{charactername}}} {{pronoun=@{pronoun}}} ` +
|
||
`{{base=${base}}} {{total=[[[[?{Roll is|Normal, ${setDice(rollmod)}` +
|
||
`|Minor Edge, ${setDice(rollmod, 1)}|Minor Obstacle, ${setDice(rollmod, -1)}` +
|
||
`|Major Edge, ${setDice(rollmod, 2)}|Major Obstacle, ${setDice(rollmod, -2)}}]]` +
|
||
`+[[${base}]] ${turntracker}]]}} {{roll=$[[0]]}}`;
|
||
if(debug) console.log(`[getRollString()] rollstring = ${rollstring}`);
|
||
return rollstring;
|
||
}
|
||
|
||
function setSkillRoll(debug, value, source, rowID, sourceAttr, level, setObj, type) {
|
||
const base = getStatRollBase(debug, value, sourceAttr, setObj, type, source);
|
||
const roll = getRollString(debug, 'rolls', 'skillroll', 'Skill Roll', base + level);
|
||
setObj[`repeating_skill_${rowID}_skillrollvalue`] = roll;
|
||
if(debug){
|
||
console.log(`[setSkillRoll()] base = ${base}`);
|
||
console.log(`[setSkillRoll()] roll = ${roll}`);
|
||
}
|
||
}
|
||
|
||
function setStatRoll(debug, value, sourceAttr, setObj, type) {
|
||
const base = getStatRollBase(debug, value, sourceAttr, setObj, type);
|
||
const roll = getRollString(debug, 'rolls', 'statroll', 'Stat Roll', base);
|
||
const clearstatselections = setObj.static_stat_type_set != undefined ?
|
||
clearStatStates(getStatType(value), setObj) :
|
||
false;
|
||
setObj.dynamic_roll_base = base;
|
||
setObj.dynamic_roll_value = roll;
|
||
if(debug){
|
||
console.log(`[setStatRoll()] base = ${base}`);
|
||
console.log(`[setStatRoll()] roll = ${roll}`);
|
||
}
|
||
}
|
||
|
||
function buildStatButtonStatesArray() {
|
||
let result = [];
|
||
const majorAndMinorArray = allaspects_stats_array.concat(major_stats_array);
|
||
_.each(majorAndMinorArray, (stat) => {
|
||
result[result.length] = `${stat.toLowerCase()}state`;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
function setSkillStatButtonState(debug, value, match, sourceAttr, setObj) {
|
||
const skillStatButtonState = button => allaspects_stats_regex.test(button) ||
|
||
major_stats_regex.test(button) ? parseInt(value[`${match}state`]) > 0 ?
|
||
setObj[`${match}state`] = 0 :
|
||
setObj[`${match}state`] = 1 :
|
||
false;
|
||
if (skillStatButtonState(sourceAttr) === false) return;
|
||
if (debug){
|
||
console.log(`[setSkillStatButtonState(${sourceAttr})] = ` +
|
||
setObj[`${match}state`]);
|
||
}
|
||
}
|
||
|
||
function setStatButtonStatsAndRolls(debug, eventInfo, value, rowID, sourceAttr, setObj) {
|
||
const statButtonState = button => button == 'stat' ?
|
||
parseInt(value[`${sourceAttr}state`]) > 0 ?
|
||
setObj[`${sourceAttr}state`] = 0 :
|
||
setObj[`${sourceAttr}state`] = 1 :
|
||
false;
|
||
if (statButtonState(rowID) === false) return;
|
||
if (debug) console.log(`[setStatButtonStatsAndRolls(${sourceAttr})] statButtonState = ` + setObj[`${sourceAttr}state`]);
|
||
const isMajorAspectStat = button => allaspects_stats_regex.test(button) ?
|
||
setStatRoll(debug, value, sourceAttr, setObj, getStatType(value)) : major_stats_regex.test(button) ?
|
||
setStatRoll(debug, value, sourceAttr, setObj, getStatType(value)) : false;
|
||
isMajorAspectStat(eventInfo.triggerName);
|
||
}
|
||
|
||
function setSkillCostBySpecilizationChange(debug, eventInfo, value, sectionName, rowID, setObj){
|
||
const count = input => (input.match(/,/g) || []).length;
|
||
const newcost = eventInfo.newValue === undefined ? 0 :
|
||
count(eventInfo.newValue);
|
||
const prevcost = eventInfo.previousValue === undefined ? 0 :
|
||
count(eventInfo.previousValue);
|
||
const appliedcost = newcost - prevcost;
|
||
const totalcost = parseInt(value[`repeating_skill_${rowID}_totalcost`]) || 0;
|
||
if(debug) console.log(`[setSkillCostBySpecilizationChange()] appliedcost = ${appliedcost}`);
|
||
setObj[`repeating_skill_${rowID}_totalcost`] = totalcost + appliedcost;
|
||
setSkillGroupCost(value, sectionName, appliedcost, setObj);
|
||
}
|
||
|
||
function setSkillGroupCost(value, sectionName, cost, setObj){
|
||
const groupID = getGroupID(value, sectionName);
|
||
const groupcost = parseInt(value[`static_skillgroup_${groupID}_groupcost`]);
|
||
setObj[`static_skillgroup_${groupID}_groupcost`] = groupcost + cost;
|
||
}
|
||
|
||
function createSkill(debug, value, source, setObj){
|
||
let group = getGroupID(value, 'skill');
|
||
let label = value[`${source}_label`];
|
||
let cost = value[`${source}_cost`];
|
||
let specializations = value[`${source}_specializations`];
|
||
let statallaspect = value[`${source}_statallaspect`];
|
||
let statmajor = value[`${source}_statmajor`];
|
||
const statarray = statallaspect.concat(statmajor);
|
||
const rowID = generateRowID();
|
||
const type = getStatType(value);
|
||
_.each(statarray,stat=>{
|
||
setObj[`repeating_skill_${rowID}_${stat}state`] = 1;
|
||
});
|
||
let stats = type.major==1 ? statmajor: statallaspect;
|
||
const sum = _.chain(stats)
|
||
.map(stat=>{
|
||
return parseInt(value[`stat_total_${stat}`]);
|
||
})
|
||
.reduce((memo,stat)=>{
|
||
return memo + stat;
|
||
})
|
||
.value();
|
||
const base = sum / stats.length;
|
||
let roll = `&{template:besmDefault} {{rolls=1}} {{skillroll=1}} {{title=Skill Roll}} {{character_name=@{charactername}}} {{pronoun=@{pronoun}}} {{skill=${label}}} {{level=0}} {{base=${base}}} {{total=[[ [[?{Roll is|Normal, 2d6|Minor Edge, 3d6kh2|Minor Obstacle, 3d6kl2|Major Edge, 4d6kh2|Major Obstacle, 4d6kl2}]] + [[${base}]] ]]}} {{roll=$[[0]]}}`;
|
||
if (debug) {
|
||
console.log(`[createSkill()] group = ${group}`);
|
||
console.log(`[createSkill()] label = ${label}`);
|
||
console.log(`[createSkill()] costperlevel = ${cost}`);
|
||
console.log(`[createSkill()] specializations = ${specializations}`);
|
||
console.log(`[createSkill()] statallaspect = ${statallaspect}`);
|
||
console.log(`[createSkill()] statmajor = ${statmajor}`);
|
||
console.log(`[createSkill()] stats = ${stats}`);
|
||
console.log(`[createSkill()] sum = ${sum}`);
|
||
console.log(`[createSkill()] base = ${base}`);
|
||
console.log(`[createSkill()] roll = ${roll}`);
|
||
}
|
||
setObj[`repeating_skill_${rowID}_group`] = group;
|
||
setObj[`repeating_skill_${rowID}_name`] = label;
|
||
setObj[`repeating_skill_${rowID}_costperlevel`] = cost;
|
||
setObj[`repeating_skill_${rowID}_skillspecilizations`] = specializations;
|
||
setObj[`repeating_skill_${rowID}_majorstats`] = type.major;
|
||
setObj[`repeating_skill_${rowID}_minorstats`] = type.minor;
|
||
setObj[`repeating_skill_${rowID}_stat`] = getSkillStatsDisplay(stats);
|
||
setObj[`repeating_skill_${rowID}_skillrollvalue`] = roll;
|
||
setObj.skillmanagement = 0;
|
||
}
|
||
|
||
function buildSkillTemplateValuesArray(rowID){
|
||
const result = [
|
||
`repeating_skilltemplate_${rowID}_label`,
|
||
`repeating_skilltemplate_${rowID}_cost`,
|
||
`repeating_skilltemplate_${rowID}_specializations`,
|
||
`repeating_skilltemplate_${rowID}_statallaspect`,
|
||
`repeating_skilltemplate_${rowID}_statmajor`
|
||
];
|
||
return result;
|
||
}
|
||
|
||
function createAttrdbJSON(setObj) {
|
||
var attrdb = {};
|
||
const attributes = _.map(all_attributes_array, attr => {
|
||
return removeWhiteSpace(attr);
|
||
});
|
||
_.each(attributes, (attribute) => {
|
||
attrdb[`${attribute}`] = [];
|
||
});
|
||
setObj.attrdb = JSON.stringify(attrdb);
|
||
}
|
||
|
||
function registerRemoved(){
|
||
const eventsToRegister = [
|
||
'repeating_attr',
|
||
'repeating_skill',
|
||
'repeating_defect'
|
||
];
|
||
const eventString = eventsToRegister.join(" remove:");
|
||
return eventString;
|
||
}
|
||
|
||
function registerEvents() {
|
||
const eventsToRegister = [
|
||
"static_activity_maneuver_name",
|
||
"static_stat_type_set",
|
||
"static_roll_type_selection",
|
||
"static_stat_temp_health",
|
||
"static_stat_temp_energy",
|
||
"static_stat_total_wounds",
|
||
"static_stat_total_fatigue",
|
||
"static_stat_total_maddness",
|
||
"static_stat_total_shame",
|
||
"repeating_attr",
|
||
"repeating_skill",
|
||
"repeating_sizetemplate",
|
||
"static_stat_base_body",
|
||
"static_stat_base_mind",
|
||
"static_stat_base_soul",
|
||
"mainhand_state",
|
||
"offhand_state",
|
||
"static_attrgroup_selected_tab",
|
||
"static_skillgroup_selected_tab",
|
||
"static_attrgroup_1_groupmax",
|
||
"static_attrgroup_2_groupmax",
|
||
"static_attrgroup_3_groupmax",
|
||
"static_attrgroup_4_groupmax",
|
||
"static_attrgroup_5_groupmax",
|
||
"static_attrgroup_6_groupmax",
|
||
"static_attrgroup_7_groupmax",
|
||
"static_attrgroup_8_groupmax",
|
||
"static_attrgroup_9_groupmax",
|
||
"static_attrgroup_10_groupmax"
|
||
],
|
||
eventString = eventsToRegister.join(" change:");
|
||
return eventString;
|
||
};
|
||
|
||
function getStatButtons() {
|
||
let result = _.chain([allaspects_stats_array, major_stats_array, conditions_array])
|
||
.flatten()
|
||
.map((stat) => { return `static_button_stat_${stat.toLowerCase()}` })
|
||
.value();
|
||
return result;
|
||
}
|
||
|
||
function getSkillStatButtons() {
|
||
let result = _.chain([allaspects_stats_array, major_stats_array])
|
||
.flatten()
|
||
.map((stat) => { return `${stat.toLowerCase()}` })
|
||
.value();
|
||
return result;
|
||
}
|
||
|
||
function registerActions() {
|
||
const statButtons = getStatButtons().concat(getSkillStatButtons()),
|
||
buttonsToRegister = [
|
||
"repeating_attr:setlock",
|
||
"repeating_attr:activate",
|
||
"repeating_skilltemplate:addskill",
|
||
"repeating_extraarm:armedstate",
|
||
"repeating_skill",
|
||
"static_button_targeted_damage",
|
||
"static_button_targeted_attack",
|
||
"static_button_targeted_defense",
|
||
"static_button_movement_defense",
|
||
"static_button_personal_defense",
|
||
"static_button_mainhand_armedstate",
|
||
"static_button_offhand_armedstate"
|
||
].concat(statButtons),
|
||
buttonString = `clicked:${buttonsToRegister.join(" clicked:")}`;
|
||
return buttonString;
|
||
}
|
||
|
||
const events = `change:${registerEvents()} clicked:${registerActions()} remove:${registerRemoved()}`;
|
||
const buttons = [
|
||
"attrgroup1",
|
||
"attrgroup2",
|
||
"attrgroup3",
|
||
"attrgroup4",
|
||
"attrgroup5",
|
||
"attrgroup6",
|
||
"attrgroup7",
|
||
"attrgroup8",
|
||
"attrgroup9",
|
||
"attrgroup10",
|
||
"skillgroup1",
|
||
"skillgroup2",
|
||
"skillgroup3",
|
||
"skillgroup4",
|
||
"skillgroup5",
|
||
];
|
||
|
||
on("sheet:opened", () => {
|
||
getAttrs(on_sheet_open_array, (value) => {
|
||
var setObj = {};
|
||
if (value.global_initialized != 1) {
|
||
buildSizeUI(global_templates_size_names, setObj);
|
||
buildSkillsUI();
|
||
writeHiddenDamageAttributes(setObj);
|
||
createAttrdbJSON(setObj);
|
||
setObj.global_initialized = 1;
|
||
}else{
|
||
doUpgrade(value, setObj);
|
||
}
|
||
setAttrs(setObj);
|
||
});
|
||
});
|
||
|
||
on("clicked:attrgroup1 clicked:attrgroup2 clicked:attrgroup3 clicked:attrgroup4 clicked:attrgroup5 clicked:attrgroup6 clicked:attrgroup7 clicked:attrgroup8 clicked:attrgroup9 clicked:attrgroup10 clicked:skillgroup1 clicked:skillgroup2 clicked:skillgroup3 clicked:skillgroup4 clicked:skillgroup5", (eventInfo) => {
|
||
const button = eventInfo.triggerName.substring(8, eventInfo.triggerName.length);
|
||
const section = button.replace(/[0-9]/g, "");
|
||
let setObj = [];
|
||
setObj[`static_${section}_selected_tab`] = button;
|
||
setAttrs(setObj);
|
||
return;
|
||
});
|
||
|
||
on(events, (eventInfo) => {
|
||
|
||
/** Script Main **/
|
||
const isRemoved = /remove/i.test(eventInfo.triggerName);
|
||
var removedInfo = isRemoved ? eventInfo.removedInfo : {};
|
||
eventInfo.sourceAttribute = isRemoved ? `${eventInfo.sourceAttribute}_removed` :
|
||
eventInfo.sourceAttribute;
|
||
|
||
if(eventInfo.sourceAttribute === undefined){
|
||
eventInfo.sourceAttribute = eventInfo.triggerName.substring(8, eventInfo.triggerName.length);
|
||
}
|
||
if(/clicked/i.test(eventInfo.triggerName)){
|
||
if(/repeating_skill_/i.test(eventInfo.triggerName)){
|
||
const button = eventInfo.htmlAttributes.name.substring(3,eventInfo.htmlAttributes.name.length);
|
||
eventInfo.sourceAttribute = `${eventInfo.sourceAttribute}${button}`;
|
||
}
|
||
}
|
||
setPreviousValue(eventInfo);
|
||
console.log(`[Event Listener] eventInfo:`); console.log(eventInfo);
|
||
|
||
eventInfo.sourceAttribute.replace(/^((.+?)_(.+?)_(.+?))_(.+)/, (match, source, sourceType, sectionName, rowID, sourceAttr) => {
|
||
|
||
const originalCaseRowID = rowID;
|
||
source = source.toLowerCase();
|
||
match = match.toLowerCase();
|
||
rowID = rowID.toLowerCase();
|
||
|
||
console.log(`match = ${match}`);
|
||
console.log(`source = ${source}`);
|
||
console.log(`sourceType = ${sourceType}`);
|
||
console.log(`sectionName = ${sectionName}`);
|
||
console.log(`rowID = ${rowID}`);
|
||
console.log(`sourceAttr = ${sourceAttr}`);
|
||
|
||
if (`${sourceType}` == `repeating` && /(costperlevel|visible|new|source|characteristic|rollable|attrdefecttoggle|damagetype)/i.test(`${sourceAttr}`)) return;
|
||
|
||
var getAttrsString = [`show_debug_messages`];
|
||
var setObj = {};
|
||
|
||
getSectionIDs('attr', attrIDs => {
|
||
getSectionIDs('skill', skillIDs => {
|
||
getSectionIDs('extraarm', extraarmIDs => {
|
||
getSectionIDs('sizetemplate', sizetempateIDs => {
|
||
|
||
getAttrsString = getAttrsString.concat(buildReapeatingAttrValuesArray(attrIDs));
|
||
getAttrsString = getAttrsString.concat(buildReapeatingSkillValuesArray(skillIDs));
|
||
getAttrsString = sectionName=='skilltemplate' ? getAttrsString.concat(buildSkillTemplateValuesArray(rowID)): getAttrsString;
|
||
getAttrsString = sectionName=='sizetemplate' ? getAttrsString.concat(buildSizeTemplateValuesArray(rowID)): getAttrsString;
|
||
getAttrsString = getAttrsString.concat(combat_stats_array);
|
||
getAttrsString = getAttrsString.concat(buildConditionStateArray());
|
||
getAttrsString = getAttrsString.concat(buildAttrGroupValuesArray());
|
||
getAttrsString = getAttrsString.concat(buildSkillGroupValuesArray());
|
||
getAttrsString = getAttrsString.concat(buildProtectionValuesArray());
|
||
getAttrsString = getAttrsString.concat(buildRepeatingExtraArmValuesArray(extraarmIDs));
|
||
getAttrsString = getAttrsString.concat(stats_array);
|
||
getAttrsString = getAttrsString.concat(rolls_array);
|
||
getAttrsString = getAttrsString.concat([
|
||
`theme`,
|
||
`static_activity_maneuver_name`,
|
||
`active_weapon`,
|
||
`static_attrgroup_selected_tab`,
|
||
`static_skillgroup_selected_tab`
|
||
]);
|
||
getAttrsString = getAttrsString.concat(size_template_values_array);
|
||
getAttrsString = getAttrsString.concat(buildStatButtonStatesArray());
|
||
|
||
getAttrs(getAttrsString, (value) => {
|
||
|
||
//console.log(`[Captured Attributes] value:`); console.log(value);
|
||
|
||
const debug = parseInt(value[`show_debug_messages`]) || 0;
|
||
var attrdb = JSON.parse(value.attrdb);
|
||
|
||
if(isRemoved){
|
||
if(getWasActive(removedInfo, originalCaseRowID)){
|
||
restoreActiveAttribute(removedInfo);
|
||
}else{
|
||
switch(sectionName){
|
||
case 'attr':
|
||
cleanupCosts(debug, attrIDs, attrdb, value, sectionName, rowID, setObj);
|
||
cleanupGroupType(debug, removedInfo, attrIDs, attrdb, value, rowID, setObj);
|
||
break;
|
||
case 'skill':
|
||
cleanupSkillCosts(debug, skillIDs, value, rowID, setObj);
|
||
break;
|
||
}
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
}
|
||
return;
|
||
}else if (sourceType==`repeating`) {
|
||
const isCustomization = /(enhancement|limiter)/i.test(`${sourceAttr}`);
|
||
const customization = (isCustomization) ?
|
||
sourceAttr.replace(/(enhancement|limiter)/i, "") : "";
|
||
const customizationType =
|
||
(sourceAttr.includes("enhancement")) ? "enhancement" :
|
||
(sourceAttr.includes("limiter")) ? "limiter" : "";
|
||
const isDefect = /defect/i.test(`${sourceAttr}`) && sourceAttr.length > 6;
|
||
//const defect = (isDefect) ? sourceAttr.replace(/defect/i, "") : "";
|
||
switch (sectionName) {
|
||
case `attr`:
|
||
const isNew = parseInt(value[`${source}_new`]) || 0;
|
||
if(isNew) setGroupMembership(value, setObj, source, sectionName);
|
||
if(getIsSheetworker(eventInfo.sourceType)) return;
|
||
//const attributedata = JSON.parse(global_attribute_data_json);
|
||
switch (sourceAttr) {
|
||
case `options`:
|
||
if (resetOnLocked(debug, eventInfo, value, match, rowID, setObj)) return;
|
||
if (eventInfo.newValue == '1') setAttrCharacteristic(debug, value, rowID, setObj);
|
||
break;
|
||
case `attribute`:
|
||
if (resetOnLocked(debug, eventInfo, value, match, rowID, setObj)) return;
|
||
if (resetOnLevelNotZero(debug, eventInfo, value, match, rowID, setObj)) return;
|
||
if (resetOnAlreadyDynamicGroup(debug, eventInfo, value, sectionName, match, source, rowID, setObj)) return;
|
||
setGroupType(debug, attrIDs, attrdb, eventInfo, value, sectionName, rowID, setObj);
|
||
exposeAttrSettingsOnAttributeChange(debug, value, match, source, setObj);
|
||
setAttrCostPerLevel(debug, value, rowID, setObj);
|
||
setAttrStat(debug, value, rowID, setObj, 'major');
|
||
setAttrDuration(debug, value, rowID, setObj);
|
||
setAttrRange(debug, value, rowID, setObj);
|
||
setAttrArea(debug, value, rowID, setObj);
|
||
setAttrCustomizations(debug, value, rowID, setObj);
|
||
//setRollable(debug, rowID, setObj, value[`repeating_attr_${rowID}_attribute`]);
|
||
setDamageType(debug, source, sourceAttr, setObj);
|
||
break;
|
||
case `level`:
|
||
if (resetOnNoAttr(debug, eventInfo, value, match, rowID, setObj)) return;
|
||
setLevelElevation(eventInfo, source, `levelelevation`, setObj);
|
||
setAttrCostByLevelChange(debug, attrdb, eventInfo, value, attrIDs, sectionName, rowID, sourceAttr, setObj);
|
||
setEffectiveLevelByLevelChange(debug, eventInfo, value, sectionName, rowID, sourceAttr, setObj);
|
||
break;
|
||
case `activate`:
|
||
if (!getIsLocked(debug, value, rowID, sourceAttr)) return;
|
||
if (!getFluxGroupIsActive(debug, value, rowID)) return;
|
||
const isActive = setButtonState(debug, value, source, rowID, sourceAttr, setObj);
|
||
setAttrEffects(debug, isActive, value, attrdb, extraarmIDs, attrIDs, sectionName, rowID, sourceAttr, setObj);
|
||
setPoolCostIfGroupIsFlux(debug, isActive, attrIDs, value, rowID, setObj);
|
||
setPoolCostIfGroupIsVariation(debug, isActive, attrIDs, value, rowID, setObj);
|
||
disableActiveWeapon(debug, value, rowID, setObj);
|
||
setGroupDefectPointsOnActivation(debug, attrIDs, attrdb, value, sectionName, rowID, setObj);
|
||
//setSkillGroupMaxByLevelChange(debug, value, rowID, setObj);
|
||
break;
|
||
case `lock`:
|
||
if (resetOnActive(debug, eventInfo, value, match, rowID, setObj)) return;
|
||
break;
|
||
case 'defect':
|
||
exposeDefectSettingsOnDefectChange(debug, value, rowID, setObj);
|
||
setDefectdb(debug, attrdb, eventInfo, rowID, setObj);
|
||
setDefectPointsByRankChange(debug, attrdb, attrIDs, eventInfo, value, sectionName, rowID, setObj);
|
||
break;
|
||
case 'stat':
|
||
getAttrStatValue(debug, value, rowID);
|
||
break;
|
||
default:
|
||
if (isCustomization) {
|
||
exposeAttrSettingsOnCustomizationChange(debug, eventInfo, source, sourceAttr, setObj);
|
||
setEffectiveLevelByCustomization(debug, eventInfo, value, customizationType, rowID, setObj);
|
||
setCustomization(debug, eventInfo, value, rowID, customization, setObj);
|
||
setAttrCharacteristic(debug, value, rowID, setObj);
|
||
} else if (isDefect) {
|
||
setDefectdb(debug, attrdb, eventInfo, rowID, setObj);
|
||
setDefectPointsByRankChange(debug, attrdb, attrIDs, eventInfo, value, sectionName, rowID, setObj);
|
||
setDefectCharacteristic(attrdb, value, rowID, setObj);
|
||
}
|
||
}
|
||
break;
|
||
case `skill`:
|
||
if (getIsSheetworker(eventInfo.sourceType)) return;
|
||
const level = parseInt(value[`${source}_level`]);
|
||
const type = getStatType(value);
|
||
switch (sourceAttr) {
|
||
case `level`:
|
||
setLevelElevation(eventInfo, source, `levelelevation`, setObj);
|
||
setSkillCostByRankChange(debug, skillIDs, value, rowID, setObj);
|
||
setSkillRoll(debug, value, source, rowID, sourceAttr, level, setObj, type);
|
||
break;
|
||
case 'specializations':
|
||
setSkillCostBySpecilizationChange(debug, eventInfo, value, sectionName, rowID, setObj);
|
||
break;
|
||
case 'statselection':
|
||
case 'option':
|
||
const state = parseInt(value[`${source}_${sourceAttr}`]) > 0 ? 0: 1;
|
||
setObj[`${source}_${sourceAttr}`] = state;
|
||
break;
|
||
default:
|
||
setSkillStatButtonState(debug, value, match, sourceAttr, setObj);
|
||
setSkillStatDisplay(debug, value, rowID, sourceAttr, setObj, type);
|
||
setSkillRoll(debug, value, source, rowID, sourceAttr, level, setObj, type);
|
||
}
|
||
break;
|
||
case `extraarm`:
|
||
switch (sourceAttr) {
|
||
case `armedstate`:
|
||
const handsource = getHandSource(debug, rowID);
|
||
setWeaponStates(debug, extraarmIDs, value, handsource, setObj);
|
||
setActiveWeapon(debug, value, handsource, setObj);
|
||
setCombatRoll(debug, value, attrdb, value[`${source}_source`], sourceAttr, setObj);
|
||
break;
|
||
}
|
||
break;
|
||
case `skilltemplate`:
|
||
switch(sourceAttr){
|
||
case `addskill`:
|
||
createSkill(debug, value, source, setObj);
|
||
break;
|
||
}
|
||
break;
|
||
case `sizetemplate`:
|
||
if (eventInfo.newValue == "0" ||
|
||
getIsSheetworker(eventInfo.sourceType)) {
|
||
return;
|
||
}
|
||
setSizeTemplate(value, sizetempateIDs, rowID, setObj);
|
||
break;
|
||
}
|
||
if(debug){
|
||
console.log('[Changes To Sheet Values] setObj:');
|
||
console.log(setObj);
|
||
}
|
||
setAttrs(setObj);
|
||
return;
|
||
} else if (sourceType==`static`) {
|
||
switch (sectionName) {
|
||
case `activity`:
|
||
switch (rowID) {
|
||
case `maneuver`:
|
||
setCombatRoll(debug, value, attrdb, value.active_weapon, sourceAttr, setObj);
|
||
break;
|
||
}
|
||
break;
|
||
case `stat`:
|
||
switch (rowID) {
|
||
case `type`:
|
||
const type = getStatType(value);
|
||
setStatType(type, setObj);
|
||
switchStatRollType(type, setObj);
|
||
setSkillStatType(debug, value, skillIDs, sourceAttr, type, setObj);
|
||
break;
|
||
case `temp`:
|
||
switch (sourceAttr) {
|
||
case `health`:
|
||
case `energy`:
|
||
setDerivedValue(debug, attrdb, value, setObj, sourceAttr);
|
||
break;
|
||
}
|
||
setDamageLevelByTempChange(debug, value, setObj, sourceAttr);
|
||
break;
|
||
case `total`:
|
||
setDamageLevelByDamageTaken(debug, value, setObj, sourceAttr);
|
||
break;
|
||
case `base`:
|
||
if (getIsSheetworker(eventInfo.sourceType)) return;
|
||
const stat = sourceAttr.replace('static_stat_base_', '');
|
||
setAllAspectStats(debug, eventInfo, attrdb, value, setObj, stat);
|
||
setDerivedValue(debug, attrdb, value, setObj, 'health');
|
||
setDerivedValue(debug, attrdb, value, setObj, 'energy');
|
||
setDerivedValue(debug, attrdb, value, setObj, 'sanity');
|
||
setDerivedValue(debug, attrdb, value, setObj, 'social');
|
||
setTotalShock(debug, attrdb, setObj, sourceAttr);
|
||
setTotalMovement(debug, value, attrdb, setObj, sourceAttr);
|
||
break;
|
||
}
|
||
break;
|
||
case `skillgroup`:
|
||
if (rowID==`selected`) {
|
||
setAttrVisibilityByGroup(debug, value, eventInfo, skillIDs, setObj, sectionName);
|
||
}
|
||
switch (sourceAttr) {
|
||
case `grouplevel`:
|
||
setPoolCost(debug, eventInfo, value, setObj, source, sourceAttr);
|
||
break;
|
||
}
|
||
break;
|
||
case `attrgroup`:
|
||
if (rowID==`selected`) {
|
||
setAttrVisibilityByGroup(debug, value, eventInfo, attrIDs, setObj, sectionName);
|
||
}
|
||
break;
|
||
case `button`:
|
||
if (rowID == 'targeted') {
|
||
setButtonState(debug, value, source, rowID, sourceAttr, setObj);
|
||
setCombatRoll(debug, value, attrdb, undefined, sourceAttr, setObj, true);
|
||
}
|
||
if (rowID == 'personal' || rowID == 'movement') {
|
||
setButtonState(debug, value, source, rowID, sourceAttr, setObj);
|
||
setDynamicRollValue(debug, eventInfo, value, attrdb, rowID, sourceAttr, setObj);
|
||
}
|
||
setStatButtonStatsAndRolls(debug, eventInfo, value, rowID, sourceAttr, setObj);
|
||
switch (`${sourceAttr}`) {
|
||
case `armedstate`:
|
||
setWeaponStates(debug, extraarmIDs, value, rowID, setObj);
|
||
setActiveWeapon(debug, value, rowID, setObj);
|
||
setCombatRoll(debug, value, attrdb, value[`${rowID}_source`], sourceAttr, setObj);
|
||
break;
|
||
}
|
||
break;
|
||
case `roll`:
|
||
setRollUI(debug, value, setObj);
|
||
setDynamicRollValue(debug, eventInfo, value, attrdb, rowID, sourceAttr, setObj);
|
||
break;
|
||
}
|
||
if(debug){ console.log('[Changes To Sheet Values] setObj:'); console.log(setObj); }
|
||
setAttrs(setObj);
|
||
return;
|
||
} else {
|
||
if(debug) console.log(`[sourceType = ${sourceType}] no matching sourceType, exiting.`);
|
||
return;
|
||
}
|
||
});
|
||
});
|
||
});
|
||
});
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
</div> |