mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
2912 lines
115 KiB
HTML
2912 lines
115 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>
|
|
|
|
<input class="hidden sheet-briny" name="attr_briny" type="checkbox">
|
|
<section class="conditions">
|
|
<div class="title">
|
|
<h2>Conditions</h2>
|
|
</div>
|
|
|
|
<div class="allConditions">
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<label for="attr_injured">Injured?
|
|
<input name="attr_injured" type="checkbox"></label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<label for="attr_taunted">Taunted?
|
|
<input name="attr_taunted" type="checkbox">
|
|
By <input name="attr_taunted_by" type="text">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<label for="attr_painted">Painted?
|
|
<input name="attr_painted" type="number" min="0" value="0">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<label for="attr_bleed">Bleed?
|
|
<input name="attr_bleed" type="number" min="0" value="0">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<label for="attr_screwed">Screwed?
|
|
<input name="attr_screwed" type="checkbox"></label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds brinycond">
|
|
<div class="cond">
|
|
<label for="attr_burn">Burning?
|
|
<input name="attr_burn" type="number" min="0" value="0">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds brinycond">
|
|
<div class="cond">
|
|
<label for="attr_immobilized">Immobilized?
|
|
<input name="attr_immobilized" type="checkbox"></label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<input name="attr_blank1" type="text">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<input name="attr_blank2" type="text">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="conds">
|
|
<div class="cond">
|
|
<input name="attr_blank3" type="text">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="powers">
|
|
<span class="spacer">
|
|
<h2 class="narrow">All Known Powers</h2>
|
|
<input type="hidden" name="attr_powersEquipped" value="0">
|
|
<span class="pull-right">You've equipped <span name="attr_powersEquipped"></span>/5 powers.</span>
|
|
</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" value="0" name="attr_debt">
|
|
<label>Debt</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<div class="sideholder">
|
|
<input type="number" class="sidebar-input" value="0" name="attr_scrip">
|
|
<label>Scrip</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<div class="sideholder">
|
|
<input type="number" class="sidebar-input" value="0" name="attr_downtime_dice">
|
|
<label>Downtime Dice</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<div class="sideholder">
|
|
<input type="number" value="0" class="sidebar-input" name="attr_gear_parts">
|
|
<label>Gear Parts</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<div class="sideholder">
|
|
<input type="number" value="0" 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" class="sidebar-input attr" name="attr_dicemod" value="0">
|
|
<label>Extra Dice</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<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" value="0" min="0" class="sidebar-input attr" name="attr_soak">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_soak_max">
|
|
<label>Soak</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<div class="sideholder">
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_shard">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_shard_max">
|
|
<label>Shard</label>
|
|
<hr class="overline">
|
|
</div>
|
|
|
|
<div class="sideholder">
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_barrier">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" 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" class="enab" 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="secondary">
|
|
<div class="sectiontop">
|
|
<h2 class="enemyheader">Secondary Mission</h2>
|
|
</div>
|
|
|
|
<div class="myRow">
|
|
|
|
<span class="bonus">
|
|
<label class="narrow" for="attr_dangerousSecondary">Dangerous?</label>
|
|
<input type="checkbox" name="attr_dangerousSecondary" value="1">
|
|
</span>
|
|
|
|
<span class="bonus">
|
|
<label class="narrow" for="attr_multipleSecondary">Multiple targets?</label>
|
|
<input type="checkbox" name="attr_multipleSecondary" value="1">
|
|
</span>
|
|
|
|
<span class="bonus">
|
|
<label class="narrow" for="attr_threatSecondary">Highest target's Threat</label>
|
|
<input type="number" name="attr_threatSecondary" value="1">
|
|
</span>
|
|
|
|
<span class="bonus">
|
|
<label class="narrow" for="attr_milSecondary">Is the Military a target?</label>
|
|
<input type="checkbox" name="attr_milSecondary" value="1">
|
|
</span>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="sectiontop">
|
|
<h3>Number of Operatives who...</h3>
|
|
</div>
|
|
<div class="alldrops">
|
|
<div class="drop">
|
|
<label for="attr_careerOps">Have a career</label>
|
|
<input type="number" name="attr_careerOps" value="0">
|
|
</div>
|
|
|
|
<div class="drop">
|
|
<label for="attr_injuredOps">Are Injured</label>
|
|
<input type="number" name="attr_injuredOps" novalidate value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop">
|
|
<label for="attr_gearOps">Have a weapon/gear with 3+ tags </label>
|
|
<input type="number" name="attr_gearOps" value="0">
|
|
</div>
|
|
|
|
<div class="drop">
|
|
<label for="attr_powerOps">Have a power from row 3 or higher</label>
|
|
<input type="number" name="attr_powerOps" value="0">
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="centerbtn">
|
|
<span class="bonus">
|
|
<label class="narrow" for="attr_bonusSecondary">Bonus dice</label>
|
|
<input type="number" name="attr_bonusSecondary" value="0">
|
|
</span>
|
|
|
|
<button class="secondarybtn btn" type="action" name="act_secondary">Roll for secondary mission</button>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="drops">
|
|
<div class="sectiontop">
|
|
<h2 class="enemyheader">Generate Drops</h2>
|
|
<span class="adj">
|
|
<label class="narrow" for="attr_bonusDrops">Adjustment to rolls</label>
|
|
<input type="number" name="attr_bonusDrops" value="0">
|
|
</span>
|
|
</div>
|
|
<div class="alldrops">
|
|
|
|
<div class="drop intdrop">
|
|
<label for="attr_intDead">Interlopers Defeated</label>
|
|
<input type="number" name="attr_intDead" value="0">
|
|
</div>
|
|
|
|
<div class="drop valdrop">
|
|
<label for="attr_divDead">Valdivian Defeated</label>
|
|
<input type="number" name="attr_divDead" value="0">
|
|
</div>
|
|
|
|
<div class="drop valdrop">
|
|
<label for="attr_milDead">Military Defeated</label>
|
|
<input type="number" name="attr_milDead" value="0">
|
|
</div>
|
|
|
|
<div class="drop brinydrop">
|
|
<label for="attr_briDead">Briny Defeated</label>
|
|
<input type="number" name="attr_briDead" value="0">
|
|
</div>
|
|
|
|
</div>
|
|
<div class="centerbtn">
|
|
<button class="dropbtn btn" type="action" name="act_drops">Generate Drops!</button>
|
|
</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 and the Manager invokes a complication" />
|
|
<input type="hidden" name="attr_cyber_fail" value="lose 1 Biotech and the Manager invokes a complication" />
|
|
<input type="hidden" name="attr_sly_fail" value="gain either Painted or Taunted and the Manager invokes a complication" />
|
|
<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="subbuildings">
|
|
<option>Escape Pods</option>
|
|
<option>HARPOON CANNON</option>
|
|
<option>Machine Shop</option>
|
|
<option>Portable 'Finery</option>
|
|
<option>Radar Lounge</option>
|
|
<option>Reinforced Hull</option>
|
|
<option>Shipwreck Station</option>
|
|
<option>Torpedos</option>
|
|
<option>Whaling Table</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-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-drops">
|
|
<div class="title">
|
|
<span>Drops</span>
|
|
</div>
|
|
<div class="result">
|
|
{{drops}}
|
|
</div>
|
|
</rolltemplate>
|
|
|
|
|
|
<rolltemplate class="sheet-rolltemplate-mission">
|
|
<div class="title">
|
|
<span>Secondary Mission</span>
|
|
</div>
|
|
|
|
<div class="roll">
|
|
<div class="main-roll">{{roll}}</div>
|
|
<div class="results-roll">{{results}}</div>
|
|
</div>
|
|
|
|
|
|
<!-- Failure -->
|
|
{{#rollLess() roll 3}}
|
|
<div class="failure">
|
|
<div class="failMsg">Failure</div>
|
|
{{#multiple}}
|
|
<div class="deets">
|
|
The Threat levels for the factions you targeted increase by 1.
|
|
</div>
|
|
|
|
<div class="deets">
|
|
The Victory Meters of the Targets increase by 2.
|
|
</div>
|
|
|
|
{{/multiple}}
|
|
|
|
{{^multiple}}
|
|
<div class="deets">
|
|
The Threat level for the faction you targeted increases by 1.
|
|
</div>
|
|
|
|
<!-- Single target failure not military -->
|
|
{{^isMilitary}}
|
|
<div class="deets">
|
|
The Target's Victory Meter increases by 3.
|
|
</div>
|
|
{{/isMilitary}}
|
|
{{/multiple}}
|
|
</div>
|
|
{{/rollLess() roll 3}}
|
|
|
|
|
|
|
|
|
|
<!-- Success -->
|
|
{{#rollGreater() roll 2}}
|
|
<div class="success">
|
|
|
|
<div class="succMsg">Success!</div>
|
|
|
|
<!-- With Cost? -->
|
|
|
|
<!-- Not dangerous, roll less than 5 -->
|
|
{{^dangerous}}
|
|
{{#rollLess() roll 5}}
|
|
(with cost)
|
|
{{/rollLess() roll 5}}
|
|
{{/dangerous}}
|
|
|
|
<!-- Are dangerous, roll less thann 6 -->
|
|
{{#dangerous}}
|
|
{{#rollLess() roll 6}}
|
|
(with cost)
|
|
{{/rollLess() roll 6}}
|
|
{{/dangerous}}
|
|
|
|
|
|
<!-- Single target success not military -->
|
|
{{^multiple}}
|
|
{{^isMilitary}}
|
|
<div class="deets">
|
|
Victory Meter of the Target decreases by 2.
|
|
</div>
|
|
{{/isMilitary}}
|
|
{{/multiple}}
|
|
|
|
|
|
<!-- You won and the military was the only target -->
|
|
{{#isMilitary}}
|
|
{{^multiple}}
|
|
<div class="deets">Valdivian's Victory Meter decreases by 2 and the Interlopers Victory Meter incresaes by 2.</div>
|
|
{{/multiple}}
|
|
{{/isMilitary}}
|
|
|
|
<!-- You won against multiple targets and military was one of them -->
|
|
{{#isMilitary}}
|
|
{{#multiple}}
|
|
<div class="deets">The Victory Meter for the non-Military Target decreases by 1. Additionally, Valdivian's Victory Meter decreases by 1, and the Interlopers Victory Meter incresaes by 1.</div>
|
|
{{/multiple}}
|
|
{{/isMilitary}}
|
|
|
|
<!-- Succeed against multiple targets, neither are Military -->
|
|
{{^isMilitary}}
|
|
{{#multiple}}
|
|
<div class="deets">The Victory Meters of all Targets decrease by 1.</div>
|
|
{{/multiple}}
|
|
{{/isMilitary}}
|
|
|
|
</div>
|
|
{{/rollGreater() roll 2}}
|
|
|
|
|
|
|
|
<!-- Dangerous -->
|
|
{{#dangerous}}
|
|
{{#rollLess() roll 6}}
|
|
<div class="costs deets">
|
|
Either injure two Operartives on this mission or kill one Operative who as on the misson. Alternatively, sacrifice an Assistant who was on the mission.
|
|
</div>
|
|
{{/rollLess() roll 6}}
|
|
|
|
<!-- Injure Operatives dangerous -->
|
|
{{#anyInjured}}
|
|
{{#rollGreater() roll 5}}
|
|
<div class="injured deets">
|
|
One Injured Operative on this mission can become uninjured.
|
|
</div>
|
|
{{/rollGreater() roll 5}}
|
|
{{/anyInjured}}
|
|
|
|
{{/dangerous}}
|
|
|
|
|
|
<!-- Not Dangerous -->
|
|
{{^dangerous}}
|
|
{{#rollLess() roll 5}}
|
|
<div class="costs deets">
|
|
Either injure two Operartives on this mission or kill one Operative who as on the misson. Alternatively, sacrifice an Assistant who was on the mission.
|
|
</div>
|
|
{{/rollLess() roll 5}}
|
|
|
|
|
|
{{#anyInjured}}
|
|
{{#rollGreater() roll 4}}
|
|
<div class="injured">
|
|
One Injured Operative on this mission can become uninjured.
|
|
</div>
|
|
{{/rollGreater() roll 4}}
|
|
{{/anyInjured}}
|
|
{{/dangerous}}
|
|
|
|
|
|
</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 subrooms = {
|
|
Radar_Lounge: "Radar Lounge",
|
|
Escape_Pods: "Escape Pods",
|
|
Whaling_Table: "Whaling Table",
|
|
Portable_Finery: "Portable 'Finery",
|
|
Shipwreck_Station: "Shipwreck Station",
|
|
HARPOON_CANNON: "HARPOON CANNON",
|
|
Machine_Shop: "Machine Shop",
|
|
Reinforced_Hull: "Reinforced Hull",
|
|
Torpedos: "Torpedos"
|
|
}
|
|
|
|
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"
|
|
};
|
|
|
|
const EnemyFactions = {
|
|
INTERLOPER: 1,
|
|
VALDIVIAN: 2,
|
|
MILITARY: 3,
|
|
BRINY: 4,
|
|
NUM_FACTIONS: 5
|
|
};
|
|
|
|
const DropTableRewards = {
|
|
BIOTECH: 1,
|
|
HP: 2,
|
|
CONSTRUCTION_PIECE: 3,
|
|
GEAR_PART: 4,
|
|
SCHEMATIC: 5,
|
|
NUM_DROPS: 6
|
|
};
|
|
|
|
<!-- 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 `Once per mission, 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 "";
|
|
}
|
|
}
|
|
|
|
function getSubRoomDetails(room) {
|
|
switch(room) {
|
|
case subrooms.Radar_Lounge:
|
|
return `All Operatives act with +1 Cyber. \r\nUpgradeable cost 2: Every item can be used an additional time per mission\r\nUpgradeable cost 2: Lieutenants generate 1 less Cohort Point each round.`;
|
|
case subrooms.Escape_Pods:
|
|
return `Operatives may retreat from missions without returning to the Submarine. \r\nSpecial: this subsystem does NOT take up a room, and cannot be damaged. Operatives may spend 1 Construction Piece to remove the pods and clear the way for something new, opening up an additional space to build. Any building or subsystem in this spot may not be damaged.`;
|
|
case subrooms.Whaling_Table:
|
|
return `Operatives restore to full HP after missions.\r\nUpgradeable cost 2: Any Operative (s) can spend 2 Scrip during downtime to un-Injure an Injured Operative. Every time an Operative uses the whaling table in this way, the cost increases by 1 Scrip.`;
|
|
case subrooms.Portable_Finery:
|
|
return `Operative restore to full Biotech after missions.`;
|
|
case subrooms.Shipwreck_Station:
|
|
return `Operatives restore Barrier, Shard, and Soak between missions.`;
|
|
case subrooms.HARPOON_CANNON:
|
|
return `Twice a mission this subsystem can be activated. One enemy takes 5 Harm, is yanked any number of range bands towars the Submarine, and is Immobilized until the end of the round.`;
|
|
case subrooms.Machine_Shop:
|
|
return `You can repair rooms on the submarine between missions (instead of returning home) at the cost of 2 Construction Pieces per room.`
|
|
case subrooms.Reinforced_Hull:
|
|
return `All rooms on the ship can be damaged twice. Rooms operate as normal until they are damaged twice. The first time they are damaged, the effect of the room can still be accessed.`;
|
|
case subrooms.Torpedos:
|
|
return `Once per mission, either make a hole in a wall or deal 15 True Harm to one target with a clear line of sight to the Submarine. Increase Awareness by 40.`;
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
|
|
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 "";
|
|
}
|
|
}
|
|
|
|
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) {
|
|
console.log("Building dice pool for " + 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.");
|
|
}
|
|
|
|
function getD6Roll() {
|
|
return Math.floor(Math.random()*6)+1;
|
|
}
|
|
|
|
<!-- const DropTableRewards = { -->
|
|
<!-- BIOTECH: 1, -->
|
|
<!-- HP: 2, -->
|
|
<!-- CONSTRUCTION_PIECE: 3, -->
|
|
<!-- GEAR_PART: 4, -->
|
|
<!-- SCHEMATIC: 5, -->
|
|
<!-- NUM_DROPS: 6 -->
|
|
<!-- }; -->
|
|
|
|
function getDropTextFromNumber(number) {
|
|
switch(number) {
|
|
case DropTableRewards.BIOTECH:
|
|
return "Tubes of Biotech";
|
|
case DropTableRewards.HP:
|
|
return "HP";
|
|
case DropTableRewards.CONSTRUCTION_PIECE:
|
|
return "Construction Pieces";
|
|
case DropTableRewards.GEAR_PART:
|
|
return "Gear Parts";
|
|
case DropTableRewards.SCHEMATIC:
|
|
return "Schematics";
|
|
}
|
|
}
|
|
|
|
function getTextFromDrops(drops) {
|
|
let text = "";
|
|
let first = true;
|
|
for(i = 0; i <= DropTableRewards.NUM_DROPS; i++) {
|
|
if(drops[i]) {
|
|
if(!first) {
|
|
text += ",\r\n";
|
|
}
|
|
text += drops[i] + "x " + getDropTextFromNumber(i);
|
|
first = false;
|
|
}
|
|
}
|
|
return text;
|
|
}
|
|
|
|
function getDropForRoll(faction, roll) {
|
|
switch(faction) {
|
|
case EnemyFactions.INTERLOPER:
|
|
if(roll >= 6) return DropTableRewards.CONSTRUCTION_PIECE;
|
|
if(roll >= 4) return DropTableRewards.HP;
|
|
return DropTableRewards.BIOTECH;
|
|
break;
|
|
case EnemyFactions.VALDIVIAN:
|
|
if(roll >= 6) return DropTableRewards.GEAR_PART;
|
|
if(roll >= 3) return DropTableRewards.HP;
|
|
return DropTableRewards.BIOTECH;
|
|
break;
|
|
case EnemyFactions.MILITARY:
|
|
if(roll >= 6) return DropTableRewards.CONSTRUCTION_PIECE;
|
|
if(roll >= 4) return DropTableRewards.GEAR_PART;
|
|
if(roll >= 2) return DropTableRewards.HP;
|
|
return DropTableRewards.BIOTECH;
|
|
break;
|
|
case EnemyFactions.BRINY:
|
|
if(roll >= 6) return DropTableRewards.SCHEMATIC;
|
|
if(roll >= 5) return DropTableRewards.GEAR_PART;
|
|
if(roll >= 3) return DropTableRewards.HP;
|
|
return DropTableRewards.BIOTECH;
|
|
break;
|
|
}
|
|
}
|
|
|
|
function getDropForFaction(faction, number, modifier, drops) {
|
|
while(number--){
|
|
drops[getDropForRoll(faction, getD6Roll() + modifier)]++;
|
|
}
|
|
return drops;
|
|
}
|
|
|
|
function initializeDrops() {
|
|
let drops = [];
|
|
for(i = 0; i <= DropTableRewards.NUM_DROPS; i++) {
|
|
drops[i] = 0;
|
|
}
|
|
return drops;
|
|
}
|
|
|
|
|
|
/* * * * * * * * * * * * * * *
|
|
* Listeners *
|
|
* * * * * * * * * * * * * * */
|
|
on("change:dicemod", function(eventInfo) {
|
|
getAttrs([
|
|
"smash",
|
|
"sly",
|
|
"cyber"
|
|
], function(values) {
|
|
console.log("Dicemod changed");
|
|
const diceMod = parseInt(eventInfo.newValue);
|
|
updateSmashFormulas(parseInt(values.smash) + diceMod);
|
|
updateSlyFormulas(parseInt(values.sly) + diceMod);
|
|
updateCyberFormulas(parseInt(values.cyber) + diceMod);
|
|
});
|
|
});
|
|
|
|
function updateSmashFormulas(totalSmashDice) {
|
|
const roll_formula_smash = buildDicePool(totalSmashDice);
|
|
const roll_results_smash = getResults(totalSmashDice);
|
|
setAttrs({
|
|
roll_formula_smash,
|
|
roll_results_smash,
|
|
});
|
|
}
|
|
|
|
on("change:smash", function(eventInfo) {
|
|
getAttrs([
|
|
"dicemod"
|
|
], function(values) {
|
|
let newVal = parseInt(eventInfo.newValue); // this is the source of like 99% of my problems.
|
|
newVal += parseInt(values.dicemod);
|
|
|
|
updateSmashFormulas(newVal);
|
|
});
|
|
});
|
|
|
|
function updateSlyFormulas(totalSlyDice) {
|
|
console.log("Total sly dice: " + totalSlyDice);
|
|
const roll_formula_sly = buildDicePool(totalSlyDice);
|
|
const roll_results_sly = getResults(totalSlyDice);
|
|
setAttrs({
|
|
roll_formula_sly,
|
|
roll_results_sly,
|
|
});
|
|
}
|
|
|
|
on("change:sly", function(eventInfo) {
|
|
const newVal = parseInt(eventInfo.newValue);
|
|
getAttrs([
|
|
"dicemod"
|
|
], function(values) {
|
|
|
|
updateSlyFormulas(newVal + parseInt(values.dicemod));
|
|
|
|
});
|
|
});
|
|
|
|
function updateCyberFormulas(totalCyberDice) {
|
|
console.log(totalCyberDice);
|
|
const roll_formula_cyber = buildDicePool(totalCyberDice);
|
|
const roll_results_cyber = getResults(totalCyberDice);
|
|
setAttrs({
|
|
roll_formula_cyber,
|
|
roll_results_cyber,
|
|
});
|
|
}
|
|
|
|
on("change:cyber", function(eventInfo) {
|
|
const newVal = parseInt(eventInfo.newValue);
|
|
getAttrs([
|
|
"dicemod"
|
|
], function(values) {
|
|
updateCyberFormulas(newVal + parseInt(values.dicemod));
|
|
|
|
});
|
|
});
|
|
|
|
|
|
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: parseInt(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
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
|
|
<!-- Sub room change -->
|
|
on("change:subroom1 change:subroom2 change:subroom3 change:subroom4 change:subroom5 change:subroom6", function(eventInfo) {
|
|
const roomNumber = eventInfo.sourceAttribute.match(/\d+/).shift(); // regex to grab the number from a string.
|
|
const room = eventInfo.newValue;
|
|
const roomKey = "subroomtext" + roomNumber; // Relying on attribute naming scheme.
|
|
|
|
const details = getSubRoomDetails(room, true, true);
|
|
|
|
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", () => {
|
|
console.log("Load");
|
|
// Initialize our default values. Not necessary if we used translation.
|
|
getAttrs(["smash_fail", "cyber_fail", "sly_fail", "smash", "sly", "cyber", "dicemod", "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 diceMod = parseInt(values.dicemod);
|
|
|
|
const roll_formula_smash = buildDicePool(parseInt(values.smash) + diceMod);
|
|
const roll_results_smash = getResults(parseInt(values.smash) + diceMod);
|
|
|
|
const roll_formula_cyber = buildDicePool(parseInt(values.cyber) + diceMod);
|
|
const roll_results_cyber = getResults(parseInt(values.cyber) + diceMod);
|
|
|
|
const roll_formula_sly = buildDicePool(parseInt(values.sly) + diceMod);
|
|
const roll_results_sly = getResults(parseInt(values.sly) + diceMod);
|
|
|
|
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
|
|
});
|
|
});
|
|
});
|
|
|
|
on("clicked:secondary", function() {
|
|
getAttrs(["powerOps", "gearOps", "injuredOps", "careerOps", "dangerousSecondary", "bonusSecondary", "threatSecondary", "multipleSecondary"], (values) => {
|
|
const numPower = parseInt(values.powerOps);
|
|
const numGear = parseInt(values.gearOps);
|
|
const numInj = parseInt(values.injuredOps);
|
|
const numCar = parseInt(values.careerOps);
|
|
const bonusDice = parseInt(values.bonusSecondary);
|
|
const threat = parseInt(values.threatSecondary);
|
|
const isDangerous = values.dangerousSecondary == 1;
|
|
const isMultiple = values.multipleSecondary == 1;
|
|
const isMilitary = values.milSecondary == 1;
|
|
let zeroDice = false;
|
|
|
|
let numDice = 1;
|
|
|
|
numDice += (Math.floor(numCar / 2)); // Extra dice for every 2 Operatives with a career.
|
|
|
|
numDice -= numInj; // -1 per Injured Operative
|
|
|
|
numDice += numGear; // +1 per Operative with nice gear / weapon
|
|
|
|
numDice += numPower; // +1 per Operative with nice Power
|
|
|
|
|
|
|
|
// -1 die if there's only interns
|
|
if(numCar === 0) {
|
|
numDice--;
|
|
}
|
|
|
|
if(threat >=3) {
|
|
numDice--;
|
|
}
|
|
|
|
if(numDice > 5) {
|
|
numDice = 5;
|
|
}
|
|
|
|
if(numDice <= 0) {
|
|
numDice = 0;
|
|
zeroDice = true;
|
|
}
|
|
|
|
const anyInjuredText = numInj > 0 ? "{{anyInjured=${anyInjured}}}" : "";
|
|
|
|
const DangerousText = isDangerous ? "{{dangerous=true}}" : "";
|
|
|
|
const militaryText = isMilitary ? "{{isMilitary=true}}" : "";
|
|
|
|
const multipleText = isMultiple ? "{{multiple=true}}" : "";
|
|
|
|
const roll_formula_secondary = buildDicePool(numDice);
|
|
const roll_results_secondary = getResults(numDice);
|
|
|
|
startRoll(`&{template:mission} {{roll=${roll_formula_secondary}}} {{results=${roll_results_secondary}}}` + anyInjuredText + DangerousText + militaryText + multipleText, (results) => {
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
}
|
|
);
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
|
|
on("clicked:drops", function() {
|
|
getAttrs(["briDead", "milDead", "intDead", "divDead", "bonusDrops", "briny"], (values) => {
|
|
const isBriny = values.briny === "on";
|
|
|
|
const numMil = parseInt(values.milDead);
|
|
const numVal = parseInt(values.divDead);
|
|
const numInt = parseInt(values.intDead);
|
|
const numBri = isBriny ? parseInt(values.briDead) : 0;
|
|
|
|
const bonusDrops = parseInt(values.bonusDrops); // Modifier to add to each roll.
|
|
let drops = initializeDrops(); // Drops counts how many times a given drop appears.
|
|
|
|
drops = getDropForFaction(EnemyFactions.INTERLOPER, numInt, bonusDrops, drops);
|
|
drops = getDropForFaction(EnemyFactions.VALDIVIAN, numVal, bonusDrops, drops);
|
|
drops = getDropForFaction(EnemyFactions.MILITARY, numMil, bonusDrops, drops);
|
|
drops = getDropForFaction(EnemyFactions.BRINY, numBri, bonusDrops, drops);
|
|
|
|
const text = getTextFromDrops(drops);
|
|
|
|
startRoll(`&{template:drops} {{drops=${text}}}`, (results) => {
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
}
|
|
);
|
|
});
|
|
|
|
setAttrs({
|
|
"briDead" : 0,
|
|
"milDead" : 0,
|
|
"intDead" : 0,
|
|
"divDead" : 0
|
|
});
|
|
|
|
// What if for each one I find out how many times I'm rolling for each one.
|
|
// Then pass that to a bespoke funciton, where I simulate a roll and get the corresponding result off the correspond table.
|
|
// That function returns the numbers it "rolled" and the results, e.g. {nums: [3,6,1], BT, HP, GearPiece) and then we
|
|
// Take that result AND the modifiers and toss it to the template so it shows like [3+1] 4, [6+1] 7, [1+1] 2, and the reuslts
|
|
// Is that possible?
|
|
// better approach: return an array of each type of result. So we need an enumerator of each possible value.
|
|
|
|
// Fake the rolls in Javascript, get a list of the results, then pass those into the template?
|
|
|
|
});
|
|
});
|
|
|
|
|
|
// 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);
|
|
});
|
|
console.log("Antwer");
|
|
// Reload all weapons
|
|
getSectionIDs("repeating_weapon", idarray => {
|
|
let rows = {};
|
|
for (let i = 0; i < idarray.length; i++) {
|
|
getAttrs(['repeating_weapon_' + idarray[i] + '_max_ammo'], function(values){
|
|
let maxVal = parseInt(values['repeating_weapon_' + idarray[i] + '_max_ammo']);
|
|
console.log(maxVal);
|
|
rows['repeating_weapon_' + idarray[i] + '_ammo'] = maxVal;
|
|
if(rows) setAttrs(rows);
|
|
})
|
|
}
|
|
|
|
});
|
|
console.log("Bruges");
|
|
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>
|
|
|
|
|
|
|
|
|
|
|