mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
3533 lines
204 KiB
HTML
3533 lines
204 KiB
HTML
<!--Detects a Player or GM sheet; use to show/hide elements with CSS-->
|
|
<input type="radio" name="attr_gmdicepool" class="sheet-player" value="1" checked="checked" style="display:none">
|
|
<input type="radio" name="attr_gmdicepool" class="sheet-gm" value="2" style="display:none">
|
|
<input type="hidden" name="attr_settings_font_size" value="16" />
|
|
<div class="character_sheet">
|
|
<div class="pools">
|
|
<div>
|
|
<h2 data-i18n="dice_pool">Dice Pool</h2>
|
|
<div class="dice_pool section">
|
|
<div class="dice_pool_grid">
|
|
<div class="positive_dice">
|
|
<div class="three_dice">
|
|
<div>
|
|
<img src="https://i.imgur.com/nlIAfJx.png" data-i18n-title="boost_die" title="Boost Die" />
|
|
<input name="attr_b" class="dice_pool_boost" type="number" min="0" max="7" value="0" />
|
|
</div>
|
|
<div>
|
|
<img src="https://i.imgur.com/g3hoJRG.png" data-i18n-title="ability_die" title="Ability Die" />
|
|
<input name="attr_g" class="dice_pool_ability" type="number" min="0" max="7" value="0" />
|
|
</div>
|
|
<div>
|
|
<img src="https://i.imgur.com/4bQ0dY8.png" data-i18n-title="proficiency_die" title="Proficiency Die" />
|
|
<input name="attr_y" class="dice_pool_proficiency" type="number" min="0" max="7" value="0" />
|
|
</div>
|
|
</div>
|
|
<div class="upgrade_downgrade">
|
|
<label class="upgrade_label" data-i18n="upgrade">Upgrade :</label>
|
|
<input name="attr_upgradeAbility" class="dice_pool_upgrade_positive" type="number" min="0" max="7" value="0" />
|
|
<input name="attr_downgradeProficiency" class="dice_pool_downgrade_positive" type="number" min="0" max="7" value="0" />
|
|
<label class="downgrade_label" data-i18n="downgrade">: Downgrade</label>
|
|
</div>
|
|
</div>
|
|
<div class="force_dice_dice_roll">
|
|
<div class="force_dice">
|
|
<img src="https://i.imgur.com/JCI7Mgm.png" data-i18n-title="force_die" title="Force Die" />
|
|
<input name="attr_w" class="dice_pool_force" type="number" min="0" max="7" value="0" />
|
|
</div>
|
|
<div class="dice_roll">
|
|
<input type="hidden" name="attr_dicePool" value="@{g}g @{y}y @{p}p @{r}r @{b}b @{blk}blk @{w}w upgrade(ability|@{upgradeAbility}) downgrade(proficiency|@{downgradeProficiency}) upgrade(difficulty|@{upgradeDifficulty}) downgrade(challenge|@{downgradeChallenge})" />
|
|
<button type="roll" name="roll_DicePool" class="roll_DicePool" data-i18n-title="roll_dice_pool" title="Roll dice pool" value="!eed characterID(@{character_id}) label(Dice:Dice Pool) @{dicePool}"></button>
|
|
<button type="roll" name="roll_ResetDicePool" class="roll_ResetDicePool" data-i18n-title="reset_dice_pool" title="Reset dice pool" value="!eed resetdice characterID(@{character_id})"></button>
|
|
</div>
|
|
</div>
|
|
<div class="negative_dice">
|
|
<div class="three_dice">
|
|
<div>
|
|
<img src="https://i.imgur.com/n9W07Lp.png" data-i18n-title="setback_die" title="Setback Die" />
|
|
<input name="attr_blk" class="dice_pool_setback" type="number" min="-7" max="7" value="0" />
|
|
</div>
|
|
<div>
|
|
<img src="https://i.imgur.com/oxbKghK.png" data-i18n-title="difficulty_die" title="Difficulty Die" />
|
|
<input name="attr_p" class="dice_pool_difficulty" type="number" min="0" max="7" value="0" />
|
|
</div>
|
|
<div>
|
|
<img src="https://i.imgur.com/GInMHEN.png" data-i18n-title="challenge_die" title="Challenge Die" />
|
|
<input name="attr_r" class="dice_pool_challenge" type="number" min="0" max="7" value="0" />
|
|
</div>
|
|
</div>
|
|
<div class="upgrade_downgrade">
|
|
<label class="upgrade_label" data-i18n="upgrade">Upgrade :</label>
|
|
<input name="attr_upgradeDifficulty" class="dice_pool_upgrade_negative" type="number" min="0" max="7" value="0" />
|
|
<input name="attr_downgradeChallenge" class="dice_pool_downgrade_negative" type="number" min="0" max="7" value="0" />
|
|
<label class="downgrade_label" data-i18n="downgrade">: Downgrade</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="destiny_pool">Destiny Pool</span><button type="action" name="act_show_destiny_pool"><span name="attr_show_destiny_pool_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_destiny_pool_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_destiny_pool" value="true" />
|
|
<div class="destiny_pool section">
|
|
<div class="destiny_buttons">
|
|
<button type="roll" class="sync_pool_with_gm" name="Update-Dest-Pool" value="!eed characterID(@{character_id}) destiny registerPlayer" data-i18n="sync_pool_with_gm">Sync Pool with GM</button>
|
|
<button type="roll" class="roll_destiny" name="Roll-Destiny" value="!eed characterID(@{character_id}) 1w destiny doRoll" data-i18n="roll_destiny">Roll Destiny</button>
|
|
<button type="roll" class="update_player_points" value="!eed characterID(@{character_id}) destiny sendUpdate" data-i18n="update_player_points">Update Player Points</button>
|
|
<button type="roll" class="clear_pool" value="!eed characterID(@{character_id}) destiny clearPool" data-i18n="clear_pool">Clear Pool</button>
|
|
</div>
|
|
<div class="destiny_inputs">
|
|
<div>
|
|
<input class="destiny_light" name="attr_lightSidePoints" type="number" min="0" value="0" />
|
|
<label class="destiny_light_label" name="attr_light" value="@{destiny_light}" data-i18n="light">Light</label>
|
|
</div>
|
|
<div>
|
|
<button type="roll" class="use_dark_side" value="!eed characterID(@{character_id}) destiny useDark" data-i18n="use_dark_side">Use Dark Side</button>
|
|
<button type="roll" class="use_light_side" name="Use-Darkside-Point" value="!eed characterID(@{character_id}) destiny useLight" data-i18n="use_light_side">Use Light Side</button>
|
|
</div>
|
|
<div>
|
|
<input class="destiny_dark" name="attr_darkSidePoints" type="number" min="0" value="0" />
|
|
<label class="destiny_dark_label" name="attr_dark" value="@{destiny_dark}" data-i18n="dark">Dark</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h2><span data-i18n="vital_stats">Vital Stats</span><button type="action" name="act_show_vital_stats"><span name="attr_show_vital_stats_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_vital_stats_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_vital_stats" value="true" />
|
|
<div class="vital_stats section">
|
|
<div class="soak">
|
|
<label data-i18n="soak" class="stat_label">Soak</label>
|
|
<div class="vital_stats_column">
|
|
<div class="cell_width_2">
|
|
<input name="attr_soak" class="soak" type="hidden" value="1" />
|
|
<span name="attr_soak"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="defense">
|
|
<label data-i18n="defense" class="stat_label">Defense</label>
|
|
<div class="vital_stats_column">
|
|
<div>
|
|
<input name="attr_defense_ranged" type="hidden" value="0" />
|
|
<span name="attr_defense_ranged"></span>
|
|
<label data-i18n="ranged" class="threshold_label">Ranged</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_defense_melee" type="hidden" value="0" />
|
|
<span name="attr_defense_melee"></span>
|
|
<label data-i18n="melee" class="current_label">Melee</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="wounds">
|
|
<label data-i18n="wounds" class="stat_label">Wounds</label>
|
|
<div class="vital_stats_column">
|
|
<div>
|
|
<input name="attr_wounds_threshold" class="wounds_threshold" type="number" maxlength="2" min="1" max="99" value="1" />
|
|
<label data-i18n="threshold" class="threshold_label">Threshold</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_wounds_current" class="wounds_current" type="number" maxlength="2" min="0" max="99" value="0" />
|
|
<label data-i18n="current" class="current_label">Current</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="strain">
|
|
<label data-i18n="strain" class="stat_label">Strain</label>
|
|
<div class="vital_stats_column">
|
|
<div>
|
|
<input name="attr_strain_threshold" class="strain_threshold" type="number" maxlength="2" min="1" max="99" value="1" />
|
|
<label data-i18n="threshold" class="threshold_label">Threshold</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_strain_current" class="strain_current" type="number" maxlength="2" min="0" max="99" value="0" />
|
|
<label data-i18n="current" class="current_label">Current</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="strain">
|
|
<label class="stat_label"><span data-i18n="encumbrance">Encumbrance</span>
|
|
<span class="icon_help">
|
|
<div class="help_info_left">
|
|
<p>The Encumbrance threshold is calculated by Brawn + 5 + Container threshold.</p>
|
|
<p>The current Encumbrance takes into account weapons, armor, and other gear that have an Encumbrance stat set. If things get out of sync, just reset this field to match what it should be.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="vital_stats_column">
|
|
<div>
|
|
<input name="attr_encumbrance_threshold" class="encumbrance_threshold" type="hidden" value="1" />
|
|
<span class="encumbrance_threshold" name="attr_encumbrance_threshold"></span>
|
|
<label data-i18n="threshold" class="threshold_label">Threshold</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_encumbrance_current" class="encumbrance_current" type="number" min="-10" max="30" value="0" />
|
|
<label data-i18n="current" class="current_label">Current</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab_navigation">
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="bio" class="navSelection_radio" />
|
|
<button type="action" name="act_bio"><span data-i18n="bio">Bio</span></button>
|
|
</div>
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="skills" class="navSelection_radio" />
|
|
<button type="action" name="act_skills"><span data-i18n="skills">Skills</span></button>
|
|
</div>
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="combat" class="navSelection_radio" />
|
|
<button type="action" name="act_combat"><span data-i18n="combat">Combat</span></button>
|
|
</div>
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="equipment" class="navSelection_radio" />
|
|
<button type="action" name="act_equipment"><span data-i18n="equipment">Equipment</span></button>
|
|
</div>
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="talents" class="navSelection_radio" />
|
|
<button type="action" name="act_talents"><span data-i18n="talents">Talents</span></button>
|
|
</div>
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="force" class="navSelection_radio" />
|
|
<button type="action" name="act_force"><span data-i18n="the_force">The Force</span></button>
|
|
</div>
|
|
<div>
|
|
<input type="radio" name="attr_navSelection" value="settings" class="navSelection_radio" />
|
|
<button type="action" name="act_settings"><span data-i18n="settings">Settings</span></button>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="bio" />
|
|
<div class="bio">
|
|
<h2><span data-i18n="name_species_and_career">Name, Species, and Career</span><button type="action" name="act_show_name"><span name="attr_show_name_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_name_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_name" value="true" />
|
|
<div class="name section">
|
|
<label data-i18n="character_name">Character Name</label>
|
|
<input type="text" name="attr_character_name">
|
|
<label data-i18n="player_name">Player Name</label>
|
|
<input type="text" name="attr_player_name">
|
|
<label data-i18n="species">Species</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_species">
|
|
<option value=""></option>
|
|
<option value="Aleena" data-i18n="aleena">Aleena</option>
|
|
<option value="Anx" data-i18n="anx">Anx</option>
|
|
<option value="Aqualish (Aquala)" data-i18n="aqualisha">Aqualish (Aquala)</option>
|
|
<option value="Aqualish (Quara)" data-i18n="aqualishq">Aqualish (Quara)</option>
|
|
<option value="Aqualish (Ualaq)" data-i18n="aqualishu">Aqualish (Ualaq)</option>
|
|
<option value="Arcona" data-i18n="arcona">Arcona</option>
|
|
<option value="Arkanian" data-i18n="arkanian">Arkanian</option>
|
|
<option value="Bardottan" data-i18n="bardottan">Bardottan</option>
|
|
<option value="Besalisk" data-i18n="besalisk">Besalisk</option>
|
|
<option value="Bothan" data-i18n="bothan">Bothan</option>
|
|
<option value="Caamasi" data-i18n="caamasi">Caamasi</option>
|
|
<option value="Cerean" data-i18n="cerean">Cerean</option>
|
|
<option value="Chadra-Fan" data-i18n="chadrafan">Chadra-Fan</option>
|
|
<option value="Chagrian" data-i18n="chagrian">Chagrian</option>
|
|
<option value="Chevin" data-i18n="chevin">Chevin</option>
|
|
<option value="Chiss" data-i18n="chiss">Chiss</option>
|
|
<option value="Clawdite" data-i18n="clawdite">Clawdite</option>
|
|
<option value="Clone" data-i18n="clone">Clone</option>
|
|
<option value="Corellian Human" data-i18n="correllianhuman">Corellian Human</option>
|
|
<option value="Cosian" data-i18n="cosian">Cosian</option>
|
|
<option value="Dathomirian" data-i18n="dathomirian">Dathomirian</option>
|
|
<option value="Devaronian" data-i18n="devaronian">Devaronian</option>
|
|
<option value="Dowutin" data-i18n="dowutin">Dowutin</option>
|
|
<option value="Drall" data-i18n="drall">Drall</option>
|
|
<option value="Dressellian (Primitive)" data-i18n="dressellianp">Dressellian (Primitive)</option>
|
|
<option value="Dressellian (Non-Primitive)" data-i18n="dresselliannp">Dressellian (Non-Primitive)</option>
|
|
<option value="Droid" data-i18n="droid">Droid</option>
|
|
<option value="Dug" data-i18n="dug">Dug</option>
|
|
<option value="Duros" data-i18n="duros">Duros</option>
|
|
<option value="Elom" data-i18n="elom">Elom</option>
|
|
<option value="Elomin" data-i18n="elomin">Elomin</option>
|
|
<option value="Ewok" data-i18n="ewok">Ewok</option>
|
|
<option value="Falleen" data-i18n="falleen">Falleen</option>
|
|
<option value="Gand (With Lungs)" data-i18n="gandl">Gand (With Lungs)</option>
|
|
<option value="Gand (Without Lungs)" data-i18n="gandnl">Gand (Without Lungs)</option>
|
|
<option value="Gank" data-i18n="gank">Gank</option>
|
|
<option value="Geonosian" data-i18n="geonosian">Geonosian</option>
|
|
<option value="Gigoran" data-i18n="gigoran">Gigoran</option>
|
|
<option value="Gossam" data-i18n="gossam">Gossam</option>
|
|
<option value="Gotal" data-i18n="gotal">Gotal</option>
|
|
<option value="Gran" data-i18n="gran">Gran</option>
|
|
<option value="Gungan" data-i18n="gungan">Gungan</option>
|
|
<option value="Harch" data-i18n="harch">Harch</option>
|
|
<option value="Human" data-i18n="human">Human</option>
|
|
<option value="Hutt" data-i18n="hutt">Hutt</option>
|
|
<option value="Iakaru" data-i18n="iakaru">Iakaru</option>
|
|
<option value="Iktotchi" data-i18n="iktochi">Iktotchi</option>
|
|
<option value="Ishi Tib" data-i18n="ishitib">Ishi Tib</option>
|
|
<option value="Ithorian" data-i18n="ithorian">Ithorian</option>
|
|
<option value="Jawa" data-i18n="jawa">Jawa</option>
|
|
<option value="Kalleran" data-i18n="kalleran">Kalleran</option>
|
|
<option value="Kaminoan" data-i18n="kaminoan">Kaminoan</option>
|
|
<option value="Karkarodon" data-i18n="karkarodon">Karkarodon</option>
|
|
<option value="Kel Dor" data-i18n="keldor">Kel Dor</option>
|
|
<option value="Klatooinian" data-i18n="klatooinian">Klatooinian</option>
|
|
<option value="Kubaz" data-i18n="kubaz">Kubaz</option>
|
|
<option value="Kyuzo" data-i18n="kyuzo">Kyuzo</option>
|
|
<option value="Lannik" data-i18n="lannik">Lannik</option>
|
|
<option value="Lasat" data-i18n="lasat">Lasat</option>
|
|
<option value="Mandalorian Human" data-i18n="mandalorianhuman">Mandalorian Human</option>
|
|
<option value="Melitto" data-i18n="melitto">Melitto</option>
|
|
<option value="Mikkian" data-i18n="mikkian">Mikkian</option>
|
|
<option value="Mirialan" data-i18n="mirialan">Mirialan</option>
|
|
<option value="Mon Calamari" data-i18n="moncalamari">Mon Calamari</option>
|
|
<option value="Mustafarian (Northern)" data-i18n="mustafariann">Mustafarian (Northern)</option>
|
|
<option value="Mustafarian (Southern)" data-i18n="mustafarians">Mustafarian (Southern)</option>
|
|
<option value="Muun" data-i18n="muun">Muun</option>
|
|
<option value="Nautolan" data-i18n="nautolan">Nautolan</option>
|
|
<option value="Neimodian" data-i18n="neimodian">Neimodian</option>
|
|
<option value="Nikto (Green)" data-i18n="niktog">Nikto (Green)</option>
|
|
<option value="Nikto (Mountain)" data-i18n="niktom">Nikto (Mountain)</option>
|
|
<option value="Nikto (Pale)" data-i18n="niktop">Nikto (Pale)</option>
|
|
<option value="Nikto (Red)" data-i18n="niktor">Nikto (Red)</option>
|
|
<option value="Nikto (Southern)" data-i18n="niktos">Nikto (Southern)</option>
|
|
<option value="Pantoran" data-i18n="pantoran">Pantoran</option>
|
|
<option value="Pau'an" data-i18n="pauan">Pau'an</option>
|
|
<option value="Phydolon" data-i18n="phydolon">Phydolon</option>
|
|
<option value="Polis Massan (With Vocal Chords)" data-i18n="polismassanvc">Polis Massan (With Vocal Chords)</option>
|
|
<option value="Polis Massan (Without Vocal Chords)" data-i18n="polismassannvc">Polis Massan (Without Vocal Chords)</option>
|
|
<option value="Quarren" data-i18n="quarren">Quarren</option>
|
|
<option value="Quermian" data-i18n="quermian">Quermian</option>
|
|
<option value="Rodian" data-i18n="rodian">Rodian</option>
|
|
<option value="Sakiyan" data-i18n="sakiyan">Sakiyan</option>
|
|
<option value="Sathari" data-i18n="sathari">Sathari</option>
|
|
<option value="Selonian" data-i18n="selonian">Selonian</option>
|
|
<option value="Shistavanen" data-i18n="shistavanen">Shistavanen</option>
|
|
<option value="Skakoans" data-i18n="skakoans">Skakoans</option>
|
|
<option value="Sullustan" data-i18n="sullustan">Sullustan</option>
|
|
<option value="Thisspiasian" data-i18n="thisspiasian">Thisspiasian</option>
|
|
<option value="Tholothian" data-i18n="tholothian">Tholothian</option>
|
|
<option value="Tognath" data-i18n="tognath">Tognath</option>
|
|
<option value="Togruta" data-i18n="togruta">Togruta</option>
|
|
<option value="Toydarian" data-i18n="toydarian">Toydarian</option>
|
|
<option value="Trandosian" data-i18n="trandosian">Trandosian</option>
|
|
<option value="Tusken Raider" data-i18n="tuskenraider">Tusken Raider</option>
|
|
<option value="Twi'lek" data-i18n="twilek">Twi'lek</option>
|
|
<option value="Umbaran" data-i18n="umbaran">Umbaran</option>
|
|
<option value="Verpine" data-i18n="verpine">Verpine</option>
|
|
<option value="Vurk" data-i18n="vurk">Vurk</option>
|
|
<option value="Weequay" data-i18n="weekay">Weequay</option>
|
|
<option value="Whiphid" data-i18n="whipid">Whiphid</option>
|
|
<option value="Wookiee" data-i18n="wookie">Wookiee</option>
|
|
<option value="Xexto" data-i18n="xexto">Xexto</option>
|
|
<option value="Zabrak" data-i18n="zabrak">Zabrak</option>
|
|
</select>
|
|
</div>
|
|
<label data-i18n="career">Career</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_career-list">
|
|
<option value=""></option>
|
|
<optgroup label="Edge of the Empire" data-i18n-label="edgeoftheempire">
|
|
<option value="Bounty Hunter" data-i18n="bountyhunter">Bounty Hunter</option>
|
|
<option value="Colonist" data-i18n="colonist">Colonist</option>
|
|
<option value="Explorer" data-i18n="explorer">Explorer</option>
|
|
<option value="Hired Gun" data-i18n="hiredgun">Hired Gun</option>
|
|
<option value="Smuggler" data-i18n="smuggler">Smuggler</option>
|
|
<option value="Technican" data-i18n="technician">Technican</option>
|
|
</optgroup>
|
|
<optgroup label="Age of Rebellion" data-i18n-label="ageofrebellion">
|
|
<option value="Ace" data-i18n="ace">Ace</option>
|
|
<option value="Commander" data-i18n="commander">Commander</option>
|
|
<option value="Diplomat" data-i18n="diplomat">Diplomat</option>
|
|
<option value="Engineer" data-i18n="engineer">Engineer</option>
|
|
<option value="Soldier" data-i18n="soldier">Soldier</option>
|
|
<option value="Spy" data-i18n="spy">Spy</option>
|
|
</optgroup>
|
|
<optgroup label="Force and Destiny" data-i18n-label="forceanddestiny">
|
|
<option value="Consular" data-i18n="consular">Consular</option>
|
|
<option value="Guardian" data-i18n="guardian">Guardian</option>
|
|
<option value="Mystic" data-i18n="mystic">Mystic</option>
|
|
<option value="Seeker" data-i18n="seeker">Seeker</option>
|
|
<option value="Sentinel" data-i18n="sentinel">Sentinel</option>
|
|
<option value="Warrior" data-i18n="warrior">Warrior</option>
|
|
</optgroup>
|
|
<optgroup label="Clone Wars Era" data-i18n-label="clonewarsera">
|
|
<option value="Clone Soldier" data-i18n="clonesoldier">Clone Soldier</option>
|
|
<option value="Jedi" data-i18n="jedi">Jedi</option>
|
|
</optgroup>
|
|
<optgroup label="All" data-i18n-label="all">
|
|
<option value="Universal" data-i18n="universal">Universal</option>
|
|
</optgroup>
|
|
</select>
|
|
</div>
|
|
<label data-i18n="specializations">Specializations</label>
|
|
<div class="specialization_trees_container">
|
|
<fieldset class="repeating_specializations">
|
|
<div class="select_wrapper">
|
|
<select name="attr_specialization">
|
|
<optgroup label="Edge of the Empire" data-i18n-label="edgeoftheempire"></optgroup>
|
|
<optgroup label="Bounty Hunter" data-i18n-label="bountyhunter">
|
|
<option value="Assassin" data-i18n="assassin">Assassin</option>
|
|
<option value="Gadgeteer" data-i18n="gadgeteer">Gadgeteer</option>
|
|
<option value="Martial Artist" data-i18n="martialartist">Martial Artist</option>
|
|
<option value="Operator" data-i18n="operator">Operator</option>
|
|
<option value="Skip Tracer" data-i18n="skiptracer">Skip Tracer</option>
|
|
<option value="Survivalist" data-i18n="survivalist">Survivalist</option>
|
|
</optgroup>
|
|
<optgroup label="Colonist" data-i18n-label="colonist">
|
|
<option value="Doctor" data-i18n="doctor">Doctor</option>
|
|
<option value="Politico" data-i18n="politico">Politico</option>
|
|
<option value="Scholar" data-i18n="scholar">Scholar</option>
|
|
<option value="Entrepreneur" data-i18n="entrepreneur">Entrepreneur</option>
|
|
<option value="Marshal" data-i18n="marshal">Marshal</option>
|
|
<option value="Performer" data-i18n="performer">Performer</option>
|
|
</optgroup>
|
|
<optgroup label="Explorer" data-i18n-label="explorer">
|
|
<option value="Scout" data-i18n="scout">Scout</option>
|
|
<option value="Fringer" data-i18n="fringer">Fringer</option>
|
|
<option value="Driver" data-i18n="driver">Driver</option>
|
|
<option value="Archaeologist" data-i18n="archaeologist">Archaeologist</option>
|
|
<option value="Big-Game Hunter" data-i18n="biggamehunter">Big-Game Hunter</option>
|
|
<option value="Trader" data-i18n="trader">Trader</option>
|
|
</optgroup>
|
|
<optgroup label="Hired Gun" data-i18n-label="hiredgun">
|
|
<option value="Bodyguard" data-i18n="bodyguard">Bodyguard</option>
|
|
<option value="Demolitionist" data-i18n="demolitionist">Demolitionist</option>
|
|
<option value="Enforcer" data-i18n="enforcer">Enforcer</option>
|
|
<option value="Heavy" data-i18n="heavy">Heavy</option>
|
|
<option value="Marauder" data-i18n="marauder">Marauder</option>
|
|
<option value="Mercenary Soldier" data-i18n="mercenarysoldier">Mercenary Soldier</option>
|
|
</optgroup>
|
|
<optgroup label="Smuggler" data-i18n-label="smuggler">
|
|
<option value="Pilot" data-i18n="pilot">Pilot</option>
|
|
<option value="Scoundrel" data-i18n="scoundrel">Scoundrel</option>
|
|
<option value="Thief" data-i18n="thief">Thief</option>
|
|
<option value="Charmer" data-i18n="charmer">Charmer</option>
|
|
<option value="Gambler" data-i18n="gambler">Gambler</option>
|
|
<option value="Gunslinger" data-i18n="gunslinger">Gunslinger</option>
|
|
</optgroup>
|
|
<optgroup label="Technician" data-i18n-label="technician">
|
|
<option value="Mechanic" data-i18n="mechanic">Mechanic</option>
|
|
<option value="Outlaw Tech" data-i18n="outlawtech">Outlaw Tech</option>
|
|
<option value="Slicer" data-i18n="slicer">Slicer</option>
|
|
<option value="Cyber Tech" data-i18n="cybertech">Cyber Tech</option>
|
|
<option value="Droid Tech" data-i18n="droidtech">Droid Tech</option>
|
|
<option value="Modder" data-i18n="modder">Modder</option>
|
|
</optgroup>
|
|
<optgroup label="Age of Rebellion" data-i18n-label="ageofrebellion"></optgroup>
|
|
<optgroup label="Ace" data-i18n-label="ace">
|
|
<option value="Driver" data-i18n="driver">Driver</option>
|
|
<option value="Pilot" data-i18n="pilot">Pilot</option>
|
|
<option value="Gunner" data-i18n="gunner">Gunner</option>
|
|
<option value="Rigger" data-i18n="rigger">Rigger</option>
|
|
<option value="Hotshot" data-i18n="hotshot">Hotshot</option>
|
|
<option value="Beast Rider" data-i18n="beastrider">Beast Rider</option>
|
|
</optgroup>
|
|
<optgroup label="Commander" data-i18n-label="commander">
|
|
<option value="Commodore" data-i18n-label="commodore">Commodore</option>
|
|
<option value="Squadron Leader" data-i18n="squadronleader">Squadron Leader</option>
|
|
<option value="Tactician" data-i18n="tactician">Tactician</option>
|
|
<option value="Figurehead" data-i18n="figurehead">Figurehead</option>
|
|
<option value="Instructor" data-i18n="instructor">Instructor</option>
|
|
<option value="Strategist" data-i18n="strategist">Strategist</option>
|
|
</optgroup>
|
|
<optgroup label="Diplomat" data-i18n-label="diplomat">
|
|
<option value="Ambassador" data-i18n="ambassador">Ambassador</option>
|
|
<option value="Agitator" data-i18n="agitator">Agitator</option>
|
|
<option value="Quartermaster" data-i18n="quartermester">Quartermaster</option>
|
|
<option value="Analyst" data-i18n="analyst">Analyst</option>
|
|
<option value="Advocate" data-i18n="advocate">Advocate</option>
|
|
<option value="Propagandist" data-i18n="propagandist">Propagandist</option>
|
|
</optgroup>
|
|
<optgroup label="Engineer" data-i18n-label="engineer">
|
|
<option value="Droid Specialist" data-i18n="droidspecialist">Droid Specialist</option>
|
|
<option value="Mechanic" data-i18n="mechanic">Mechanic</option>
|
|
<option value="Saboteur" data-i18n="saboteur">Saboteur</option>
|
|
<option value="Sapper" data-i18n="sapper">Sapper</option>
|
|
<option value="Scientist" data-i18n="scientist">Scientist</option>
|
|
<option value="Shipwright" data-i18n="shipwright">Shipwright</option>
|
|
</optgroup>
|
|
<optgroup label="Soldier" data-i18n-label="soldier">
|
|
<option value="Medic" data-i18n="medic">Medic</option>
|
|
<option value="Sharpshooter" data-i18n="sharpshooter">Sharpshooter</option>
|
|
<option value="Commando" data-i18n="commando">Commando</option>
|
|
<option value="Heavy" data-i18n="heavy">Heavy</option>
|
|
<option value="Trailblazer" data-i18n="trailblazer">Trailblazer</option>
|
|
<option value="Vanguard" data-i18n="vanguard">Vanguard</option>
|
|
</optgroup>
|
|
<optgroup label="Spy" data-i18n-label="spy">
|
|
<option value="Courier" data-i18n="courier">Courier</option>
|
|
<option value="Infiltrator" data-i18n="infiltrator">Infiltrator</option>
|
|
<option value="Interrogator" data-i18n="interrogator">Interrogator</option>
|
|
<option value="Scout" data-i18n="scout">Scout</option>
|
|
<option value="Sleeper Agent" data-i18n="sleeperagent">Sleeper Agent</option>
|
|
<option value="Slicer" data-i18n="slicer">Slicer</option>
|
|
</optgroup>
|
|
<optgroup label="Force and Destiny" data-i18n-label="forceanddestiny"></optgroup>
|
|
<optgroup label="Consular" data-i18n-label="consular">
|
|
<option value="Arbiter" data-i18n="arbiter">Arbiter</option>
|
|
<option value="Ascetic" data-i18n="ascetic">Ascetic</option>
|
|
<option value="Healer" data-i18n="healer">Healer</option>
|
|
<option value="Niman Disciple" data-i18n="nimandisciple">Niman Disciple</option>
|
|
<option value="Sage" data-i18n="sage">Sage</option>
|
|
<option value="Teacher" data-i18n="teacher">Teacher</option>
|
|
</optgroup>
|
|
<optgroup label="Guardian" data-i18n-label="guardian">
|
|
<option value="Armorer" data-i18n="armorer">Armorer</option>
|
|
<option value="Peace Keeper" data-i18n="peacekeeper">Peace Keeper</option>
|
|
<option value="Protector" data-i18n="protector">Protector</option>
|
|
<option value="Soresu Defender" data-i18n="soresudefender">Soresu Defender</option>
|
|
<option value="Warden" data-i18n="warden">Warden</option>
|
|
<option value="Warleader" data-i18n="warleader">Warleader</option>
|
|
</optgroup>
|
|
<optgroup label="Mystic" data-i18n-label="mystic">
|
|
<option value="Advisor" data-i18n="advisor">Advisor</option>
|
|
<option value="Alchemist" data-i18n="alchemist">Alchemist</option>
|
|
<option value="Magus" data-i18n="magus">Magus</option>
|
|
<option value="Makashi Duelist" data-i18n="makashiduelist">Makashi Duelist</option>
|
|
<option value="Prophet" data-i18n="prophet">Prophet</option>
|
|
<option value="Seer" data-i18n="seer">Seer</option>
|
|
</optgroup>
|
|
<optgroup label="Seeker" data-i18n-label="seeker">
|
|
<option value="Ataru Striker" data-i18n="atarustriker">Ataru Striker</option>
|
|
<option value="Executioner" data-i18n="executioner">Executioner</option>
|
|
<option value="Hermit" data-i18n="hermit">Hermit</option>
|
|
<option value="Hunter" data-i18n="hunter">Hunter</option>
|
|
<option value="Navigator" data-i18n="navigator">Navigator</option>
|
|
<option value="Pathfinder" data-i18n="pathfinder">Pathfinder</option>
|
|
</optgroup>
|
|
<optgroup label="Sentinel" data-i18n-label="sentinel">
|
|
<option value="Artisan" data-i18n="artisan">Artisan</option>
|
|
<option value="Investigator" data-i18n="investigator">Investigator</option>
|
|
<option value="Racer" data-i18n="racer">Racer</option>
|
|
<option value="Sentry" data-i18n="sentry">Sentry</option>
|
|
<option value="Shadow" data-i18n="shadow">Shadow</option>
|
|
<option value="Shien Expert" data-i18n="shienexpert">Shien Expert</option>
|
|
</optgroup>
|
|
<optgroup label="Warrior" data-i18n-label="warrior">
|
|
<option value="Aggressor" data-i18n="aggressor">Aggressor</option>
|
|
<option value="Colossus" data-i18n="colossus">Colossus</option>
|
|
<option value="Juyo Berserker" data-i18n="juyoberserker">Juyo Berserker</option>
|
|
<option value="Shii-Cho Knight" data-i18n="shiichoknight">Shii-Cho Knight</option>
|
|
<option value="Starfighter Ace" data-i18n="starfighterace">Starfighter Ace</option>
|
|
<option value="Steel Hand Adept" data-i18n="steelhandadept">Steel Hand Adept</option>
|
|
</optgroup>
|
|
<optgroup label="Clone Wars Era" data-i18n-label="clonewarsera"></optgroup>
|
|
<optgroup label="Clone Soldier" data-i18n-label="clonesoldier">
|
|
<option value="Clone Trooper" data-i18n="clonetrooper">Clone Trooper</option>
|
|
<option value="Clone Pilot" data-i18n="clonepilot">Clone Pilot</option>
|
|
<option value="Clone Officer" data-i18n="cloneofficer">Clone Officer</option>
|
|
<option value="ARC Trooper" data-i18n="arctrooper">ARC Trooper</option>
|
|
<option value="Clone Commander" data-i18n="clonecommander">Clone Commander</option>
|
|
<option value="Clone Veteran" data-i18n="cloneveteran">Clone Veteran</option>
|
|
</optgroup>
|
|
<optgroup label="Jedi" data-i18n-label="jedi">
|
|
<option value="Padawan" data-i18n="padawan">Padawan</option>
|
|
<option value="Knight" data-i18n="knight">Knight</option>
|
|
<option value="General" data-i18n="general">General</option>
|
|
<option value="Master" data-i18n="master">Master</option>
|
|
</optgroup>
|
|
<optgroup label="Universal" data-i18n-label="universal">
|
|
<option value="Death Watch Warrior" data-i18n="deathwatchwarrior">Death Watch Warrior</option>
|
|
<option value="Force Adherent" data-i18n="forceadherent">Force Adherent</option>
|
|
<option value="Force Sensitive Emergent" data-i18n="forcesensitiveemergent">Force Sensitive Emergent</option>
|
|
<option value="Force Sensitive Exile" data-i18n="forcesensitiveexile">Force Sensitive Exile</option>
|
|
<option value="Force Sensitive Outcast" data-i18n="forcesensitiveoutcast">Force Sensitive Outcast</option>
|
|
<option value="Imperial Academy Cadet" data-i18n="imperialacademycadet">Imperial Academy Cadet</option>
|
|
<option value="Nightsister" data-i18n="nightsister">Nightsister</option>
|
|
<option value="Padawan Survivor" data-i18n="padawansurvivor">Padawan Survivor</option>
|
|
<option value="Pirate" data-i18n="pirate">Pirate</option>
|
|
<option value="Recruit" data-i18n="recruit">Recruit</option>
|
|
<option value="Republic Navy Officer" data-i18n="republicnavyofficer">Republic Navy Officer</option>
|
|
<option value="Republic Representative" data-i18n="republicrepresentative">Republic Representative</option>
|
|
<option value="Retired Clone Trooper" data-i18n="retiredclonetrooper">Retired Clone Trooper</option>
|
|
<option value="Scavenger" data-i18n="scavenger">Scavenger</option>
|
|
<option value="Senator" data-i18n="senator">Senator</option>
|
|
<option value="Separatist Commander" data-i18n="separatistcommander">Separatist Commander</option>
|
|
<option value="Ship Captain" data-i18n="shipcaptain">Ship Captain</option>
|
|
</optgroup>
|
|
</select>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<h2><span data-i18n="xp_credits">XP and Credits</span><button type="action" name="act_show_xp_credits"><span name="attr_show_xp_credits_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_xp_credits_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_xp_credits" value="true" />
|
|
<div class="xp_credits section">
|
|
<label data-i18n="xp_total_current">XP Total / Current</label>
|
|
<div class="xp_grid">
|
|
<input type="number" name="attr_xp_total" min="0" value="0" />
|
|
<div>/</div>
|
|
<input type="number" name="attr_xp_current" min="0" value="0" />
|
|
</div>
|
|
<label data-i18n="credits">Credits</label>
|
|
<input type="number" name="attr_credits" min="0" max="999999999999999" value="0" />
|
|
</div>
|
|
<div class="motivations_grid">
|
|
<div>
|
|
<h2><span data-i18n="obligation">Obligation</span><button type="action" name="act_show_obligation"><span name="attr_show_obligation_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_obligation_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_obligation" value="true" />
|
|
<div class="obligation section">
|
|
<div class="obligation_total_grid">
|
|
<label data-i18n="total_obligation">Total Obligation</label>
|
|
<span name="attr_obligation_total"></span>
|
|
<input type="hidden" name="attr_obligation_total" value="0" />
|
|
</div>
|
|
<div class="obligation_item list_heading">
|
|
<div>Type</div>
|
|
<div>Amount</div>
|
|
<div>Source</div>
|
|
<div>Notes</div>
|
|
</div>
|
|
<fieldset class="repeating_obligations">
|
|
<div class="obligation_item">
|
|
<input type="text" name="attr_obligation_type" />
|
|
<input type="number" name="attr_obligation_amount" maxlength="3" min="0" max="999" value="0" />
|
|
<input type="text" name="attr_obligation_source" />
|
|
<textarea name="attr_obligation_notes"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="duty">Duty</span><button type="action" name="act_show_duty"><span name="attr_show_duty_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_duty_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_duty" value="true" />
|
|
<div class="duty section">
|
|
<div class="duty_total_grid">
|
|
<label data-i18n="contribution_rank">Contribution Rank</label>
|
|
<input type="number" name="attr_contribution_rank" min="0" max="9" value="0" />
|
|
</div>
|
|
<div class="duty_item list_heading">
|
|
<div>Type</div>
|
|
<div>Amount</div>
|
|
<div>Notes</div>
|
|
</div>
|
|
<fieldset class="repeating_duties">
|
|
<div class="duty_item">
|
|
<input type="text" name="attr_duty_type" />
|
|
<input type="number" name="attr_duty_amount" maxlength="3" min="0" max="999" value="0" />
|
|
<textarea name="attr_duty_notes"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="morality">Morality</span><button type="action" name="act_show_morality"><span name="attr_show_morality_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_morality_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_morality" value="true" />
|
|
<div class="morality section">
|
|
<label data-i18n="morality">Morality</label>
|
|
<input type="number" name="attr_morality" min="0" max="100" value="50" />
|
|
<label data-i18n="conflict">Conflict</label>
|
|
<input type="number" name="attr_conflict" min="0" max="100" value="0" />
|
|
<label data-i18n="emotional_strength">Emotional Strength</label>
|
|
<input type="text" name="attr_emotional_strength" />
|
|
<label data-i18n="emotional_weakness">Emotional Weakness</label>
|
|
<input type="text" name="attr_emotional_weakness" />
|
|
<label data-i18n="ambition">Ambition</label>
|
|
<input type="text" name="attr_ambition" />
|
|
<label data-i18n="cause">Cause</label>
|
|
<input type="text" name="attr_cause" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h2><span data-i18n="notes">Notes</span><button type="action" name="act_show_bio_notes"><span name="attr_show_bio_notes_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_bio_notes_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_bio_notes" value="true" />
|
|
<div class="bio_notes section">
|
|
<textarea class="bio_notes_area" name="attr_bio_notes"></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="skills">
|
|
<h2><span data-i18n="characteristics">Characteristics</span><button type="action" name="act_show_characteristics"><span name="attr_show_characteristics_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_characteristics_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_characteristics" value="true" />
|
|
<div class="characteristics section">
|
|
<div>
|
|
<input name="attr_brawn" class="characteristics_brawn" type="number" min="1" max="7" value="0" />
|
|
<label data-i18n="brawn">Brawn</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_agility" class="characteristics_agility" type="number" min="1" max="7" value="0" />
|
|
<label data-i18n="agility">Agility</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_intellect" class="characteristics_intellect" type="number" min="1" max="7" value="0" />
|
|
<label data-i18n="intellect">Intellect</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_cunning" class="characteristics_cunning" type="number" min="1" max="7" value="0" />
|
|
<label data-i18n="cunning">Cunning</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_willpower" class="characteristics_willpower" type="number" min="1" max="7" value="0" />
|
|
<label data-i18n="willpower">Willpower</label>
|
|
</div>
|
|
<div>
|
|
<input name="attr_presence" class="characteristics_presence" type="number" min="1" max="7" value="0" />
|
|
<label data-i18n="presence">Presence</label>
|
|
</div>
|
|
</div>
|
|
<h2><span data-i18n="skills">Skills</span><button type="action" name="act_show_skills"><span name="attr_show_skills_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_skills_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_skills" value="true" />
|
|
<div class="skills_body section">
|
|
<div class="skills_general">
|
|
<h3>General Skills</h3>
|
|
<div class="skill skill_heading">
|
|
<div data-i18n="skill">Skill</div>
|
|
<div data-i18n="characteristic">Characteristic</div>
|
|
<div data-i18n="career">Career</div>
|
|
<div data-i18n="ranks">Ranks</div>
|
|
<div data-i18n="dice">Dice</div>
|
|
<div data-i18n="modifiers">Modifiers</div>
|
|
<div data-i18n="roll">Roll</div>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="astrogation">Astrogation</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_astrogation_career" value="true" />
|
|
<input type="number" name="attr_astrogation_rank" min="0" max="6" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_astrogation_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_astrogation_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_astrogation_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_astrogation" value="!eed characterID(@{character_id}) label(skill:Astrogation) @{astrogation_modifiers} skill(@{astrogation_rank}|@{intellect}|Astrogation) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="athletics">Athletics</label>
|
|
<div>(<span data-i18n="brawn_abbr">Bra</span>)</div>
|
|
<input type="checkbox" name="attr_athletics_career" value="true" />
|
|
<input type="number" name="attr_athletics_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_athletics_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_athletics_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_athletics_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_athletics" value="!eed characterID(@{character_id}) label(skill:Athletics) @{athletics_modifiers} skill(@{athletics_rank}|@{brawn}|Athletics) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="charm">Charm</label>
|
|
<div>(<span data-i18n="presence_abbr">Pr</span>)</div>
|
|
<input type="checkbox" name="attr_charm_career" value="true" />
|
|
<input type="number" name="attr_charm_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_charm_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_charm_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_charm_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_charm" value="!eed characterID(@{character_id}) label(skill:Charm) @{charm_modifiers} skill(@{charm_rank}|@{presence}|Charm) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="coercion">Coercion</label>
|
|
<div>(<span data-i18n="willpower_abbr">Wil</span>)</div>
|
|
<input type="checkbox" name="attr_coercion_career" value="true" />
|
|
<input type="number" name="attr_coercion_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_coercion_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_coercion_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_coercion_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_coercion" value="!eed characterID(@{character_id}) label(skill:Coercion) @{coercion_modifiers} skill(@{coercion_rank}|@{willpower}|Coercion) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="computers">Computers</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_computers_career" value="true" />
|
|
<input type="number" name="attr_computers_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_computers_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_computers_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_computers_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_computers" value="!eed characterID(@{character_id}) label(skill:Computers) @{computers_modifiers} skill(@{computers_rank}|@{intellect}|Computers) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="cool">Cool</label>
|
|
<div>(<span data-i18n="presence_abbr">Pr</span>)</div>
|
|
<input type="checkbox" name="attr_cool_career" value="true" />
|
|
<input type="number" name="attr_cool_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_cool_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_cool_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_cool_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_cool" value="!eed characterID(@{character_id}) label(skill:Cool) @{cool_modifiers} skill(@{cool_rank}|@{presence}|Cool) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="coordination">Coordination</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_coordination_career" value="true" />
|
|
<input type="number" name="attr_coordination_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_coordination_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_coordination_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_coordination_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_coordination" value="!eed characterID(@{character_id}) label(skill:Coordination) @{coordination_modifiers} skill(@{coordination_rank}|@{agility}|Coordination) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="deception">Deception</label>
|
|
<div>(<span data-i18n="cunning_abbr">Cun</span>)</div>
|
|
<input type="checkbox" name="attr_deception_career" value="true" />
|
|
<input type="number" name="attr_deception_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_deception_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_deception_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_deception_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_deception" value="!eed characterID(@{character_id}) label(skill:Deception) @{deception_modifiers} skill(@{deception_rank}|@{cunning}|Deception) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="discipline">Discipline</label>
|
|
<div>(<span data-i18n="willpower_abbr">Wil</span>)</div>
|
|
<input type="checkbox" name="attr_discipline_career" value="true" />
|
|
<input type="number" name="attr_discipline_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_discipline_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_discipline_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_discipline_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_discipline" value="!eed characterID(@{character_id}) label(skill:Discipline) @{discipline_modifiers} skill(@{discipline_rank}|@{willpower}|Discipline) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="leadership">Leadership</label>
|
|
<div>(<span data-i18n="presence_abbr">Pr</span>)</div>
|
|
<input type="checkbox" name="attr_leadership_career" value="true" />
|
|
<input type="number" name="attr_leadership_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_leadership_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_leadership_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_leadership_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_leadership" value="!eed characterID(@{character_id}) label(skill:Leadership) @{leadership_modifiers} skill(@{leadership_rank}|@{presence}|Leadership) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="mechanics">Mechanics</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_mechanics_career" value="true" />
|
|
<input type="number" name="attr_mechanics_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_mechanics_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_mechanics_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_mechanics_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_mechanics" value="!eed characterID(@{character_id}) label(skill:Mechanics) @{mechanics_modifiers} skill(@{mechanics_rank}|@{intellect}|Mechanics) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="medicine">Medicine</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_medicine_career" value="true" />
|
|
<input type="number" name="attr_medicine_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_medicine_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_medicine_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_medicine_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_medicine" value="!eed characterID(@{character_id}) label(skill:Medicine) @{medicine_modifiers} skill(@{medicine_rank}|@{intellect}|Medicine) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="negotiation">Negotiation</label>
|
|
<div>(<span data-i18n="presence_abbr">Pr</span>)</div>
|
|
<input type="checkbox" name="attr_negotiation_career" value="true" />
|
|
<input type="number" name="attr_negotiation_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_negotiation_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_negotiation_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_negotiation_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_negotiation" value="!eed characterID(@{character_id}) label(skill:Negotiation) @{negotiation_modifiers} skill(@{negotiation_rank}|@{presence}|Negotiation) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="perception">Perception</label>
|
|
<div>(<span data-i18n="cunning_abbr">Cun</span>)</div>
|
|
<input type="checkbox" name="attr_perception_career" value="true" />
|
|
<input type="number" name="attr_perception_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_perception_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_perception_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_perception_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_perception" value="!eed characterID(@{character_id}) label(skill:Perception) @{perception_modifiers} skill(@{perception_rank}|@{cunning}|Perception) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="piloting-planetary">Piloting - Planetary</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_piloting-planetary_career" value="true" />
|
|
<input type="number" name="attr_piloting-planetary_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_piloting-planetary_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_piloting-planetary_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_piloting-planetary_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_piloting-planetary" value="!eed characterID(@{character_id}) label(skill:Piloting - Planetary) @{piloting-planetary_modifiers} skill(@{piloting-planetary_rank}|@{agility}|Piloting - Planetary) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="piloting-space">Piloting - Space</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_piloting-space_career" value="true" />
|
|
<input type="number" name="attr_piloting-space_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_piloting-space_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_piloting-space_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_piloting-space_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_piloting-space" value="!eed characterID(@{character_id}) label(skill:Piloting - Space) @{piloting-space_modifiers} skill(@{piloting-space_rank}|@{agility}|Piloting - Space) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="resilience">Resilience</label>
|
|
<div>(<span data-i18n="brawn_abbr">Bra</span>)</div>
|
|
<input type="checkbox" name="attr_resilience_career" value="true" />
|
|
<input type="number" name="attr_resilience_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_resilience_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_resilience_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_resilience_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_resilience" value="!eed characterID(@{character_id}) label(skill:Resilience) @{resilience_modifiers} skill(@{resilience_rank}|@{brawn}|Resilience) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="skullduggery">Skullduggery</label>
|
|
<div>(<span data-i18n="cunning_abbr">Cun</span>)</div>
|
|
<input type="checkbox" name="attr_skullduggery_career" value="true" />
|
|
<input type="number" name="attr_skullduggery_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_skullduggery_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_skullduggery_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_skullduggery_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_skullduggery" value="!eed characterID(@{character_id}) label(skill:Skullduggery) @{skullduggery_modifiers} skill(@{skullduggery_rank}|@{cunning}|Skullduggery) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="stealth">Stealth</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_stealth_career" value="true" />
|
|
<input type="number" name="attr_stealth_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_stealth_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_stealth_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_stealth_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_stealth" value="!eed characterID(@{character_id}) label(skill:Stealth) @{stealth_modifiers} skill(@{stealth_rank}|@{agility}|Stealth) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="streetwise">Streetwise</label>
|
|
<div>(<span data-i18n="cunning_abbr">Cun</span>)</div>
|
|
<input type="checkbox" name="attr_streetwise_career" value="true" />
|
|
<input type="number" name="attr_streetwise_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_streetwise_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_streetwise_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_streetwise_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_streetwise" value="!eed characterID(@{character_id}) label(skill:Streetwise) @{streetwise_modifiers} skill(@{streetwise_rank}|@{cunning}|Streetwise) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="survival">Survival</label>
|
|
<div>(<span data-i18n="cunning_abbr">Cun</span>)</div>
|
|
<input type="checkbox" name="attr_survival_career" value="true" />
|
|
<input type="number" name="attr_survival_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_survival_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_survival_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_survival_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_survival" value="!eed characterID(@{character_id}) label(skill:Survival) @{survival_modifiers} skill(@{survival_rank}|@{cunning}|Survival) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="vigilance">Vigilance</label>
|
|
<div>(<span data-i18n="willpower_abbr">Wil</span>)</div>
|
|
<input type="checkbox" name="attr_vigilance_career" value="true" />
|
|
<input type="number" name="attr_vigilance_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_vigilance_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_vigilance_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_vigilance_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_vigilance" value="!eed characterID(@{character_id}) label(skill:Vigilance) @{vigilance_modifiers} skill(@{vigilance_rank}|@{willpower}|Vigilance) @{dicePool}"></button>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="skills_combat">
|
|
<h3>Combat Skills</h3>
|
|
<div class="skill skill_heading">
|
|
<div data-i18n="skill">Skill</div>
|
|
<div data-i18n="characteristic">Characteristic</div>
|
|
<div data-i18n="career">Career</div>
|
|
<div data-i18n="ranks">Ranks</div>
|
|
<div data-i18n="dice">Dice</div>
|
|
<div data-i18n="modifiers">Modifiers</div>
|
|
<div data-i18n="roll">Roll</div>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="brawl">Brawl</label>
|
|
<div>(<span data-i18n="brawn_abbr">Bra</span>)</div>
|
|
<input type="checkbox" name="attr_brawl_career" value="true" />
|
|
<input type="number" name="attr_brawl_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_brawl_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_brawl_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_brawl_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_brawl" value="!eed characterID(@{character_id}) label(skill:Brawl) @{brawl_modifiers} skill(@{brawl_rank}|@{brawn}|Brawl) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="melee">Melee</label>
|
|
<div>(<span data-i18n="brawn_abbr">Bra</span>)</div>
|
|
<input type="checkbox" name="attr_melee_career" value="true" />
|
|
<input type="number" name="attr_melee_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_melee_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_melee_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_melee_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_melee" value="!eed characterID(@{character_id}) label(skill:Melee) @{melee_modifiers} skill(@{melee_rank}|@{brawn}|Melee) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="gunnery">Gunnery</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_gunnery_career" value="true" />
|
|
<input type="number" name="attr_gunnery_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_gunnery_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_gunnery_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_gunnery_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_gunnery" value="!eed characterID(@{character_id}) label(skill:Gunnery) @{gunnery_modifiers} skill(@{gunnery_rank}|@{agility}|Gunnery) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="lightsaber">Lightsaber</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_lightsaber_characteristic">
|
|
<option data-i18n="brawn" value="brawn" selected="selected">Brawn</option>
|
|
<option data-i18n="agility" value="agility">Agility</option>
|
|
<option data-i18n="intellect" value="intellect">Intellect</option>
|
|
<option data-i18n="cunning" value="cunning">Cunning</option>
|
|
<option data-i18n="willpower" value="willpower">Willpower</option>
|
|
<option data-i18n="presence" value="presence">Presence</option>
|
|
</select>
|
|
</div>
|
|
<input type="hidden" name="attr_lightsaber_characteristic_value" value="" />
|
|
<input type="checkbox" name="attr_lightsaber_career" value="true" />
|
|
<input type="number" name="attr_lightsaber_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_lightsaber_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_lightsaber_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_lightsaber_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_lightsaber" value="!eed characterID(@{character_id}) label(skill:Lightsaber) @{lightsaber_modifiers} skill(@{lightsaber_rank}|@{lightsaber_characteristic_value}|Lightsaber) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="ranged-light">Ranged - Light</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_ranged-light_career" value="true" />
|
|
<input type="number" name="attr_ranged-light_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_ranged-light_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_ranged-light_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_ranged-light_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_ranged-light" value="!eed characterID(@{character_id}) label(skill:Ranged - Light) @{ranged-light_modifiers} skill(@{ranged-light_rank}|@{agility}|Ranged - Light) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="ranged-heavy">Ranged - Heavy</label>
|
|
<div>(<span data-i18n="agility_abbr">Ag</span>)</div>
|
|
<input type="checkbox" name="attr_ranged-heavy_career" value="true" />
|
|
<input type="number" name="attr_ranged-heavy_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_ranged-heavy_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_ranged-heavy_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_ranged-heavy_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_ranged-heavy" value="!eed characterID(@{character_id}) label(skill:Ranged - Heavy) @{ranged-heavy_modifiers} skill(@{ranged-heavy_rank}|@{agility}|Ranged - Heavy) @{dicePool}"></button>
|
|
</div>
|
|
</div>
|
|
<div class="skills_knowledge">
|
|
<h3>Knowledge Skills</h3>
|
|
<div class="skill skill_heading">
|
|
<div data-i18n="skill">Skill</div>
|
|
<div data-i18n="characteristic">Characteristic</div>
|
|
<div data-i18n="career">Career</div>
|
|
<div data-i18n="ranks">Ranks</div>
|
|
<div data-i18n="dice">Dice</div>
|
|
<div data-i18n="modifiers">Modifiers</div>
|
|
<div data-i18n="roll">Roll</div>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="core-worlds">Core Worlds</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_core-worlds_career" value="true" />
|
|
<input type="number" name="attr_core-worlds_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_core-worlds_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_core-worlds_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_core-worlds_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_core-worlds" value="!eed characterID(@{character_id}) label(skill:Core Worlds) @{core-worlds_modifiers} skill(@{core-worlds_rank}|@{intellect}|Core Worlds) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="education">Education</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_education_career" value="true" />
|
|
<input type="number" name="attr_education_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_education_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_education_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_education_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_education" value="!eed characterID(@{character_id}) label(skill:Education) @{education_modifiers} skill(@{education_rank}|@{intellect}|Education) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="lore">Lore</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_lore_career" value="true" />
|
|
<input type="number" name="attr_lore_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_lore_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_lore_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_lore_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_lore" value="!eed characterID(@{character_id}) label(skill:Lore) @{lore_modifiers} skill(@{lore_rank}|@{intellect}|Lore) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="outer-rim">Outer Rim</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_outer-rim_career" value="true" />
|
|
<input type="number" name="attr_outer-rim_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_outer-rim_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_outer-rim_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_outer-rim_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_outer-rim" value="!eed characterID(@{character_id}) label(skill:Outer Rim) @{outer-rim_modifiers} skill(@{outer-rim_rank}|@{intellect}|Outer Rim) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="underworld">Underworld</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_underworld_career" value="true" />
|
|
<input type="number" name="attr_underworld_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_underworld_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_underworld_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_underworld_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_underworld" value="!eed characterID(@{character_id}) label(skill:Underworld) @{underworld_modifiers} skill(@{underworld_rank}|@{intellect}|Underworld) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="warfare">Warfare</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_warfare_career" value="true" />
|
|
<input type="number" name="attr_warfare_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_warfare_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_warfare_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_warfare_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_warfare" value="!eed characterID(@{character_id}) label(skill:Warfare) @{warfare_modifiers} skill(@{warfare_rank}|@{intellect}|Warfare) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill">
|
|
<label data-i18n="xenology">Xenology</label>
|
|
<div>(<span data-i18n="intellect_abbr">Int</span>)</div>
|
|
<input type="checkbox" name="attr_xenology_career" value="true" />
|
|
<input type="number" name="attr_xenology_rank" min="0" max="6" maxlength="1" value="0" />
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_xenology_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_xenology_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_xenology_modifiers" />
|
|
<button class="roll_button" type="roll" name="roll_xenology" value="!eed characterID(@{character_id}) label(skill:Xenology) @{xenology_modifiers} skill(@{xenology_rank}|@{intellect}|Xenology) @{dicePool}"></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="attr_skillStatStore" value="%7B%22astrogation%22%3A%22intellect%22%2C%22athletics%22%3A%22brawn%22%2C%22charm%22%3A%22presence%22%2C%22coercion%22%3A%22willpower%22%2C%22computers%22%3A%22intellect%22%2C%22cool%22%3A%22presence%22%2C%22coordination%22%3A%22agility%22%2C%22deception%22%3A%22cunning%22%2C%22discipline%22%3A%22willpower%22%2C%22leadership%22%3A%22presence%22%2C%22mechanics%22%3A%22intellect%22%2C%22medicine%22%3A%22intellect%22%2C%22negotiation%22%3A%22presence%22%2C%22perception%22%3A%22cunning%22%2C%22piloting-planetary%22%3A%22agility%22%2C%22piloting-space%22%3A%22agility%22%2C%22resilience%22%3A%22brawn%22%2C%22skullduggery%22%3A%22cunning%22%2C%22stealth%22%3A%22agility%22%2C%22streetwise%22%3A%22cunning%22%2C%22survival%22%3A%22cunning%22%2C%22vigilance%22%3A%22willpower%22%2C%22brawl%22%3A%22brawn%22%2C%22melee%22%3A%22brawn%22%2C%22gunnery%22%3A%22agility%22%2C%22lightsaber%22%3A%22brawn%22%2C%22ranged-light%22%3A%22agility%22%2C%22ranged-heavy%22%3A%22agility%22%2C%22core-worlds%22%3A%22intellect%22%2C%22education%22%3A%22intellect%22%2C%22lore%22%3A%22intellect%22%2C%22outer-rim%22%3A%22intellect%22%2C%22underworld%22%3A%22intellect%22%2C%22warfare%22%3A%22intellect%22%2C%22xenology%22%3A%22intellect%22%7D" />
|
|
</div>
|
|
<div class="combat">
|
|
<div>
|
|
<h2><span data-i18n="initiative">Initiative</span><button type="action" name="act_show_initiative"><span name="attr_show_initiative_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_initiative_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_initiative" value="true" />
|
|
<div class="initiative section">
|
|
<div class="skill skill_cool">
|
|
<label class="cell_width_3" data-i18n="cool_if_prepared">Cool (if prepared)</label>
|
|
<div>(<span data-i18n="presence_abbr">Pr</span>)</div>
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_init_cool_yd" value="(((@{presence} + @{cool_rank}) - abs(@{presence} - @{cool_rank})) / 2)" disabled />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_init_cool_gd" value="((((@{presence} + @{cool_rank}) + abs(@{presence} - @{cool_rank})) / 2) - @{cool_yd})" disabled />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_init_cool_modifiers" />
|
|
<button class="roll_button" type="roll" name="attr_roll_init_cool" value="!eed characterID(@{character_id}) label(skill:Initiative Cool) @{cool_modifiers} @{init_cool_modifiers} skill(@{cool_rank}|@{presence}|Cool) @{dicePool}"></button>
|
|
</div>
|
|
<div class="skill skill_vigilance">
|
|
<label class="cell_width_3" data-i18n="vigilance_if_unexpected">Vigilance (if unexpected)</label>
|
|
<div>(<span data-i18n="willpower_abbr">Wil</span>)</div>
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_init_vigilance_yd" value="(((@{willpower} + @{vigilance_rank}) - abs(@{willpower} - @{vigilance_rank})) / 2)" disabled />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_init_vigilance_gd" value="((((@{willpower} + @{vigilance_rank}) + abs(@{willpower} - @{vigilance_rank})) / 2) - @{vigilance_yd})" disabled />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="text" name="attr_init_vigilance_modifiers" />
|
|
<button class="roll_button" type="roll" name="attr_roll_init_vigilance" value="!eed characterID(@{character_id}) label(skill:Initiative Vigilance) @{vigilance_modifiers} @{init_vigilance_modifiers} skill(@{vigilance_rank}|@{willpower}|Vigilance) @{dicePool}"></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="criticals">Criticals</span><button type="action" name="act_show_criticals"><span name="attr_show_criticals_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_criticals_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_criticals" value="true" />
|
|
<div class="criticals section">
|
|
<h3 data-i18n="roll_a_critical">Roll a Critical (for any target)</h3>
|
|
<div class="rolla_critical">
|
|
<label data-i18n="critical_bonus">Critical Bonus</label>
|
|
<input name="attr_critical-bonus-standalone" type="number" step="10" value="0" min="0" max="120" />
|
|
<input name="attr_target-type" type="hidden" value="NPC" />
|
|
<button type="roll" class="roll_crit_button" value="!eed characterID(@{character_id}) rollRandomCritical" data-i18n="roll_critical">Roll Critical</button>
|
|
</div>
|
|
<h3 data-i18n="your_current_critical_injuries">Your Current Critical Injuries</h3>
|
|
<fieldset class="repeating_current-crits">
|
|
<input class="current_crit_severity_input" type="hidden" name="attr_current_crit_severity" value="" />
|
|
<div class="current_crit">
|
|
<div class="current_crit_container">
|
|
<div><span name="attr_current_crit_severity"></span></div>
|
|
<div><span name="attr_current_crit_type" class="current_crit_type"></span></div>
|
|
<div class="select_wrapper">
|
|
<select name="attr_current_crit_number">
|
|
<option class="disabled_option" value="0">Crit Roll</option>
|
|
<optgroup label="Easy (1 ♦)">
|
|
<option value="5">1 - 5</option>
|
|
<option value="10">6 - 10</option>
|
|
<option value="15">11 - 15</option>
|
|
<option value="20">16 - 20</option>
|
|
<option value="25">21 - 25</option>
|
|
<option value="30">26 - 30</option>
|
|
<option value="35">31 - 35</option>
|
|
<option value="40">36 - 40</option>
|
|
</optgroup>
|
|
<optgroup label="Average (2 ♦♦)">
|
|
<option value="45">41 - 45</option>
|
|
<option value="50">46 - 50</option>
|
|
<option value="55">51 - 55</option>
|
|
<option value="60">56 - 60</option>
|
|
<option value="65">61 - 65</option>
|
|
<option value="70">66 - 70</option>
|
|
<option value="75">71 - 75</option>
|
|
<option value="80">76 - 80</option>
|
|
<option value="85">81 - 85</option>
|
|
<option value="90">86 - 90</option>
|
|
</optgroup>
|
|
<optgroup label="Hard (3 ♦♦♦)">
|
|
<option value="95">91 - 95</option>
|
|
<option value="100">96 - 100</option>
|
|
<option value="105">101 - 105</option>
|
|
<option value="110">106 - 110</option>
|
|
<option value="115">111 - 115</option>
|
|
<option value="120">116 - 120</option>
|
|
<option value="125">121 - 125</option>
|
|
</optgroup>
|
|
<optgroup label="Daunting (4 ♦♦♦♦)">
|
|
<option value="130">126 - 130</option>
|
|
<option value="140">131 - 140</option>
|
|
<option value="150">141 - 150</option>
|
|
</optgroup>
|
|
<optgroup label="Dead">
|
|
<option value="151">151+</option>
|
|
</optgroup>
|
|
</select>
|
|
</div>
|
|
<div class="current_crit_description"><span name="attr_current_crit_description"></span></div>
|
|
</div>
|
|
<button type="action" name="act_healcrit" data-i18n="heal_this_wound">Heal this wound</button>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="weapons">Weapons</span><button type="action" name="act_show_weapons"><span name="attr_show_weapons_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_weapons_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_weapons" value="true" />
|
|
<div class="weapons section">
|
|
<fieldset class="repeating_weapons">
|
|
<div class="weapon">
|
|
<h3 class="weapon_name"><span name="attr_make_model">Make/Model</span></h3>
|
|
<div class="weapon_stats">
|
|
<div>
|
|
<label data-i18n="damage">Damage</label>
|
|
<input type="number" name="attr_weapon_damage" max="20" min="0" value="0" />
|
|
</div>
|
|
<div>
|
|
<label data-i18n="critical">Critical</label>
|
|
<input type="number" name="attr_weapon_critical" max="9" min="0" value="0" />
|
|
</div>
|
|
<button name="roll_weapon" type="roll" value="!eed characterID(@{character_id}) label(Weapon:@{make_model}|Type:@{weapon_skill}|Damage:@{weapon_damage}|Critical:@{weapon_critical}|Range:@{weapon_range}|Qualities:@{weapon_qualities_list}) @{weapon_skill_value} @{weapon_condition} @{weapon_qualities_pool} @{dicePool} calculateDamage(@{weapon_damage}|@{weapon_critical}|@{weapon_damage_bonus_total}|@{weapon_critical_bonus_total})"></button>
|
|
<div>
|
|
<label data-i18n="encumbrance_abbr">Encum</label>
|
|
<input type="number" name="attr_weapon_encumbrance" max="9" min="0" value="0" />
|
|
</div>
|
|
<div>
|
|
<label data-i18n="hard_points">Hard Points</label>
|
|
<input type="number" name="attr_weapon_hard_points" max="9" min="0" value="0" />
|
|
</div>
|
|
</div>
|
|
<div class="weapon_info">
|
|
<label data-i18n="make_model">Make-Model</label>
|
|
<input type="text" name="attr_make_model" />
|
|
<label data-i18n="carried_">Carried?</label>
|
|
<div class="weapon_carried_grid">
|
|
<input type="checkbox" name="attr_weapon_carried" value="true" />
|
|
<span class="icon_help">
|
|
<div class="help_info_left">
|
|
<p>Check this box if the character is currently carrying this weapon. Carried weapons count toward total encumbrance.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<label data-i18n="skill">Skill</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_skill">
|
|
<optgroup label="Combat Skills" data-i18n-label="combat_skills">
|
|
<option value="Brawl" data-i18n="brawl">Brawl</option>
|
|
<option value="Melee" data-i18n="melee">Melee</option>
|
|
<option value="Gunnery" data-i18n="gunnery">Gunnery</option>
|
|
<option value="Ranged - Light" data-i18n="ranged-light">Ranged - Light</option>
|
|
<option value="Ranged - Heavy" data-i18n="ranged-heavy">Ranged - Heavy</option>
|
|
<option value="Lightsaber" data-i18n="lightsaber">Lightsaber</option>
|
|
</optgroup>
|
|
<optgroup label="General Skills" data-i18n-label="general_skills">
|
|
<option value="Mechanics" data-i18n="mechanics">Mechanics</option>
|
|
<option value="Medicine" data-i18n="medecine">Medicine</option>
|
|
<option value="Resilience" data-i18n="resilience">Resilience</option>
|
|
</optgroup>
|
|
</select>
|
|
</div>
|
|
<label><span name="attr_weapon_skill"></span></label>
|
|
<div class="skill_rank_boxes">
|
|
<input class="yd" type="hidden" name="attr_weapon_skill_yd" value="" />
|
|
<span class="icon-proficiency-dice"></span>
|
|
<input class="gd" type="hidden" name="attr_weapon_skill_gd" value="" />
|
|
<span class="icon-ability-dice"></span>
|
|
</div>
|
|
<input type="hidden" name="attr_weapon_skill_value" value="" />
|
|
<label data-i18n="range">Range</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_range">
|
|
<option value="Engaged" data-i18n="engaged">Engaged</option>
|
|
<option value="Short" data-i18n="short">Short</option>
|
|
<option value="Medium" data-i18n="medium">Medium</option>
|
|
<option value="Long" data-i18n="long">Long</option>
|
|
<option value="Extreme" data-i18n="extreme">Extreme</option>
|
|
</select>
|
|
</div>
|
|
<label data-i18n="condition">Condition</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_condition">
|
|
<option value="" data-i18n="undamaged">Undamaged</option>
|
|
<option value="1blk" data-i18n="minor">Minor</option>
|
|
<option value="1p" data-i18n="moderate">Moderate</option>
|
|
<option value="unusableWeapon" data-i18n="major">Major</option>
|
|
<option value="unusableWeapon" data-i18n="destroyed">Destroyed</option>
|
|
</select>
|
|
</div>
|
|
<label class="critical_damage_cell" data-i18n="critical_bonus">Critical Bonus</label>
|
|
<div class="critical_damage_cell">
|
|
<div class="weapon_critical_bonus">
|
|
<input name="attr_weapon_critical_bonus" type="number" step="10" value="0" min="0" max="200" />
|
|
<div>
|
|
<span data-i18n="from_other">from Other</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Include a critical bonus for this weapon from a source other than Vicious, such as a weapon attachment/mod or a talent. It is added to a roll when activating a critical injury with this weapon.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" class="weapon_critical_bonus_vicious" name="attr_weapon_quality_vicious_crit_bonus" value="0" />
|
|
<div class="weapon_critical_bonus weapon_critical_bonus_vicious">
|
|
<div class="weapon_bonus_text">+<span name="attr_weapon_quality_vicious_crit_bonus"></span></div>
|
|
<div>
|
|
<span data-i18n="from_vicious">from Vicious</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This shows the critical bonus added to the weapon due to a Vicious quality. It is automatically added to a roll when activating a critical injury with this weapon.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="weapon_critical_bonus weapon_critical_bonus_total">
|
|
<input name="attr_weapon_critical_bonus_total" type="hidden" value="0" />
|
|
<div class="weapon_bonus_text"><span name="attr_weapon_critical_bonus_total"></span></div>
|
|
<div><span data-i18n="total_bonus">Total Bonus</span></div>
|
|
</div>
|
|
</div>
|
|
<label class="critical_damage_cell" data-i18n="damage_bonus:">Damage Bonus</label>
|
|
<div class="critical_damage_cell">
|
|
<div class="weapon_damage_bonus">
|
|
<input name="attr_weapon_damage_bonus" type="number" value="0" min="-10" max="10" />
|
|
<div>
|
|
<span data-i18n="from_other">from Other</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Include a damage bonus for this weapon from a source other than Superior or Inferior, such as a weapon attachment/mod or a talent. It is added to a roll when calculating damage with this weapon.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" class="weapon_quality_superior_bonus_damage" name="attr_weapon_quality_superior_bonus_damage" value="0" />
|
|
<div class="weapon_damage_bonus weapon_damage_bonus_superior">
|
|
<div class="weapon_bonus_text">+<span name="attr_weapon_quality_superior_bonus_damage"></span></div>
|
|
<div>
|
|
<span data-i18n="from_superior">from Superior</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This shows the damage bonus added to the weapon due to a Superior quality. It is automatically added to a roll when calculating damage with this weapon.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" class="weapon_quality_inferior_penalty_damage" name="attr_weapon_quality_inferior_penalty_damage" value="0" />
|
|
<div class="weapon_damage_bonus weapon_damage_bonus_inferior">
|
|
<div class="weapon_bonus_text">-<span name="attr_weapon_quality_inferior_penalty_damage"></span></div>
|
|
<div>
|
|
<span data-i18n="from_inferior">from Inferior</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This shows the damage subtracted from the weapon due to an Inferior quality. It is automatically subtracted from a roll when calculating damage with this weapon.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="weapon_damage_bonus weapon_damage_bonus_total">
|
|
<input name="attr_weapon_damage_bonus_total" type="hidden" value="0" />
|
|
<div class="weapon_bonus_text"><span name="attr_weapon_damage_bonus_total"></span></div>
|
|
<div><span data-i18n="total_bonus">Total Bonus</span></div>
|
|
</div>
|
|
</div>
|
|
<label data-i18n="weapon_qualities">Weapon Qualities</label>
|
|
<div class="weapon_qualities_cell"><span name="attr_weapon_qualities_list"></span></div>
|
|
</div>
|
|
<h3>
|
|
<div class="weapon_qualities_header">
|
|
<span data-i18n="weapon_qualities">Weapon Qualities</span>
|
|
<span class="weapon_qualities_activation_icon"></span>
|
|
<span class="weapon_qualities_activation" data-i18n="two_advantage_to_activate">Two Advantage to activate unless otherwise noted</span>
|
|
</div>
|
|
<button type="action" name="act_show-weapon-qualities"><span name="attr_show-weapon-qualities_label"></span></button>
|
|
</h3>
|
|
<input type="hidden" name="attr_weapon_qualities_pool" value="@{weapon_quality_accurate_value}b @{weapon_quality_inaccurate_value}blk @{weapon_quality_cumbersome_penalty}p @{weapon_quality_unwieldy_penalty}p @{weapon_quality_inferior_penalty} @{weapon_quality_superior_bonus}" />
|
|
<input type="hidden" name="attr_weapon_qualities_list" value="None" />
|
|
<input type="hidden" name="attr_show-weapon-qualities_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show-weapon-qualities" value="true" />
|
|
<div class="weapon_qualities section">
|
|
<label><span data-i18n="accurate">Accurate</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Accurate weapons are easier to aim or wield, whether through design or technology. For each level of this trait, the attacker adds 1 blue to their attack dice pools while using this weapon.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_accurate_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="auto_fire">Auto-Fire</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>A weapon with Auto-fire can be set to shoot in rapid succession and potentially spray an area with bolts, flechettes, slugs, or other types of projectiles. The advantage in using Auto-fire is that it has the chance to hit multiple targets or hit a single target multiple times.</p>
|
|
<p>Attacking with a weapon on Auto-fire is generally less accurate, and the attacker must increase the difficulty of the attack check by 1 purple die. The user may choose to not use the Auto-fire quality on a weapon; in this case, they cannot trigger the quality but also does not suffer the aforementioned penalty.</p>
|
|
<p>If the attack hits, the attacker can trigger Auto-fire by spending 2 Advantages Auto-fire can be triggered multiple times. Each time the attacker triggers Autofire, it deals an additional hit to the target. Each of these counts as an additional hit from that weapon, and each hit deals base damage plus the number of uncanceled success on the check.</p>
|
|
<p>These additional hits can be allocated to the target, or to other targets within range of the weapon. If the attacker wishes to hit multiple targets, they must decide to do so before making the check. Furthermore, if they wish to hit multiple targets, their initial target must always be the target with the highest difficulty and highest defense (if this is two separate targets, the GM chooses which target is the initial target). The initial hit must always be against the initial target. Subsequent hits generated can be allocated to any of the other designated targets.</p>
|
|
<p>Auto-fire weapons can also activate one Critical Injury for each hit generated on the attack per the normal cost; the Critical must target the target of the specific hit.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_auto_fire_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="blast">Blast</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>The weapon has a large spread, an explosive blast, or similar area of effect, like the detonation of a grenade or a warhead fired from a missile launcher. If the attack is successful and Blast activates, each character (friend or foe) engaged with the original target suffers damage equal to the weapon's Blast rating (plus an additional wound per success as usual).</p>
|
|
<p>In a relatively small and enclosed area, the Game Master might decide that everyone in the room suffers damage.</p>
|
|
<p>If the Blast quality doesn't activate, the ordnance still detonates, but bad luck or poor aim on the part of the firer (or quick reactions on the part of the victims) means the explosion may not catch anyone else in its radius. However, the user may also trigger Blast if the attack misses by spending 3 advantages. In this case, the original target and every target engaged with the original target suffers damage equal to the Blast rating of the weapon.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_blast_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="breach">Breach</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Weapons with Breach burn through the toughest armor, and are often heavy weapons or starship weapons.</p>
|
|
<p>Breach weapons ignore one point of armor for every rating of Breach (meaning they also ignore 10 points of soak for every rating of Breach).</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_breach_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="burn">Burn</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Weapons with Burn inflict damage over time. If the attack is successful, the target continues to suffer the weapon's base damage each round for a number of rounds equal to the weapon's Burn rating. Damage is applied at the start of each of the target's turns.</p>
|
|
<p>A victim might be able to stop the damage by rolling around on the ground and making an Agility check as an action. This is an Average (2 purple dice) Coordination check on hard surfaces such as the hall of a spaceship, or an Easy (1 purple die) Coordination check on grass or soft ground. Jumping into a body of water stops the damage immediately. Both situations assume the flame is from actual combustion rather than a chemical reaction. With the latter, there is usually little the victim can do.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_burn_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="concussive">Concussive</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>The weapon's attack can leave the target shell-shocked from mighty blows or punishing Shockwaves, unable to perform any but the most basic actions. The target is staggered for a number of rounds equal to the weapon's Concussive rating. A staggered target cannot perform actions.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_concussive_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="cortosis">Cortosis</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Cortosis is an ore principally found in the Outer Rim. It is extremely rare and valuable, and was used primarily during the Clone Wars against the Jedi Knights. There are two varieties of Cortosis ore. The rarest versions can actually short out a lightsaber's blade, causing it to fail temporarily. The far more common Cortosis ore is still a miraculous substance, because when molded into armor, it forms an interlocking molecular bond that is extremely resistant to energy weapons.</p>
|
|
<p>Weapons with the Cortosis quality are immune to the Sunder quality. Armor with the Cortosis quality makes the wearer's soak immune to the Pierce and Breach qualities.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_cortosis_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="cumbersome">Cumbersome</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>A Cumbersome weapon is large, unwieldy, awkward, or heavy. To wield a Cumbersome weapon properly, the character needs a Brawn characteristic equal to or greater than the weapon's Cumbersome rating. For each point of Brawn by which the character is deficient, they must increase the difficulty of all checks made while using the weapon by one.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input type="hidden" name="attr_weapon_quality_cumbersome_penalty" value="" />
|
|
<input name="attr_weapon_quality_cumbersome_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="defensive">Defensive</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Defensive weapons are particularly good at fending off incoming melee attacks. A character wielding a weapon with the Defensive quality increases their melee defense by the weapon's Defensive rating.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_defensive_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="deflection">Deflection</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>An item with the Deflection quality increases the wearer's ranged defense equal to its Deflection rating.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_deflection_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="disorient">Disorient</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>A weapon with Disorient can daze an opponent. When Disorient is triggered, the target is disoriented for a number of rounds equal to the weapon's Disorient rating. (A disoriented target adds 1 black die to all skill checks they perform.)</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_disorient_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="ensnare">Ensnare</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>A weapon with Ensnare binds a foe and restricts their movements. When Ensnare is triggered, the target is immobilized for a number of rounds equal to the weapon's Ensnare rating. An Ensnared target may attempt a Hard (3 purple dice) Athletics check as their action on their turn to break free from the effect. (An immobilized target cannot perform maneuvers.)</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_ensnare_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="guided">Guided</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Certain types of projectiles, such as guided missiles, may benefit from course alterations after being fired. If a character misses while firing a Guided weapon and if Guided is activated, they may make an attack check at the end of the round. The difficulty of the check is calculated by comparing the weapon's silhouette of 0 to the silhouette of the target, and the check's green die equal the weapon's Guided rating. If the test is successful, the weapon strikes the target, and damage is dealt normally.</p>
|
|
<p>Guided requires 3 advantages to activate, unless otherwise specified in the weapon's description. Remember, the Guided effect can activate on its subsequent attacks, representing the projectile continuing to track the target.</p>
|
|
<p>"Spoofing" is a countermeasure designed to work against a particular type of projectile, such as flares designed to draw off infrared missiles. Spoofing directly increases the defense of the target against attacks with the Guided quality.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_guided_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="knockdown">Knockdown</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>When knockdown triggers, the target is knocked prone. Unless specified otherwise, Knockdown requires 2 advantages to trigger, plus one additional advantage per silhouette of the target beyond one. </p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_knockdown_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="inaccurate">Inaccurate</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Inaccurate weapons are weapons of a shoddy or inferior construction, which means they are less likely to be accurate or precise. Alternatively, the weapon's nature may inhibit accuracy. Inaccurate weapons add 1 black die to the attacker's dice pool equal to their Inaccurate rating. </p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_inaccurate_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="inferior">Inferior</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>An Inferior item is a lackluster example of its kind, representing shoddy and poor craftsmanship. An Inferior weapon generates automatic 1 threat on all checks related to its use, and has its base damage decreased by one. Inferior armor has its encumbrance increased by one and its defense decreased by one. If it does not have defense, decrease its soak value by one, to a minimum of zero.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input type="hidden" name="attr_weapon_quality_inferior_penalty" value="" />
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_inferior_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="ion">Ion</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Ion weapons are designed to affect electrical systems instead of dealing raw damage. They are fitted to ships to knock out opponents' shields, sensors, and engines. They are shorter range than laser weapons and deal larger amounts of damage, but their damage is dealt to the target (usually a vehicle) as system strain. The damage is still reduced by armor and soak. Droids are affected by ion weapons, taking damage to their strain threshold.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_ion_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="limited_ammo">Limited Ammo</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Some weapons fire particularly large or complex projectiles that cost significant numbers of credits or are themselves a complete weapon that, once launched, is expended. A weapon with the Limited Ammo quality may be used to make a number of attacks equal to its Limited Ammo rating before it must be reloaded with a maneuver. In addition, each shot expends one of a limited number of rounds of ammo, which, once used, must be purchased or otherwise obtained before firing the weapon again. This also applies to grenades and other "one use" weapons that have the Limited Ammo 1 quality (here, the user is not "reloading" the grenade, but drawing another to use—but mechanically they are equivalent).</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_limited_ammo_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="linked">Linked</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Some weapons, like the laser cannons fitted to the X-wing, are designed to fire together at the same target. This increases the possibility of a hit as well as the damage dealt. When firing a linked weapon, on a successful attack, the weapon deals one hit. The wielder may spend 2 advantages to gain an additional hit, and may do so a number of times equal to the weapon's Linked rating. Additional hits from the Linked weapon being used may only be applied against the original target. Each hit deals the weapon's base damage plus the total uncanceled successes scored on the check. </p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_linked_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="pierce">Pierce</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>An attack made with this weapon ignores one point of soak for each rank of Pierce. If the weapon has more ranks of Pierce than the target's total soak, it completely ignores the target's soak. For example. Pierce 3 against a soak of 2 ignores 2 points of soak, but the extra "point" of Pierce has no further effect. </p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_pierce_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="prepare">Prepare</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Weapons with this quality require time to set up before being used. The user must perform a number of preparation maneuvers equal to the weapon's Prepare rating before making attacks with that weapon.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_prepare_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="slow_firing">Slow-Firing</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Slow-Firing weapons tend to be large, heavy, emplacement-mounted weapons like the turbolasers found on capital ships or planetary defense ion cannons. While they deal incredible damage, they need time to recharge or cool down between shots. A weapon's Slow-Firing rating dictates how quickly the weapon can be fired after an attack. For example, a heavy turbolaser with Slow-Firing 2 must wait two rounds after being fired before it can be fired again.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_slow_firing_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="stun">Stun Damage</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Some weapons deal Stun damage instead of regular damage. In this case, the weapon deals damage as strain instead of wounds. This damage is still reduced by a target's soak.</p>
|
|
<p>A variant of this is a Stun setting. As an incidental, the wielder can choose to switch the setting of their weapon to "Stun." In this case, it does Stun damage as described above. When weapons with a Stun setting are used to deal Stun damage, their range changes to short and cannot be increased.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_stun_damage_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="stun">Stun</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>A weapon with Stun deals strain to the target. When the Stun quality is activated, it inflicts strain equal to the weapon's Stun rating.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input type="number" name="attr_weapon_quality_stun_value" min="0" max="20" value="0" />
|
|
<label><span data-i18n="sunder">Sunder</span><span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>When activated, the attacker chooses one item openly wielded by the target (such as a weapon, shield, or item on a belt). That item is damaged one step: to minor if undamaged, from minor to moderate, or from moderate to major. If a weapon already suffering major damage is the target of a successful Sunder, it is destroyed.</p>
|
|
<p>Sunder requires 1 advantage to activate. If activated multiple times in the same attack, each activation can be applied against the same weapon, potentially taking a weapon from undamaged to destroyed in a single attack.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_sunder_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="superior">Superior</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>A Superior item is a sterling example of its kind, representing masterful craftsmanship. A Superior weapon generates automatic 1 advantage on all checks related to its use, and has its base damage increased by one. Superior armor has its encumbrance reduced by one and its soak value increased by one. </p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input type="hidden" name="attr_weapon_quality_superior_bonus" value="" />
|
|
<div class="select_wrapper">
|
|
<select name="attr_weapon_quality_superior_value">
|
|
<option data-i18n="no">No</option>
|
|
<option data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<label><span data-i18n="unwieldy">Unwieldy</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>An Unwieldy weapon is large, awkward, or heavy. To wield an Unwieldy weapon properly, the character needs an Agility characteristic equal to or greater than the weapon's Unwieldy rating. For each point of Agility by which the character is deficient, they must increase the difficulty of all checks made while using the weapon by one.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input type="hidden" name="attr_weapon_quality_unwieldy_penalty" value="" />
|
|
<input name="attr_weapon_quality_unwieldy_value" type="number" value="0" min="0" max="9" />
|
|
<label><span data-i18n="vicious">Vicious</span><span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>When this weapon scores a Critical Injury or Hit, the character adds ten times the Vicious rating to the Critical roll. With Vicious 3, for example, the victim adds + 30 to their Critical Hit result.</p>
|
|
</div>
|
|
</span>
|
|
</label>
|
|
<input name="attr_weapon_quality_vicious_value" type="number" value="0" min="0" max="9" />
|
|
</div>
|
|
<h3>
|
|
<span data-i18n="attachments_mods">Attachments / Mods</span>
|
|
<button type="action" name="act_show-weapon-attachments"><span name="attr_show-weapon-attachments_label"></span></button>
|
|
</h3>
|
|
<input class="weapon_mods_negative" type="hidden" name="attr_weapon_mods_negative" value="false" />
|
|
<div class="weapon_mods_negative_message">The total hard points for attachments has exceeded the weapon's available hard points.</div>
|
|
<input type="hidden" name="attr_show-weapon-attachments_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show-weapon-attachments" value="true" />
|
|
<div class="attachments_mods_container section">
|
|
<div class="weapon_mods_table_header">
|
|
<div data-i18n="name">Name</div>
|
|
<div><span data-i18n="hp">HP</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>The number of hard points is subtracted from the available weapon hard points above. Make sure the weapon hard points are set before adding attachments.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div data-i18n="benefit">Benefit</div>
|
|
</div>
|
|
<div class="weapon_mod">
|
|
<input type="text" name="attr_mod1_name" value="" />
|
|
<input type="number" name="attr_mod1_hp" min="0" max="5" value="0" />
|
|
<textarea name="attr_mod1_description"></textarea>
|
|
</div>
|
|
<div class="weapon_mod">
|
|
<input type="text" name="attr_mod2_name" value="" />
|
|
<input type="number" name="attr_mod2_hp" min="0" max="5" value="0" />
|
|
<textarea name="attr_mod2_description"></textarea>
|
|
</div>
|
|
<div class="weapon_mod">
|
|
<input type="text" name="attr_mod3_name" value="" />
|
|
<input type="number" name="attr_mod3_hp" min="0" max="5" value="0" />
|
|
<textarea name="attr_mod3_description"></textarea>
|
|
</div>
|
|
<div class="weapon_mod">
|
|
<input type="text" name="attr_mod4_name" value="" />
|
|
<input type="number" name="attr_mod4_hp" min="0" max="5" value="0" />
|
|
<textarea name="attr_mod4_description"></textarea>
|
|
</div>
|
|
<div class="weapon_mod">
|
|
<input type="text" name="attr_mod5_name" value="" />
|
|
<input type="number" name="attr_mod5_hp" min="0" max="5" value="0" />
|
|
<textarea name="attr_mod5_description"></textarea>
|
|
</div>
|
|
</div>
|
|
<h3>
|
|
<span data-i18n="notes">Notes</span>
|
|
<button type="action" name="act_show-weapon-notes"><span name="attr_show-weapon-notes_label"></span></button>
|
|
</h3>
|
|
<input type="hidden" name="attr_show-weapon-notes_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show-weapon-notes" value="true" />
|
|
<div class="section">
|
|
<textarea class="weapon_notes" name="attr_weapon_notes"></textarea>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="combat_talents">Combat Talents</span><button type="action" name="act_show_combat_talents"><span name="attr_show_combat_talents_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_combat_talents_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_combat_talents" value="true" />
|
|
<div class="combat_talents section">
|
|
<div class="combat_talent combat_talents_heading">
|
|
<div data-i18n="name">Name</div>
|
|
<div data-i18n="ranks">Ranks</div>
|
|
<div data-i18n="active_">Active?</div>
|
|
<div data-i18n="description">Description</div>
|
|
</div>
|
|
<fieldset class="repeating_combat-talents">
|
|
<div class="combat_talent">
|
|
<input type="text" name="attr_combat_talent_name" />
|
|
<input type="number" name="attr_combat_talent_ranks" min="0" max="5" value="0" />
|
|
<div class="combat_talent_checkbox_container">
|
|
<input class="combat_talent_active_checkbox" type="checkbox" name="attr_combat_talent_active" />
|
|
<span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
</div>
|
|
<textarea name="attr_combat_talent_description"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2><span data-i18n="armor">Armor</span><button type="action" name="act_show_armor"><span name="attr_show_armor_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_armor_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_armor" value="true" />
|
|
<div class="armor section">
|
|
<div class="armor_item armor_heading">
|
|
<div data-i18n="name">Name</div>
|
|
<div><span data-i18n="ranged">Ranged</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This bonus is automatically added to the character's total Defense - Ranged value.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div><span data-i18n="melee">Melee</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This bonus is automatically added to the character's total Defense - Melee value.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div><span data-i18n="soak">Soak</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This bonus is automatically added to the character's total Soak value.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div><span data-i18n="encum">Encum</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>This bonus is automatically added to the character's current Encumbrance value.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div><span data-i18n="hp">HP</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>The current amount of hard points available for this armor. Automatically lowered for each attachment.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div><span data-i18n="quality">Quality</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Quality of the armor affects the Defense, Encumbrance, and possibly Soak values.</p>
|
|
<p><strong>Make sure the Defense, Encumbrance, and Soak values are set on Normal quality before selecting Superior or Inferior.</strong></p>
|
|
<p>Superior armor has its encumbrance reduced by one and its soak value increased by one.</p>
|
|
<p>Inferior armor has its encumbrance increased by one and its defense decreased by one. If it does not have defense, decrease its soak value by one, to a minimum of zero.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="armor_item">
|
|
<input type="text" name="attr_armor_name" />
|
|
<input type="number" name="attr_armor_bonus_defense_ranged" min="0" max="5" value="0" />
|
|
<input type="number" name="attr_armor_bonus_defense_melee" min="0" max="5" value="0" />
|
|
<input type="number" name="attr_armor_bonus_soak" min="0" max="5" value="0" />
|
|
<input type="number" name="attr_armor_encumbrance" min="0" max="9" value="0" />
|
|
<input type="number" name="attr_armor_hard_points" min="0" max="9" value="0" />
|
|
<div class="select_wrapper">
|
|
<select name="attr_armor_quality">
|
|
<option value="normal" data-i18n="normal">Normal</option>
|
|
<option value="superior" data-i18n="superior">Superior</option>
|
|
<option value="inferior" data-i18n="inferior">Inferior</option>
|
|
</select>
|
|
</div>
|
|
<div></div>
|
|
<label>Special</label>
|
|
<textarea name="attr_armor_special" class="cell_width_5"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="equipment">
|
|
<div class="gear_containers_grid">
|
|
<div>
|
|
<h2><span data-i18n="gear">Gear</span><button type="action" name="act_show_gear"><span name="attr_show_gear_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_gear_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_gear" />
|
|
<div class="gear section">
|
|
<div class="gear_item gear_heading">
|
|
<div data-i18n="name">Name</div>
|
|
<div data-i18n="encum">Encum</div>
|
|
<div class="centered_heading">
|
|
<span data-i18n="carried_">Carried?</span>
|
|
<span class="icon_help">
|
|
<div class="help_info_left">
|
|
<p>Check this box if the character is currently carrying this item. Carried items count toward total encumbrance.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<div data-i18n="description">Description</div>
|
|
</div>
|
|
<fieldset class="repeating_gear">
|
|
<div class="gear_item">
|
|
<input type="text" name="attr_gear_item_name" />
|
|
<input type="number" name="attr_gear_item_encumbrance" min="0" max="5" value="0" />
|
|
<input type="checkbox" name="attr_gear_item_carried" value="true" />
|
|
<textarea name="attr_gear_item_description"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2>
|
|
<div>
|
|
<span data-i18n="containers">Containers</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>Gear that adds Encumbrance threshold - backpacks, utility belts, etc.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<button type="action" name="act_show_containers"><span name="attr_show_containers_label"></span></button>
|
|
</h2>
|
|
<input type="hidden" name="attr_show_containers_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_containers" value="true" />
|
|
<div class="containers section">
|
|
<div class="container container_heading">
|
|
<div data-i18n="name">Name</div>
|
|
<div data-i18n="add_encum_threshold">+ Encum Threshold</div>
|
|
<div data-i18n="description">Description</div>
|
|
</div>
|
|
<div class="container">
|
|
<input type="text" name="attr_container1_name" />
|
|
<input type="number" name="attr_container1_encumbrance" min="0" max="5" value="0" />
|
|
<textarea name="attr_container1_description"></textarea>
|
|
<input type="text" name="attr_container2_name" />
|
|
<input type="number" name="attr_container2_encumbrance" min="0" max="5" value="0" />
|
|
<textarea name="attr_container2_description"></textarea>
|
|
<input type="text" name="attr_container3_name" />
|
|
<input type="number" name="attr_container3_encumbrance" min="0" max="5" value="0" />
|
|
<textarea name="attr_container3_description"></textarea>
|
|
<input type="text" name="attr_container4_name" />
|
|
<input type="number" name="attr_container4_encumbrance" min="0" max="5" value="0" />
|
|
<textarea name="attr_container4_description"></textarea>
|
|
<input type="text" name="attr_container5_name" />
|
|
<input type="number" name="attr_container5_encumbrance" min="0" max="5" value="0" />
|
|
<textarea name="attr_container5_description"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h2>
|
|
<div>
|
|
<span data-i18n="cybernetics">Cybernetics</span>
|
|
<span class="icon_help">
|
|
<div class="help_info">
|
|
<p>The number of cybernetic enhancements is limited to your Brawn rating, or 6 for Droids.</p>
|
|
</div>
|
|
</span>
|
|
</div>
|
|
<button type="action" name="act_show_cybernetics"><span name="attr_show_cybernetics_label"></span></button>
|
|
</h2>
|
|
<input type="hidden" name="attr_show_cybernetics_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_cybernetics" value="true" />
|
|
<div class="cybernetics section">
|
|
<div class="cyber cybernetics_heading">
|
|
<div data-i18n="name">Name</div>
|
|
<div data-i18n="description">Description</div>
|
|
</div>
|
|
<fieldset class="repeating_cybernetics">
|
|
<div class="cyber">
|
|
<input type="text" name="attr_cyber_name" />
|
|
<textarea name="attr_cyber_description"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="talents">
|
|
<h2><span data-i18n="non_combat_talents">Non-combat Talents</span><button type="action" name="act_show_non_combat_talents"><span name="attr_show_non_combat_talents_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_non_combat_talents_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_non_combat_talents" value="true" />
|
|
<div class="non_combat_talents section">
|
|
<div class="non_combat_talent non_combat_talents_heading">
|
|
<div data-i18n="name">Name</div>
|
|
<div data-i18n="ranks">Ranks</div>
|
|
<div data-i18n="active_">Active?</div>
|
|
<div data-i18n="description">Description</div>
|
|
</div>
|
|
<fieldset class="repeating_non-combat-talents">
|
|
<div class="non_combat_talent">
|
|
<input type="text" name="attr_non_combat_talent_name" />
|
|
<input type="number" name="attr_non_combat_talent_ranks" min="0" max="5" value="0" />
|
|
<div class="non_combat_talent_checkbox_container">
|
|
<input class="non_combat_talent_active_checkbox" type="checkbox" name="attr_non_combat_talent_active" />
|
|
<span class="icon_active" title="Active" data-i18n-title="active"></span>
|
|
<span class="icon_passive" title="Passive" data-i18n-title="passive"></span>
|
|
</div>
|
|
<textarea name="attr_non_combat_talent_description"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<h2><span data-i18n="signature_abilities">Signature Abilities</span><button type="action" name="act_show_signature_abilities"><span name="attr_show_signature_abilities_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_signature_abilities_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_signature_abilities" value="true" />
|
|
<div class="signature_abilities section">
|
|
<fieldset class="repeating_signature-abilities">
|
|
<textarea name="attr_signature_ability"></textarea>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="force">
|
|
<h2><span data-i18n="force_powers">Force Powers</span><button type="action" name="act_show_force_powers"><span name="attr_show_force_powers_label"></span></button></h2>
|
|
<input type="hidden" name="attr_show_force_powers_label" value="hide" />
|
|
<input class="show_section" type="hidden" name="attr_show_force_powers" value="true" />
|
|
<div class="force_powers section">
|
|
<div class="force_rating">
|
|
<label data-i18n="force_rating">Force Rating</label>
|
|
<input type="number" name="attr_force_rating" min="0" max="9" value="0" />
|
|
</div>
|
|
<fieldset class="repeating_force-powers">
|
|
<div class="force-power">
|
|
<input type="hidden" name="attr_force-power-name-display" value="Force Die" />
|
|
<h3><span name="attr_force-power-name-display"></span></h3>
|
|
<div class="force-power-roll">
|
|
<div class="select_wrapper">
|
|
<select name="attr_force-power-name">
|
|
<option value="alter" data-i18n="alter">Alter</option>
|
|
<option value="battle_meditation" data-i18n="battle_meditation">Battle Meditation</option>
|
|
<option value="bind" data-i18n="bind">Bind</option>
|
|
<option value="conjure" data-i18n="conjure">Conjure</option>
|
|
<option value="ebb-flow" data-i18n="ebb-flow">Ebb / Flow</option>
|
|
<option value="endure" data-i18n="endure">Endure</option>
|
|
<option value="enhance" data-i18n="enhance">Enhance</option>
|
|
<option value="farsight" data-i18n="farsight">Farsight</option>
|
|
<option value="foresee" data-i18n="foresee">Foresee</option>
|
|
<option value="heal-harm" data-i18n="heal-harm">Heal / Harm</option>
|
|
<option value="imbue" data-i18n="imbue">Imbue</option>
|
|
<option value="influence" data-i18n="influence">Influence</option>
|
|
<option value="manipulate" data-i18n="manipulate">Manipulate</option>
|
|
<option value="misdirect" data-i18n="misdirect">Misdirect</option>
|
|
<option value="move" data-i18n="move">Move</option>
|
|
<option value="protect-unleash" data-i18n="protect-unleash">Protect / Unleash</option>
|
|
<option value="seek" data-i18n="seek">Seek</option>
|
|
<option value="sense" data-i18n="sense">Sense</option>
|
|
<option value="supress" data-i18n="supress">Supress</option>
|
|
<option value="wardes_foresight" data-i18n="wardes_foresight">Warde's Foresight</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<button type="roll" class="roll_force_die" name="roll_force_die" value="!eed characterID(@{character_id}) label(Dice:@{force-power-name-display}) @{force_rating}w">Roll <span name="attr_force-power-name-display"></span></button>
|
|
</div>
|
|
</div>
|
|
<div class="force-power-basic">
|
|
<label data-i18n="basic">Basic</label>
|
|
<textarea name="attr_force-power-basic-description"></textarea>
|
|
</div>
|
|
<div class="force-power-levels">
|
|
<div>
|
|
<label data-i18n="control">Control</label>
|
|
<input type="number" name="attr_force-power-control" min="0" max="5" value="0" />
|
|
<textarea name="attr_force-power-control-description"></textarea>
|
|
</div>
|
|
<div>
|
|
<label data-i18n="duration">Duration</label>
|
|
<input type="number" name="attr_force-power-duration" min="0" max="5" value="0" />
|
|
<textarea name="attr_force-power-duration-description"></textarea>
|
|
</div>
|
|
<div>
|
|
<label data-i18n="magnitude">Magnitude</label>
|
|
<input type="number" name="attr_force-power-magnitude" min="0" max="5" value="0" />
|
|
<textarea name="attr_force-power-magnitude-description"></textarea>
|
|
</div>
|
|
<div>
|
|
<label data-i18n="range">Range</label>
|
|
<input type="number" name="attr_force-power-range" min="0" max="5" value="0" />
|
|
<textarea name="attr_force-power-range-description"></textarea>
|
|
</div>
|
|
<div>
|
|
<label data-i18n="strength">Strength</label>
|
|
<input type="number" name="attr_force-power-strength" min="0" max="5" value="0" />
|
|
<textarea name="attr_force-power-strength-description"></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="force-power-mastery">
|
|
<label data-i18n="mastery">Mastery</label>
|
|
<textarea name="attr_force-power-mastery-description"></textarea>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<!-- General Settings -->
|
|
<div class="settings">
|
|
<h2 data-i18n="general_settings">General Settings</h2>
|
|
<div class="settings_grid section">
|
|
<label data-i18n="change_font_size_zoom">Change font size / zoom</label>
|
|
<input type="number" name="attr_settings_font_size_selector" min="8" max="24" step="2" value="14" />
|
|
</div>
|
|
</div>
|
|
<!-- End General Settings -->
|
|
<!-- GM Settings -->
|
|
<div class="settings-gm">
|
|
<h2 data-i18n="roll_result_suggestions">Roll Result Suggestions</h2>
|
|
<div class="settings_result_suggestions section">
|
|
<div data-i18n="setting">Setting</div>
|
|
<div data-i18n="option">Option</div>
|
|
<div data-i18n-title="select_skill_suggestions" title="Change the handling for skill suggestions" data-i18n="skill_suggestions_display">Skill Suggestions Display</div>
|
|
<div class="select_wrapper">
|
|
<select name="attr_skill_suggestion_setting_display">
|
|
<option value="none" data-i18n="none">None</option>
|
|
<option value="whisper" data-i18n="whisper_gm">Whisper GM</option>
|
|
<option value="button" data-i18n="show_suggestions_button">Show Suggestions Button</option>
|
|
<option value="always" data-i18n="display_inskill" selected>Display in Skill</option>
|
|
</select>
|
|
</div>
|
|
<div data-i18n-title="select_combat_suggestions" title="Enable suggestions for rolls made from the weapon combat section or vehicle sheet" data-i18n="enable_combat_suggestions">Enable Combat Suggestions?</div>
|
|
<div class="select_wrapper">
|
|
<select name="attr_skill_suggestion_setting_combat">
|
|
<option value="0" data-i18n="no" selected>No</option>
|
|
<option value="1" data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<div data-i18n-title="select_general_suggestions" title="Enable suggestions for rolls made from the general skill list" data-i18n="enable_general_suggestions">Enable General Suggestions?</div>
|
|
<div class="select_wrapper">
|
|
<select name="attr_skill_suggestion_setting_general">
|
|
<option value="0" data-i18n="no" selected>No</option>
|
|
<option value="1" data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
<div data-i18n-title="select_fear_check" title="Allows Discipline and Cool skill checks to pull suggestions from the fear suggestion list." data-i18n="fear_check">Fear Check?</div>
|
|
<div class="select_wrapper">
|
|
<select name="attr_skill_suggestion_setting_fear">
|
|
<option value="0" selected data-i18n="no">No</option>
|
|
<option value="1" data-i18n="yes">Yes</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End General Settings -->
|
|
</div>
|
|
|
|
<rolltemplate class="sheet-rolltemplate-base">
|
|
<table>
|
|
<tr><th colspan="2">{{title}} {{#subtitle}}<br /><span class="subheader">{{subtitle}}</span>{{/subtitle}}</th></tr>
|
|
{{#flavor}}
|
|
<tr><td colspan="2"><span class="flavor">{{flavor}}</span></td></tr>
|
|
{{/flavor}}
|
|
{{#prewide}}
|
|
<tr><td colspan="2">{{prewide}}</td></tr>
|
|
{{/prewide}}
|
|
{{#header}}
|
|
<tr><td class="tcat-header"><span>{{header}}</span></td><td class="tcat-header"><span>{{item}}</span></td></tr>
|
|
{{/header}}
|
|
{{#allprops() title flavor wide roll results subtitle header item prewide wide2 wide3 wide4 wide5}}
|
|
<tr><td><span class="sheet-tcat">{{key}}</span></td><td>{{value}}</td></tr>
|
|
{{/allprops() title flavor wide roll results subtitle header item prewide wide2 wide3 wide4 wide5}}
|
|
{{#wide}}
|
|
<tr><td colspan="2">{{wide}}</td></tr>
|
|
{{/wide}}
|
|
{{#wide2}}
|
|
<tr><td colspan="2">{{wide2}}</td></tr>
|
|
{{/wide2}}
|
|
{{#wide3}}
|
|
<tr><td colspan="2">{{wide3}}</td></tr>
|
|
{{/wide3}}
|
|
{{#wide4}}
|
|
<tr><td colspan="2">{{wide4}}</td></tr>
|
|
{{/wide4}}
|
|
{{#wide5}}
|
|
<tr><td colspan="2">{{wide5}}</td></tr>
|
|
{{/wide5}}
|
|
{{#roll}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="diceroll">Dice Roll</span></td></tr>
|
|
<tr><td colspan="2" class="dice_roll_icons">{{roll}}</td></tr>
|
|
{{/roll}}
|
|
{{#results}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="results">Results</span></td></tr>
|
|
<tr><td colspan="2" class="dice_roll_icons">{{results}}</td></tr>
|
|
{{/results}}
|
|
</table>
|
|
</rolltemplate><!-- Roll Template-Base -->
|
|
|
|
<rolltemplate class="sheet-rolltemplate-critical">
|
|
<table>
|
|
<tr><th colspan="2">{{title}} {{#subtitle}}<br /><span class="subheader">{{subtitle}}</span>{{/subtitle}}</th></tr>
|
|
{{#flavor}}
|
|
<tr><td colspan="2"><span class="flavor">{{flavor}}</span></td></tr>
|
|
{{/flavor}}
|
|
{{#prewide}}
|
|
<tr><td colspan="2">{{prewide}}</td></tr>
|
|
{{/prewide}}
|
|
{{#header}}
|
|
<tr><td class="tcat-header"><span>{{header}}</span></td><td class="tcat-header"><span>{{item}}</span></td></tr>
|
|
{{/header}}
|
|
{{#allprops() title flavor wide roll results subtitle header item prewide wide2 wide3 wide4 wide5}}
|
|
<tr><td><span class="sheet-tcat">{{key}}</span></td><td>{{value}}</td></tr>
|
|
{{/allprops() title flavor wide roll results subtitle header item prewide wide2 wide3 wide4 wide5}}
|
|
{{#wide}}
|
|
<tr><td colspan="2">{{wide}}</td></tr>
|
|
{{/wide}}
|
|
{{#wide2}}
|
|
<tr><td colspan="2">{{wide2}}</td></tr>
|
|
{{/wide2}}
|
|
{{#wide3}}
|
|
<tr><td colspan="2">{{wide3}}</td></tr>
|
|
{{/wide3}}
|
|
{{#wide4}}
|
|
<tr><td colspan="2">{{wide4}}</td></tr>
|
|
{{/wide4}}
|
|
{{#wide5}}
|
|
<tr><td colspan="2">{{wide5}}</td></tr>
|
|
{{/wide5}}
|
|
{{#roll}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="diceroll">Dice Roll</span></td></tr>
|
|
<tr><td colspan="2">{{roll}}</td></tr>
|
|
{{/roll}}
|
|
{{#results}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="results">Results</span></td></tr>
|
|
<tr><td colspan="2" class="critical_results">{{results}}</td></tr>
|
|
{{/results}}
|
|
</table>
|
|
</rolltemplate><!-- Roll Template-Critical -->
|
|
|
|
<rolltemplate class="sheet-rolltemplate-suggestion">
|
|
<table>
|
|
<tr><th colspan="2">{{title}} {{#subtitle}}<br /><span class="subheader">{{subtitle}}</span>{{/subtitle}}</th></tr>
|
|
{{#flavor}}
|
|
<tr><td colspan="2"><span class="flavor">{{flavor}}</span></td></tr>
|
|
{{/flavor}}
|
|
{{#prewide}}
|
|
<tr><td colspan="2">{{prewide}}</td></tr>
|
|
{{/prewide}}
|
|
{{#header}}
|
|
<tr><td class="tcat-header"><span>{{header}}</span></td><td class="tcat-header"><span>{{item}}</span></td></tr>
|
|
{{/header}}
|
|
{{#allprops() title flavor roll results subtitle header item suggestionsExist success advantage triumph failure threat despair 1advantage1triumph 2advantage1triumph 3advantage1triumph 1triumph 2triumph 1threat1despair 2threat1despair 3threat1despair 1despair 2despair}}
|
|
<tr><td><span class="sheet-tcat">{{key}}</span></td><td>{{value}}</td></tr>
|
|
{{/allprops() title flavor roll results subtitle header item suggestionsExist success advantage triumph failure threat despair 1advantage1triumph 2advantage1triumph 3advantage1triumph 1triumph 2triumph 1threat1despair 2threat1despair 3threat1despair 1despair 2despair}}
|
|
{{#wide}}
|
|
<tr><td colspan="2">{{wide}}</td></tr>
|
|
{{/wide}}
|
|
{{#wide2}}
|
|
<tr><td colspan="2">{{wide2}}</td></tr>
|
|
{{/wide2}}
|
|
{{#wide3}}
|
|
<tr><td colspan="2">{{wide3}}</td></tr>
|
|
{{/wide3}}
|
|
{{#wide4}}
|
|
<tr><td colspan="2">{{wide4}}</td></tr>
|
|
{{/wide4}}
|
|
{{#wide5}}
|
|
<tr><td colspan="2">{{wide5}}</td></tr>
|
|
{{/wide5}}
|
|
{{#roll}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="diceroll">Dice Roll</span></td></tr>
|
|
<tr><td colspan="2">{{roll}}</td></tr>
|
|
{{/roll}}
|
|
{{#results}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="results">Results</span></td></tr>
|
|
<tr><td colspan="2">{{results}}</td></tr>
|
|
{{/results}}
|
|
{{#suggestionsExist}}
|
|
<tr><td colspan="2"><span class="tcat" data-i18n="spendingsuggestions">Spending Suggestions</span></td></tr>
|
|
{{/suggestionsExist}}
|
|
{{#success}}
|
|
<tr><td><span class="sheet-tcat" data-i18n="success">Success</span></td><td>{{success}}</td></tr>
|
|
{{/success}}
|
|
{{#advantage}}
|
|
<tr><td><span class="sheet-tcat" data-i18n="advantage">Advantage</span></td><td>{{advantage}}</td></tr>
|
|
{{/advantage}}
|
|
{{#triumph}}
|
|
<tr><td><span class="sheet-tcat" data-i18n="triumph">Triumph</span></td><td>{{triumph}}</td></tr>
|
|
{{/triumph}}
|
|
{{#failure}}
|
|
<tr><td><span class="sheet-tcat" data-i18n="failure">Failure</span></td><td>{{failure}}</td></tr>
|
|
{{/failure}}
|
|
{{#threat}}
|
|
<tr><td><span class="sheet-tcat" data-i18n="threat">Threat</span></td><td>{{threat}}</td></tr>
|
|
{{/threat}}
|
|
{{#despair}}
|
|
<tr><td><span class="sheet-tcat" data-i18n="despair">Despair</span></td><td>{{despair}}</td></tr>
|
|
{{/despair}}
|
|
{{#1advantage1triumph}}
|
|
<tr><td><img src="https://i.imgur.com/Gav94H2.png" title="advantage" height="20" width="20"/> or <img src="https://i.imgur.com/1lJCfnB.png" title="triumph" height="20" width="20"/></td><td>{{1advantage1triumph}}</td></tr>
|
|
{{/1advantage1triumph}}
|
|
{{#2advantage1triumph}}
|
|
<tr><td><img src="https://i.imgur.com/Gav94H2.png" title="advantage" height="20" width="20"/><img src="https://i.imgur.com/Gav94H2.png" title="advantage" height="20" width="20"/> or <img src="https://i.imgur.com/1lJCfnB.png" title="triumph" height="20" width="20"/></td><td>{{2advantage1triumph}}</td></tr>
|
|
{{/2advantage1triumph}}
|
|
{{#3advantage1triumph}}
|
|
<tr><td><img src="https://i.imgur.com/Gav94H2.png" title="advantage" height="20" width="20"/><img src="https://i.imgur.com/Gav94H2.png" title="advantage" height="20" width="20"/><img src="https://i.imgur.com/Gav94H2.png" title="advantage" height="20" width="20"/> or <img src="https://i.imgur.com/1lJCfnB.png" title="triumph" height="20" width="20"/></td><td>{{3advantage1triumph}}</td></tr>
|
|
{{/3advantage1triumph}}
|
|
{{#1triumph}}
|
|
<tr><td><img src="https://i.imgur.com/1lJCfnB.png" title="triumph" height="20" width="20"/></td><td>{{1triumph}}</td></tr>
|
|
{{/1triumph}}
|
|
{{#2triumph}}
|
|
<tr><td><img src="https://i.imgur.com/1lJCfnB.png" title="triumph" height="20" width="20"/><img src="https://i.imgur.com/1lJCfnB.png" title="triumph" height="20" width="20"/></td><td>{{2triumph}}</td></tr>
|
|
{{/2triumph}}
|
|
{{#1threat1despair}}
|
|
<tr><td><img src="https://i.imgur.com/o8EQ4z6.png" title="threat" height="20" width="20"/> or <img src="https://i.imgur.com/rOEJlCc.png" title="despair" height="20" width="20"/></td><td>{{1threat1despair}}</td></tr>
|
|
{{/1threat1despair}}
|
|
{{#2threat1despair}}
|
|
<tr><td><img src="https://i.imgur.com/o8EQ4z6.png" title="threat" height="20" width="20"/><img src="https://i.imgur.com/o8EQ4z6.png" title="threat" height="20" width="20"/> or <img src="https://i.imgur.com/rOEJlCc.png" title="despair" height="20" width="20"/></td><td>{{2threat1despair}}</td></tr>
|
|
{{/2threat1despair}}
|
|
{{#3threat1despair}}
|
|
<tr><td><img src="https://i.imgur.com/o8EQ4z6.png" title="threat" height="20" width="20"/><img src="https://i.imgur.com/o8EQ4z6.png" title="threat" height="20" width="20"/><img src="https://i.imgur.com/o8EQ4z6.png" title="threat" height="20" width="20"/> or <img src="https://i.imgur.com/rOEJlCc.png" title="despair" height="20" width="20"/></td><td>{{3threat1despair}}</td></tr>
|
|
{{/3threat1despair}}
|
|
{{#1despair}}
|
|
<tr><td><img src="https://i.imgur.com/rOEJlCc.png" title="despair" height="20" width="20"/></td><td>{{1despair}}</td></tr>
|
|
{{/1despair}}
|
|
{{#2despair}}
|
|
<tr><td><img src="https://i.imgur.com/rOEJlCc.png" title="despair" height="20" width="20"/><img src="https://i.imgur.com/rOEJlCc.png" title="despair" height="20" width="20"/></td><td>{{2despair}}</td></tr>
|
|
{{/2despair}}
|
|
</table>
|
|
</rolltemplate><!-- Roll Template-Suggestions -->
|
|
|
|
|
|
<!-- Sheet Workers -->
|
|
<!-- worker javascript -->
|
|
<script type="text/worker">
|
|
/* Worker for section tabs */
|
|
const buttonlist = [
|
|
'bio',
|
|
'skills',
|
|
'combat',
|
|
'equipment',
|
|
'talents',
|
|
'force',
|
|
'settings'
|
|
];
|
|
buttonlist.forEach(button => {
|
|
on(`clicked:${button}`, () => {
|
|
setAttrs({
|
|
sheetTab: button,
|
|
navSelection: button
|
|
});
|
|
});
|
|
});
|
|
|
|
/* Worker for font size */
|
|
on('change:settings_font_size_selector', (eventInfo) => {
|
|
setAttrs({ 'settings_font_size': eventInfo.newValue });
|
|
});
|
|
|
|
/* Initialize Stats with a change when the sheet is opened in order to trigger other workers */
|
|
on('sheet:opened', () => {
|
|
let skillStat = {};
|
|
|
|
getAttrs(['skillStatStore', 'lightsaber_characteristic'], (values) => {
|
|
let skillStat = JSON.parse(decodeURIComponent(values.skillStatStore));
|
|
const lightsaberCharacteristic = values['lightsaber_characteristic'];
|
|
skillStat['lightsaber'] = lightsaberCharacteristic;
|
|
// Should switch this to a one-line variant of the "skills" object for efficiency -A
|
|
//skillStat = JSON.parse('{"astrogation":"intellect","athletics":"brawn","charm":"presence","coercion":"willpower","computers":"intellect","cool":"presence","coordination":"agility","deception":"cunning","discipline":"willpower","leadership":"presence","mechanics":"intellect","medicine":"intellect","negotiation":"presence","perception":"cunning","piloting-planetary":"agility","piloting-space":"agility","resilience":"brawn","skullduggery":"cunning","stealth":"agility","streetwise":"cunning","survival":"cunning","vigilance":"willpower","brawl":"brawn","melee":"brawn","gunnery":"agility","lightsaber":"brawn","ranged-light":"agility","ranged-heavy":"agility","core-worlds":"intellect","education":"intellect","lore":"intellect","outer-rim":"intellect","underworld":"intellect","warfare":"intellect","xenology":"intellect"}');
|
|
//console.log(skillStat);
|
|
//console.log(encodeURIComponent(JSON.stringify(skillStat)));
|
|
//console.log(lightsaberCharacteristic);
|
|
const skillStatLs = encodeURIComponent(JSON.stringify(skillStat));
|
|
setAttrs({skillStatStore:skillStatLs, 'lightsaber_characteristic':lightsaberCharacteristic});
|
|
});
|
|
});
|
|
|
|
|
|
// Stats to initialize with a value of 1
|
|
const statListOne = [
|
|
'brawn',
|
|
'agility',
|
|
'intellect',
|
|
'cunning',
|
|
'willpower',
|
|
'presence'
|
|
];
|
|
|
|
|
|
on('sheet:opened', () => {
|
|
getAttrs(['skillStatStore'], (values) => {
|
|
const skillStat = JSON.parse(decodeURIComponent(values.skillStatStore));
|
|
|
|
statListOne.forEach((stat) => {
|
|
getAttrs([stat], (values) => {
|
|
const thisStat = (isNaN(values[stat]) || (values[stat]) === 0 || (values[stat]) === "0") ? 1 : parseInt(values[stat]);
|
|
const statValue = thisStat > 0 ? thisStat : 1;
|
|
setAttrs({[stat]: statValue }); // Properly sets the stats, but boes not fire a on:change event; bug reported
|
|
|
|
// Until they fix it..
|
|
const tmp = { 'newValue': statValue };
|
|
|
|
for (const skill in skillStat) {
|
|
if (skillStat[skill] === stat) {
|
|
CalculateDiceStatChange(tmp, skill);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
// Stats to initialize with a value of 0
|
|
const statListZero = [
|
|
'defense_ranged',
|
|
'defense_melee',
|
|
'encumbrance_current',
|
|
'force_rating'
|
|
];
|
|
|
|
on('sheet:opened', () => {
|
|
statListZero.forEach((stat) => {
|
|
getAttrs([stat], (values) => {
|
|
const thisStat = (isNaN(values[stat]) || (values[stat]) === "0") ? 0 : parseInt(values[stat]);
|
|
const statValue = thisStat > 0 ? thisStat : 0;
|
|
setAttrs({[stat]: statValue }); // Properly sets the stats, but does not fire an on:change event; bug reported
|
|
// What should get triggered here? -Aaron
|
|
// Anything that should init with a zero(0) value, as opposed to the same function above that inits with one(1) value.
|
|
// I forgot to check for the string zero, though, like I did above; added that
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
|
|
/* Workers for skill dice */
|
|
const skills = {
|
|
'astrogation': 'intellect',
|
|
'athletics': 'brawn',
|
|
'charm': 'presence',
|
|
'coercion': 'willpower',
|
|
'computers': 'intellect',
|
|
'cool': 'presence',
|
|
'coordination': 'agility',
|
|
'deception': 'cunning',
|
|
'discipline': 'willpower',
|
|
'leadership': 'presence',
|
|
'mechanics': 'intellect',
|
|
'medicine': 'intellect',
|
|
'negotiation': 'presence',
|
|
'perception': 'cunning',
|
|
'piloting-planetary': 'agility',
|
|
'piloting-space': 'agility',
|
|
'resilience': 'brawn',
|
|
'skullduggery': 'cunning',
|
|
'stealth': 'agility',
|
|
'streetwise': 'cunning',
|
|
'survival': 'cunning',
|
|
'vigilance': 'willpower',
|
|
'brawl': 'brawn',
|
|
'melee': 'brawn',
|
|
'gunnery': 'agility',
|
|
'lightsaber': 'brawn',
|
|
'ranged-light': 'agility',
|
|
'ranged-heavy': 'agility',
|
|
'core-worlds': 'intellect',
|
|
'education': 'intellect',
|
|
'lore': 'intellect',
|
|
'outer-rim': 'intellect',
|
|
'underworld': 'intellect',
|
|
'warfare': 'intellect',
|
|
'xenology': 'intellect'
|
|
};
|
|
|
|
|
|
// When the skill rank changes, update the dice
|
|
const CalculateDice = (eventInfo, skill, stat) => {
|
|
let rank = 0;
|
|
let yellowDice = 0;
|
|
let greenDice = 0;
|
|
let yellowDiceName = '';
|
|
let greenDiceName = '';
|
|
let statValue = 0;
|
|
rank = parseInt(eventInfo.newValue);
|
|
getAttrs([stat], (values) => {
|
|
statValue = parseInt(values[stat]);
|
|
yellowDice = parseInt((statValue + rank) - Math.abs(statValue - rank)) / 2;
|
|
greenDice = parseInt((((statValue + rank) + Math.abs(statValue - rank)) / 2) - yellowDice);
|
|
yellowDiceName = skill + '_yd';
|
|
greenDiceName = skill + '_gd';
|
|
setAttrs({[yellowDiceName]: yellowDice, [greenDiceName]: greenDice });
|
|
});
|
|
};
|
|
|
|
for (const skill in skills) {
|
|
const skillRank = skill + '_rank';
|
|
on('change:' + skillRank, (eventInfo) => {
|
|
getAttrs(['skillStatStore'], (values) => {
|
|
const skillStat = JSON.parse(decodeURIComponent(values.skillStatStore));
|
|
const stat = skillStat[skill];
|
|
CalculateDice(eventInfo, skill, stat)
|
|
});
|
|
});
|
|
}
|
|
|
|
// When the associated attribute changes, update the dice
|
|
const CalculateDiceStatChange = (eventInfo, skill) => {
|
|
const statValue = parseInt(eventInfo.newValue);
|
|
let rank = 0;
|
|
let yellowDice = 0;
|
|
let greenDice = 0;
|
|
let yellowDiceName = '';
|
|
let greenDiceName = '';
|
|
const rankAttr = skill + '_rank';
|
|
getAttrs([rankAttr], (values) => {
|
|
rank = parseInt(values[rankAttr]);
|
|
yellowDice = parseInt((statValue + rank) - Math.abs(statValue - rank)) / 2;
|
|
greenDice = parseInt((((statValue + rank) + Math.abs(statValue - rank)) / 2) - yellowDice);
|
|
yellowDiceName = skill + '_yd';
|
|
greenDiceName = skill + '_gd';
|
|
setAttrs({[yellowDiceName]: yellowDice, [greenDiceName]: greenDice });
|
|
});
|
|
};
|
|
|
|
|
|
on('change:brawn change:agility change:intellect change:cunning change:willpower change:presence', (eventInfo) => {
|
|
const stat = eventInfo.sourceAttribute;
|
|
|
|
getAttrs(['skillStatStore'], (values) => {
|
|
const skillStat = JSON.parse(decodeURIComponent(values.skillStatStore));
|
|
|
|
for (const skill in skillStat) {
|
|
if (skillStat[skill] === stat) {
|
|
CalculateDiceStatChange(eventInfo, skill); // Goes on to do the calcs on a manual change, but not from the sheet:opened event
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
// When the Lightsaber characteristic changes, update the lightsaber dice
|
|
on('change:lightsaber_characteristic', (eventInfo) => {
|
|
const stat = eventInfo.newValue;
|
|
getAttrs(['lightsaber_rank', stat, 'skillStatStore'], (values) => {
|
|
let skillStat = JSON.parse(decodeURIComponent(values.skillStatStore));
|
|
skillStat['lightsaber'] = stat;
|
|
skillStat = encodeURIComponent(JSON.stringify(skillStat));
|
|
setAttrs({ skillStatStore: skillStat, lightsaber_characteristic_value: parseInt(values[stat]) });
|
|
const tmp = { 'newValue': parseInt(values[stat]) };
|
|
CalculateDiceStatChange(tmp, 'lightsaber');
|
|
});
|
|
});
|
|
|
|
|
|
/* Workers for calculating weapon quality dice */
|
|
|
|
// Cumbersome
|
|
on('change:repeating_weapons:weapon_quality_cumbersome_value', (eventInfo) => {
|
|
const cumbersome = parseInt(eventInfo.newValue);
|
|
getAttrs(['brawn'], (values) => {
|
|
const brawn = parseInt(values.brawn);
|
|
const penalty = cumbersome - brawn;
|
|
if (penalty > 0) {
|
|
setAttrs({ 'repeating_weapons_weapon_quality_cumbersome_penalty': penalty });
|
|
}
|
|
else {
|
|
setAttrs({ 'repeating_weapons_weapon_quality_cumbersome_penalty': 0 });
|
|
}
|
|
});
|
|
});
|
|
|
|
// Defensive
|
|
on('change:repeating_weapons:weapon_quality_defensive_value', (eventInfo) => {
|
|
getAttrs(['defense_melee'], (values) => {
|
|
const currentDefense = parseInt(values.defense_melee);
|
|
const previousDefensive = parseInt(eventInfo.previousValue);
|
|
const newDefensive = parseInt(eventInfo.newValue);
|
|
let armorBonus = Math.abs(previousDefensive - newDefensive);
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (previousDefensive === newDefensive) {
|
|
armorBonus = newDefensive;
|
|
}
|
|
armorBonus = previousDefensive > newDefensive ? -(armorBonus) : armorBonus;
|
|
const newDefense = currentDefense + armorBonus > 0 ? currentDefense + armorBonus : 0;
|
|
setAttrs({ 'defense_melee': newDefense });
|
|
});
|
|
});
|
|
|
|
// Deflection
|
|
on('change:repeating_weapons:weapon_quality_deflection_value', (eventInfo) => {
|
|
getAttrs(['defense_ranged'], (values) => {
|
|
const currentDefense = parseInt(values.defense_ranged);
|
|
const previousDeflection = parseInt(eventInfo.previousValue);
|
|
const newDeflection = parseInt(eventInfo.newValue);
|
|
let armorBonus = Math.abs(previousDeflection - newDeflection);
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (previousDeflection === newDeflection) {
|
|
armorBonus = newDeflection;
|
|
}
|
|
armorBonus = previousDeflection > newDeflection ? -(armorBonus) : armorBonus;
|
|
const newDefense = currentDefense + armorBonus > 0 ? currentDefense + armorBonus : 0;
|
|
setAttrs({ 'defense_ranged': newDefense });
|
|
});
|
|
});
|
|
|
|
// Inferior
|
|
on('change:repeating_weapons:weapon_quality_inferior_value', (eventInfo) => {
|
|
const inferior = eventInfo.newValue;
|
|
if (inferior === 'Yes') {
|
|
getAttrs(['repeating_weapons_weapon_damage_bonus_total'], (values) => {
|
|
const damageBonus = parseInt(values.repeating_weapons_weapon_damage_bonus_total);
|
|
setAttrs({ 'repeating_weapons_weapon_damage_bonus_total': damageBonus - 1, 'repeating_weapons_weapon_quality_inferior_penalty': '1t', 'repeating_weapons_weapon_quality_inferior_penalty_damage': '1' });
|
|
});
|
|
}
|
|
else {
|
|
getAttrs(['repeating_weapons_weapon_damage_bonus_total'], (values) => {
|
|
const damageBonus = parseInt(values.repeating_weapons_weapon_damage_bonus_total);
|
|
setAttrs({ 'repeating_weapons_weapon_damage_bonus_total': damageBonus + 1, 'repeating_weapons_weapon_quality_inferior_penalty': '', 'repeating_weapons_weapon_quality_inferior_penalty_damage': '' });
|
|
});
|
|
}
|
|
});
|
|
|
|
// Superior
|
|
on('change:repeating_weapons:weapon_quality_superior_value', (eventInfo) => {
|
|
const superior = eventInfo.newValue;
|
|
if (superior === 'Yes') {
|
|
getAttrs(['repeating_weapons_weapon_damage_bonus_total'], (values) => {
|
|
const damageBonus = parseInt(values.repeating_weapons_weapon_damage_bonus_total);
|
|
setAttrs({ 'repeating_weapons_weapon_damage_bonus_total': damageBonus + 1, 'repeating_weapons_weapon_quality_superior_bonus': '1a', 'repeating_weapons_weapon_quality_superior_bonus_damage': '1' });
|
|
});
|
|
}
|
|
else {
|
|
getAttrs(['repeating_weapons_weapon_damage_bonus_total'], (values) => {
|
|
const damageBonus = parseInt(values.repeating_weapons_weapon_damage_bonus_total);
|
|
setAttrs({ 'repeating_weapons_weapon_damage_bonus_total': damageBonus - 1, 'repeating_weapons_weapon_quality_superior_bonus': '', 'repeating_weapons_weapon_quality_superior_bonus_damage': '' });
|
|
});
|
|
}
|
|
});
|
|
|
|
// Unwieldy
|
|
on('change:repeating_weapons:weapon_quality_unwieldy_value', (eventInfo) => {
|
|
const unwieldy = parseInt(eventInfo.newValue);
|
|
getAttrs(['agility'], (values) => {
|
|
const agility = parseInt(values.agility);
|
|
const penalty = unwieldy - agility;
|
|
if (penalty > 0) {
|
|
setAttrs({ 'repeating_weapons_weapon_quality_unwieldy_penalty': penalty });
|
|
}
|
|
else {
|
|
setAttrs({ 'repeating_weapons_weapon_quality_unwieldy_penalty': 0 });
|
|
}
|
|
});
|
|
});
|
|
|
|
// Vicious
|
|
on('change:repeating_weapons:weapon_quality_vicious_value', (eventInfo) => {
|
|
const viciousPrevious = parseInt(eventInfo.previousValue);
|
|
const viciousNew = parseInt(eventInfo.newValue);
|
|
getAttrs(['repeating_weapons_weapon_critical_bonus_total'], (values) => {
|
|
const criticalBonus = parseInt(values.repeating_weapons_weapon_critical_bonus_total);
|
|
const viciousPreviousBonus = parseInt(viciousPrevious * 10);
|
|
const viciousNewBonus = parseInt(viciousNew * 10);
|
|
let viciousBonus = Math.abs(parseInt(viciousNewBonus - viciousPreviousBonus));
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (viciousPreviousBonus === viciousNewBonus) {
|
|
viciousBonus = viciousNewBonus;
|
|
}
|
|
if (viciousPreviousBonus > viciousNewBonus) {
|
|
viciousBonus = -(viciousBonus);
|
|
}
|
|
const totalBonus = criticalBonus + viciousBonus;
|
|
setAttrs({ 'repeating_weapons_weapon_critical_bonus_total': totalBonus, 'repeating_weapons_weapon_quality_vicious_crit_bonus': viciousNew * 10 });
|
|
});
|
|
});
|
|
|
|
// Other critical bonuses
|
|
on('change:repeating_weapons:weapon_critical_bonus', (eventInfo) => {
|
|
const bonusPrevious = parseInt(eventInfo.previousValue);
|
|
const bonusNew = parseInt(eventInfo.newValue);
|
|
getAttrs(['repeating_weapons_weapon_critical_bonus_total'], (values) => {
|
|
const currentBonus = parseInt(values.repeating_weapons_weapon_critical_bonus_total);
|
|
let newBonus = Math.abs(parseInt(bonusNew - bonusPrevious));
|
|
if (bonusPrevious === bonusNew) {
|
|
newBonus = bonusNew; // Weird quirk in Roll20 - if the field isn't initiated with change, it will set the value to 1 regardless of the HTML value attribute; this is a workaround for that
|
|
}
|
|
if (bonusPrevious > bonusNew) {
|
|
newBonus = -(newBonus);
|
|
}
|
|
const totalBonus = currentBonus + newBonus;
|
|
setAttrs({ 'repeating_weapons_weapon_critical_bonus_total': totalBonus });
|
|
});
|
|
});
|
|
|
|
// Other damage bonuses
|
|
on('change:repeating_weapons:weapon_damage_bonus', (eventInfo) => {
|
|
const bonusPrevious = parseInt(eventInfo.previousValue);
|
|
const bonusNew = parseInt(eventInfo.newValue);
|
|
getAttrs(['repeating_weapons_weapon_damage_bonus_total'], (values) => {
|
|
const currentBonus = parseInt(values.repeating_weapons_weapon_damage_bonus_total);
|
|
let newBonus = Math.abs(parseInt(bonusNew - bonusPrevious));
|
|
if (bonusPrevious === bonusNew) {
|
|
newBonus = bonusNew; // Weird quirk in Roll20 - if the field isn't initiated with change, it will set the value to 1 regardless of the HTML value attribute; this is a workaround for that
|
|
}
|
|
if (bonusPrevious > bonusNew) {
|
|
newBonus = -(newBonus);
|
|
}
|
|
const totalBonus = currentBonus + newBonus;
|
|
setAttrs({ 'repeating_weapons_weapon_damage_bonus_total': totalBonus });
|
|
});
|
|
});
|
|
|
|
/* Display wapon qualities in the roll template */
|
|
|
|
const qualitiesObject = {
|
|
'weapon_quality_accurate_value': 'Accurate',
|
|
'weapon_quality_auto_fire_value': 'Auto-Fire',
|
|
'weapon_quality_blast_value': 'Blast',
|
|
'weapon_quality_breach_value': 'Breach',
|
|
'weapon_quality_burn_value': 'Burn',
|
|
'weapon_quality_concussive_value': 'Concussive',
|
|
'weapon_quality_cortosis_value': 'Cortosis',
|
|
'weapon_quality_cumbersome_value': 'Cumbersome',
|
|
'weapon_quality_defensive_value': 'Defensive',
|
|
'weapon_quality_deflection_value': 'Deflection',
|
|
'weapon_quality_disorient_value': 'Disorient',
|
|
'weapon_quality_ensnare_value': 'Ensnare',
|
|
'weapon_quality_guided_value': 'Guided',
|
|
'weapon_quality_knockdown_value': 'Knockdown',
|
|
'weapon_quality_inaccurate_value': 'Inaccurate',
|
|
'weapon_quality_inferior_value': 'Inferior',
|
|
'weapon_quality_ion_value': 'Ion',
|
|
'weapon_quality_limited_ammo_value': 'Limited Ammo',
|
|
'weapon_quality_linked_value': 'Linked',
|
|
'weapon_quality_pierce_value': 'Pierce',
|
|
'weapon_quality_prepare_value': 'Prepare',
|
|
'weapon_quality_slow_firing_value': 'Slow-Firing',
|
|
'weapon_quality_stun_damage_value': 'Stun Damage',
|
|
'weapon_quality_stun_value': 'Stun',
|
|
'weapon_quality_sunder_value': 'Sunder',
|
|
'weapon_quality_superior_value': 'Superior',
|
|
'weapon_quality_unwieldy_value': 'Unwieldy',
|
|
'weapon_quality_vicious_value': 'Vicious'
|
|
};
|
|
|
|
// Update the quality list for display in the roll template based on adding/removing/updating weapon qualities
|
|
for (const quality in qualitiesObject) {
|
|
const qualityTitle = qualitiesObject[quality];
|
|
on('change:repeating_weapons:' + quality, (eventInfo) => {
|
|
getAttrs(['repeating_weapons_weapon_qualities_list'], (values) => {
|
|
const currentList = values.repeating_weapons_weapon_qualities_list;
|
|
let weaponQualities = currentList.split(',');
|
|
let qualityList = '';
|
|
const qualityValue = eventInfo.newValue;
|
|
const inArrayNone = weaponQualities.findIndex(thisQuality => thisQuality.includes('None'));
|
|
if (inArrayNone > -1) {
|
|
let removed = weaponQualities.splice(inArrayNone, 1);
|
|
}
|
|
const inArray = weaponQualities.findIndex(thisQuality => thisQuality.includes(qualityTitle));
|
|
if (inArray === -1) {
|
|
switch (qualityValue) {
|
|
case 'Yes':
|
|
weaponQualities.push(qualityTitle);
|
|
break;
|
|
case 'No':
|
|
// Do nothing
|
|
break;
|
|
default:
|
|
weaponQualities.push(qualityTitle + ' ' + qualityValue);
|
|
}
|
|
}
|
|
else {
|
|
switch (qualityValue) {
|
|
case 'Yes':
|
|
// Do nothing
|
|
break;
|
|
case 'No':
|
|
let removed = weaponQualities.splice(inArray, 1);
|
|
break;
|
|
default:
|
|
if (parseInt(qualityValue) > 0) {
|
|
let removed = weaponQualities.splice(inArray, 1, qualityTitle + ' ' + qualityValue);
|
|
}
|
|
else {
|
|
let removed = weaponQualities.splice(inArray, 1);
|
|
}
|
|
}
|
|
}
|
|
qualityList = weaponQualities.join(', ');
|
|
setAttrs({ 'repeating_weapons_weapon_qualities_list': qualityList });
|
|
});
|
|
});
|
|
};
|
|
|
|
// Send weapon skill type dice to the roller based on weapon skill select box
|
|
on('change:repeating_weapons:weapon_skill', (eventInfo) => {
|
|
const skill = eventInfo.newValue;
|
|
let diceCalc = '';
|
|
let yellowDice = 0;
|
|
let greenDice = 0;
|
|
getAttrs(['brawl_yd', 'brawl_gd', 'melee_yd', 'melee_gd', 'gunnery_yd', 'gunnery_gd', 'ranged-light_yd', 'ranged-light_gd', 'ranged-heavy_yd', 'ranged-heavy_gd', 'lightsaber_yd', 'lightsaber_gd', 'mechanics_yd', 'mechanics_gd', 'medicine_yd', 'medicine_gd', 'resilience_yd', 'resilience_gd'], (values) => {
|
|
switch (skill) {
|
|
case 'Brawl':
|
|
diceCalc = 'skill(@{brawl_rank}|@{brawn}|@{brawl_modifiers})';
|
|
yellowDice = values['brawl_yd'];
|
|
greenDice = values['brawl_gd'];
|
|
break;
|
|
case 'Melee':
|
|
diceCalc = 'skill(@{melee_rank}|@{brawn}|@{melee_modifiers})';
|
|
yellowDice = values['melee_yd'];
|
|
greenDice = values['melee_gd'];
|
|
break;
|
|
case 'Gunnery':
|
|
diceCalc = 'skill(@{gunnery_rank}|@{agility}|@{gunnery_modifiers})';
|
|
yellowDice = values['gunnery_yd'];
|
|
greenDice = values['gunnery_gd'];
|
|
break;
|
|
case 'Ranged - Light':
|
|
diceCalc = 'skill(@{ranged-light_rank}|@{agility}|@{ranged-light_modifiers})';
|
|
yellowDice = values['ranged-light_yd'];
|
|
greenDice = values['ranged-light_gd'];
|
|
break;
|
|
case 'Ranged - Heavy':
|
|
diceCalc = 'skill(@{ranged-heavy_rank}|@{agility}|@{ranged-heavy_modifiers})';
|
|
yellowDice = values['ranged-heavy_yd'];
|
|
greenDice = values['ranged-heavy_gd'];
|
|
break;
|
|
case 'Lightsaber':
|
|
diceCalc = 'skill(@{lightsaber_rank}|@{lightsaber_characteristic_value}|@{lightsaber_modifiers})';
|
|
yellowDice = values['lightsaber_yd'];
|
|
greenDice = values['lightsaber_gd'];
|
|
break;
|
|
case 'Mechanics':
|
|
diceCalc = 'skill(@{mechanics_rank}|@{intellect})';
|
|
yellowDice = values['mechanics_yd'];
|
|
greenDice = values['mechanics_gd'];
|
|
break;
|
|
case 'Medicine':
|
|
diceCalc = 'skill(@{medicine_rank}|@{intellect})';
|
|
yellowDice = values['medicine_yd'];
|
|
greenDice = values['medicine_gd'];
|
|
break;
|
|
case 'Resilience':
|
|
diceCalc = 'skill(@{resilience_rank}|@{brawn})';
|
|
yellowDice = values['resilience_yd'];
|
|
greenDice = values['resilience_gd'];
|
|
break;
|
|
};
|
|
setAttrs({ 'repeating_weapons_weapon_skill_value': diceCalc, 'repeating_weapons_weapon_skill_yd': yellowDice, 'repeating_weapons_weapon_skill_gd': greenDice });
|
|
});
|
|
});
|
|
|
|
/* Workers for critical hits */
|
|
|
|
const critTable = {
|
|
'5': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Minor Nick',
|
|
description: 'Suffer 1 strain.'
|
|
},
|
|
'10': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Slowed Down',
|
|
description: 'May only act during last allied Initiative slot on next turn.'
|
|
},
|
|
'15': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Sudden Jolt',
|
|
description: 'May only act during last hero Initiative slot on next turn.'
|
|
},
|
|
'20': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Distracted',
|
|
description: 'Cannot perform free maneuver on next turn.'
|
|
},
|
|
'25': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Off-Balance',
|
|
description: 'Add 1 Setback die to next skill check.'
|
|
},
|
|
'30': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Discouraging Wound',
|
|
description: 'Flip one light destiny to dark.'
|
|
},
|
|
'35': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Stunned',
|
|
description: 'Staggered, cannot perform action on next turn.'
|
|
},
|
|
'40': {
|
|
severity: 'Easy (1 ♦)',
|
|
type: 'Stinger',
|
|
description: 'Increase difficulty of next check by 1 Difficulty die.'
|
|
},
|
|
//----------------------------- Severity 2
|
|
'45': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Bowled Over',
|
|
description: 'Knocked prone and suffer 1 strain.'
|
|
},
|
|
'50': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Head Ringer',
|
|
description: 'Increase difficulty of all Intellect and Cunning checks by 1 Difficulty die until end of encounter.'
|
|
},
|
|
'55': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Fearsome Wound',
|
|
description: 'Increase difficulty of all Presence and Willpower checks by 1 Difficulty die until end of encounter.'
|
|
},
|
|
'60': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Agonizing Wound',
|
|
description: 'Increase difficulty of all Brawn and Agility checks by 1 Difficulty die until end of encounter.'
|
|
},
|
|
'65': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Slightly Dazed',
|
|
description: 'Add 1 Setback die to all skill checks until end of encounter.'
|
|
},
|
|
'70': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Scattered Senses',
|
|
description: 'Remove all Boost dice from all skill checks until end of encounter.'
|
|
},
|
|
'75': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Hamstrung',
|
|
description: 'Lose free maneuver until end of encounter.'
|
|
},
|
|
'80': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Staggered',
|
|
description: 'Attacker may immediately attempt another free attack against you using same dice pool as original attack.'
|
|
},
|
|
'85': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Winded',
|
|
description: 'Cannot voluntarily suffer strain to activate abilities or gain additional maneuvers until end of encounter.'
|
|
},
|
|
'90': {
|
|
severity: 'Average (2 ♦♦)',
|
|
type: 'Compromised',
|
|
description: 'Increase difficulty of all skill checks by 1 Difficulty die until end of encounter.'
|
|
},
|
|
//---------------------------------------- Severity 3
|
|
'95': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'At the Brink',
|
|
description: 'Suffer 1 strain each time you perform an action.'
|
|
},
|
|
'100': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'Crippled',
|
|
description: 'Limb crippled until healed or replaced. Increase difficulty of all checks that use that limb by 1 Difficulty die.'
|
|
},
|
|
'105': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'Maimed',
|
|
description: 'Limb permanently lost. Unless you have a cybernetic replacement, cannot perform actions that use that limb. Add 1 Setback to all other actions.'
|
|
},
|
|
'110': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'Horrific Injury',
|
|
description: 'Roll 1d10 to determine one wounded characteristic -- roll results(1-3 = Brawn, 4-6 = Agility, 7 = Intellect, 8 = Cunning, 9 = Presence, 10 = Willpower. Until Healed, treat characteristic as one point lower.'
|
|
},
|
|
'115': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'Temporarily Lame',
|
|
description: 'Until healed, may not perform more than one maneuver each turn.'
|
|
},
|
|
'120': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'Blinded',
|
|
description: 'Can no longer see. Upgrade the difficulty of Perception and Vigilance checks three times, and all other checks twice.'
|
|
},
|
|
'125': {
|
|
severity: 'Hard (3 ♦♦♦)',
|
|
type: 'Knocked Senseless',
|
|
description: 'You can no longer upgrade dice for checks.'
|
|
},
|
|
//---------------------------------------- Severity 4
|
|
'130': {
|
|
severity: 'Daunting (4 ♦♦♦♦)',
|
|
type: 'Gruesome Injury',
|
|
description: 'Roll 1d10 to determine one wounded characteristic -- roll results(1-3 = Brawn, 4-6 = Agility, 7 = Intellect, 8 = Cunning, 9 = Presence, 10 = Willpower. Characteristic is permanently one point lower.'
|
|
},
|
|
'140': {
|
|
severity: 'Daunting (4 ♦♦♦♦)',
|
|
type: 'Bleeding Out',
|
|
description: 'Suffer 1 wound and 1 strain every round at the beginning of turn. For every 5 wounds suffered beyond wound threshold, suffer one additional Critical Injury (ignore the details for any result below this result).'
|
|
},
|
|
'150': {
|
|
severity: 'Daunting (4 ♦♦♦♦)',
|
|
type: 'The End is Nigh',
|
|
description: 'Die after the last Initiative slot during the next round.'
|
|
},
|
|
//---------------------------------------- DEAD
|
|
'151': {
|
|
severity: 'DEAD',
|
|
type: 'Dead',
|
|
description: 'Complete, absolute death.'
|
|
}
|
|
};
|
|
|
|
on('change:repeating_current-crits:current_crit_number', (eventInfo) => {
|
|
const critNumber = eventInfo.newValue;
|
|
const critSeverity = critTable[critNumber].severity;
|
|
const critType = critTable[critNumber].type;
|
|
const critDescription = critTable[critNumber].description;
|
|
setAttrs({
|
|
'repeating_current-crits_current_crit_severity': critSeverity,
|
|
'repeating_current-crits_current_crit_type': critType,
|
|
'repeating_current-crits_current_crit_description': critDescription
|
|
});
|
|
});
|
|
|
|
|
|
// Heal/remove a critical wound
|
|
on('clicked:repeating_current-crits:healcrit', (eventInfo) => {
|
|
const critButtonId = eventInfo.sourceAttribute;
|
|
const critButtonIdLength = critButtonId.length;
|
|
const critToHeal = critButtonId.slice(0, (critButtonIdLength - 9));
|
|
removeRepeatingRow(critToHeal);
|
|
});
|
|
|
|
/* Workers for Force Powers */
|
|
|
|
const forcePowerNames = {
|
|
"alter": "Alter",
|
|
"battle_meditation": "Battle Meditation",
|
|
"bind": "Bind",
|
|
"conjure": "Conjure",
|
|
"ebb-flow": "Ebb / Flow",
|
|
"endure": "Endure",
|
|
"enhance": "Enhance",
|
|
"farsight": "Farsight",
|
|
"foresee": "Foresee",
|
|
"heal-harm": "Heal / Harm",
|
|
"imbue": "Imbue",
|
|
"influence": "Influence",
|
|
"manipulate": "Manipulate",
|
|
"misdirect": "Misdirect",
|
|
"move": "Move",
|
|
"protect-unleash": "Protect / Unleash",
|
|
"seek": "Seek",
|
|
"sense": "Sense",
|
|
"supress": "Supress",
|
|
"wardes-foresight": "Warde's Foresight"
|
|
}
|
|
|
|
// Change the power label based on the selected power name
|
|
on('change:repeating_force-powers:force-power-name', (eventInfo) => {
|
|
const selectedPower = eventInfo.newValue;
|
|
const displayName = forcePowerNames[selectedPower];
|
|
setAttrs({ 'repeating_force-powers_force-power-name-display': displayName });
|
|
});
|
|
|
|
/* Calculate attachment hard points and subtract from the total */
|
|
|
|
on('change:repeating_weapons:mod1_hp change:repeating_weapons:mod2_hp change:repeating_weapons:mod3_hp change:repeating_weapons:mod4_hp change:repeating_weapons:mod5_hp', (eventInfo) => {
|
|
getAttrs(['repeating_weapons_weapon_hard_points', 'repeating_weapons_mod1_hp', 'repeating_weapons_mod2_hp', 'repeating_weapons_mod3_hp', 'repeating_weapons_mod4_hp', 'repeating_weapons_mod5_hp'], (values) => {
|
|
const weaponHp = parseInt(values.repeating_weapons_weapon_hard_points);
|
|
const hpTotal = (parseInt(values.repeating_weapons_mod1_hp)) + (parseInt(values.repeating_weapons_mod2_hp)) + (parseInt(values.repeating_weapons_mod3_hp)) + (parseInt(values.repeating_weapons_mod4_hp)) + (parseInt(values.repeating_weapons_mod5_hp));
|
|
let hpDifference = Math.abs(eventInfo.previousValue - eventInfo.newValue);
|
|
hpDifference = eventInfo.previousValue > eventInfo.newValue ? -(hpDifference) : hpDifference;
|
|
const previousHpTotal = hpTotal - hpDifference;
|
|
const newHp = weaponHp + (previousHpTotal - hpTotal);
|
|
const isNegative = newHp < 0 ? 'true' : 'false';
|
|
setAttrs({ 'repeating_weapons_weapon_hard_points': newHp, 'repeating_weapons_weapon_mods_negative': isNegative });
|
|
});
|
|
});
|
|
|
|
/* Calculate Soak and Defense */
|
|
|
|
on('change:brawn change:armor_bonus_soak', (eventInfo) => {
|
|
getAttrs(['brawn', 'armor_bonus_soak'], (values) => {
|
|
const currentBrawn = isNaN(values.brawn) ? 0 : parseInt(values.brawn);
|
|
const currentArmor = isNaN(values.armor_bonus_soak) ? 0 : parseInt(values.armor_bonus_soak);
|
|
const triggerName = eventInfo.triggerName;
|
|
let newBrawn = currentBrawn;
|
|
let newArmor = currentArmor;
|
|
switch (triggerName) {
|
|
case 'brawn':
|
|
previousBrawn = parseInt(eventInfo.previousValue);
|
|
newBrawn = parseInt(eventInfo.newValue);
|
|
break;
|
|
case 'armor_bonus_soak':
|
|
previousArmor = isNaN(eventInfo.previousValue) ? 0 : parseInt(eventInfo.previousValue);
|
|
newArmor = isNaN(eventInfo.newValue) ? 0 : parseInt(eventInfo.newValue);
|
|
break;
|
|
default:
|
|
// Do nothing
|
|
}
|
|
const newSoak = newBrawn + newArmor >= newBrawn ? newBrawn + newArmor : newBrawn;
|
|
setAttrs({ 'soak': newSoak });
|
|
});
|
|
});
|
|
|
|
on('change:armor_bonus_defense_melee', (eventInfo) => {
|
|
getAttrs(['defense_melee'], (values) => {
|
|
const previousDefense = isNaN(eventInfo.previousValue) ? 0 : parseInt(eventInfo.previousValue);
|
|
const newDefense = isNaN(eventInfo.newValue) ? 0 : parseInt(eventInfo.newValue);
|
|
const currentDefense = isNaN(values.defense_melee) ? 0 : parseInt(values.defense_melee);
|
|
let armorBonus = Math.abs(previousDefense - newDefense);
|
|
armorBonus = previousDefense > newDefense ? -(armorBonus) : armorBonus;
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (previousDefense === newDefense) {
|
|
armorBonus = newDefense;
|
|
}
|
|
const setDefense = currentDefense + armorBonus >= 0 ? currentDefense + armorBonus : 0;
|
|
setAttrs({ 'defense_melee': setDefense });
|
|
});
|
|
});
|
|
|
|
on('change:armor_bonus_defense_ranged', (eventInfo) => {
|
|
getAttrs(['defense_ranged'], (values) => {
|
|
const previousDefense = isNaN(eventInfo.previousValue) ? 0 : parseInt(eventInfo.previousValue);
|
|
const newDefense = isNaN(eventInfo.newValue) ? 0 : parseInt(eventInfo.newValue);
|
|
const currentDefense = isNaN(values.defense_ranged) ? 0 : parseInt(values.defense_ranged);
|
|
let armorBonus = Math.abs(previousDefense - newDefense);
|
|
armorBonus = previousDefense > newDefense ? -(armorBonus) : armorBonus;
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (previousDefense === newDefense) {
|
|
armorBonus = newDefense;
|
|
}
|
|
const setDefense = currentDefense + armorBonus >= 0 ? currentDefense + armorBonus : 0;
|
|
setAttrs({ 'defense_ranged': setDefense });
|
|
});
|
|
});
|
|
|
|
on('change:armor_quality', (eventInfo) => {
|
|
getAttrs(['armor_bonus_soak', 'armor_encumbrance', 'armor_bonus_defense_ranged', 'armor_bonus_defense_melee'], (values) => {
|
|
const previousQuality = eventInfo.previousValue;
|
|
const newQuality = eventInfo.newValue;
|
|
const currentRanged = parseInt(values.armor_bonus_defense_ranged);
|
|
const currentMelee = parseInt(values.armor_bonus_defense_melee);
|
|
const currentSoak = parseInt(values.armor_bonus_soak);
|
|
const currentEncum = parseInt(values.armor_encumbrance);
|
|
const hasDefense = (currentRanged >= 1) || (currentMelee >= 1) ? true : false;
|
|
let newRanged = currentRanged;
|
|
let newMelee = currentMelee;
|
|
let newSoak = currentSoak;
|
|
let newEncum = currentEncum;
|
|
switch (newQuality) {
|
|
case 'superior':
|
|
if (previousQuality === 'inferior') {
|
|
if (hasDefense) {
|
|
newSoak = currentSoak + 1;
|
|
newRanged = currentRanged + 1;
|
|
newMelee = currentMelee + 1;
|
|
}
|
|
else {
|
|
// No defense; adjust soak instead
|
|
newSoak = currentSoak + 2;
|
|
}
|
|
newEncum = currentEncum - 2;
|
|
}
|
|
else {
|
|
newSoak = currentSoak + 1;
|
|
newEncum = currentEncum - 1;
|
|
}
|
|
break;
|
|
case 'inferior':
|
|
if (previousQuality === 'superior') {
|
|
if (hasDefense) {
|
|
newSoak = currentSoak - 1;
|
|
newRanged = currentRanged - 1;
|
|
newMelee = currentMelee - 1;
|
|
}
|
|
else {
|
|
// No defense; adjust soak instead
|
|
newSoak = currentSoak - 2;
|
|
}
|
|
newEncum = currentEncum + 2;
|
|
}
|
|
else {
|
|
if (hasDefense) {
|
|
newRanged = currentRanged - 1;
|
|
newMelee = currentMelee - 1;
|
|
}
|
|
else {
|
|
// No defense; adjust soak instead
|
|
newSoak = currentSoak - 1;
|
|
}
|
|
newEncum = currentEncum + 1;
|
|
}
|
|
break;
|
|
default:
|
|
// normal
|
|
if (previousQuality === 'superior') {
|
|
newSoak = currentSoak - 1;
|
|
newEncum = currentEncum + 1;
|
|
}
|
|
else {
|
|
// inferior
|
|
if (hasDefense) {
|
|
newRanged = currentRanged + 1;
|
|
newMelee = currentMelee + 1;
|
|
}
|
|
else {
|
|
// No defense; adjust soak instead
|
|
newSoak = currentSoak + 1;
|
|
}
|
|
newEncum = currentEncum - 1;
|
|
}
|
|
}
|
|
setAttrs({ 'armor_bonus_defense_ranged': newRanged, 'armor_bonus_defense_melee': newMelee, 'armor_bonus_soak': newSoak, 'armor_encumbrance': newEncum });
|
|
});
|
|
});
|
|
|
|
/* Calculate Encumbrance */
|
|
|
|
// Calculate Encumbrance Threshold from Brawn + 5 + Containers
|
|
const encumbranceFactors = [
|
|
'brawn',
|
|
'container1_encumbrance',
|
|
'container2_encumbrance',
|
|
'container3_encumbrance',
|
|
'container4_encumbrance',
|
|
'container5_encumbrance'
|
|
];
|
|
|
|
encumbranceFactors.forEach((factor) => {
|
|
on('change:' + factor, (eventInfo) => {
|
|
getAttrs(encumbranceFactors, (values) => {
|
|
const newBrawn = parseInt(values.brawn);
|
|
const c1 = parseInt(values.container1_encumbrance);
|
|
const c2 = parseInt(values.container2_encumbrance);
|
|
const c3 = parseInt(values.container3_encumbrance);
|
|
const c4 = parseInt(values.container4_encumbrance);
|
|
const c5 = parseInt(values.container5_encumbrance);
|
|
const newThreshold = newBrawn + 5 + c1 + c2 + c3 + c4 + c5;
|
|
setAttrs({ 'encumbrance_threshold': newThreshold });
|
|
});
|
|
});
|
|
});
|
|
|
|
const encumbranceCalc = (previousValue, newValue) => {
|
|
getAttrs(['encumbrance_current'], (values) => {
|
|
const previousEncum = parseInt(previousValue);
|
|
const newEncum = parseInt(newValue);
|
|
const currentEncum = parseInt(values.encumbrance_current);
|
|
let encumDifference = Math.abs(previousEncum - newEncum);
|
|
encumDifference = (previousEncum > newEncum) ? -(encumDifference) : encumDifference;
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (previousEncum === newEncum) {
|
|
encumDifference = newEncum;
|
|
}
|
|
const setEncum = currentEncum + encumDifference;
|
|
setAttrs({ 'encumbrance_current': setEncum });
|
|
});
|
|
};
|
|
|
|
// When changing a weapon, armor, or gear item encumbrance, change the total encumbrance
|
|
on('change:repeating_weapons change:armor_encumbrance change:repeating_gear', (eventInfo) => {
|
|
let itemId = '';
|
|
let carriedId = '';
|
|
let encumbranceId = '';
|
|
let previousValue = eventInfo.previousValue;
|
|
let newValue = eventInfo.newValue;
|
|
switch (true) {
|
|
// This is a gear item encumbrance value changing
|
|
case(eventInfo.sourceAttribute.indexOf('gear_item_encumbrance') > -1):
|
|
itemId = (eventInfo.triggerName).slice(15);
|
|
carriedId = 'repeating_gear'+itemId+'_gear_item_carried';
|
|
getAttrs([carriedId], (values) => {
|
|
// If the item is carried, calculate encumbrance; if not, ignore the change
|
|
if(values[carriedId] === 'true'){
|
|
encumbranceCalc(previousValue, newValue);
|
|
};
|
|
});
|
|
break;
|
|
// This is a gear item carried value changing
|
|
case(eventInfo.sourceAttribute.indexOf('gear_item_carried') > -1):
|
|
itemId = (eventInfo.triggerName).slice(15);
|
|
encumbranceId = 'repeating_gear'+itemId+'_gear_item_encumbrance';
|
|
getAttrs([encumbranceId], (values) => {
|
|
// If the item is carried, add encumbrance value; if not, remove encumbrance value
|
|
previousValue = (eventInfo.newValue === 'true') ? 0 : values[encumbranceId];
|
|
newValue = (eventInfo.newValue === '0') ? 0 : values[encumbranceId];
|
|
encumbranceCalc(previousValue, newValue);
|
|
});
|
|
break;
|
|
// This is a weapon encumbrance value changing
|
|
case(eventInfo.sourceAttribute.indexOf('weapon_encumbrance') > -1):
|
|
itemId = (eventInfo.triggerName).slice(18);
|
|
carriedId = 'repeating_weapons'+itemId+'_weapon_carried';
|
|
getAttrs([carriedId], (values) => {
|
|
// If the item is carried, calculate encumbrance; if not, ignore the change
|
|
if(values[carriedId] === 'true'){
|
|
encumbranceCalc(previousValue, newValue);
|
|
};
|
|
});
|
|
break;
|
|
// This is a weapon carried value changing
|
|
case(eventInfo.sourceAttribute.indexOf('weapon_carried') > -1):
|
|
itemId = (eventInfo.triggerName).slice(18);
|
|
encumbranceId = 'repeating_weapons'+itemId+'_weapon_encumbrance';
|
|
getAttrs([encumbranceId], (values) => {
|
|
// If the item is carried, add encumbrance value; if not, remove encumbrance value
|
|
previousValue = (eventInfo.newValue === 'true') ? 0 : values[encumbranceId];
|
|
newValue = (eventInfo.newValue === '0') ? 0 : values[encumbranceId];
|
|
encumbranceCalc(previousValue, newValue);
|
|
});
|
|
break;
|
|
// This is a armor encumbrance value changing
|
|
case(eventInfo.sourceAttribute.indexOf('armor_encumbrance') > -1):
|
|
encumbranceCalc(previousValue, newValue);
|
|
break;
|
|
default:
|
|
// Do nothing
|
|
}
|
|
});
|
|
|
|
// When removing a gear item, remove it's encumbrance from the total encumbrance
|
|
on('remove:repeating_gear', (eventInfo) => {
|
|
const itemId = (eventInfo.sourceAttribute).slice(15);
|
|
const removedItems = eventInfo.removedInfo;
|
|
const removedCarriedKey = 'repeating_gear_' + itemId + '_gear_item_carried';
|
|
const removedEncumKey = 'repeating_gear_' + itemId + '_gear_item_encumbrance';
|
|
// If the repeating item values were never initialized by a user changing a value, the removedInfo will be empty.
|
|
// The item's encumbrance, then does not exist (rather than being zero) and would throw an error.
|
|
if (Object.keys(removedItems).length > 0 && removedItems.constructor === Object) {
|
|
// Only remove encumbrance if the item is currently carried
|
|
if (removedItems[removedCarriedKey] === 'true') {
|
|
getAttrs(['encumbrance_current'], (values) => {
|
|
const removedEncum = parseInt(removedItems[removedEncumKey]);
|
|
const currentEncum = parseInt(values.encumbrance_current);
|
|
setEncum = currentEncum - removedEncum;
|
|
setAttrs({ 'encumbrance_current': setEncum });
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// When removing a weapon, remove it's encumbrance from the total encumbrance
|
|
// Also remove any bonus for Defensive or Deflection
|
|
on('remove:repeating_weapons', (eventInfo) => {
|
|
const itemId = (eventInfo.sourceAttribute).slice(18);
|
|
const removedItems = eventInfo.removedInfo;
|
|
const removedCarriedKey = 'repeating_weapons_' + itemId + '_weapon_carried';
|
|
const removedEncumKey = 'repeating_weapons_' + itemId + '_weapon_encumbrance';
|
|
// If the repeating item values were never initialized by a user changing a value, the removedInfo will be empty.
|
|
// The item's encumbrance, then does not exist (rather than being zero) and would throw an error.
|
|
if (Object.keys(removedItems).length > 0) {
|
|
// Only remove encumbrance if the weapon is currently carried
|
|
if (removedItems[removedCarriedKey] === 'true') {
|
|
getAttrs(['encumbrance_current', 'defense_ranged', 'defense_melee'], (values) => {
|
|
const removedDefensiveKey = 'repeating_weapons_' + itemId + '_weapon_quality_defensive_value';
|
|
const removedDeflectionKey = 'repeating_weapons_' + itemId + '_weapon_quality_deflection_value';
|
|
if (removedItems[removedEncumKey]) {
|
|
const removedEncum = parseInt(removedItems[removedEncumKey]);
|
|
const currentEncum = parseInt(values.encumbrance_current);
|
|
const setEncum = currentEncum - removedEncum;
|
|
setAttrs({ 'encumbrance_current': setEncum });
|
|
}
|
|
if (removedItems[removedDefensiveKey]) {
|
|
const removedDefensive = parseInt(removedItems[removedDefensiveKey]);
|
|
const currentMelee = parseInt(values.defense_melee);
|
|
setMelee = currentMelee - removedDefensive;
|
|
setAttrs({ 'defense_melee': setMelee });
|
|
}
|
|
if (removedItems[removedDeflectionKey]) {
|
|
const removedDeflection = parseInt(removedItems[removedDeflectionKey]);
|
|
const currentRanged = parseInt(values.defense_ranged);
|
|
const setRanged = currentRanged - removedDeflection;
|
|
setAttrs({ 'defense_ranged': setRanged });
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
/* Collapse sections */
|
|
const showSectionsList = [
|
|
'show_destiny_pool',
|
|
'show_vital_stats',
|
|
'show_name',
|
|
'show_xp_credits',
|
|
'show_bio_notes',
|
|
'show_obligation',
|
|
'show_duty',
|
|
'show_morality',
|
|
'show_characteristics',
|
|
'show_skills',
|
|
'show_initiative',
|
|
'show_criticals',
|
|
'show_weapons',
|
|
'show_armor',
|
|
'show_combat_talents',
|
|
'show_gear',
|
|
'show_containers',
|
|
'show_cybernetics',
|
|
'show_non_combat_talents',
|
|
'show_signature_abilities',
|
|
'show_force_powers'
|
|
];
|
|
|
|
showSectionsList.forEach((section) => {
|
|
on('clicked:' + section, () => {
|
|
getAttrs([section], (values) => {
|
|
const currentValue = values[section];
|
|
const newValue = currentValue === 'true' ? 'false' : 'true';
|
|
const newLabel = currentValue === 'true' ? 'show' : 'hide';
|
|
setAttrs({
|
|
[section]: newValue, [section + '_label']: newLabel });
|
|
});
|
|
});
|
|
});
|
|
|
|
on('clicked:repeating_weapons:show-weapon-qualities', () => {
|
|
const section = 'repeating_weapons_show-weapon-qualities';
|
|
getAttrs([section], (values) => {
|
|
const currentValue = values[section];
|
|
const newValue = currentValue === 'true' ? 'false' : 'true';
|
|
const newLabel = currentValue === 'true' ? 'show' : 'hide';
|
|
setAttrs({
|
|
[section]: newValue, [section + '_label']: newLabel });
|
|
});
|
|
});
|
|
|
|
on('clicked:repeating_weapons:show-weapon-attachments', () => {
|
|
const section = 'repeating_weapons_show-weapon-attachments';
|
|
getAttrs([section], (values) => {
|
|
const currentValue = values[section];
|
|
const newValue = currentValue === 'true' ? 'false' : 'true';
|
|
const newLabel = currentValue === 'true' ? 'show' : 'hide';
|
|
setAttrs({
|
|
[section]: newValue, [section + '_label']: newLabel });
|
|
});
|
|
});
|
|
|
|
on('clicked:repeating_weapons:show-weapon-notes', () => {
|
|
const section = 'repeating_weapons_show-weapon-notes';
|
|
getAttrs([section], (values) => {
|
|
const currentValue = values[section];
|
|
const newValue = currentValue === 'true' ? 'false' : 'true';
|
|
const newLabel = currentValue === 'true' ? 'show' : 'hide';
|
|
setAttrs({
|
|
[section]: newValue, [section + '_label']: newLabel });
|
|
});
|
|
});
|
|
|
|
/* Calculate Total Obligation */
|
|
on('change:repeating_obligations:obligation_amount', (eventInfo) => {
|
|
getAttrs(['obligation_total'], (values) => {
|
|
const previousObligation = parseInt(eventInfo.previousValue);
|
|
const newObligation = parseInt(eventInfo.newValue);
|
|
const currentObligation = parseInt(values.obligation_total);
|
|
let obligationDifference = Math.abs(previousObligation - newObligation);
|
|
obligationDifference = (previousObligation > newObligation) ? -(obligationDifference) : obligationDifference;
|
|
// Workaround for newly added items in repeating sections; number fields have no value until initialized with a change
|
|
// This will break if the user happens to manually change a number to the same number
|
|
if (previousObligation === newObligation) {
|
|
obligationDifference = newObligation;
|
|
}
|
|
let setObligation = currentObligation + obligationDifference;
|
|
// Don't let Obligation go negative
|
|
setObligation = (setObligation > 0) ? setObligation : 0;
|
|
setAttrs({ 'obligation_total': setObligation });
|
|
});
|
|
});
|
|
|
|
// When removing an Obligation, remove from the Total Obligation
|
|
on('remove:repeating_obligations', (eventInfo) => {
|
|
const itemId = (eventInfo.sourceAttribute).slice(22);
|
|
const removedItems = eventInfo.removedInfo;
|
|
const removedObligationKey = 'repeating_obligations_' + itemId + '_obligation_amount';
|
|
// If the repeating item values were never initialized by a user changing a value, the removedInfo will be empty.
|
|
// The item's encumbrance, then does not exist (rather than being zero) and would throw an error.
|
|
if (Object.keys(removedItems).length > 0 && removedItems.constructor === Object) {
|
|
getAttrs(['obligation_total'], (values) => {
|
|
const removedObligation = parseInt(removedItems[removedObligationKey]);
|
|
const currentObligation = parseInt(values.obligation_total);
|
|
setObligation = currentObligation - removedObligation;
|
|
setAttrs({ 'obligation_total': setObligation });
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<!-- End Sheet Workers -->
|
|
|
|
|
|
|
|
|