Files
roll20-character-sheets-tester/Cyberrats/Cyberrats.html
T

2269 lines
87 KiB
HTML

<section class="tabs borderless">
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="charactersheet" />
<div class="hidden tabholder">
<button class="charsheetbtn" type="action" name="act_charactersheet" >Character</button>
<button class="basesheetbtn" type="action" name="act_basesheet" >Base</button>
<button class="campaignsheetbtn" type="action" name="act_campaignsheet" >Campaign</button>
</div>
<div class="character_sheet_type">
<label for="attr_sheet_type">What type of sheet is this?</label>
<select name="attr_sheet_type">
<option value="charactersheet">Character</option>
<option value="basesheet">Base</option>
<option value="campaignsheet">Campaign Tracker</option>
</select>
</div>
<span class="briny-setting">
<label class="inline setting">Briny Bastards?</label>
<input class="sheet-briny" name="attr_briny" type="checkbox">
</span>
<hr class="divide">
</section>
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="charactersheet" />
<div class="charactersheet">
<main>
<section class="header f-center flexheader borderless">
<div class="stack header-left empty">
<input class="hidden sheet-briny" name="attr_briny" type="checkbox">
<div class="brinyhide">
<div class="autoExpand eighty">
<input spellcheck="false" class="header-input" name="attr_character_tattoo" type="text">
<span name="attr_character_tattoo"></span>
</div>
<hr class="underline eighty">
<label>Tattoo/Brand</label>
</div>
</div>
<div class="stack header-left">
<div class="autoExpand long">
<input spellcheck="false" class="header-input" name="attr_character_name" type="text">
<span name="attr_character_name"></span>
</div>
<hr class="underline nintety">
<label>Name</label>
</div>
<div class="stack header-right">
<div class="autoExpand">
<input spellcheck="false" class="header-input" name="attr_character_mutator" type="text">
<span name="attr_character_mutator"></span>
</div>
<hr class="underline">
<label>Mutator</label>
<div class="autoExpand">
<input spellcheck="false" class="header-input" list="megacorps" name="attr_character_megacorp" type="text">
<span name="attr_character_megacorp"></span>
</div>
<hr class="underline">
<label>Megacorp</label>
<div class="autoExpand">
<input spellcheck="false" class="header-input" name="attr_character_career" value="Intern" type="text">
<span name="attr_character_career"></span>
</div>
<hr class="underline">
<label>Career</label>
<div class="autoExpand">
<input spellcheck="false" class="header-input" name="attr_character_next_of_kin" type="text">
<span name="attr_character_next_of_kin"></span>
</div>
<hr class="underline">
<label>Next of Kin</label>
</div>
</section>
<section class="powers">
<span class="spacer">
<h2 class="narrow">All Known Powers</h2>
<h3 class="right">Equipped <span class="powersused" value="0" name="attr_powersEquipped"></span>/5</h3>
</span>
<fieldset class="repeating_powers">
<label class="inline">Equipped?</label>
<input class="equippedpower" type="checkbox" name="attr_equipped">
<button type="roll" name="roll_power" value="&{template:powers} {{title=Power}} {{name=@{character_name}}} {{description=@{powertext}}} {{cost=@{powercost}}} {{powerName=@{powername}}}"></button>
<input class="powername" spellcheck="false" type="text" name="attr_powername" value="Name">
<span class="right">
<label class="inline">Biotech Cost</label>
<input class="cost" type="text" name="attr_powercost" value="">
</span>
<textarea class="maxwidth" spellcheck="false" name="attr_powertext"></textarea>
</fieldset>
</section>
<section class="portrait borderless">
<h4 class="caption">Portrait of Applicant</h4>
<img class="charPort" name="attr_character_avatar">
</section>
<section class="borderless settings">
<span>
<button type="action" title="Reset HP and Biotech to max, un-use all items and drones. Optionally unequip all powers." name="act_reset">Reset</button>
<label class="inline setting">Unequip powers on reset?</label>
<input class="" name="attr_resetpowers" type="checkbox" value="true">
</span>
</section>
<section class="background f-col">
<h3 class="sidebar">Background</h3>
<div class="sideholder">
<input type="number" class="sidebar-input" name="attr_debt">
<label>Debt</label>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" class="sidebar-input" name="attr_scrip">
<label>Scrip</label>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" class="sidebar-input" name="attr_downtime_dice">
<label>Downtime Dice</label>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" class="sidebar-input" name="attr_gear_parts">
<label>Gear Parts</label>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" class="sidebar-input" name="attr_construction_pieces">
<label class="narrow">Construction Pieces</label>
<hr class="overline">
</div>
<h3 class="sidebar">Attributes</h3>
<div class="sideholder">
<input type="number" min="0" class="sidebar-input attr" name="attr_smash" value="0">
<label>Smash</label>
<button type="roll" value="&{template:attributeroll} {{title=Smash}} {{name=@{character_name}}} {{roll=@{roll_formula_smash}}} {{results=@{roll_results_smash}}} {{details=Smash Smash SMASH!}} {{success_at_cost=@{smash_fail}}} {{smash=1}}"></button>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" min="0" class="sidebar-input attr" name="attr_sly" value="0">
<label>Sly</label>
<button type="roll" value="&{template:attributeroll} {{title=Sly}} {{name=@{character_name}}} {{roll=@{roll_formula_sly}}} {{results=@{roll_results_sly}}} {{details=Sneaky slyly secretly, gently as we go}} {{success_at_cost=@{sly_fail}}} {{sly=1}}"></button>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" min="0" class="sidebar-input attr" name="attr_cyber" value="0">
<label>Cyber</label>
<button type="roll" value="&{template:attributeroll} {{title=Cyber}} {{name=@{character_name}}} {{roll=@{roll_formula_cyber}}} {{results=@{roll_results_cyber}}} {{details=beeep booop 11010010 processing data}} {{success_at_cost=@{cyber_fail}}} {{cyber=1}}"></button>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" min="0" class="sidebar-input attr" name="attr_soak">
<span class="minmax short">/</span>
<input type="number" min="0" class="sidebar-input attr" name="attr_soak_max">
<label>Soak</label>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" min="0" class="sidebar-input attr" name="attr_shard">
<span class="minmax short">/</span>
<input type="number" min="0" class="sidebar-input attr" name="attr_shard_max">
<label>Shard</label>
<hr class="overline">
</div>
<div class="sideholder">
<input type="number" min="0" class="sidebar-input attr" name="attr_barrier">
<span class="minmax short">/</span>
<input type="number" min="0" class="sidebar-input attr" name="attr_barrier_max">
<label>Barrier</label>
<hr class="overline">
</div>
<h4 class="sidebar">Health</h4>
<div class="minmax">
<input type="number" min="0" class="sidebar-input minmax" value="4" name="attr_hp">
<span class="minmax">/</span>
<input type="number" min="0" class="sidebar-input minmax" value="4" name="attr_hp_max">
</div>
<h4 class="sidebar">Biotech</h4>
<div class="minmax">
<input type="number" min="0" class="sidebar-input minmax" value="3" name="attr_biotech">
<span class="minmax">/</span>
<input type="number" min="0" class="sidebar-input minmax" value="3" name="attr_biotech_max">
</div>
<input class="hidden sheet-briny" name="attr_briny" type="checkbox">
<div class="briny">
<h4 class="briny">Relationships</h4>
<label>Grieving </label>
<div class="outergrief">
<button type="action" name="act_griefbtn" class="d6 btn grief"></button>
<div class="grief">
<input type="radio" id="step-6" value="6" name="attr_grief" class="progressbar__radio">
<label for="step-6" class="progressbar__label">6</label>
<input type="radio" id="step-5" value="5" name="attr_grief" class="progressbar__radio">
<label for="step-5" class="progressbar__label">5</label>
<input type="radio" id="step-4" value="4" name="attr_grief" class="progressbar__radio">
<label for="step-4" class="progressbar__label">4</label>
<input type="radio" id="step-3" value="3" name="attr_grief" class="progressbar__radio">
<label for="step-3" class="progressbar__label">3</label>
<input type="radio" id="step-2" value="2" name="attr_grief" class="progressbar__radio">
<label for="step-2" class="progressbar__label">2</label>
<input type="radio" id="step-1" value="1" name="attr_grief" class="progressbar__radio">
<label for="step-1" class="progressbar__label">1</label>
<input type="radio" id="step-0" value="0" name="attr_grief" class="progressbar__radio" checked>
<label for="step-0" class="progressbar__label">0</label>
</div>
</div>
<fieldset class="repeating_relationship">
<label class="inline rellabel">With</label>
<input class="inline relinput" type="text" name="attr_relationship_target" value="Operative Name">
<label class="inline rellabel">Type</label>
<input type="text" list="relationships" name="attr_relationship_type">
<textarea class="adjustable" spellcheck="false" name="attr_relationship_details">Details</textarea>
</fieldset>
</div>
</section>
<section class="gear">
<h3>Gear</h3>
<h4>Armor</h4>
<fieldset class="repeating_armor">
<button type="roll" name="roll_armor" value="&{template:powers} {{title=Armor}} {{name=@{character_name}}} {{description=@{armortext}}} {{powerName=@{armorname}}}"></button>
<input class="item" spellcheck="false" type="text" name="attr_armorname" value="Name">
<textarea class="maxwidth" spellcheck="false" name="attr_armortext">Tags and upgrades</textarea>
</fieldset>
<h4 class="second">Weapons</h4>
<fieldset class="repeating_weapon">
<div class="weapon">
<button type="action" class="btn d6" name="act_rollweapon" value=""></button>
<input class="weapon" spellcheck="false" type="text" name="attr_weaponname" value="Name">
<label class="harmlabel">Harm</label>
<input class="harmcounter" type="number" name="attr_harm" value="1">
<span class="melee flexspan">
<label class="narrow">Ammo?</label>
<input type="checkbox" value="true" checked name="attr_hasammo"></input>
</span>
<input class="hasammo" type="hidden" value="true" name="attr_hasammo"></input>
<span class="ammo">
<label>Ammo:</label>
<input type="number" value="1" name="attr_ammo"></input>
<p class="slash">/</p>
<input type="number"value="1" name="attr_max_ammo"></input>
<button type="action" class="btn" name="act_reload">Reload</button>
</span>
<span class="hidden rangetext" name="attr_rangetext" value=""></span>
<span class="range flexspan">
<label class="narrow">Range:</label>
<label class="small narrow">Close:</label>
<input type="checkbox" value="true" name="attr_closerange"></input>
<label class="small narrow">Near:</label>
<input type="checkbox" value="true" name="attr_nearrange"></input>
<label class="small narrow">Far:</label>
<input type="checkbox" value="true" name="attr_farrange"></input>
</span>
<textarea class="maxwidth" spellcheck="false" name="attr_weapontext">Tags and upgrades</textarea>
</div>
</fieldset>
</section>
<section class="items">
<h3>Items</h3>
<fieldset class="repeating_item">
<!-- Hidden prop so it apepars first -->
<input class="hidden sheer-disabler" type="checkbox" name="attr_used">
<button disabled="true" class="disab inline" type="roll" name="roll_item" value=""></button>
<button type="roll" name="roll_item" value="&{template:powers} {{title=Item}} {{name=@{character_name}}} {{description=@{itemtext}}} {{powerName=@{itemname}}}"></button>
<input class="item" spellcheck="false" type="text" name="attr_itemname" value="Name">
<label class="inline">Used?</label>
<input type="checkbox" name="attr_used">
<textarea class="maxwidth" spellcheck="false" name="attr_itemtext">Description</textarea>
</fieldset>
<input class="hidden sheet-briny" name="attr_briny" type="checkbox">
<div class="briny">
<h4 class="briny">Drones</h4>
<h5>Equipped Protocols</h5>
<fieldset class="repeating_drone filtered_drones">
<input class="hidden equipped" type="checkbox" name="attr_equipped">
<!-- Hidden prop so it apepars first -->
<input class="hidden sheer-disabler" type="checkbox" name="attr_used">
<!-- Duplicate buttons for disable on used -->
<button disabled="true" class="disab inline sheet-d6-dice" type="roll" </button>
<button type="roll" class="enab inline sheet-d6-dice" name="roll_drone" value="&{template:powers} {{title=Protocol}} {{name=@{character_name}}} {{description=@{dronetext}}} {{powerName=@{dronename}}}"></button>
<input class="item" spellcheck="false" type="text" name="attr_dronename" value="Name">
<label class="inline">Used?</label>
<input class="sheer-disabler" type="checkbox" name="attr_used">
<textarea class="maxwidth" spellcheck="false" name="attr_dronetext">Description</textarea>
</fieldset>
<hr class="separator">
<h5>Known Protocols</h5>
<fieldset class="repeating_drone">
<input class="item knownname" spellcheck="false" type="text" name="attr_dronename" value="Name">
<label class="inline">Equipped?</label>
<input type="checkbox" name="attr_equipped">
<textarea class="maxwidth" spellcheck="false" name="attr_dronetext">Description</textarea>
</fieldset>
</div>
</section>
<section class="loadout">
<h3>Loadout</h3>
<fieldset class="repeating_powers filtered_powers">
<input class="hidden equipped" type="checkbox" name="attr_equipped">
<button type="roll" name="roll_power" value="&{template:powers} {{title=Power}} {{name=@{character_name}}} {{description=@{powertext}}} {{cost=@{powercost}}} {{powerName=@{powername}}}"></button>
<input class="powername" spellcheck="false" type="text" name="attr_powername" value="Name">
<span class="right">
<label class="inline">Biotech Cost</label>
<input class="cost" type="text" name="attr_powercost" value="">
</span>
<textarea class="maxwidth" class="powertext" spellcheck="false" name="attr_powertext"></textarea>
</fieldset>
</section>
<section class="notes">
<h3>Notes</h3>
<textarea class="textnotes" name="attr_notes"></textarea>
</section>
</main>
</div>
<!-- End Character Sheet -->
<!-- Begin Base Sheet -->
<input class="hidden sheet-briny" name="attr_briny" type="checkbox">
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="charactersheet" />
<div class="basesheet">
<input type="hidden" class="basetabstoggle" name="attr_baseTab" value="mainbase" />
<div class="tabholder basetabholder">
<button class="mainbasebtn" type="action" name="act_mainbase" >Main HQ</button>
<button class="subbasebtn" type="action" name="act_subbase">Submarine</button>
<button class="hivebasebtn" type="action" name="act_hivebase">Hive</button>
</div>
<div class="mainbase">
<section class="basehead f-center flexheader borderless">
<h2 class="pull-left">HQ</h2>
<div class="stack header-left empty"></div>
<div class="stack header-left">
<div class="autoExpand long">
<input spellcheck="false" class="header-input" name="attr_base_name" type="text">
<span name="attr_base_name"></span>
</div>
<hr class="underline nintety">
<label>Name Of Base</label>
</div>
<div class="stack header-right">
<div class="autoExpand">
<input spellcheck="false" class="header-input" name="attr_base_location" type="text">
<span name="attr_base_location"></span>
</div>
<hr class="underline">
<label>Location</label>
<div class="autoExpand">
<input spellcheck="false" class="header-input" name="attr_base_adj1" type="text">
<span name="attr_base_adj1"></span>
</div>
<hr class="underline">
<label>Adjective</label>
<div class="autoExpand">
<input spellcheck="false" class="header-input" name="attr_base_adj2" type="text">
<span name="attr_base_adj2"></span>
</div>
<hr class="underline">
<label>Adjective</label>
</div>
</section>
<section class="room room1">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom1"></input>
<label class="basecost"></label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom1"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom1"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext1"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom1"></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room2">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom2"></input>
<label class="basecost"></label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom2"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom2"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext2"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom2" ></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room3">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom3" checked></input>
<label class="basecost">1</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom3"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom3"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext3"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom3" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room4">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom4" checked></input>
<label class="basecost">1</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom4"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom4"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext4"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom4" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room5">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom5" checked></input>
<label class="basecost">2</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom5"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom5"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext5"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom5" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room6">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom6" checked></input>
<label class="basecost">2</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom6"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom6"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext6"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom6" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room7">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom7" checked></input>
<label class="basecost">2</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom7"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom7"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext7"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom7" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room8">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom8" checked></input>
<label class="basecost">2</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom8"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom8"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext8"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom8" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room9">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom9" checked></input>
<label class="basecost">3</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom9"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom9"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext9"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom9" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room10">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom10" checked></input>
<label class="basecost">3</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom10"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom10"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext10"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom10" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room11">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom11" checked></input>
<label class="basecost">3</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom11"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom11"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext11"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom11" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room12">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom12" checked></input>
<label class="basecost">3</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom12"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom12"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext12"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom12" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room13">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom13" checked></input>
<label class="basecost">4</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom13"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom13"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext13"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom13" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room14">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom14" checked></input>
<label class="basecost">4</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom14"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom14"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext14"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom14" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room15">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom15" checked></input>
<label class="basecost">4</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom15"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom15"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext15"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom15" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="room room16">
<input type="checkbox" class="hidden baselocked" name="attr_baselockedroom16" checked></input>
<label class="basecost">4</label>
<input type="text" list="corebuildings" class="buildinglist corebuildings" name="attr_buildingnameroom16"></input>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_buildingnameroom16"></input>
<textarea class="roomtext" spellcheck="false" name="attr_roomtext16"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_baselockedroom16" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
<section class="basenotes">
<h2>Notes</h2>
<textarea name="attr_basenotes"></textarea>
</section>
</div>
<div class="subbase">
<div class="submarine">
<div class="subhead header">
<h2>Submarine</h2>
<div class="stack header-left empty"></div>
<div class="submarine_heading_holder">
<div class="stack header-left subname">
<div class="autoExpand long">
<input spellcheck="false" class="header-input" name="attr_submarine_name" type="text">
<span name="attr_submarine_name"></span>
</div>
<hr class="underline nintety">
<label>Name Of Submarine</label>
</div>
<div class="rightsubmarine">
<label class="subsource">Acquired from</label>
<input class="subsource" type="text" list="subsource" name="attr_submarine_source"></input>
<textarea class="subsource" name="attr_subsourcedetails"></textarea>
</div>
</div>
</div>
<section class="room subroom subroom1">
<span class="subinfo">
<label class="sublabel narrow">Room 1 </label>
<input type="text" list="subbuildings" class="buildinglist" name="attr_subroom1"></input>
<label class="narrow pullright">Damaged?</label>
<input type="checkbox" class="subdamaged" name="attr_subroom1damaged"></input>
</span>
<textarea class="roomtext maxwidth" spellcheck="false" name="attr_subroomtext1"></textarea>
<input type="hidden" class="subdamaged" name="attr_subroom1damaged"></input>
<label class="damagelabel">DAMAGED</label>
</section>
<section class="room subroom subroom2">
<span class="subinfo">
<label class="sublabel narrow">Room 2 </label>
<input type="text" list="subbuildings" class="buildinglist" name="attr_subroom2"></input>
<label class="narrow pullright">Damaged?</label>
<input type="checkbox" class="subdamaged" name="attr_subroom2damaged"></input>
</span>
<textarea class="roomtext maxwidth" spellcheck="false" name="attr_subroomtext2"></textarea>
<input type="hidden" class="subdamaged" name="attr_subroom2damaged"></input>
<label class="damagelabel">DAMAGED</label>
</section>
<section class="room subroom subroom3">
<span class="subinfo">
<label class="sublabel narrow">Room 3 </label>
<input type="text" list="subbuildings" class="buildinglist" name="attr_subroom3"></input>
<label class="narrow pullright">Damaged?</label>
<input type="checkbox" class="subdamaged" name="attr_subroom3damaged"></input>
</span>
<textarea class="roomtext maxwidth" spellcheck="false" name="attr_subroomtext3"></textarea>
<input type="hidden" class="subdamaged" name="attr_subroom3damaged"></input>
<label class="damagelabel">DAMAGED</label>
</section>
<section class="room subroom subroom4">
<span class="subinfo">
<label class="sublabel narrow">Room 4 </label>
<input type="text" list="subbuildings" class="buildinglist" name="attr_subroom4"></input>
<label class="narrow pullright">Damaged?</label>
<input type="checkbox" class="subdamaged" name="attr_subroom4damaged"></input>
</span>
<textarea class="roomtext maxwidth" spellcheck="false" name="attr_subroomtext4"></textarea>
<input type="hidden" class="subdamaged" name="attr_subroom4damaged"></input>
<label class="damagelabel">DAMAGED</label>
</section>
<section class="room subroom subroom5">
<span class="subinfo">
<label class="sublabel narrow">Room 5 </label>
<input type="text" list="subbuildings" class="buildinglist" name="attr_subroom5"></input>
<label class="narrow pullright">Damaged?</label>
<input type="checkbox" class="subdamaged" name="attr_subroom5damaged" ></input>
</span>
<textarea class="roomtext maxwidth" spellcheck="false" name="attr_subroomtext5"></textarea>
<input type="hidden" class="subdamaged" name="attr_subroom5damaged" ></input>
<label class="damagelabel">DAMAGED</label>
</section>
<section class="room subroom subroom6">
<input type="hidden" class="baselocked" checked name="attr_sublockedroom6"></input>
<span class="subinfo">
<input type="text" list="subbuildings" class="buildinglist" name="attr_subroom6"></input>
<label class="narrow pullright">Damaged?</label>
<input type="checkbox" class="subdamaged" name="attr_subroom6damaged" ></input>
</span>
<input type="hidden" class="baselocked" checked name="attr_sublockedroom6"></input>
<textarea class="roomtext" spellcheck="false" name="attr_subroomtext6"></textarea>
<span class="baselocker sub">
<input type="checkbox" class="baselocked" checked name="attr_sublockedroom6"></input>
<label class="inline baselabel">locked</label>
</span>
<input type="hidden" class="subdamaged" name="attr_subroom6damaged" ></input>
<label class="damagelabel">DAMAGED</label>
</section>
<div class="subnotes notes">
<h3>Notes</h3>
<textarea class="textnotes" name="attr_notes"></textarea>
</div>
</div>
</div>
<!-- Beehive -->
<div class="hivebase">
<span><button class="btn" type="action" name="act_decay">Decay</button></span>
<ul id="grid" class="clear">
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom1">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="6" class="decay" name="attr_hivedecayroom1"></input>
<input type="hidden" value="6" class="decay" name="attr_max_hivedecayroom1"></input>
<p class="slash" >/</p>
<p class="maxdecay">6</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_1"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom1" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename1"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext1"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom1" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom2">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="5" class="decay" name="attr_hivedecayroom2"></input>
<input type="hidden" value="5" class="decay" name="attr_max_hivedecayroom2"></input>
<p class="slash" >/</p>
<p class="maxdecay">5</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_2"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom2" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename2"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext2"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom2" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom3">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="4" class="decay" name="attr_hivedecayroom3"></input>
<input type="hidden" value="4" class="decay" name="attr_max_hivedecayroom3"></input>
<p class="slash" >/</p>
<p class="maxdecay">4</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_3"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom3" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename3"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext3"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom3" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom4">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="4" class="decay" name="attr_hivedecayroom4"></input>
<input type="hidden" value="4" class="decay" name="attr_max_hivedecayroom4"></input>
<p class="slash" >/</p>
<p class="maxdecay">4</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_4"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom4" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename4"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext4"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom4" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom5">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="3" class="decay" name="attr_hivedecayroom5"></input>
<input type="hidden" value="3" class="decay" name="attr_max_hivedecayroom5"></input>
<p class="slash" >/</p>
<p class="maxdecay">3</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_5"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom5" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename5"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext5"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom5" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom6">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="3" class="decay" name="attr_hivedecayroom6"></input>
<input type="hidden" value="3" class="decay" name="attr_max_hivedecayroom6"></input>
<p class="slash" >/</p>
<p class="maxdecay">3</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_6"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom6" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename6"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext6"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom6" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom7">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="3" class="decay" name="attr_hivedecayroom7"></input>
<input type="hidden" value="3" class="decay" name="attr_max_hivedecayroom7"></input>
<p class="slash" >/</p>
<p class="maxdecay">3</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_7"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom7" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename7"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext7"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom7" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom8">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="2" class="decay" name="attr_hivedecayroom8"></input>
<input type="hidden" value="2" class="decay" name="attr_max_hivedecayroom8"></input>
<p class="slash" >/</p>
<p class="maxdecay">2</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_8"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom8" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename8"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext8"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom8" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom9">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="2" class="decay" name="attr_hivedecayroom9"></input>
<input type="hidden" value="2" class="decay" name="attr_max_hivedecayroom9"></input>
<p class="slash" >/</p>
<p class="maxdecay">2</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_9"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom9" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename9"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext9"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom9" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
<li>
<div class="hexagon">
<section class="room hiveroom hiveroom10">
<span class="decay">
<label class="decay">Decay</label>
<input type="number" value="0" max="2" class="decay" name="attr_hivedecayroom10"></input>
<input type="hidden" value="2" class="decay" name="attr_max_hivedecayroom10"></input>
<p class="slash" >/</p>
<p class="maxdecay">2</p>
<input type="hidden" class="decayed" name="attr_hive_decayed_10"></input>
<label class="decayed">DECAYED</label>
</span>
<input type="checkbox" class="hidden baselocked" name="attr_hivelockedroom10" checked></input>
<label class="basecost">1</label>
<input type="text" list="brinybuildings" class="buildinglist brinybuildings" name="attr_hivename10"></input>
<textarea class="roomtext" spellcheck="false" name="attr_hivetext10"></textarea>
<span class="baselocker">
<input type="checkbox" class="baselocked" name="attr_hivelockedroom10" checked></input>
<label class="inline baselabel">locked</label>
</span>
</section>
</div>
</li>
</ul>
</div>
</div>
<!-- End Base Sheet -->
<!-- Begin Campaign Sheet -->
<div class="campaignsheet"><input type="hidden" class="tabstoggle" name="attr_sheetTab" value="charactersheet" />
<div class="campaignzone">
<div class="header camphead">
<h2>Campaign Progress</h2>
</div>
<section class="friendbar">
<h2>Friends and Foes</h2>
<div class="friend">
<h3>Assistants</h3>
<fieldset class="repeating_allies">
<input class="allyname" list="assistants" spellcheck="false" type="text" name="attr_allyname">
<label class="inline">Dead?</label>
<input type="checkbox" name="attr_dead">
<textarea spellcheck="false" name="attr_allytext"></textarea>
</fieldset>
</div>
<hr class="separator">
<div class="foe">
<h3>Adversaries</h3>
<fieldset class="repeating_adversaries">
<input class="allyname" spellcheck="false" type="text" list="adversaries" name="attr_adversaryname" >
<label class="inline">Dead?</label>
<input type="checkbox" name="attr_dead">
<textarea spellcheck="false" name="attr_adversarytext"></textarea>
</fieldset>
</div>
<div class="cutbacks lieutenants">
<hr class="separate">
<h2>Corporate Requests</h2>
<h3>Corporate Mission</h3>
<textarea class="allyname corpmiss" spellcheck="false" type="text" name="attr_missionName" ></textarea>
<button class="btn fieldbutton" type="action" name="act_corpMiss">Complete</button>
<h3 class="spacebefore">Corporate Cutbacks</h3>
<fieldset class="repeating_cutback">
<span class="counter"></span>
<input class="allyname" spellcheck="false" type="text" name="attr_cutbackname" >
<textarea spellcheck="false" name="attr_cutbacktext"></textarea>
</fieldset>
</div>
</section>
<section class="camprogress">
<h2 class="enemyheader">Military</h2>
<div class="prog military">
<div class="leftprog">
<div class="outerthreat">
<div class="threat">
<input type="radio" id="milthreat-1" value="Bad" name="attr_milthreat" class="threatbar threat1" checked>
<label for="milthreat-1" class="threatlabel threat1">1</label>
<input type="radio" id="milthreat-2" value="Dangerous" name="attr_milthreat" class="threatbar threat2">
<label for="milthreat-2" class="threatlabel threat2">2</label>
<input type="radio" id="milthreat-3" value="Deadly" name="attr_milthreat" class="threatbar threat3">
<label for="milthreat-3" class="threatlabel threat3">3</label>
<input type="radio" id="milthreat-4" value="We're Screwed" name="attr_milthreat" class="threatbar threat4">
<label for="milthreat-4" class="threatlabel threat4">4</label>
</div>
<h3 class="final">Threat Level</h3>
<span name="attr_milthreat"></span>
</div>
</div>
<div class="rightprog">
<div class="threat status">
<input type="radio" id="milfight-0" value="Defeat 3 more times" name="attr_milfight" class="threatbar" checked>
<label for="milfight-0" class="threatlabel"></label>
<input type="radio" id="milfight-1" value="Defeat 2 more times" name="attr_milfight" class="threatbar" checked>
<label for="milfight-1" class="threatlabel"></label>
<input type="radio" id="milfight-2" value="Defeat 1 more time" name="attr_milfight" class="threatbar">
<label for="milfight-2" class="threatlabel"></label>
<input type="radio" id="milfight-3" value="Unlocked" name="attr_milfight" class="threatbar">
<label for="milfight-3" class="threatlabel"></label>
<input type="radio" id="milfight-4" value="Complete" name="attr_milfight" class="threatbar">
<label for="milfight-4" class="threatlabel"></label>
</div>
<h3 class="final">Final Mission</h3>
<span name="attr_milfight"></span>
</div>
</div>
<hr class="separate">
<!-- Valdivian -->
<h2 class="enemyheader">Valdivian</h2>
<div class="prog valdivian">
<div class="leftprog">
<div class="outerthreat">
<div class="threat">
<input type="radio" id="valthreat-1" value="Bad" name="attr_valthreat" class="threatbar threat1" checked>
<label for="valthreat-1" class="threatlabel threat1">1</label>
<input type="radio" id="valthreat-2" value="Dangerous" name="attr_valthreat" class="threatbar threat2">
<label for="valthreat-2" class="threatlabel threat2">2</label>
<input type="radio" id="valthreat-3" value="Deadly" name="attr_valthreat" class="threatbar threat3">
<label for="valthreat-3" class="threatlabel threat3">3</label>
<input type="radio" id="valthreat-4" value="We're Screwed" name="attr_valthreat" class="threatbar threat4">
<label for="valthreat-4" class="threatlabel threat4">4</label>
</div>
<h3 class="final">Threat Level</h3>
<span name="attr_valthreat"></span>
</div>
</div>
<div class="rightprog">
<div class="threat status">
<input type="radio" id="valfight-0" value="Defeat 3 more times" name="attr_valfight" class="threatbar" checked>
<label for="valfight-0" class="threatlabel"></label>
<input type="radio" id="valfight-1" value="Defeat 2 more times" name="attr_valfight" class="threatbar">
<label for="valfight-1" class="threatlabel"></label>
<input type="radio" id="valfight-2" value="Defeat 1 more time" name="attr_valfight" class="threatbar">
<label for="valfight-2" class="threatlabel"></label>
<input type="radio" id="valfight-3" value="Unlocked" name="attr_valfight" class="threatbar">
<label for="valfight-3" class="threatlabel"></label>
<input type="radio" id="valfight-4" value="Complete" name="attr_valfight" class="threatbar">
<label for="valfight-4" class="threatlabel"></label>
</div>
<div class="notes">
<h3 class="final">Final Mission</h3>
<span name="attr_valfight"></span>
</div>
</div>
</div>
<div class="victoryholder">
<h3>Victory Meter</h3>
<div class="victory">
<div class="threat status victory">
<input type="radio" id="valvic-0" value="0" name="attr_valvic" class="threatbar" checked>
<label for="valvic-0" class="threatlabel threat1">0</label>
<input type="radio" id="valvic-1" value="1" name="attr_valvic" class="threatbar">
<label for="valvic-1" class="threatlabel threat1">1</label>
<input type="radio" id="valvic-2" value="2" name="attr_valvic" class="threatbar">
<label for="valvic-2" class="threatlabel threat1">2</label>
<input type="radio" id="valvic-3" value="3" name="attr_valvic" class="threatbar">
<label for="valvic-3" class="threatlabel threat2">3</label>
<input type="radio" id="valvic-4" value="4" name="attr_valvic" checked class="threatbar">
<label for="valvic-4" class="threatlabel threat2">4</label>
<input type="radio" id="valvic-5" value="5" name="attr_valvic" class="threatbar">
<label for="valvic-5" class="threatlabel threat3">5</label>
<input type="radio" id="valvic-6" value="6" name="attr_valvic" class="threatbar">
<label for="valvic-6" class="threatlabel threat3">6</label>
<input type="radio" id="valvic-7" value="7" name="attr_valvic" class="threatbar">
<label for="valvic-7" class="threatlabel threat3">7</label>
<input type="radio" id="valvic-8" value="8" name="attr_valvic" class="threatbar">
<label for="valvic-8" class="threatlabel threat4">8</label>
<input type="radio" id="valvic-9" value="9" name="attr_valvic" class="threatbar">
<label for="valvic-9" class="threatlabel threat4">9</label>
<input type="radio" id="valvic-10" value="X" name="attr_valvic" class="threatbar">
<label for="valvic-10" class="threatlabel threat4">X</label>
</div>
</div>
</div>
<hr class="separate">
<!-- Interloper -->
<h2 class="enemyheader">Interloper</h2>
<div class="prog Interloper">
<div class="leftprog">
<div class="outerthreat">
<div class="threat">
<input type="radio" id="intthreat-1" value="Bad" name="attr_intthreat" class="threatbar threat1" checked>
<label for="intthreat-1" class="threatlabel threat1">1</label>
<input type="radio" id="intthreat-2" value="Dangerous" name="attr_intthreat" class="threatbar threat2">
<label for="intthreat-2" class="threatlabel threat2">2</label>
<input type="radio" id="intthreat-3" value="Deadly" name="attr_intthreat" class="threatbar threat3">
<label for="intthreat-3" class="threatlabel threat3">3</label>
<input type="radio" id="intthreat-4" value="We're Screwed" name="attr_intthreat" class="threatbar threat4">
<label for="intthreat-4" class="threatlabel threat4">4</label>
</div>
<h3 class="final">Threat Level</h3>
<span name="attr_intthreat"></span>
</div>
</div>
<div class="rightprog">
<div class="threat status">
<input type="radio" id="intfight-0" value="Defeat 3 more times" name="attr_intfight" class="threatbar" checked>
<label for="intfight-0" class="threatlabel"></label>
<input type="radio" id="intfight-1" value="Defeat 2 more times" name="attr_intfight" class="threatbar">
<label for="intfight-1" class="threatlabel"></label>
<input type="radio" id="intfight-2" value="Defeat 1 more time" name="attr_intfight" class="threatbar">
<label for="intfight-2" class="threatlabel"></label>
<input type="radio" id="intfight-3" value="Unlocked" name="attr_intfight" class="threatbar">
<label for="intfight-3" class="threatlabel"></label>
<input type="radio" id="intfight-4" value="Complete" name="attr_intfight" class="threatbar">
<label for="intfight-4" class="threatlabel"></label>
</div>
<div class="notes">
<h3 class="final">Final Mission</h3>
<span name="attr_intfight"></span>
</div>
</div>
</div>
<div class="victoryholder">
<h3>Victory Meter</h3>
<div class="victory">
<div class="threat status victory">
<input type="radio" id="intvic-0" value="0" name="attr_intvic" class="threatbar" checked>
<label for="intvic-0" class="threatlabel threat1">0</label>
<input type="radio" id="intvic-1" value="1" name="attr_intvic" class="threatbar">
<label for="intvic-1" class="threatlabel threat1">1</label>
<input type="radio" id="intvic-2" value="2" name="attr_intvic" class="threatbar">
<label for="intvic-2" class="threatlabel threat1">2</label>
<input type="radio" id="intvic-3" value="3" name="attr_intvic" class="threatbar">
<label for="intvic-3" class="threatlabel threat2">3</label>
<input type="radio" id="intvic-4" value="4" name="attr_intvic" class="threatbar">
<label for="intvic-4" class="threatlabel threat2">4</label>
<input type="radio" id="intvic-5" value="5" name="attr_intvic" class="threatbar">
<label for="intvic-5" class="threatlabel threat3">5</label>
<input type="radio" id="intvic-6" value="6" name="attr_intvic" class="threatbar">
<label for="intvic-6" class="threatlabel threat3">6</label>
<input type="radio" id="intvic-7" value="7" name="attr_intvic" class="threatbar">
<label for="intvic-7" class="threatlabel threat3">7</label>
<input type="radio" id="intvic-8" value="8" name="attr_intvic" class="threatbar">
<label for="intvic-8" class="threatlabel threat4">8</label>
<input type="radio" id="intvic-9" value="9" name="attr_intvic" class="threatbar">
<label for="intvic-9" class="threatlabel threat4">9</label>
<input type="radio" id="intvic-10" value="X" name="attr_intvic" class="threatbar">
<label for="intvic-10" class="threatlabel threat4">X</label>
</div>
</div>
</div>
<div class="lieutenants">
<hr class="separate">
<!-- Liuetants -->
<h2 class="enemyheader">Briny Bastards</h2>
<div class="prog lieutenants lieustats">
<div class="lieuholder">
<h3 class="liename first">The Progenitor</h3>
<div class="centered">
<input type="checkbox" name="attr_prog_dead">
<label class="inline">Dead?</label>
</div>
<div class="centered">
<input type="checkbox" name="attr_prog_avail">
<label class="inline">Auxiliary Mission Available?</label>
</div>
</div>
<div class="lieuholder">
<h3 class="liename">The Diver</h3>
<div class="centered">
<input type="checkbox" name="attr_dive_dead">
<label class="inline">Dead?</label>
</div>
<div class="centered">
<input type="checkbox" name="attr_dive_avail">
<label class="inline">Auxiliary Mission Available?</label>
</div>
</div>
<div class="lieuholder">
<h3 class="liename">The Three</h3>
<div class="centered">
<input type="checkbox" name="attr_three_dead">
<label class="inline">Dead?</label>
</div>
<div class="centered">
<input type="checkbox" name="attr_three_avail">
<label class="inline">Auxiliary Mission Available?</label>
</div>
</div>
</div>
</div>
</section>
<section class="campnotes">
<h2>Notes</h2>
<textarea name="attr_campnotes"></textarea>
</section>
</div>
</div>
<!-- End Campaign Sheet -->
<!-- Datalists & thing that don't show directly on sheet -->
<input type="hidden" name="attr_smash_fail" value="lose 1 HP" />
<input type="hidden" name="attr_cyber_fail" value="lose 1 Biotech" />
<input type="hidden" name="attr_sly_fail" value="gain either Painted or Taunted" />
<input type="hidden" name="attr_roll_formula_smash" value="" />
<input type="hidden" name="attr_roll_results_cyber" value="" />
<input type="hidden" name="attr_roll_results_sly" value="" />
<input type="hidden" name="attr_roll_results_smash" value="" />
<input type="hidden" name="attr_roll_formula_sly" value="" />
<input type="hidden" name="attr_roll_formula_cyber" value="" />
<datalist id="relationships">
<option>Confidant</option>
<option>Crush</option>
<option>Enemy</option>
<option>Jeopordized</option>
<option>Rival</option>
<option>Strictly Professional</option>
</datalist>
<datalist id="megacorps">
<option>Goldencalf</option>
<option>Gargoyle</option>
<option>Dorsey</option>
</datalist>
<datalist id="subsource">
<option>Stolen</option>
<option>Found</option>
<option>Built</option>
</datalist>
<datalist id="corebuildings">
<option>Armory</option>
<option>Auguary</option>
<option>Clinic</option>
<option>Debt House</option>
<option>Detonatorium</option>
<option>Engineering Lab</option>
<option>Gambling Den</option>
<option>Gym</option>
<option>Intel Center</option>
<option>Interloper Ops</option>
<option>Intern Recycler</option>
<option>Plasma Lounge</option>
<option>Refinery</option>
<option>Smith</option>
<option>Training Grounds</option>
<option>Trauma Ward</option>
<option>Valdivian Ops</option>
</datalist>
<datalist id="brinybuildings">
<option>Artillery Lounge </option>
<option>Auguary</option>
<option>Biotech Refinery</option>
<option>Breakroom</option>
<option>Clinic</option>
<option>Debt House</option>
<option>Detonatorium</option>
<option>Eminent Domainery</option>
<option>Engineering Lab</option>
<option>Gambling Den</option>
<option>Gym</option>
<option>Intel Center</option>
<option>Interloper Ops</option>
<option>Intern Recycler</option>
<option>Library</option>
<option>Observatory</option>
<option>Pilot School</option>
<option>Plasma Lounge</option>
<option>Reeducation Chamber</option>
<option>Refinery</option>
<option>Repurposed Storage Facility</option>
<option>Research Cells</option>
<option>Sacrifice Booth</option>
<option>Sentinel System</option>
<option>Smith</option>
<option>Training Grounds</option>
<option>Trauma Ward</option>
<option>Trophy Room</option>
<option>Valdivian Ops</option>
<option>Workbench</option>
</datalist>
<datalist id="assistants">
<option>Trisha Young</option>
<option>Max Croissant</option>
<option>Tristan Rosario</option>
<option>Gaetan Hudson</option>
<option>Felipe Rosebaur</option>
<option>Moritz Baranova</option>
<option>Stella the Solicitous</option>
<option>Ella Mile</option>
<option>Kirby</option>
</datalist>
<datalist id="adversaries">
<option>Juliette Brochard</option>
<option>Montserrat Dean</option>
<option>Alfred The Corrupt</option>
<option>Mr. Hands</option>
<option>Handsome Milton Smith</option>
<option>Leonie Cervanes</option>
<option>Richard Trochowfski</option>
<option>Jeff St. Clair</option>
<option>Terrat Essej</option>
</datalist>
<!-- roll templates -->
<rolltemplate class="sheet-rolltemplate-rolls">
<div class="sheet-container">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
{{#name}}<div class="sheet-name">{{name}}</div>{{/name}}
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
</div>
<div class="sheet-content">
{{#allprops() title name subtitle desc}}
<div class="sheet-key">{{key}}</div>
<div class="sheet-value">{{value}}</div>
{{/allprops() title name subtitle desc}}
{{#desc}}<div class="sheet-desc">{{desc}}</div>{{/desc}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-powers">
{{#title}}
<div class="sheet-title">
{{title}}
</div>
{{/title}}
{{#name}}
<div class="sheet-name">
{{name}}
</div>
{{/name}}
{{#powerName}}
<div class="sheet-powername">
{{powerName}}
</div>
{{/powerName}}
{{#description}}
<div class="sheet-description">
{{description}}
</div>
{{/description}}
{{#cost}}
<div class="sheet-cost">
Biotech Cost: {{cost}}
</div>
{{/cost}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-weapon">
{{#title}}
<div class="sheet-title">
{{title}}
</div>
{{/title}}
{{#name}}
<div class="sheet-name">
{{name}}
</div>
{{/name}}
{{#weaponname}}
<div class="sheet-weaponname">
{{weaponname}}
</div>
{{/weaponname}}
{{#description}}
<div class="sheet-description">
{{description}}
</div>
{{/description}}
{{#harm}}
<div class="sheet-harm">
{{harm}} Harm
</div>
{{/harm}}
{{#ammo}}
<div class="sheet-ammo">
{{#lowAmmo}}
After making this attack, {{weaponname}} has <span class="red">{{ammo}}</span> ammo remaining.
{{/lowAmmo}}
{{^lowAmmo}}
After making this attack, {{weaponname}} has {{ammo}} ammo remaining.
{{/lowAmmo}}
</div>
{{/ammo}}
{{#range}}
<div class="sheet-range">
{{range}}
</div>
{{/range}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-grief">
<div class="title">
<span>Grief</span>
</div>
<div class="name">{{name}}</div>
{{#roll}}<div class="roll">
<div class="main-roll">{{roll}}</div>
</div>{{/roll}}
<div class="result">
{{#rollLess() roll 2}}
<span class="grieflength">You will be grieving the loss of your relationship for the next {{roll}} mission.</span>
{{/rollLess() roll 2}}
{{#rollGreater() roll 1}}
<span class="grieflength">You will be grieving the loss of your relationship for the next {{roll}} missions.</span>
{{/rollGreater() roll 1}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-attributeroll">
<div class="title">
{{#smash}}
<span class="smashtitle">{{title}}</span>
{{/smash}}
{{#sly}}
<span class="slytitle">{{title}}</span>
{{/sly}}
{{#cyber}}
<span class="cybertitle">{{title}}</span>
{{/cyber}}
</div>
<div class="name">{{name}}</div>
{{#roll}}<div class="roll">
<div class="main-roll">{{roll}}</div>
<div class="results-roll">{{results}}</div>
</div>{{/roll}}
<div class="result">
{{#rollBetween() roll 1 2}}
<span class="reprecussion">{{success_at_cost}}</span>
{{/rollBetween() roll 1 2}}
{{#rollBetween() roll 3 4}}
<span class="reprecussion">You succeed, but {{success_at_cost}}</span>
{{/rollBetween() roll 3 4}}
{{#rollBetween() roll 5 6}}
<span class="success">Sucess!</span>
{{/rollBetween() roll 5 6}}
</div>
{{#details}}<div class="details">{{details}}</div>{{/details}}
</rolltemplate>
<!-- Scripts -->
<script type="text/worker">
const submarineOrigins = {
Found: `Subsystems can be used one additional time per mission and Operatives restore up to 1 HP, 1 Biotech, 1 Shard, and 1 Soak after each mission.`,
Stolen: `Start ALL missions with 5 Awareness, but can allocate one hit each mission to the submarine for free`,
Built: `Unlock the sixth room, but when it's damaged, roll again to damage a second room.`
}
const Rooms = {
Armory: "Armory",
Auguary: "Auguary",
Clinic: "Clinic",
Debt_House: "Debt House",
Detonatorium: "Detonatorium",
Engineering_Lab: "Engineering Lab",
Gambling_Den: "Gambling Den",
Gym: "Gym",
Intel_Center: "Intel Center",
Interloper_Ops: "Interloper Ops",
Intern_Recycler: "Intern Recycler",
Plasma_Lounge: "Plasma Lounge",
Refinery: "Refinery",
Smith: "Smith",
Training_Grounds: "Training Grounds",
Trauma_Ward: "Trauma Ward",
Valdivian_Ops: "Valdivian Ops",
Artillery_Lounge: 'Artillery Lounge',
Biotech_Refinery: 'Biotech Refinery',
Breakroom: 'Breakroom',
Eminent_Domainery: 'Eminent Domainery',
Library: 'Library',
Observatory: 'Observatory',
Pilot_School: 'Pilot School',
Reeducation_Chamber: 'Reeducation Chamber',
Repurposed_Storage_Facility: 'Repurposed Storage Facility',
Research_Cells: 'Research Cells',
Sacrifice_Booth: 'Sacrifice Booth',
Sentinel_System: 'Sentinel System',
Trophy_Room: 'Trophy Room',
Workbench: 'Workbench'
}
const Relationships = {
Confidant: 'Confidant',
Crush: 'Crush',
Enemy: 'Enemy',
Jeopordized: 'Jeopordized',
Rival: 'Rival',
Strictly_Professional: 'Strictly Professional',
Other: 'Other'
}
const Assistants = {
Trisha_Young: "Trisha Young",
Max_Croissant: "Max Croissant",
Tristan_Rosario: "Tristan Rosario",
Gaetan_Hudson: "Gaetan Hudson",
Felipe_Rosebaur: "Felipe Rosebaur",
Moritz_Baranova: "Moritz Baranova",
Stella_the_Solicitous: "Stella the Solicitous",
Ella_Mile: "Ella Mile",
Kirby: "Kirby"
}
const Adversaries = {
Juliette_Brochard: "Juliette Brochard",
Montserrat_Dean: "Montserrat Dean",
Alfred_The_Corrupt: "Alfred The Corrupt",
Mr_Hands: "Mr. Hands",
Handsome_Milton_Smith: "Handsome Milton Smith",
Leonie_Cervanes: "Leonie Cervanes",
Richard_Trochowfski: "Richard Trochowfski",
Jeff_St_Clair: "Jeff St. Clair",
Terrat_Essej: "Terrat Essej"
}
<!-- Functions -->
function getRelationshipDetails(relationship, name) {
switch(relationship) {
case Relationships.Confidant:
return `Once per mission, ${name} can choose to offer support by restoring your HP or Biotech at the expense of their own supply, spending one for one. If you die, ${name} can keep your stuff.`
case Relationships.Crush:
return `When ${name} is targeted with an attack, you can throw yourself in the way: move next to ${name} and take the attack for them, ignoring all Soak and Barrier.\r\n\r\nAfter a mission where you did this, you may choose to confess your feelings. If you do, on every mission where ${name} is present, you have the Perpetual Painted tag and ${name} has the Perpetual Favored tag.`
case Relationships.Enemy:
return `Every time you take an Enemy relationship, gain one stack of Perpetual Painted. If ${name} dies or you stop being enemies, you do not lose this stack of Perpetual Painted.\r\n\r\nOnce per mission (inlcuding secondary), when you would become Injured, you can declare that ${name} is Injured instead. You still drop to 0 HP.`
case Relationships.Jeopordized:
return `You messed up your professional relationship. This can only be removed by completing a mission together.\r\n\r\nWhen on a mission with ${name}, ALL Operatives subtract 1 from all dice (even drops). You cannot help or be helped by ${name}.`
case Relationships.Rival:
return `If ${name} fails an attack, you can move into range and make a free attack against the target. If you miss, you suffer the original consequences as well.`
case Relationships.Strictly_Professional:
return `Whenever you take the help action to give extra dice to ${name}, you grant three extra dice instead of just one.`
case Relationships.Other:
default:
return "";
break;
}
}
function getRoomDetails(room, isBriny, isHoneycomb) {
// Defense should show up for the main room only and only in BB expansion. Better would be to refactor to isMainRoom but here we are.
return getRawRoomDetails(room) + (isBriny ? !isHoneycomb ? `\r\nCurrent Defense: 0` : "" : "");
}
function getRawRoomDetails(room) {
switch(room) {
case Rooms.Armory:
return `Unlocks all of the armor and armor tags for purchase.`;
case Rooms.Auguary:
return `Unlocks the Augury powers for purchase by any Operative`;
case Rooms.Clinic:
return `Injured Operatives can be healed by any Operative(s) spending 2 Scrip during downtime. Each time any Operative uses the Clinic, the cost increases by 1 Scrip.\r\nCurrent cost:`;
case Rooms.Debt_House:
return `All Operatives on the primary mission roll an extra d6 for Scrip.`;
case Rooms.Detonatorium:
return `Unlocks the Grenade Launcher Weapon and Grenade item.`;
case Rooms.Engineering_Lab:
return `Unlocks the Arcsword, Plasgun and all of the weapon tags for purchase.`;
case Rooms.Gambling_Den:
return `Operatives on the secondary mission roll 1d6 for Scrip instead of always gaining 2 Scrip.`;
case Rooms.Gym:
return `Operatives can obtain one cost 0 power from any other Career.`;
case Rooms.Intel_Center:
return `Succeeding at Military missions only raises the Interloper Victory Meter by 1.`;
case Rooms.Interloper_Ops:
return `Failing a mission where the Interlopers are the only target only raises their Victory Meter by 2.`;
case Rooms.Intern_Recycler:
return `Unwanted gear can be converted to Gear Parts equal to half the total cost (including tags and upgrades) rounded down.`;
case Rooms.Plasma_Lounge:
return `The Arc and Beam tags can be applied to grenades.`;
case Rooms.Refinery:
return `Requires Smith. Melee weapons can now have multiple instances of the Bleed tag. Each instance after the first costs 2 Scrip.`;
case Rooms.Smith:
return `Melee weapons deal +1 Harm.`;
case Rooms.Training_Grounds:
return `Unlocks the Training Grounds powers for purchase by any Operative.`;
case Rooms.Trauma_Ward:
return `Unlocks the Trauma Ward powers for purchase by any Operative.`;
case Rooms.Valdivian_Ops:
return `Failing a mission where Valdivian is the only target only raises their Victory Meter by 2`;
case Rooms.Artillery_Lounge:
return `Unlocks the Tainted Strike power for purcahse by any Operative`;
case Rooms.Biotech_Refinery:
return `Unlocks the Refine power for purchase by any Operative`;
case Rooms.Breakroom:
return `During the Loadout phase, choose a power granted by a room. An Assistant on a mission can hold that power, allowing all Operatives to use it without taking a spot in their own loadout. If the power has a Scrip cost, at least one Operative must have purchased this power.`;
case Rooms.Eminent_Domainery:
return `Operatives can collectively spend 5 Scrip to evict a retired Adversary or Assistant from their room and build something new in its place`;
case Rooms.Library:
return `When this is built, give all Operatives +1 to an Attribute of their choice. Also, as an action, an Operative may switch two of their attributes. `;
case Rooms.Observatory:
return `Unlocks the Sentry action for use by Operatives during missions`;
case Rooms.Pilot_School:
return `Unlocks new Drone protocols for pruchase and unlocks the Electrical Empathy power for purchase by any Operative.`;
case Rooms.Reeducation_Chamber:
return `Unlocks the Mindwiper item.`;
case Rooms.Repurposed_Storage_Facility:
return `Add two empty spaces to your HQ. You can construct one room in each of these spaces without paying an excavation fee.`;
case Rooms.Research_Cells:
return `Unlocks the Stun Baton. Special: multiple copies of this room can be constructed.`;
case Rooms.Sacrifice_Booth:
return `Unlocks the Sacrifice action for use by Operatives during missions.`;
case Rooms.Sentinel_System:
return `Whener an enemy ticks a pump to damage a room in the HQ, deal 3 Harm to that enemy If this was the final pump to disable a room, kill that enemy.`;
case Rooms.Trophy_Room:
return `When a character retires, they can add a piece of gear here. This can be recommissioned once for half of its initial cost.\r\n\r\nAdditionally, any Operative can spend their Downtime activity admiring a trophy and reminiscing about previous Operatives. Any Operative who does this gets +1 die when taking any action that reminds them of the Operative on their next mission.`;
case Rooms.Workbench:
return `All Items have their cost reduced by 1 Gear Part (min 1).`;
default:
return "";
break;
}
}
function getAdversaryInfo(adversary) {
switch(adversary) {
case Adversaries.Juliette_Brochard:
return `Using a power costs 1 action`;
case Adversaries.Montserrat_Dean:
return `All Operatives are Painted. If Montserrat is killed, all Operatives are Screwed that mission.`;
case Adversaries.Alfred_The_Corrupt:
return `Operatives cannot reload`;
case Adversaries.Mr_Hands:
return `Enemies can attack from one range band further.`;
case Adversaries.Handsome_Milton_Smith:
return `Robots deal +1 Harm`;
case Adversaries.Leonie_Cervanes:
return `Biotech costs are increased by 1.`;
case Adversaries.Richard_Trochowfski:
return "Enemies don't drop loot";
case Adversaries.Jeff_St_Clair:
return `Enemies gain +1 Shard`;
case Adversaries.Terrat_Essej:
return `Enemy attacks ignore Soak`;
default:
return '';
}
}
function getAssistantInfo(assistant) {
switch(assistant) {
case Assistants.Trisha_Young:
return `All Operatives act with +1 Cyber`;
case Assistants.Max_Croissant:
return `Action: Gain a grenade.`;
case Assistants.Tristan_Rosario:
return `+1 to all loot rolls.`;
case Assistants.Gaetan_Hudson:
return `Action: Apply Screwed to one target.`;
case Assistants.Felipe_Rosebaur:
return `All Operatives gain +1 soak.`;
case Assistants.Moritz_Baranova:
return `All attacks gain the Boom tag.`;
case Assistants.Stella_the_Solicitous:
return `Whenever an Opeartive moves, they can move an additional range band.`;
case Assistants.Ella_Mile:
return `Action: Your next power costs 0 Biotech`;
case Assistants.Kirby:
return `Action: Move two range bands.`
default: return '';
}
}
function buildDicePool(numDice) {
if(numDice == 0) {
numDice = 2;
const rolls = [...Array(numDice)].map(() => "[[d6]]").join(", ");
return `[[{${rolls}}kl1]]`; // Keep LOWEST not highest
}
const rolls = [...Array(numDice)].map(() => "[[d6]]").join(", ");
return `[[{${rolls}}kh1]]`;
}
function getResults(numDice) {
if(numDice === 0) {
numDice = 2;
}
return numDice <= 1
? ""
: [...Array(numDice)].map((_, i) => `$[[${i}]]`).join(" ");
}
function getRangeText(close, near, far) {
// Not the cleanest but is the fastest.
const rangecount = 0 + (close ? 1 : 0) + (near ? 1 : 0) + (far ? 1 : 0);
let rangeText = "This weapon operates at ";
if(rangecount === 0) { return " "; }
if(rangecount === 3) { return rangeText + "Close, Near, and Far ranges."; }
if(close) {
rangeText += "Close";
if(rangecount === 2) {
rangeText += " and "
}
}
if(near) {
rangeText += "Near";
if(far) {
rangeText += " and "
}
}
if(far) {
rangeText += " Far"
}
return rangeText + (rangecount > 1 ? " ranges." : " range.");
}
/* * * * * * * * * * * * * * *
* Listeners *
* * * * * * * * * * * * * * */
on("change:smash", function(eventInfo) {
const newVal = parseInt(eventInfo.newValue); // this is the source of like 99% of my problems.
const roll_formula_smash = buildDicePool(newVal);
const roll_results_smash = getResults(newVal);
setAttrs({
roll_formula_smash,
roll_results_smash,
});
});
on("change:sly", function(eventInfo) {
const newVal = parseInt(eventInfo.newValue);
const roll_formula_sly = buildDicePool(newVal);
const roll_results_sly = getResults(newVal);
setAttrs({
roll_formula_sly,
roll_results_sly,
});
});
on("change:cyber", function(eventInfo) {
const newVal = parseInt(eventInfo.newValue);
const roll_formula_cyber = buildDicePool(newVal);
const roll_results_cyber = getResults(newVal);
setAttrs({
roll_formula_cyber,
roll_results_cyber,
});
});
on("clicked:corpMiss", function(eventInfo) {
getSectionIDs("repeating_cutback", function(idarray) {
for(var i=0; i < idarray.length; i++) {
removeRepeatingRow("repeating_cutback_" + idarray[i]);
}
});
});
on("clicked:repeating_weapon:reload", function(eventInfo) {
getAttrs([
"repeating_weapon_max_ammo"
], function(values) {
maxAmmo = parseInt(values.repeating_weapon_max_ammo);
setAttrs({
repeating_weapon_ammo: maxAmmo
});
});
});
on("clicked:repeating_weapon:rollweapon", function(eventInfo) {
getAttrs([
"repeating_weapon_weaponname",
"repeating_weapon_rangetext",
"repeating_weapon_weapontext",
"repeating_weapon_ammo",
"repeating_weapon_harm",
"repeating_weapon_hasammo"
], function(values) {
if(!values.repeating_weapon_rangetext) {
values.repeating_weapon_rangetext = "";
}
const hasAmmo = values.repeating_weapon_hasammo === "true";
const lowAmmostr = (hasAmmo && `${values.repeating_weapon_ammo}` < 2) ? "{{lowAmmo=true}}" : "";
const ammoStr = hasAmmo ? `{{ammo=${values.repeating_weapon_ammo -1}}}` + lowAmmostr : "";
startRoll(`&{template:weapon} {{title=Weapon}} {{name=@{character_name}}} {{description=${values.repeating_weapon_weapontext}}} {{weaponname=${values.repeating_weapon_weaponname}}} {{harm=${values.repeating_weapon_harm}}} {{range=${values.repeating_weapon_rangetext}}} ` + ammoStr, (results) => {
finishRoll(
results.rollId,
{
}
);
});
if(hasAmmo)
{
setAttrs( {
repeating_weapon_ammo: values.repeating_weapon_ammo -1
});
}
});
});
on("change:repeating_weapon:closerange change:repeating_weapon:nearrange change:repeating_weapon:farrange", function(eventInfo) {
getAttrs([
"repeating_weapon_closerange",
"repeating_weapon_nearrange",
"repeating_weapon_farrange"
], function(values) {
const close = values.repeating_weapon_closerange === "true";
const near = values.repeating_weapon_nearrange === "true";
const far = values.repeating_weapon_farrange === "true";
const rangeText = getRangeText(close, near, far);
setAttrs({
repeating_weapon_rangetext : rangeText,
});
});
});
on("clicked:decay", function(eventInfo) {
getAttrs(["hivedecayroom1", "hivelockedroom1", "max_hivedecayroom1", "hivedecayroom2", "hivelockedroom2", "max_hivedecayroom2", "hivedecayroom3", "hivelockedroom3", "max_hivedecayroom3", "hivedecayroom4", "hivelockedroom4", "max_hivedecayroom4", "hivedecayroom5", "hivelockedroom5", "max_hivedecayroom5", "hivedecayroom6", "hivelockedroom6", "max_hivedecayroom6", "hivedecayroom7", "hivelockedroom7", "max_hivedecayroom7", "hivedecayroom8", "hivelockedroom8", "max_hivedecayroom8", "hivedecayroom9", "hivelockedroom9", "max_hivedecayroom9", "hivedecayroom10", "hivelockedroom10", "max_hivedecayroom10"], (values) => {
let rows = {};
const maxrooms = 10;
for(let i = 1; i <= maxrooms; i++) {
//If not locked, AND not at max, increase decay by 1
if(values[`hivelockedroom${i}`] != "on" && parseInt(values[`hivedecayroom${i}`]) < parseInt(values[`max_hivedecayroom${i}`])) {
rows['hivedecayroom' + i] = parseInt(values[`hivedecayroom${i}`]) + 1;
}
}
if(rows) setAttrs(rows);
});
});
on("change:submarine_source", function(eventInfo) {
getAttrs([
"rsmash"
], function(values) {
const details = submarineOrigins[eventInfo.newValue] ? submarineOrigins[eventInfo.newValue] : "";
setAttrs({
subsourcedetails: details
});
});
});
on("change:repeating_relationship:relationship_type change:repeating_relationship:relationship_target", function(eventInfo) {
getAttrs([
"repeating_relationship_relationship_target",
"repeating_relationship_relationship_type"
], function(values) {
relationship_target = values.repeating_relationship_relationship_target
relationship_type = values.repeating_relationship_relationship_type
const relationship_details = getRelationshipDetails(relationship_type, relationship_target);
setAttrs({
repeating_relationship_relationship_details : relationship_details,
});
});
});
on("change:repeating_allies:allyname", function(eventInfo) {
getAttrs(["repeating_allies_allyname"], function(values) {
const assistanttext = getAssistantInfo(values.repeating_allies_allyname);
setAttrs({
repeating_allies_allytext : assistanttext
});
});
});
on("change:repeating_adversaries:adversaryname", function(eventInfo) {
getAttrs(["repeating_adversaries_adversaryname"], function(values) {
const adversaryText = getAdversaryInfo(values.repeating_adversaries_adversaryname);
setAttrs({
repeating_adversaries_adversarytext : adversaryText
});
});
});
on("change:repeating_powers:equipped", function(eventInfo) {
console.log(eventInfo);
const changeval = eventInfo.newValue === "on" ? 1 : -1;
getAttrs(["powersEquipped"], (values) => {
setAttrs(
{
powersEquipped: values.powersEquipped + changeval
}
);
});
});
on("change:buildingnameroom1 change:buildingnameroom2 change:buildingnameroom3 change:buildingnameroom4 change:buildingnameroom5 change:buildingnameroom6 change:buildingnameroom7 change:buildingnameroom8 change:buildingnameroom9 change:buildingnameroom10 change:buildingnameroom11 change:buildingnameroom12 change:buildingnameroom13 change:buildingnameroom14 change:buildingnameroom15 change:buildingnameroom16 ", function(eventInfo){
const roomNumber = eventInfo.sourceAttribute.match(/\d+/).shift(); // regex to grab the number from a string. Relies on naming scheme.
const room = eventInfo.newValue;
const roomKey = "roomtext" + roomNumber; // Relying on attribute naming scheme.
getAttrs(["briny"], (values) => {
const isBriny = values.briny == "on";
const details = getRoomDetails(room, isBriny);
setAttrs(
{
[`${roomKey}`]: details
}
);
});
});
<!-- Hive room change -->
on("change:hivename1 change:hivename2 change:hivename3 change:hivename4 change:hivename5 change:hivename6 change:hivename7 change:hivename8 change:hivename9 change:hivename10", function(eventInfo){
const roomNumber = eventInfo.sourceAttribute.match(/\d+/).shift(); // regex to grab the number from a string. Relies on naming scheme.
const room = eventInfo.newValue;
const roomKey = "hivetext" + roomNumber; // Relying on attribute naming scheme.
const details = getRoomDetails(room, true, true);
setAttrs(
{
[`${roomKey}`]: details
}
);
});
on("change:hivedecayroom1 change:hivedecayroom2 change:hivedecayroom3 change:hivedecayroom4 change:hivedecayroom5 change:hivedecayroom6 change:hivedecayroom7 change:hivedecayroom8 change:hivedecayroom9 change:hivedecayroom10", function(eventInfo) {
getAttrs(["hivedecayroom1", "max_hivedecayroom1", "hivedecayroom2", "max_hivedecayroom2", "hivedecayroom3", "max_hivedecayroom3", "hivedecayroom4", "max_hivedecayroom4", "hivedecayroom5", "max_hivedecayroom5", "hivedecayroom6", "max_hivedecayroom6", "hivedecayroom7", "max_hivedecayroom7", "hivedecayroom8", "max_hivedecayroom8", "hivedecayroom9", "max_hivedecayroom9", "hivedecayroom10", "max_hivedecayroom10"], (values) => {
let rows = {};
const maxrooms = 10;
for(let i = 1; i <= maxrooms; i++) {
// We're at max decay! Set our max variable to true!
rows['hive_decayed_' + i] = (values[`hivedecayroom${i}`] == values[`max_hivedecayroom${i}`]) ? "on" : "off";
}
if(rows) setAttrs(rows);
});
});
on("sheet:opened", () => {
// Initialize our default values. Not necessary if we used translation.
getAttrs(["smash_fail", "cyber_fail", "sly_fail", "smash", "sly", "cyber", "sublockedroom6"], (values) => {
const sm = values.smash_fail;
const cy = values.cyber_fail;
const sl = values.sly_fail
const sublockedroom6 = values.sublockedroom6; // I deeply resent that this is necessary. CSS doesn't initialize correctly without explicitly "changing" it here.
const roll_formula_smash = buildDicePool(parseInt(values.smash));
const roll_results_smash = getResults(parseInt(values.smash));
const roll_formula_cyber = buildDicePool(parseInt(values.cyber));
const roll_results_cyber = getResults(parseInt(values.cyber));
const roll_formula_sly = buildDicePool(parseInt(values.sly));
const roll_results_sly = getResults(parseInt(values.sly));
setAttrs({
"smash_fail" : sm,
"cyber_fail" : cy,
"sly_fail" : sl,
roll_formula_smash,
roll_formula_cyber,
roll_formula_sly,
roll_results_sly,
roll_results_cyber,
roll_results_smash,
sublockedroom6
});
});
});
// Reset after each mission
on("clicked:reset", function() {
getAttrs(["hp_max", "resetpowers", "biotech_max", "barrier_max", "soak_max", "shard_max"], (values) => {
// Set HP to max HP
// Set Biotech to max Biotech
const hp = values.hp_max;
const bt = values.biotech_max;
const sk = values.soak_max;
const sd = values.shard_max;
const bm = values.barrier_max;
setAttrs({
"hp" : hp,
"biotech" : bt,
"barrier" : bm,
"soak": sk,
"shard": sd
});
// Unuse all drones
getSectionIDs("repeating_drone", idarray => {
let rows = {};
for (let i = 0; i < idarray.length; i++) {
rows['repeating_drone_' + idarray[i] + '_used'] = 0;
}
if(rows) setAttrs(rows);
});
// Unuse all items
getSectionIDs("repeating_item", idarray => {
let rows = {};
for (let i = 0; i < idarray.length; i++) {
rows['repeating_item_' + idarray[i] + '_used'] = 0;
}
if(rows) setAttrs(rows);
});
const shouldResetPowers = values.resetpowers == 'true';
if(shouldResetPowers) {
getSectionIDs("repeating_powers", idarray => {
let rows = {};
for (let i = 0; i < idarray.length; i++) {
rows['repeating_powers_' + idarray[i] + '_equipped'] = 0;
}
if(rows) setAttrs(rows);
});
}
});
});
on("clicked:griefbtn", function() {
startRoll("&{template:grief} {{name=@{character_name}}} {{roll=[[1d6cf>6cs<1]]}}", (results) => {
const total = results.results.roll.result
finishRoll(
results.rollId,
{
roll1: total
}
);
setAttrs( {
"grief": total
});
});
});
<!-- Tab Switching -->
on("change:sheet_type", function(eventInfo) {
setAttrs({
sheetTab: eventInfo.newValue
});
});
const buttonlist = ["charactersheet","basesheet","campaignsheet"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
})
const basebuttonlist = ["mainbase", "subbase", "hivebase"];
basebuttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
baseTab: button
});
});
})
</script>