mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
1638 lines
79 KiB
HTML
1638 lines
79 KiB
HTML
<div class="preload"></div>
|
|
<div>
|
|
<input type="hidden" name="attr_command_extra_domain_query"
|
|
value="?{Add another Domain (spend Burn)|No, |Tactical, + @{tactical_die}[Tactical]|Operations, + @{operations_die}[Operations]|Systems, + @{systems_die}[Systems]}" />
|
|
<input type="hidden" name="attr_advantage_bond_support_translated" value="Advantage/Bond/Support" />
|
|
<input type="hidden" name="attr_command_translated" value="Command" />
|
|
<input type="hidden" name="attr_tactical_extra_domain_query"
|
|
value="?{Add another Domain (spend Burn)|No, |Command, + @{command_die}[Command]|Operations, + @{operations_die}[Operations]|Systems, + @{systems_die}[Systems]}" />
|
|
<input type="hidden" name="attr_tactical_translated" value="Tactical" />
|
|
<input type="hidden" name="attr_bonusdice_query"
|
|
value="?{Other dice (Advantage, Bond Dice, or Support), e.g. 1d8 + 1d8 + 1d6|0}" />
|
|
<input type="hidden" name="attr_operations_extra_domain_query"
|
|
value="?{Add another Domain (spend Burn)|No, |Command, + @{command_die}[Command]|Tactical, + @{tactical_die}[Tactical]|Systems, + @{systems_die}[Systems]}" />
|
|
<input type="hidden" name="attr_operations_translated" value="Operations" />
|
|
<input type="hidden" name="attr_charges_query" value="?{Spend Charges|0}" />
|
|
<input type="hidden" name="attr_role_and_callsign_query"
|
|
value="?{Epithet die|None,roll=[[{@{callsign_die}[@{callsign_label}]|@{epithet},epithet=@{epithet}&#125;&#125; {{roll=[[{@{callsign_die}[@{callsign_label}] + @{role_die}[@{role_label}]}" />
|
|
<input type="hidden" name="attr_systems_extra_domain_query"
|
|
value="?{Add another Domain (spend Burn)|No, |Command, + @{command_die}[Command]|Tactical, + @{tactical_die}[Tactical]|Operations, + @{operations_die}[Operations]}" />
|
|
<input type="hidden" name="attr_systems_translated" value="Systems" />
|
|
<input type="hidden" name="attr_target_query" value="?{Target Number|0}" />
|
|
<input type="hidden" name="attr_domain_query"
|
|
value="?{Domain|@{command_label},command|@{tactical_label},tactical|@{operations_label},operations|@{systems_label},systems|Any domain,any}" />
|
|
<input type="hidden" name="attr_strife_formula"
|
|
value="{{roll=[[{d8[Callsign] + d8[Role]}k1 + @{strife_level}[Strife Level]]]}} {{harm=}}" />
|
|
</div>
|
|
<div class="container">
|
|
<input class="sheet-type" type="hidden" name="attr_sheet_type" value="" />
|
|
<div class="sheet-type-selector">
|
|
<div class="title" data-i18n="choose_sheet_type"></div>
|
|
<div class="content">
|
|
<button type="action" name="act_choose_character" data-i18n="character"></button>
|
|
<button type="action" name="act_choose_thread" data-i18n="thread"></button>
|
|
<button type="action" name="act_choose_squadron" data-i18n="squadron"></button>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-type-character">
|
|
<div class="logo"></div>
|
|
<div class="info">
|
|
<div class="infobox">
|
|
<div class="title">
|
|
<div class="auto-expand"><span data-i18n="role" name="attr_role_label">Role</span>
|
|
<textarea spellcheck="false" data-i18n="role" name="attr_role_label">Role</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="content epithet">
|
|
<div class="auto-expand"><span name="attr_epithet"></span>
|
|
<textarea spellcheck="false" name="attr_epithet"></textarea>
|
|
</div>
|
|
<select name="attr_role_die">
|
|
<option value="d6">d6</option>
|
|
<option value="d8">d8</option>
|
|
<option value="d10">d10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<input class="hider" type="hidden" name="attr_boons_4_check_1" value="0" />
|
|
<div class="infobox">
|
|
<div class="title">
|
|
<div class="auto-expand"><span name="attr_role_label">Role</span>
|
|
<textarea spellcheck="false" name="attr_role_label">Role</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="content epithet">
|
|
<div class="auto-expand"><span name="attr_role_2"></span>
|
|
<textarea spellcheck="false" name="attr_role_2"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="infobox">
|
|
<div class="title">
|
|
<div class="auto-expand"><span name="attr_callsign_label">Call Sign</span>
|
|
<textarea spellcheck="false" name="attr_callsign_label">Call Sign</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="content character-name">
|
|
<input type="text" spellcheck="false" name="attr_character_name" />
|
|
<select name="attr_callsign_die">
|
|
<option value="d6">d6</option>
|
|
<option value="d8">d8</option>
|
|
<option value="d10">d10</option>
|
|
<option value="d12">d12</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="infobox">
|
|
<div class="title">
|
|
<div class="auto-expand"><span name="attr_name_pronouns_label">Name / Pronouns</span>
|
|
<textarea spellcheck="false" name="attr_name_pronouns_label">Name / Pronouns</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="content lineage-pronouns">
|
|
<div class="auto-expand"><span name="attr_name_pronouns"></span>
|
|
<textarea spellcheck="false" name="attr_name_pronouns"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="infobox">
|
|
<div class="title">
|
|
<div class="auto-expand"><span name="attr_rank_label">Rank</span>
|
|
<textarea spellcheck="false" name="attr_rank_label">Rank</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="content rank">
|
|
<select name="attr_rank">
|
|
<option value="CPT">CPT - Captain</option>
|
|
<option value="COR">COR - Commander</option>
|
|
<option value="LT">LT - Lieutenant</option>
|
|
<option value="CWO">CWO - Chief Warrant Officer "Chief"</option>
|
|
<option value="WO">WO - Warrant Officer "Pilot"</option>
|
|
<option value="FSGT">FSGT - Flight Sergeant</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="title-vertical style">
|
|
<input class="title" type="text" spellcheck="false" name="attr_style_label" value="Style" />
|
|
<div class="content">
|
|
<div class="auto-expand notes"><span name="attr_style"></span>
|
|
<textarea spellcheck="false" name="attr_style"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="domains">
|
|
<div class="domain">
|
|
<button class="domain-button-command" name="roll_command" type="roll"
|
|
value="&{template:stormfury-pilot} {{name=@{character_name}}} {{type=command}} {{obstacle=[[@{target_query}]]}} {{@{role_and_callsign_query} + @{command_die}[@{command_translated}] @{command_extra_domain_query} + @{bonusdice_query}[@{advantage_bond_support_translated}]}k2 + @{charges_query}d4k1[@{charges_label}] ]]}}"><span
|
|
name="attr_command_label"></span></button> <!-- name tag for translation missing -->
|
|
<select name="attr_command_die">
|
|
<option value="d6">d6</option>
|
|
<option value="d8">d8</option>
|
|
<option value="d10">d10</option>
|
|
</select>
|
|
</div>
|
|
<div class="domain">
|
|
<button class="domain-button-tactical" name="roll_tactical" type="roll"
|
|
value="&{template:stormfury-pilot} {{name=@{character_name}}} {{type=tactical}} {{obstacle=[[@{target_query}]]}} {{@{role_and_callsign_query} + @{tactical_die}[@{tactical_translated}] @{tactical_extra_domain_query} + @{bonusdice_query}[@{advantage_bond_support_translated}]}k2 + @{charges_query}d4k1[@{charges_label}] ]]}}"><span
|
|
name="attr_tactical_label"></span></button> <!-- name tag for translation missing -->
|
|
<select name="attr_tactical_die">
|
|
<option value="d6">d6</option>
|
|
<option value="d8">d8</option>
|
|
<option value="d10">d10</option>
|
|
</select>
|
|
</div>
|
|
<div class="domain">
|
|
<button class="domain-button-operations" name="roll_operations" type="roll"
|
|
value="&{template:stormfury-pilot} {{name=@{character_name}}} {{type=operations}} {{obstacle=[[@{target_query}]]}} {{@{role_and_callsign_query} + @{operations_die}[@{operations_translated}] @{operations_extra_domain_query} + @{bonusdice_query}[@{advantage_bond_support_translated}]}k2 + @{charges_query}d4k1[@{charges_label}] ]]}}"><span
|
|
name="attr_operations_label"></span></button> <!-- name tag for translation missing -->
|
|
<select name="attr_operations_die">
|
|
<option value="d6">d6</option>
|
|
<option value="d8">d8</option>
|
|
<option value="d10">d10</option>
|
|
</select>
|
|
</div>
|
|
<div class="domain">
|
|
<button class="domain-button-systems" name="roll_systems" type="roll"
|
|
value="&{template:stormfury-pilot} {{name=@{character_name}}} {{type=systems}} {{obstacle=[[@{target_query}]]}} {{@{role_and_callsign_query} + @{systems_die}[@{systems_translated}] @{systems_extra_domain_query} + @{bonusdice_query}[@{advantage_bond_support_translated}]}k2 + @{charges_query}d4k1[@{charges_label}] ]]}}"><span
|
|
name="attr_systems_label"></span></button> <!-- name tag for translation missing -->
|
|
<select name="attr_systems_die">
|
|
<option value="d6">d6</option>
|
|
<option value="d8">d8</option>
|
|
<option value="d10">d10</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="bonds-commendations">
|
|
<div class="bonds">
|
|
<input class="title" type="text" spellcheck="false" name="attr_bonds_label" value="Bonds" />
|
|
<fieldset class="repeating_bonds">
|
|
<input class="bond-number" type="number" name="attr_bond_number" value="0" />
|
|
<input class="bond-name" type="text" spellcheck="false" name="attr_bond_name" />
|
|
</fieldset>
|
|
<div class="bond-uses">
|
|
<div class="auto-expand top"><span name="attr_bond_use_top_label">When you use a Bond, ask them to:</span>
|
|
<textarea spellcheck="false" name="attr_bond_use_top_label">When you use a Bond, ask them to:</textarea>
|
|
</div>
|
|
<div class="auto-expand bond-use"><span name="attr_bond_use_1_label">Bolster you</span>
|
|
<textarea spellcheck="false" name="attr_bond_use_1_label">Bolster you</textarea>
|
|
</div>
|
|
<div class="auto-expand bond-use"><span name="attr_bond_use_2_label">Block Harm or Fate for you</span>
|
|
<textarea spellcheck="false" name="attr_bond_use_2_label">Block Harm or Fate for you</textarea>
|
|
</div>
|
|
<div class="auto-expand bond-use"><span name="attr_bond_use_3_label">Follow your lead</span>
|
|
<textarea spellcheck="false" name="attr_bond_use_3_label">Follow your lead</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="divider"></div>
|
|
<div class="commendations">
|
|
<input class="title" type="text" spellcheck="false" name="attr_commendations_label" value="Commendations" />
|
|
<!-- missing name for translation -->
|
|
<fieldset class="repeating_deeds">
|
|
<input class="squarebox" type="checkbox" name="attr_commendation_check" value="1" /><span></span>
|
|
<div class="auto-expand deed-name"><span name="attr_commendation_name"></span>
|
|
<textarea spellcheck="false" name="attr_commendation_name" data-i18n-placeholder="commendation"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="title-vertical recite">
|
|
<input class="title" type="text" spellcheck="false" name="attr_recite_deeds_label"="Recite your deeds" />
|
|
<!-- missing name for translation -->
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_recite_top_label">How does your Role, Burn (an added Domain), or
|
|
Charges manifest in the contest?</span>
|
|
<textarea spellcheck="false"
|
|
name="attr_recite_top_label">How does your Role, Burn (an added Domain), or Charges manifest in the contest?</textarea>
|
|
</div>
|
|
<div class="recite-box">
|
|
<input class="title" type="text" spellcheck="false" name="attr_command_label" />
|
|
<div class="auto-expand"><span name="attr_recite_command_label">What squadron strategy did you use? How
|
|
did we see your willpower in action? How were passions stirred or truths attested?</span>
|
|
<textarea spellcheck="false"
|
|
name="attr_recite_command_label">What squadron strategy did you use? How did we see your willpower in action? How were passions stirred or truths attested?</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="recite-box">
|
|
<input class="title" type="text" spellcheck="false" name="attr_tactical_label" />
|
|
<div class="auto-expand"><span name="attr_recite_tactical_label">How was blood spilled? How was your
|
|
strength, agility, or courage shown? How did you take our breath away?</span>
|
|
<textarea spellcheck="false"
|
|
name="attr_recite_tactical_label">How was blood spilled? How was your strength, agility, or courage shown? How did you take our breath away?</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="recite-box">
|
|
<input class="title" type="text" spellcheck="false" name="attr_operations_label" />
|
|
<!-- missing name for translation -->
|
|
<div class="auto-expand"><span name="attr_recite_operations_label">How was your knowledge or creativity
|
|
shown? How was trickery or intrigue displayed? How did you figure it out?</span>
|
|
<textarea spellcheck="false"
|
|
name="attr_recite_operations_label">How was your knowledge or creativity shown? How was trickery or intrigue displayed? How did you figure it out?</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="recite-box">
|
|
<input class="title" type="text" spellcheck="false" name="attr_systems_label" />
|
|
<div class="auto-expand"><span name="attr_recite_systems_label">How did you teach something? How did you
|
|
employ technology to your means? How did science help your purpose?</span>
|
|
<textarea spellcheck="false"
|
|
name="attr_recite_systems_label">How did you teach something? How did you employ technology to your means? How did science help your purpose?</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="recite-box">
|
|
<input class="title" type="text" spellcheck="false" name="attr_suffer_label" />
|
|
<div class="auto-expand"><span>How did you fall short? Did you overreach yourself? Was the opponent
|
|
too great? Was it bad luck?</span>
|
|
<textarea
|
|
spellcheck="false">How did you fall short? Did you overreach yourself? Was the opponent too great? Was it bad luck?</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="charges-burn">
|
|
<div class="flightsystems left">
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_bravado_label" value="Bravado" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_bravado_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_bravado_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_bravado_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_bravado_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_bravado_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_bravado_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_courage_label" value="Courage" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_courage_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_courage_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_courage_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_courage_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_courage_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_courage_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_devotion_label" value="Devotion" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_devotion_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_devotion_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_devotion_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_devotion_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_devotion_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_devotion_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_duty_label" value="Duty" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_duty_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_duty_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_duty_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_duty_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_duty_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_duty_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="divider"></div>
|
|
<div class="chargebox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_flightclass_label" value="Flight Class" />
|
|
<select name="attr_flightclass">
|
|
<option value="fox">Fox</option>
|
|
<option value="owl">Owl</option>
|
|
<option value="raven">Raven</option>
|
|
<option value="wolf">Wolf</option>
|
|
</select>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_flightclass_1" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="chargebox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_flightsystems_label" value="Flight Systems" />
|
|
<input class="detail" type="text" spellcheck="false" name="attr_power_sensors_label" value="Power & Sensors" />
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_flightsystems_1" value="1" /><span></span>
|
|
</div>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_flightsystems_2" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="chargebox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_maneuvers_label" value="Flight Maneuvers" />
|
|
<input class="detail" type="text" spellcheck="false" value="Corkscrew" />
|
|
<input class="detail" type="text" spellcheck="false" value="Hard Boost" />
|
|
<input class="detail" type="text" spellcheck="false" value="Switchback" />
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_flight_maneuvers_1" value="1" /><span></span>
|
|
</div>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_flight_maneuvers_2" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="burn">
|
|
<div class="burn-fate">
|
|
<input class="title" type="text" spellcheck="false" name="attr_burn_label" value="Burn" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_burn" value="0" checked="checked" />
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_burn" value="1" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_burn" value="2" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_burn" value="3" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_burn" value="4" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_burn" value="5" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="burnout" type="text" spellcheck="false" name="attr_burnout_label" value="Out" />
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_burn" value="6" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="fate" type="text" spellcheck="false" name="attr_fate_label" value="Fate" />
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="hidden fakeradio2" type="checkbox" name="attr_fate" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio2 dot" type="checkbox" name="attr_fate" value="1" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2" type="checkbox" name="attr_fate" value="2" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2" type="checkbox" name="attr_fate" value="3" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2 dot" type="checkbox" name="attr_fate" value="4" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2" type="checkbox" name="attr_fate" value="5" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2" type="checkbox" name="attr_fate" value="6" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2" type="checkbox" name="attr_fate" value="7" /><span></span>
|
|
<div class="floating-vert-bar"></div>
|
|
<input class="squarebox fakeradio2 dot" type="checkbox" name="attr_fate" value="8" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="flightsystems right">
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_honor_label" value="Honor" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_honor_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_honor_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_honor_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_honor_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_honor_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_honor_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_passion_label" value="Passion" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_passion_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_passion_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_passion_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_passion_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_passion_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_passion_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_wrath_label" value="Wrath" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_wrath_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_wrath_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_wrath_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_wrath_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_wrath_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_wrath_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="exprbox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_forged_label" value="Forged" />
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_forged_expr" value="0" checked="checked" />
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_forged_expr" value="1" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_forged_expr" value="2" /><span></span>
|
|
<input class="rectbox fakeradio" type="checkbox" name="attr_forged_expr" value="3" /><span></span>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_forged_charge" value="1" /><span></span>
|
|
</div>
|
|
<div class="burn">
|
|
<input class="circlebox" type="checkbox" name="attr_forged_burn" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="divider"></div>
|
|
<div class="chargebox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_combatclass_label" value="Combat Class" />
|
|
<select name="attr_combatclass">
|
|
<option value="blade">Blade</option>
|
|
<option value="claw">Claw</option>
|
|
<option value="hammer">Hammer</option>
|
|
<option value="spear">Spear</option>
|
|
</select>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_combatclass_1" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="chargebox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_combatsystems_label" value="Combat Systems" />
|
|
<input class="detail" type="text" spellcheck="false" name="attr_shields_weapons_label" value="Shields & Weapons" />
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_combatsystems_1" value="1" /><span></span>
|
|
</div>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_combatsystems_2" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="chargebox">
|
|
<input class="header" type="text" spellcheck="false" name="attr_maneuvers_label" value="Combat Maneuvers" />
|
|
<input class="detail" type="text" spellcheck="false" value="Firestorm" />
|
|
<input class="detail" type="text" spellcheck="false" value="Bulls Eye" />
|
|
<input class="detail" type="text" spellcheck="false" value="Thread the Needle" />
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_combat_maneuvers_1" value="1" /><span></span>
|
|
</div>
|
|
<div class="charge">
|
|
<input class="diamondbox" type="checkbox" name="attr_combat_maneuvers_2" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="title-vertical glory">
|
|
<input class="title" type="text" spellcheck="false" data-i18n="glory" name="attr_glory_label" value="Glory" />
|
|
<div class="content">
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_0" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_0" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_0" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_0" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_0" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_0" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_1" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_1" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_1" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_1" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_1" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_1" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_2" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_2" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_2" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_2" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_2" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_2" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_3" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_3" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_3" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_3" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_3" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_3" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_4" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_4" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_4" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_4" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_4" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_4" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_5" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_5" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_5" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_5" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_5" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_5" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_6" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_6" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_6" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_6" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_6" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_6" value="5" /><span></span>
|
|
</div>
|
|
<div class="box">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_glory_7" value="0" checked="checked" />
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_7" value="1" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_7" value="2" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_7" value="3" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_7" value="4" /><span></span>
|
|
<div class="floatingbar"></div>
|
|
<input class="squarebox fakeradio" type="checkbox" name="attr_glory_7" value="5" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="title-vertical namebox">
|
|
<input class="title" type="text" spellcheck="false" name="attr_glory_label" value="Glory" />
|
|
<div class="content">
|
|
<label>
|
|
<input class="squarebox" type="checkbox" name="attr_glory_40" value="1" /><span></span><span>40</span>
|
|
</label>
|
|
<label>
|
|
<input class="squarebox" type="checkbox" name="attr_glory_80" value="1" /><span></span><span>80 (D8)</span>
|
|
</label>
|
|
<label>
|
|
<input class="squarebox" type="checkbox" name="attr_glory_120" value="1" /><span></span><span>120 (D10)</span>
|
|
</label>
|
|
<label>
|
|
<input class="squarebox" type="checkbox" name="attr_glory_160" value="1" /><span></span><span>160</span>
|
|
</label>
|
|
<label>
|
|
<input class="squarebox" type="checkbox" name="attr_glory_200" value="1" /><span></span><span>200</span>
|
|
</label>
|
|
<label>
|
|
<input class="squarebox" type="checkbox" name="attr_glory_240" value="1" /><span></span><span>240 (D12)</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="title-vertical advances">
|
|
<input class="title" type="text" spellcheck="false" name="attr_boons_label" value="Advances" />
|
|
<div class="content">
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_1_check_1" value="1" /><span></span>
|
|
<div class="auto-expand"><span>Advance a d8 Domain die to d10</span> <!-- missing name for translation -->
|
|
<textarea spellcheck="false">Advance a d8 Domain die to d10</textarea> <!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_2_check_1" value="1" /><span></span>
|
|
<input class="squarebox" type="checkbox" name="attr_boons_2_check_2" value="1" /><span></span>
|
|
<div class="auto-expand"><span>Advance a d6 Domain die to d8</span> <!-- missing name for translation -->
|
|
<textarea spellcheck="false">Advance a d6 Domain die to d8</textarea> <!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_3_check_1" value="1" /><span></span>
|
|
<div class="auto-expand"><span>Advance your Role die to d8</span> <!-- missing name for translation -->
|
|
<textarea spellcheck="false">Advance your Role die to d8</textarea> <!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_4_check_1" value="1" /><span></span>
|
|
<div class="auto-expand"><span>Add another Role</span> <!-- missing name for translation -->
|
|
<textarea spellcheck="false">Add another Role</textarea> <!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_5_check_1" value="1" /><span></span>
|
|
<div class="auto-expand"><span>When you support or bolster, the die you give counts as one size larger.</span>
|
|
<!-- missing name for translation -->
|
|
<textarea
|
|
spellcheck="false">When you support or bolster, the die you give counts as one size larger.</textarea>
|
|
<!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_6_check_1" value="1" /><span></span>
|
|
<div class="auto-expand"><span>When you mark Burn for an extra domain, take two extra dice.</span> <!-- missing name for translation -->
|
|
<textarea
|
|
spellcheck="false">When you mark Burn for an extra domain, take two extra dice.</textarea>
|
|
<!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
<div class="boon">
|
|
<input class="squarebox" type="checkbox" name="attr_boons_7_check_1" value="1" /><span></span>
|
|
<div class="auto-expand"><span>When you spend a Charge, roll +2d4 and keep the highest.</span>
|
|
<!-- missing name for translation -->
|
|
<textarea spellcheck="false">When you spend a Charge, roll +2d4 and keep the highest.</textarea>
|
|
<!-- missing name for translation -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="character-copyright">
|
|
<label>Images of Stormfuries logo, the Temptest and the Storm are courtesy of John Harper.</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-type-thread">
|
|
<div class="roller">
|
|
<div class="harm">
|
|
<div class="harmbox">
|
|
<input class="title" type="text" spellcheck="false" name="attr_dire_label" value="Dire" />
|
|
<input class="squarebox" type="checkbox" name="attr_dire" value="1" /><span></span>
|
|
</div>
|
|
<div class="harmbox">
|
|
<input class="title" type="text" spellcheck="false" name="attr_daunding_label" value="Daunding" />
|
|
<input class="squarebox" type="checkbox" name="attr_daunding" value="1" /><span></span>
|
|
</div>
|
|
<div class="harmbox">
|
|
<input class="title" type="text" spellcheck="false" name="attr_perilous_label" value="Perilous" />
|
|
<input class="squarebox" type="checkbox" name="attr_perilous" value="1" /><span></span>
|
|
</div>
|
|
<div class="harmbox">
|
|
<input class="title" type="text" spellcheck="false" name="attr_arduous_label" value="Arduous" />
|
|
<input class="squarebox" type="checkbox" name="attr_arduous" value="1" /><span></span>
|
|
</div>
|
|
</div>
|
|
<div class="thread-advantage">
|
|
<input class="title" type="text" spellcheck="false" name="attr_thread_advantage_label"
|
|
value="Thread Advantage" />
|
|
<div class="checks">
|
|
<label>
|
|
<input class="trianglebox" type="checkbox" name="attr_thread_advantage"
|
|
value="d8" /><span></span><span>d8</span>
|
|
</label>
|
|
<label>
|
|
<input class="trianglebox" type="checkbox" name="attr_thread_advantage"
|
|
value="d10" /><span></span><span>d10</span>
|
|
</label>
|
|
<label>
|
|
<input class="trianglebox" type="checkbox" name="attr_thread_advantage"
|
|
value="d12" /><span></span><span>d12</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="strife-level">
|
|
<input class="title" type="text" spellcheck="false" name="attr_plus_thread_level_label"
|
|
value="Plus Thread Level" />
|
|
<div class="checks">
|
|
<label>
|
|
<input name="attr_strife_level" type="radio" value="0" /><span>+0</span>
|
|
</label>
|
|
<label>
|
|
<input name="attr_strife_level" type="radio" value="4" /><span>+4</span>
|
|
</label>
|
|
<label>
|
|
<input name="attr_strife_level" type="radio" value="5" checked="checked" /><span>+5</span>
|
|
</label>
|
|
<label>
|
|
<input name="attr_strife_level" type="radio" value="6" /><span>+6</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<button class="strife-button" name="roll_thread" type="roll" data-i18n="roll_thread"
|
|
value="&{template:stormfury-thread} @{strife_formula} {{type=@{domain_query}}}"></button>
|
|
<div class="dice">
|
|
<fieldset class="repeating_strifedie">
|
|
<input type="text" spellcheck="false" data-i18n-placeholder="die_placeholder" />
|
|
<select name="attr_strifedie_size">
|
|
<option value="d6">d6</option>
|
|
<option value="d8" selected="selected">d8</option>
|
|
<option value="d10">d10</option>
|
|
<option value="d12">d12</option>
|
|
</select>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="missionlogs">
|
|
<input class="title" type="text" spellcheck="false" name="attr_mission_logs_label" value="Mission Logs" />
|
|
<fieldset class="repeating_missionlog">
|
|
<input class="name" type="text" spellcheck="false" name="attr_remnant_name" data-i18n-placeholder="name" />
|
|
<div class="auto-expand notes"><span name="attr_remnant_notes"></span>
|
|
<textarea spellcheck="false" name="attr_remnant_notes"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="enemies">
|
|
<input class="title" type="text" spellcheck="false" name="attr_enemies_label" value="Threads" />
|
|
<div class="enemy">
|
|
<input class="name" type="text" spellcheck="false" value="Raider" /> <!-- missing name for translation -->
|
|
<div class="autoexpand notes"><span></span>
|
|
<textarea
|
|
spellcheck="false">Fast attack craft [d8]. Nimble [d8], Rapid-fire Cannons [d6], Seeking Missiles [d6]. Perilous. Deployed in squadrons of 12.</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="enemy">
|
|
<input class="name" type="text" spellcheck="false" value="Heavy Raider" /> <!-- missing name for translation -->
|
|
<div class="autoexpand notes"><span></span>
|
|
<textarea
|
|
spellcheck="false">Gunboat [d6]. Armored [d8], Heavy Cannons [d8], Long Range Torpedoes [d8]. Perilous. Deployed in squadrons of 8.</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="enemy">
|
|
<input class="name" type="text" spellcheck="false" value="Reaver" /> <!-- missing name for translation -->
|
|
<div class="autoexpand notes"><span></span>
|
|
<textarea
|
|
spellcheck="false">Assault trooper [d8]. Armored [d8], Breaching Claws [d8], Autocannon [d6], Thrusters [d6]. Perilous. Also Dire in close combat. Deployed in squads of 6</textarea>
|
|
</div>
|
|
</div>
|
|
<fieldset class="repeating_enemy">
|
|
<input class="name" type="text" spellcheck="false" name="attr_enemy_name" data-i18n-placeholder="name" />
|
|
<!-- missing name for translation -->
|
|
<div class="autoexpand notes"><span name="attr_enemy_notes"></span>
|
|
<textarea spellcheck="false" name="attr_enemy_notes"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-type-squadron">
|
|
<div class="tempest">
|
|
<div class="tempest_attributes">
|
|
<label class="tempest-intel-1">
|
|
<input class="squarebox" type="checkbox" name="attr_intel1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-intel-2">
|
|
<input class="squarebox" type="checkbox" name="attr_intel2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-intel-3">
|
|
<input class="squarebox" type="checkbox" name="attr_intel3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-intel-4">
|
|
<input class="squarebox" type="checkbox" name="attr_intel4" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-hull-1">
|
|
<input class="squarebox" type="checkbox" name="attr_hull1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-hull-2">
|
|
<input class="squarebox" type="checkbox" name="attr_hull2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-hull-3">
|
|
<input class="squarebox" type="checkbox" name="attr_hull3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-carrierdeck-1">
|
|
<input class="squarebox" type="checkbox" name="attr_carrierdeck1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-carrierdeck-2">
|
|
<input class="squarebox" type="checkbox" name="attr_carrierdeck2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-carrierdeck-3">
|
|
<input class="squarebox" type="checkbox" name="attr_carrierdeck3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-carrierdeck-4">
|
|
<input class="squarebox" type="checkbox" name="attr_carrierdeck4" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stormdrive-1">
|
|
<input class="squarebox" type="checkbox" name="attr_stormdrive1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stormdrive-2">
|
|
<input class="squarebox" type="checkbox" name="attr_stormdrive2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stormdrive-3">
|
|
<input class="squarebox" type="checkbox" name="attr_stormdrive3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stormdrive-4">
|
|
<input class="squarebox" type="checkbox" name="attr_stormdrive4" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-wavebreaker-1">
|
|
<input class="squarebox" type="checkbox" name="attr_wavebreaker1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-wavebreaker-2">
|
|
<input class="squarebox" type="checkbox" name="attr_wavebreaker2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-wavebreaker-3">
|
|
<input class="squarebox" type="checkbox" name="attr_wavebreaker3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stores-1">
|
|
<input class="squarebox" type="checkbox" name="attr_stores1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stores-2">
|
|
<input class="squarebox" type="checkbox" name="attr_stores2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stores-3">
|
|
<input class="squarebox" type="checkbox" name="attr_stores3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-stores-4">
|
|
<input class="squarebox" type="checkbox" name="attr_stores4" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-raildriver-1">
|
|
<input class="squarebox" type="checkbox" name="attr_raildriver1" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-raildriver-2">
|
|
<input class="squarebox" type="checkbox" name="attr_raildriver2" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-raildriver-3">
|
|
<input class="squarebox" type="checkbox" name="attr_raildriver3" value="1" /><span></span>
|
|
</label>
|
|
<label class="tempest-raildriver-4">
|
|
<input class="squarebox" type="checkbox" name="attr_raildriver4" value="1" /><span></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="resource-effects">
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="Launch" /> <!-- missing name for translation -->
|
|
<div class="textarea"><span></span>
|
|
<textarea spellcheck="false">-1 Carrier Deck -1 Intel</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="Return" /> <!-- missing name for translation -->
|
|
<textarea spellcheck="false">-1 Stores +0-+3 Intel</textarea>
|
|
</div>
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="Jump" /> <!-- missing name for translation -->
|
|
<textarea spellcheck="false">-1 Stores -1 Drive -1 Wave Breaker</textarea>
|
|
</div>
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="Full Carrier Deck" />
|
|
<!-- missing name for translation -->
|
|
<textarea spellcheck="false">+1 Charge</textarea>
|
|
</div>
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="Full Rail Driver" />
|
|
<!-- missing name for translation -->
|
|
<textarea spellcheck="false">May engage Pyramid</textarea>
|
|
</div>
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="After Pyramid" />
|
|
<!-- missing name for translation -->
|
|
<div class="autoexpand"><span></span>
|
|
<textarea spellcheck="false">-all Rail Driver -2 Hull,-1 Carrier Deck -1 Storm Drive</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="resource-effect">
|
|
<input class="title" type="text" spellcheck="false" value="Empty Stormdrive" />
|
|
<!-- missing name for translation -->
|
|
<textarea spellcheck="false">Vulnerable to boarding</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="storm">
|
|
<div class="mission_attributes">
|
|
<label class="storm-arvang-1">
|
|
<input class="squarebox" type="checkbox" name="attr_arvang1" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-arvang-2">
|
|
<input class="squarebox" type="checkbox" name="attr_arvang2" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-arvang-3">
|
|
<input class="squarebox" type="checkbox" name="attr_arvang3" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-lysium-1">
|
|
<input class="squarebox" type="checkbox" name="attr_lysium1" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-lysium-2">
|
|
<input class="squarebox" type="checkbox" name="attr_lysium2" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-lysium-3">
|
|
<input class="squarebox" type="checkbox" name="attr_lysium3" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-nythvell-1">
|
|
<input class="squarebox" type="checkbox" name="attr_nythvell1" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-nythvell-2">
|
|
<input class="squarebox" type="checkbox" name="attr_nythvell2" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-nythvell-3">
|
|
<input class="squarebox" type="checkbox" name="attr_nythvell3" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-ode-1">
|
|
<input class="squarebox" type="checkbox" name="attr_ode1" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-ode-2">
|
|
<input class="squarebox" type="checkbox" name="attr_ode2" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-ode-3">
|
|
<input class="squarebox" type="checkbox" name="attr_ode3" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-thorvast-1">
|
|
<input class="squarebox" type="checkbox" name="attr_thorvast1" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-thorvast-2">
|
|
<input class="squarebox" type="checkbox" name="attr_thorvast2" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-thorvast-3">
|
|
<input class="squarebox" type="checkbox" name="attr_thorvast3" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-skelka-1">
|
|
<input class="squarebox" type="checkbox" name="attr_skelka1" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-skelka-2">
|
|
<input class="squarebox" type="checkbox" name="attr_skelka2" value="1" /><span></span>
|
|
</label>
|
|
<label class="storm-skelka-3">
|
|
<input class="squarebox" type="checkbox" name="attr_skelka3" value="1" /><span></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="squadron">
|
|
<div class="squadron-content">
|
|
<div class="squadron-title">
|
|
<input class="squadron-title" type="text" spellcheck="false" name="attr_character_name" value="" />
|
|
<button class="stormcraftdamage-button" name="roll_stormcraftdamage" type="roll" data-i18n="roll_stormcraftdamage"
|
|
value="&{template:stormfury-stormcraft} {{roll=[[D12]]}}"></button>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="1" />
|
|
<div class="damage">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_stormcraft_1_damage" value="0"
|
|
checked="checked" />
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_stormcraft_1_damage" value="1" /><span></span>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_stormcraft_1_damage" value="2" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_1_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_1_pilot">Cpt</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="2" />
|
|
<div class="damage">
|
|
<input class="hidden fakeradio" type="checkbox" name="attr_stormcraft_2_damage" value="0"
|
|
checked="checked" />
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_stormcraft_2_damage" value="1" /><span></span>
|
|
<input class="circlebox fakeradio" type="checkbox" name="attr_stormcraft_2_damage" value="2" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_2_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_2_pilot">Cor</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="squadron-section">
|
|
<input class="squadron-title" type="text" spellcheck="false" value="Flight Alpha" />
|
|
</div>
|
|
<div class="squadron-section">
|
|
<input class="squadron-title" type="text" spellcheck="false" value="Flight Bravo" />
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="3" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_3_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_3_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_3_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_3_pilot">Lt</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="4" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_4_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_4_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_4_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_4_pilot">Lt</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="5" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_5_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_5_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_5_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_5_pilot">CWO</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="6" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_6_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_6_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_6_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_6_pilot">CWO</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="7" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_7_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_7_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_7_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_7_pilot">WO</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="8" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_8_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_8_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_8_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_8_pilot">WO</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="9" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_9_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_9_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_9_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_9_pilot">FSGT</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="10" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_10_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_10_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<div class="auto-expand"><span name="attr_stormcraft_10_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_10_pilot">FSGT</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="11" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_11_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_11_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<input class="title" type="text" spellcheck="false" value="Vulture 1" />
|
|
<div class="auto-expand"><span name="attr_stormcraft_11_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_11_pilot">Lt</textarea>
|
|
</div>
|
|
<select name="attr_vulture1_cargo1">
|
|
<option value="empty">-</option>
|
|
<option value="food">Food</option>
|
|
<option value="fuel">Fuel</option>
|
|
<option value="ordnance">Ordnance</option>
|
|
<option value="tech">Tech</option>
|
|
<option value="water">Water</option>
|
|
<option value="uru">Uru</option>
|
|
<option value="people">People</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
<select name="attr_vulture1_cargo2">
|
|
<option value="empty">-</option>
|
|
<option value="food">Food</option>
|
|
<option value="fuel">Fuel</option>
|
|
<option value="ordnance">Ordnance</option>
|
|
<option value="tech">Tech</option>
|
|
<option value="water">Water</option>
|
|
<option value="uru">Uru</option>
|
|
<option value="people">People</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
<select name="attr_vulture1_cargo3">
|
|
<option value="empty">-</option>
|
|
<option value="food">Food</option>
|
|
<option value="fuel">Fuel</option>
|
|
<option value="ordnance">Ordnance</option>
|
|
<option value="tech">Tech</option>
|
|
<option value="water">Water</option>
|
|
<option value="uru">Uru</option>
|
|
<option value="people">People</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="stormcraft">
|
|
<input class="title" type="text" spellcheck="false" value="12" />
|
|
<div class="damage">
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_12_damage1" value="1" /><span></span>
|
|
<input class="circlebox" type="checkbox" name="attr_stormcraft_12_damage2" value="1" /><span></span>
|
|
</div>
|
|
<div class="content">
|
|
<input class="title" type="text" spellcheck="false" value="Vulture 2" />
|
|
<div class="auto-expand"><span name="attr_stormcraft_12_pilot"></span>
|
|
<textarea spellcheck="false" name="attr_stormcraft_12_pilot">Lt</textarea>
|
|
</div>
|
|
<select name="attr_vulture2_cargo1">
|
|
<option value="empty">-</option>
|
|
<option value="food">Food</option>
|
|
<option value="fuel">Fuel</option>
|
|
<option value="ordnance">Ordnance</option>
|
|
<option value="tech">Tech</option>
|
|
<option value="water">Water</option>
|
|
<option value="uru">Uru</option>
|
|
<option value="people">People</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
<select name="attr_vulture2_cargo2">
|
|
<option value="empty">-</option>
|
|
<option value="food">Food</option>
|
|
<option value="fuel">Fuel</option>
|
|
<option value="ordnance">Ordnance</option>
|
|
<option value="tech">Tech</option>
|
|
<option value="water">Water</option>
|
|
<option value="uru">Uru</option>
|
|
<option value="people">People</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
<select name="attr_vulture2_cargo3">
|
|
<option value="empty">-</option>
|
|
<option value="food">Food</option>
|
|
<option value="fuel">Fuel</option>
|
|
<option value="ordnance">Ordnance</option>
|
|
<option value="tech">Tech</option>
|
|
<option value="water">Water</option>
|
|
<option value="uru">Uru</option>
|
|
<option value="people">People</option>
|
|
<option value="other">Other</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="title-vertical">
|
|
<input class="title" type="text" spellcheck="false" name="attr_marines_label" value="Marines" />
|
|
<div class="content">
|
|
<div class="auto-expand notes"><span name="attr_marines"></span>
|
|
<textarea spellcheck="false" name="attr_marines"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="squadron-copyright">
|
|
<label>Images of Stormfuries logo, the Temptest and the Storm are courtesy of John Harper.</label>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<rolltemplate class="sheet-rolltemplate-stormfury-pilot">{{#rollGreater() obstacle roll}}
|
|
<div class="suffers"></div>{{/rollGreater() obstacle roll}} {{#^rollGreater() obstacle roll}}
|
|
<div class="prevails"></div>{{/^rollGreater() obstacle roll}}
|
|
<div class="holder">
|
|
<div class="type type-{{type}}"></div>
|
|
<div class="target">{{obstacle}}</div>
|
|
<div class="result">{{roll}}</div>
|
|
<div class="name">{{epithet}} {{name}}</div>{{#rollGreater() obstacle roll}}
|
|
<div class="description" data-i18n="roll_suffers"></div>{{/rollGreater() obstacle roll}} {{#^rollGreater() obstacle roll}}
|
|
<div class="description" data-i18n="roll_prevails"></div>{{/^rollGreater() obstacle roll}}
|
|
</div>
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-stormfury-thread">
|
|
<div class="holder">
|
|
<div class="type type-{{type}}"></div>
|
|
<div class="harm">{{harm}}</div>
|
|
<div class="roll">{{roll}}</div>
|
|
</div>
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-stormfury-stormcraft">
|
|
<div class="holder">
|
|
<div class="roll">{{roll}}</div>
|
|
<!-- <div class="pilot">@{attr_stormcraft_{{roll}}_pilot}</div> -->
|
|
</div>
|
|
</rolltemplate>
|
|
<script type="text/worker">(function () {
|
|
/* global on, setAttrs, getAttrs, getSectionIDs, getTranslationByKey,
|
|
generateRowID, removeRepeatingRow, _ */
|
|
"use strict";
|
|
function getTranslation(key) {
|
|
return getTranslationByKey(key) || `TRANSLATION_KEY_UNDEFINED: ${key}`;
|
|
}
|
|
function query(question, options) {
|
|
return `?{${getTranslation(question)}|${options.join("|")}}`;
|
|
}
|
|
function fillRepeatingSectionFromData(sectionName, dataList, setter) {
|
|
const createdIDs = [];
|
|
for (const entry of dataList) {
|
|
let rowID;
|
|
while (!rowID) {
|
|
const newID = generateRowID();
|
|
if (!createdIDs.includes(newID)) {
|
|
rowID = newID;
|
|
createdIDs.push(rowID);
|
|
}
|
|
}
|
|
const row = setter.addRepeatingRow(sectionName, rowID);
|
|
for (const [key, value] of Object.entries(entry)) {
|
|
row[key] = value;
|
|
}
|
|
}
|
|
}
|
|
function fillEmptyRows(sectionName, n, setter) {
|
|
const data = [...Array(n).keys()].map(() => ({ autogen: "1" }));
|
|
fillRepeatingSectionFromData(sectionName, data, setter);
|
|
}
|
|
const attributeHandler = {
|
|
get: function (target, name) {
|
|
return target.getAttr(name);
|
|
},
|
|
set: function (target, name, value) {
|
|
target.setAttr(name, value);
|
|
return true;
|
|
},
|
|
};
|
|
class RepeatingRow {
|
|
constructor(setter, sectionName, id) {
|
|
this._setter = setter;
|
|
if (id) this._prefix = `repeating_${sectionName}_${id}`;
|
|
else this._prefix = `repeating_${sectionName}`;
|
|
this._id = id;
|
|
}
|
|
fullName(attrName) {
|
|
return `${this._prefix}_${attrName}`;
|
|
}
|
|
setAttr(name, value) {
|
|
return this._setter.setAttr(this.fullName(name), value);
|
|
}
|
|
getAttr(name) {
|
|
if (name == "id") return this._id;
|
|
return this._setter.getAttr(this.fullName(name));
|
|
}
|
|
proxy() {
|
|
return new Proxy(this, attributeHandler);
|
|
}
|
|
}
|
|
class AttributeSetter {
|
|
constructor(attrs, sectionToIds = {}) {
|
|
this._sourceAttrs = attrs;
|
|
this._targetAttrs = {};
|
|
|
|
this._repeating = new Proxy({}, {
|
|
get: function (target, name) {
|
|
if (!target[name]) target[name] = [];
|
|
return target[name];
|
|
},
|
|
});
|
|
for (const [sectionName, sectionIds] of Object.entries(sectionToIds)) {
|
|
this._repeating[sectionName] = sectionIds.map((id) =>
|
|
new RepeatingRow(this, sectionName, id).proxy()
|
|
);
|
|
}
|
|
}
|
|
setAttr(name, value) {
|
|
if (name == "repeating") {
|
|
throw new Error("Tried to modify the 'repeating' attribute.");
|
|
}
|
|
this._sourceAttrs[name] = value;
|
|
this._targetAttrs[name] = value;
|
|
}
|
|
setAttrs(values) {
|
|
for (const [key, value] of Object.entries(values)) {
|
|
this.setAttr(key, value);
|
|
}
|
|
}
|
|
getAttr(name) {
|
|
if (name == "repeating") return this._repeating;
|
|
return this._sourceAttrs[name];
|
|
}
|
|
proxy() {
|
|
return new Proxy(this, attributeHandler);
|
|
}
|
|
addRepeatingRow(sectionName, id) {
|
|
id = id || generateRowID();
|
|
const row = new RepeatingRow(this, sectionName, id).proxy();
|
|
this._repeating[sectionName].push(row);
|
|
return row;
|
|
}
|
|
finalize(callback) {
|
|
getAttrs(Object.keys(this._targetAttrs), (values) => {
|
|
const finalAttrs = {};
|
|
for (const [key, value] of Object.entries(this._targetAttrs)) {
|
|
if (String(value) !== values[key]) finalAttrs[key] = String(value);
|
|
}
|
|
setAttrs(finalAttrs, { silent: true }, callback);
|
|
});
|
|
}
|
|
}
|
|
function getSetAttrs(attrs, callback, { repeating = {}, finalCallback } = {}) {
|
|
attrs = [...attrs];
|
|
const sectionToIds = {};
|
|
const finished = _.after(Object.keys(repeating).length + 1, () => {
|
|
getAttrs(attrs, (values) => {
|
|
const setter = new AttributeSetter(values, sectionToIds);
|
|
callback(setter.proxy(), setter);
|
|
setter.finalize(finalCallback);
|
|
});
|
|
});
|
|
for (const [sectionName, sectionAttrs] of Object.entries(repeating)) {
|
|
getSectionIDs(`repeating_${sectionName}`, (idArray) => {
|
|
sectionToIds[sectionName] = idArray;
|
|
for (const id of idArray) {
|
|
for (const attr of sectionAttrs) {
|
|
attrs.push(`repeating_${sectionName}_${id}_${attr}`);
|
|
}
|
|
}
|
|
finished();
|
|
});
|
|
}
|
|
finished();
|
|
}
|
|
// We define our own wrappers for Roll20 event handlers to provide
|
|
// a bit more useful feedback and reduce boilerplate.
|
|
function register(attrs, callback, handlerName = "handler") {
|
|
console.log(`Registering ${handlerName} for attributes: ${attrs.join(", ")}`);
|
|
on(attrs.map((x) => `change:${x}`).join(" "), (event) => {
|
|
console.log(
|
|
`Triggering ${handlerName} for attribute: ${event.sourceAttribute}.`
|
|
);
|
|
callback(event);
|
|
});
|
|
}
|
|
function registerOpened(callback, handlerName = "handler") {
|
|
console.log(`Registering ${handlerName} for sheet opening.`);
|
|
on("sheet:opened", () => {
|
|
console.log(`Triggering ${handlerName} for sheet opening.`);
|
|
callback();
|
|
});
|
|
}
|
|
function registerSingle(attr, handler, handlerName = "handler") {
|
|
register([attr], () => getSetAttrs([attr], handler), handlerName);
|
|
registerOpened(() => getSetAttrs([attr], handler), handlerName);
|
|
}
|
|
function registerButton(buttonName, callback, handlerName = "handler") {
|
|
console.log(`Registering ${handlerName} for button: ${buttonName}.`);
|
|
const throttledFunction = _.throttle(
|
|
(event) => {
|
|
console.log(`Triggering ${handlerName} for button: ${buttonName}.`);
|
|
callback(event);
|
|
},
|
|
50,
|
|
{ trailing: false }
|
|
);
|
|
on(`clicked:${buttonName}`, throttledFunction);
|
|
}
|
|
/* Constants */
|
|
const kSheetVersion = "2";
|
|
const kBrace = "&" + "#125" + ";";
|
|
const kDoubleBrace = kBrace + kBrace;
|
|
const kExtraRoleField = "boons_4_check_1";
|
|
const kBurnGivesTwoDiceField = "boons_6_check_1";
|
|
const kSpendChargesBoon = "boons_7_check_1";
|
|
const kHarms = ["dire", "daunding", "perilous", "arduous"];
|
|
const kDomains = [
|
|
"command",
|
|
"tactical",
|
|
"operations",
|
|
"systems",
|
|
];
|
|
const kInitialStrifeDice = [
|
|
{
|
|
strifedie_name: getTranslation("callsign"),
|
|
},
|
|
{
|
|
strifedie_name: getTranslation("role"),
|
|
},
|
|
];
|
|
const kLabelAttributes = [
|
|
"glory",
|
|
"role",
|
|
"callsign",
|
|
"name_pronouns",
|
|
"rank",
|
|
"domains",
|
|
"command",
|
|
"tactical",
|
|
"operations",
|
|
"systems",
|
|
"stormcraft",
|
|
"flightclass",
|
|
"flightsystems",
|
|
"power_sensors",
|
|
"combatclass",
|
|
"combatsystems",
|
|
"shields_weapons",
|
|
"maneuvers",
|
|
"expressions",
|
|
"bravado",
|
|
"courage",
|
|
"devotion",
|
|
"duty",
|
|
"honor",
|
|
"passion",
|
|
"wrath",
|
|
"forged",
|
|
"charges",
|
|
"authority",
|
|
"style_notes",
|
|
"recite_your_deeds",
|
|
"recite_top",
|
|
"recite_top",
|
|
"command",
|
|
"recite_command",
|
|
"tactical",
|
|
"recite_tactical",
|
|
"operations",
|
|
"recite_operations",
|
|
"systems",
|
|
"recite_systems",
|
|
"recite_bottom",
|
|
"burn",
|
|
"burnout",
|
|
"fate",
|
|
"bonds",
|
|
"bond_use_top",
|
|
"bond_use_top",
|
|
"bond_use_1",
|
|
"bond_use_1",
|
|
"bond_use_2",
|
|
"bond_use_2",
|
|
"bond_use_3",
|
|
"bond_use_3",
|
|
"commendations",
|
|
"boons",
|
|
"boons_1",
|
|
"boons_1",
|
|
"boons_2",
|
|
"boons_2",
|
|
"boons_3",
|
|
"boons_3",
|
|
"boons_4",
|
|
"boons_4",
|
|
"boons_5",
|
|
"boons_5",
|
|
"boons_6",
|
|
"boons_6",
|
|
"boons_7",
|
|
"boons_7",
|
|
"thread_advantage",
|
|
"plus_thread_level",
|
|
"mission_logs",
|
|
"dire",
|
|
"daunding",
|
|
"perilous",
|
|
"arduous",
|
|
"dire_desc",
|
|
"daunding_desc",
|
|
"perilous_desc",
|
|
"arduous_desc",
|
|
"marines",
|
|
"suffer"
|
|
];
|
|
function performFirstTimeSetup(attrs, setter) {
|
|
fillEmptyRows("bonds", 6, setter);
|
|
fillEmptyRows("deeds", 4, setter);
|
|
fillEmptyRows("missionlog", 6, setter);
|
|
fillEmptyRows("enemy", 4, setter);
|
|
fillRepeatingSectionFromData("strifedie", kInitialStrifeDice, setter);
|
|
for (const name of kLabelAttributes) {
|
|
attrs[`${name}_label`] = getTranslation(name);
|
|
}
|
|
}
|
|
function setupRoleQuery(attrs) {
|
|
const kCallSignDice = "roll=[[{@{callsign_die}[@{callsign_label}]";
|
|
const role_options = [
|
|
`${getTranslation("none")},${kCallSignDice}`,
|
|
`@{epithet},epithet=@{epithet}${kDoubleBrace} {{${kCallSignDice} + @{role_die}[@{role_label}]`,
|
|
];
|
|
if (attrs[kExtraRoleField] === "1") {
|
|
const and = getTranslation("and");
|
|
role_options.push(
|
|
...[
|
|
`@{role_2},epithet=@{role_2}${kDoubleBrace} {{${kCallSignDice} + @{role_die}[@{role_label}]`,
|
|
`@{epithet} ${and} @{role_2},epithet=@{epithet} ${and} @{role_2}${kDoubleBrace} {{${kCallSignDice} + 2@{role_die}[@{role_label}]`,
|
|
]
|
|
);
|
|
}
|
|
attrs["role_and_callsign_query"] = query("role_die", role_options);
|
|
}
|
|
function setupDomainQueries(attrs) {
|
|
const multiplier = attrs[kBurnGivesTwoDiceField] === "1" ? "2" : "";
|
|
for (const domain of kDomains) {
|
|
const query_entries = [
|
|
`${getTranslation("no")}, `,
|
|
...kDomains
|
|
.filter((other) => other != domain)
|
|
.map(
|
|
(other) =>
|
|
`${getTranslation(
|
|
other
|
|
)}, + ${multiplier}@{${other}_die}[${getTranslation(other)}]`
|
|
),
|
|
];
|
|
attrs[`${domain}_extra_domain_query`] = query(
|
|
"add_domain_spend_burn",
|
|
query_entries
|
|
);
|
|
attrs[`${domain}_translated`] = getTranslation(domain);
|
|
}
|
|
attrs["domain_query"] = query("domain", [
|
|
...kDomains.map((d) => `@{${d}_label},${d}`),
|
|
`${getTranslation("any_domain")},any`,
|
|
]);
|
|
}
|
|
function setupChargesQuery(attrs) {
|
|
const base_query = query("spend_charges", [0]);
|
|
if (attrs[kSpendChargesBoon] === "1") {
|
|
attrs["charges_query"] = `[[${base_query} + 2*{${base_query},1}kl1]]`;
|
|
} else {
|
|
attrs["charges_query"] = base_query;
|
|
}
|
|
}
|
|
function calcStrifeRoll(attrs) {
|
|
const harmType = kHarms
|
|
.filter((harm) => attrs[harm] == "1")
|
|
.map((x) => `@{${x}_desc_label}`)
|
|
.join(", ");
|
|
const dieSources = attrs.repeating.strifedie.map((row) => [
|
|
row.strifedie_name,
|
|
row.strifedie_size,
|
|
]);
|
|
if (attrs["thread_advantage"] !== "0") {
|
|
dieSources.push(["@{thread_advantage_label}", "@{thread_advantage}"]);
|
|
}
|
|
const dieFormula = dieSources
|
|
.map(([name, die]) => `${die}[${name}]`)
|
|
.join(" + ");
|
|
attrs[
|
|
"strife_formula"
|
|
] = `{{roll=[[{${dieFormula}}k1 + @{strife_level}[${getTranslation(
|
|
"strife_level"
|
|
)}]]]}} {{harm=${harmType}}}`;
|
|
}
|
|
function handleStrifeRoll() {
|
|
getSetAttrs([...kHarms, "thread_advantage"], calcStrifeRoll, {
|
|
repeating: {
|
|
strifedie: ["strifedie_name", "strifedie_size"],
|
|
},
|
|
});
|
|
}
|
|
registerSingle(
|
|
kBurnGivesTwoDiceField,
|
|
setupDomainQueries,
|
|
"Handle giving two dice for extra domain"
|
|
);
|
|
registerSingle(
|
|
kExtraRoleField,
|
|
setupRoleQuery,
|
|
"Handle adding or removing an extra epithet"
|
|
);
|
|
registerSingle(
|
|
kSpendChargesBoon,
|
|
setupChargesQuery,
|
|
"Handle boon for getting +2d4 on spending divine favor"
|
|
);
|
|
register(
|
|
[...kHarms, "thread_advantage", "repeating_strifedie"],
|
|
handleStrifeRoll,
|
|
"Handle strife player roll"
|
|
);
|
|
on("remove:repeating_strifedie", handleStrifeRoll);
|
|
registerOpened(function () {
|
|
getSetAttrs(["version"], function (attrs, setter) {
|
|
if (!attrs["version"]) performFirstTimeSetup(attrs, setter);
|
|
if (attrs["version"] == "1.0") {
|
|
attrs["sheet_type"] = "character";
|
|
}
|
|
setter.setAttrs({
|
|
advantage_bond_support_translated: getTranslation(
|
|
"advantage_bond_support"
|
|
),
|
|
bonusdice_query: query("bonusdice_query", [0]),
|
|
target_query: query("target_number", [0]),
|
|
version: kSheetVersion,
|
|
});
|
|
});
|
|
}, "Handle setting default attributes when opening the sheet");
|
|
registerButton("choose_character", () =>
|
|
getSetAttrs([], (attrs) => {
|
|
attrs["sheet_type"] = "character";
|
|
})
|
|
);
|
|
registerButton("choose_squadron", () =>
|
|
getSetAttrs([], (attrs) => {
|
|
attrs["sheet_type"] = "squadron";
|
|
})
|
|
);
|
|
registerButton("choose_thread", () =>
|
|
getSetAttrs([], (attrs) => {
|
|
attrs["sheet_type"] = "thread";
|
|
})
|
|
);}
|
|
)();
|
|
</script>
|
|
|
|
|
|
|
|
|