mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 11:42:29 +00:00
4077 lines
170 KiB
HTML
4077 lines
170 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>
|
|
<span class="space-setting">
|
|
<label class="inline setting">Cyberrats in Space?</label>
|
|
<input class="sheet-space" name="attr_space" type="checkbox">
|
|
</span>
|
|
<hr class="divide">
|
|
|
|
|
|
|
|
|
|
</section>
|
|
|
|
<input class="hidden sheet-space" name="attr_space" type="checkbox">
|
|
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="charactersheet" />
|
|
<div class="charactersheet">
|
|
<main>
|
|
<section class="header f-center flexheader borderless">
|
|
<div class="header-left-wrapper">
|
|
<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>
|
|
|
|
<div class="stack header-right">
|
|
|
|
<label class="desc">Mutator</label>
|
|
<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 class="desc">Megacorp</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 class="desc">Career</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 class="desc">Next of Kin</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">
|
|
|
|
|
|
</div>
|
|
</section>
|
|
|
|
<input class="hidden sheet-briny" name="attr_briny" type="checkbox">
|
|
<input class="hidden sheet-space" name="attr_space" 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 brinyorspacecond">
|
|
<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 spacecond">
|
|
<div class="cond">
|
|
<label for="attr_damaged">Damaged?
|
|
<input name="attr_damaged" 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>
|
|
</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}}} {{fuel=Biotech}} {{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">
|
|
<h2>Loadout</h2>
|
|
|
|
<h3>Powers</h3>
|
|
<span class="centertext"><i>You've equipped <span name="attr_powersEquipped"></span>/5 powers.</i></span>
|
|
<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>
|
|
|
|
|
|
<input class="hidden sheet-space" name="attr_space" type="checkbox">
|
|
<div class="optional">
|
|
<h3>Munitions</h3>
|
|
<span class="centertext"><i>You've equipped <span name="attr_munitionsEquipped"></span>/3 munitions.</i></span>
|
|
<fieldset class="repeating_Muns filtered_Muns filtered">
|
|
<input class="hidden equipped" type="checkbox" name="attr_equipped">
|
|
<!-- <div class="Munholder"> -->
|
|
<button type="roll" name="roll_mun" value="&{template:powers} {{harm=@{munHarm}}} {{title=Munition}} {{name=@{character_name}}} {{fuel=Diesel}} {{description=@{muntext}}} {{cost=@{muncost}}} {{powerName=@{munname}}}"></button>
|
|
<input class="munname" spellcheck="false" type="text" name="attr_munname" value="Name">
|
|
<!-- </div> -->
|
|
<span class="right">
|
|
<label class="inline">Diesel Cost</label>
|
|
<input class="cost" type="text" name="attr_muncost" value="">
|
|
</span>
|
|
<span class="right">
|
|
<label class="inline">Harm</label>
|
|
<input class="cost" type="number" name="attr_munHarm" value="">
|
|
</span>
|
|
<textarea class="maxwidth" spellcheck="false" name="attr_muntext"></textarea>
|
|
</fieldset>
|
|
|
|
<h3>Armaments</h3>
|
|
<span class="centertext"><i>You've equipped <span name="attr_armsEquipped"></span>/3 armaments.</i></span>
|
|
<fieldset class="repeating_arm filtered_arm filtered">
|
|
<input class="hidden equipped" type="checkbox" name="attr_equipped">
|
|
<div class="armament-checkboxes">
|
|
<span class="checkbox-group">
|
|
<input type="checkbox" name="attr_blown">
|
|
<label class="inline">Blown?</label>
|
|
</span>
|
|
</div>
|
|
<div class="weapon">
|
|
<span class="entire">
|
|
<span class="left">
|
|
<button type="action" class="btn d6" name="act_rollarm" value=""></button>
|
|
<input class="weapon" spellcheck="false" type="text" name="attr_armname" value="Name">
|
|
</span>
|
|
<span class="mid">
|
|
<label class="harmlabel">Harm</label>
|
|
<input class="harmcounter" type="number" name="attr_harm" value="1">
|
|
</span>
|
|
<span class="upgrades">
|
|
<label>Upgrades:</label>
|
|
<input type="number" value="0" name="attr_upgrades"></input>
|
|
</span>
|
|
</span>
|
|
<span class="hidden rangetext" name="attr_rangetext" value=""></span>
|
|
<textarea class="maxwidth" spellcheck="false" name="attr_weapontext">Description and upgrades</textarea>
|
|
<div class="upgrade-info" style="font-size: 0.8em; color: #666; margin-top: 2px;">
|
|
<span name="attr_upgrades"></span> upgrades, blows a fuse if second-highest die is <span name="attr_upgrades_plus_one"></span> or less.
|
|
</div>
|
|
</div>
|
|
<hr class="armament-divider">
|
|
</fieldset>
|
|
|
|
</div>
|
|
</section>
|
|
|
|
<input class="hidden sheet-space" name="attr_space" type="checkbox">
|
|
<section class="mech">
|
|
<h3>Mech</h3>
|
|
<div class="centerme">
|
|
<input spellcheck="false" style="width:10em;" class="header-input" list="mechtypes" name="attr_character_mechtype" type="text">
|
|
<div class="mech-abilities">
|
|
<div class="mech-ability-section">
|
|
<label>Tug:</label>
|
|
<textarea spellcheck="false" value="" name="attr_mechtug">Tug</textarea>
|
|
</div>
|
|
<div class="mech-ability-divider"></div>
|
|
<div class="mech-ability-section">
|
|
<div class="mshop-header">
|
|
<input type="checkbox" class="mshop-toggle" name="attr_mshop_enabled" value="1">
|
|
<label>M-shop captstone:</label>
|
|
</div>
|
|
<textarea spellcheck="false" name="attr_mechmshop"></textarea>
|
|
</div>
|
|
</div>
|
|
<!-- Todo: we could auto populate tug based on mechtype change -->
|
|
</div>
|
|
<div class="mechStuff">
|
|
<!-- <div class="mechleft"> -->
|
|
<div class="subsystems">
|
|
<h3>Subsystems</h3>
|
|
<fieldset class="repeating_Subs">
|
|
<span class="subspan">
|
|
<label>Type:</label>
|
|
<select name="attr_subtype">
|
|
<option value="Locomotion">Locomotion</option>
|
|
<option value="Power Source">Power Source</option>
|
|
<option value="Shoulder">Shoulder</option>
|
|
<option value="Undercarriage">Undercarriage</option>
|
|
</select>
|
|
|
|
<button type="roll" class="d6" name="roll_mun" value="&{template:powers} {{title=Subsystem}} {{name=@{character_name}}} {{description=@{subtext}}} {{powerName=@{subnamerep}}}"></button>
|
|
</span>
|
|
<input name="attr_subnamerep" type="text" value="Name"/>
|
|
<textarea class="maxwidth" spellcheck="false" value="Description" name="attr_subtext">Description</textarea>
|
|
</fieldset>
|
|
|
|
</div>
|
|
<!-- </div> -->
|
|
<!-- End mechleft -->
|
|
|
|
|
|
<!-- <div class="mechright"> -->
|
|
|
|
<!-- Munitions -->
|
|
<h3>Munitions</h3>
|
|
<input type="hidden" name="attr_munitionsEquipped" value="0">
|
|
<span>You've equipped <span name="attr_munitionsEquipped"></span>/3 munitions.</span>
|
|
<fieldset class="repeating_Muns">
|
|
<span>
|
|
<label class="inline">Equipped?</label>
|
|
<input class="equippedMun" type="checkbox" name="attr_equipped">
|
|
</span>
|
|
<div class="Munholder">
|
|
<button type="roll" name="roll_mun" value="&{template:powers} {{harm=@{munHarm}}} {{title=Munition}} {{name=@{character_name}}} {{fuel=Diesel}} {{description=@{muntext}}} {{cost=@{muncost}}} {{powerName=@{munname}}}"></button>
|
|
<input class="munname" spellcheck="false" type="text" name="attr_munname" value="Name">
|
|
</div>
|
|
<span class="right">
|
|
<label class="inline">Harm</label>
|
|
<input class="cost" type="number" name="attr_munHarm" value="">
|
|
</span>
|
|
<span class="right">
|
|
<label class="inline">Diesel Cost</label>
|
|
<input class="cost" type="text" name="attr_muncost" value="">
|
|
</span>
|
|
<textarea class="maxwidth" spellcheck="false" name="attr_muntext"></textarea>
|
|
</fieldset>
|
|
<!-- Armaments -->
|
|
<h3>Armaments</h3>
|
|
<input type="hidden" name="attr_armsEquipped" value="0">
|
|
<span>You've equipped <span name="attr_armsEquipped"></span>/3 armaments.</span>
|
|
<fieldset class="repeating_arm">
|
|
<div class="armament-checkboxes">
|
|
<span class="checkbox-group">
|
|
<input class="equippedArm" type="checkbox" name="attr_equipped">
|
|
<label class="inline">Equipped?</label>
|
|
</span>
|
|
<span class="checkbox-group">
|
|
<input type="checkbox" name="attr_blown">
|
|
<label class="inline">Blown?</label>
|
|
</span>
|
|
</div>
|
|
<div class="weapon">
|
|
<button type="action" class="btn d6" name="act_rollarm" value=""></button>
|
|
<input class="weapon" spellcheck="false" type="text" name="attr_armname" value="Name">
|
|
<label class="harmlabel">Harm</label>
|
|
<input class="harmcounter" type="number" name="attr_harm" value="1">
|
|
<span class="upgrades">
|
|
<label>Upgrades:</label>
|
|
<input type="number" value="0" name="attr_upgrades"></input>
|
|
</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">Description and upgrades</textarea>
|
|
<div class="upgrade-info" style="font-size: 0.8em; color: #666; margin-top: 2px;">
|
|
<span name="attr_upgrades"></span> upgrades, blows a fuse if second-highest die is <span name="attr_upgrades_plus_one"></span> or less.
|
|
</div>
|
|
</div>
|
|
<hr class="armament-divider">
|
|
</fieldset>
|
|
<!-- Subsystems -->
|
|
<!-- </div> -->
|
|
<input type="hidden" name="attr_show_hotbox" />
|
|
<div class="hotboxDetail">
|
|
<h3 class="hb">Hotbox</h3>
|
|
<div class="outerhot">
|
|
<div class="mechleft">
|
|
<div class="heatholder">
|
|
<label for="attr_heat">Current Heat: </label>
|
|
<input class="heat" type="number" name="attr_heat" />
|
|
</div>
|
|
<input type="hidden" name="attr_heat_level_class" />
|
|
<div class="heatholder">
|
|
<label for="attr_heat_level">Current Heat Level: </label>
|
|
<input type="hidden" class="heat-color" name="attr_heat_level_class" />
|
|
<span class="heatlevel" name="attr_heat_level"></span>
|
|
</div>
|
|
</div>
|
|
<div class="mechright">
|
|
<div class="refheat">
|
|
<h4>Reference Heat</h4>
|
|
<div class="heat-thresholds">
|
|
<div>
|
|
Heat ><span name="attr_smash_times4"></span>:
|
|
<span class="level overheating">OVERHEATING</span>
|
|
</div><div>
|
|
Heat ≥ <span name="attr_smash_times3"></span>:
|
|
<span class="level hot">Hot</span>
|
|
</div>
|
|
<div>
|
|
Heat ≥ <span name="attr_smash_times2"></span>:
|
|
<span class="level warm">Warm</span>
|
|
</div>
|
|
<div>
|
|
Heat ≥ <span name="attr_smash"></span>:
|
|
<span class="level cool">Cool</span>
|
|
</div>
|
|
<div>
|
|
Heat < <span name="attr_smash"></span>:
|
|
<span class="level cold">Cold</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div> <!--Close Outerhot-->
|
|
|
|
</div> <!-- Close hotboxdetail -->
|
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
|
<input class="hidden sheet-space" name="attr_space" type="checkbox">
|
|
<section class="perks">
|
|
<h3>Pilot Perks</h3>
|
|
<fieldset class="repeating_perk">
|
|
<label class="inline">Perk</label>
|
|
<input class="equippedArm" type="text" name="attr_scarname">
|
|
<div class="weapon">
|
|
<textarea class="maxwidth" spellcheck="false" name="attr_scartext">Description</textarea>
|
|
</div>
|
|
</fieldset>
|
|
</section>
|
|
|
|
<input class="hidden sheet-space" name="attr_space" type="checkbox">
|
|
<section class="mechstats">
|
|
<h3>Mech Stats</h3>
|
|
<div class="mechholder">
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_soak">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_soak_max">
|
|
<label>Soak</label>
|
|
<hr class="overline">
|
|
</div>
|
|
<div class="mechholder">
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_SP">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_SP_max">
|
|
<label>SP</label>
|
|
<hr class="overline">
|
|
</div>
|
|
<div class="mechholder">
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_shard">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_shard_max">
|
|
<label>Shard</label>
|
|
<hr class="overline">
|
|
</div>
|
|
<div class="mechholder">
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_diesel">
|
|
<span class="minmax short">/</span>
|
|
<input type="number" value="0" min="0" class="sidebar-input attr" name="attr_mech_diesel_max">
|
|
<label>Diesel</label>
|
|
<hr class="overline">
|
|
</div>
|
|
</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">
|
|
<label>Location</label>
|
|
<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>Adjective</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">
|
|
</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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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>
|
|
<input type="text" list="spacebuildings" class="buildinglist spacebuildings" 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" />
|
|
<input type="hidden" class="campaignToggle" name="attr_campaignTab" value="campaignCore" />
|
|
<div class="campaignType">
|
|
<select name="attr_campaign_type">
|
|
<option value="campaignCore">Cyberrats Core</option>
|
|
<option value="campaignSpace">Cyberrats in Space</option>
|
|
<!-- <option value="campaignCustom">Custom</option> -->
|
|
</select>
|
|
</div>
|
|
|
|
<input type="hidden" class="campaignType" name="attr_campaign_type" value="campaignCore" />
|
|
<div class="campaignCore">
|
|
<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" min="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 (Cyberrats base game)</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" min="0">
|
|
</div>
|
|
|
|
<div class="drop valdrop">
|
|
<label for="attr_divDead">Valdivian Defeated</label>
|
|
<input type="number" name="attr_divDead" value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop valdrop">
|
|
<label for="attr_milDead">Military Defeated</label>
|
|
<input type="number" name="attr_milDead" value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop brinydrop">
|
|
<label for="attr_briDead">Briny Defeated</label>
|
|
<input type="number" name="attr_briDead" value="0" min="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="Treacherous" 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="Treacherous" 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="Treacherous" 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">
|
|
<!-- Lieutenants -->
|
|
<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 core -->
|
|
|
|
<!-- Begin campaign space -->
|
|
<input type="hidden" class="campaignToggle" name="attr_campaignTab" value="campaignCore" />
|
|
<div class="campaignSpace">
|
|
<div class="campaignzone">
|
|
|
|
|
|
<div class="header camphead">
|
|
<h2>Cyberrats In Space 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_spaceForceSecondary">Is the Space Force a target?</label>
|
|
<input type="checkbox" name="attr_spaceForceSecondary" 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 mech</label>
|
|
<input type="number" name="attr_mechOps" value="0" min="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 mech with subsystem, 2+ munitions, 2+ armaments </label>
|
|
<input type="number" name="attr_mechLoadedOps" value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop">
|
|
<label for="attr_powerOps">Can deal 5+ Harm at once</label>
|
|
<input type="number" name="attr_damageOps" value="0" min="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_secondaryMech">Roll for secondary mission</button>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="drops">
|
|
<div class="sectiontop">
|
|
<h2 class="enemyheader">Generate Drops (Cyberrats in Space)</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_spaceIntDead" value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop valdrop">
|
|
<label for="attr_divDead">Swarm Defeated</label>
|
|
<input type="number" name="attr_swarmDead" value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop valdrop">
|
|
<label for="attr_milDead">Space Force Defeated</label>
|
|
<input type="number" name="attr_spaceDead" value="0" min="0">
|
|
</div>
|
|
|
|
<div class="drop brinydrop">
|
|
<label for="attr_briDead">Briny Defeated</label>
|
|
<input type="number" name="attr_briDead" value="0" min="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">Space Force</h2>
|
|
<div class="prog military">
|
|
<div class="leftprog">
|
|
|
|
<div class="outerthreat">
|
|
<div class="threat">
|
|
<input type="radio" id="sfthreat-1" value="Bad" name="attr_sfthreat" class="threatbar threat1" checked>
|
|
<label for="sfthreat-1" class="threatlabel threat1">1</label>
|
|
<input type="radio" id="sfthreat-2" value="Treacherous" name="attr_sfthreat" class="threatbar threat2">
|
|
<label for="sfthreat-2" class="threatlabel threat2">2</label>
|
|
<input type="radio" id="sfthreat-3" value="Deadly" name="attr_sfthreat" class="threatbar threat3">
|
|
<label for="sfthreat-3" class="threatlabel threat3">3</label>
|
|
<input type="radio" id="sfthreat-4" value="We're Screwed" name="attr_sfthreat" class="threatbar threat4">
|
|
<label for="sfthreat-4" class="threatlabel threat4">4</label>
|
|
</div>
|
|
<h3 class="final">Threat Level</h3>
|
|
<span name="attr_sfthreat"></span>
|
|
</div>
|
|
</div>
|
|
<div class="rightprog">
|
|
<div class="threat status">
|
|
<input type="radio" id="sffight-0" value="Defeat 3 more times" name="attr_sffight" class="threatbar" checked>
|
|
<label for="sffight-0" class="threatlabel"></label>
|
|
<input type="radio" id="sffight-1" value="Defeat 2 more times" name="attr_sffight" class="threatbar" checked>
|
|
<label for="sffight-1" class="threatlabel"></label>
|
|
<input type="radio" id="sffight-2" value="Defeat 1 more time" name="attr_sffight" class="threatbar">
|
|
<label for="sffight-2" class="threatlabel"></label>
|
|
<input type="radio" id="sffight-3" value="Unlocked" name="attr_sffight" class="threatbar">
|
|
<label for="sffight-3" class="threatlabel"></label>
|
|
<input type="radio" id="sffight-4" value="Complete" name="attr_sffight" class="threatbar">
|
|
<label for="sffight-4" class="threatlabel"></label>
|
|
</div>
|
|
<h3 class="final">Final Mission</h3>
|
|
<span name="attr_sffight"></span>
|
|
</div>
|
|
</div>
|
|
<hr class="separate">
|
|
|
|
|
|
<!-- Swarm -->
|
|
<h2 class="enemyheader">Swarm</h2>
|
|
<div class="prog valdivian">
|
|
<div class="leftprog">
|
|
|
|
<div class="outerthreat">
|
|
<div class="threat">
|
|
<input type="radio" id="swarmthreat-1" value="Bad" name="attr_swarmthreat" class="threatbar threat1" checked>
|
|
<label for="swarmthreat-1" class="threatlabel threat1">1</label>
|
|
<input type="radio" id="swarmthreat-2" value="Treacherous" name="attr_swarmthreat" class="threatbar threat2">
|
|
<label for="swarmthreat-2" class="threatlabel threat2">2</label>
|
|
<input type="radio" id="swarmthreat-3" value="Deadly" name="attr_swarmthreat" class="threatbar threat3">
|
|
<label for="swarmthreat-3" class="threatlabel threat3">3</label>
|
|
<input type="radio" id="swarmthreat-4" value="We're Screwed" name="attr_swarmthreat" class="threatbar threat4">
|
|
<label for="swarmthreat-4" class="threatlabel threat4">4</label>
|
|
</div>
|
|
<h3 class="final">Threat Level</h3>
|
|
<span name="attr_swarmthreat"></span>
|
|
</div>
|
|
</div>
|
|
<div class="rightprog">
|
|
<div class="threat status">
|
|
<input type="radio" id="swarmfight-0" value="Defeat 3 more times" name="attr_swarmfight" class="threatbar" checked>
|
|
<label for="swarmfight-0" class="threatlabel"></label>
|
|
<input type="radio" id="swarmfight-1" value="Defeat 2 more times" name="attr_swarmfight" class="threatbar">
|
|
<label for="swarmfight-1" class="threatlabel"></label>
|
|
<input type="radio" id="swarmfight-2" value="Defeat 1 more time" name="attr_swarmfight" class="threatbar">
|
|
<label for="swarmfight-2" class="threatlabel"></label>
|
|
<input type="radio" id="swarmfight-3" value="Unlocked" name="attr_swarmfight" class="threatbar">
|
|
<label for="swarmfight-3" class="threatlabel"></label>
|
|
<input type="radio" id="swarmfight-4" value="Complete" name="attr_swarmfight" class="threatbar">
|
|
<label for="swarmfight-4" class="threatlabel"></label>
|
|
</div>
|
|
<div class="notes">
|
|
<h3 class="final">Final Mission</h3>
|
|
<span name="attr_swarmfight"></span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="victoryholder">
|
|
<h3>Victory Meter</h3>
|
|
<div class="victory">
|
|
<div class="threat status victory">
|
|
<input type="radio" id="swarmvic-0" value="0" name="attr_swarmvic" class="threatbar" checked>
|
|
<label for="swarmvic-0" class="threatlabel threat1">0</label>
|
|
<input type="radio" id="swarmvic-1" value="1" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-1" class="threatlabel threat1">1</label>
|
|
<input type="radio" id="swarmvic-2" value="2" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-2" class="threatlabel threat1">2</label>
|
|
<input type="radio" id="swarmvic-3" value="3" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-3" class="threatlabel threat2">3</label>
|
|
<input type="radio" id="swarmvic-4" value="4" name="attr_swarmvic" checked class="threatbar">
|
|
<label for="swarmvic-4" class="threatlabel threat2">4</label>
|
|
<input type="radio" id="swarmvic-5" value="5" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-5" class="threatlabel threat3">5</label>
|
|
<input type="radio" id="swarmvic-6" value="6" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-6" class="threatlabel threat3">6</label>
|
|
<input type="radio" id="swarmvic-7" value="7" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-7" class="threatlabel threat3">7</label>
|
|
<input type="radio" id="swarmvic-8" value="8" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-8" class="threatlabel threat4">8</label>
|
|
<input type="radio" id="swarmvic-9" value="9" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-9" class="threatlabel threat4">9</label>
|
|
<input type="radio" id="swarmvic-10" value="X" name="attr_swarmvic" class="threatbar">
|
|
<label for="swarmvic-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="intthreatspace-1" value="Bad" name="attr_intthreatspace" class="threatbar threat1" checked>
|
|
<label for="intthreatspace-1" class="threatlabel threat1">1</label>
|
|
<input type="radio" id="intthreatspace-2" value="Treacherous" name="attr_intthreatspace" class="threatbar threat2">
|
|
<label for="intthreatspace-2" class="threatlabel threat2">2</label>
|
|
<input type="radio" id="intthreatspace-3" value="Deadly" name="attr_intthreatspace" class="threatbar threat3">
|
|
<label for="intthreatspace-3" class="threatlabel threat3">3</label>
|
|
<input type="radio" id="intthreatspace-4" value="We're Screwed" name="attr_intthreatspace" class="threatbar threat4">
|
|
<label for="intthreatspace-4" class="threatlabel threat4">4</label>
|
|
</div>
|
|
<h3 class="final">Threat Level</h3>
|
|
<span name="attr_intthreatspace"></span>
|
|
</div>
|
|
</div>
|
|
<div class="rightprog">
|
|
<div class="threat status">
|
|
<input type="radio" id="intfightspace-0" value="Defeat 3 more times" name="attr_intfightspace" class="threatbar" checked>
|
|
<label for="intfightspace-0" class="threatlabel"></label>
|
|
<input type="radio" id="intfightspace-1" value="Defeat 2 more times" name="attr_intfightspace" class="threatbar">
|
|
<label for="intfightspace-1" class="threatlabel"></label>
|
|
<input type="radio" id="intfightspace-2" value="Defeat 1 more time" name="attr_intfightspace" class="threatbar">
|
|
<label for="intfightspace-2" class="threatlabel"></label>
|
|
<input type="radio" id="intfightspace-3" value="Unlocked" name="attr_intfightspace" class="threatbar">
|
|
<label for="intfightspace-3" class="threatlabel"></label>
|
|
<input type="radio" id="intfightspace-4" value="Complete" name="attr_intfightspace" class="threatbar">
|
|
<label for="intfightspace-4" class="threatlabel"></label>
|
|
</div>
|
|
<div class="notes">
|
|
<h3 class="final">Final Mission</h3>
|
|
<span name="attr_intfightspace"></span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="victoryholder">
|
|
<h3>Victory Meter</h3>
|
|
<div class="victory">
|
|
<div class="threat status victory">
|
|
<input type="radio" id="intvicspace-0" value="0" name="attr_intvicspace" class="threatbar" checked>
|
|
<label for="intvicspace-0" class="threatlabel threat1">0</label>
|
|
<input type="radio" id="intvicspace-1" value="1" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-1" class="threatlabel threat1">1</label>
|
|
<input type="radio" id="intvicspace-2" value="2" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-2" class="threatlabel threat1">2</label>
|
|
<input type="radio" id="intvicspace-3" value="3" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-3" class="threatlabel threat2">3</label>
|
|
<input type="radio" id="intvicspace-4" value="4" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-4" class="threatlabel threat2">4</label>
|
|
<input type="radio" id="intvicspace-5" value="5" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-5" class="threatlabel threat3">5</label>
|
|
<input type="radio" id="intvicspace-6" value="6" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-6" class="threatlabel threat3">6</label>
|
|
<input type="radio" id="intvicspace-7" value="7" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-7" class="threatlabel threat3">7</label>
|
|
<input type="radio" id="intvicspace-8" value="8" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-8" class="threatlabel threat4">8</label>
|
|
<input type="radio" id="intvicspace-9" value="9" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-9" class="threatlabel threat4">9</label>
|
|
<input type="radio" id="intvicspace-10" value="X" name="attr_intvicspace" class="threatbar">
|
|
<label for="intvicspace-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>
|
|
|
|
</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="mechtypes">
|
|
<option>Beatbox</option>
|
|
<option>Boomwagon</option>
|
|
<option>Dynamo</option>
|
|
<option>The Frog</option>
|
|
<option>The Germinator</option>
|
|
<option>Hotbox</option>
|
|
<option>The Juggler</option>
|
|
<option>Leftovers</option>
|
|
<option>The Predatower</option>
|
|
<option>Spider</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="spacebuildings">
|
|
<option>Armory</option>
|
|
<option>The Bar</option>
|
|
<option>Body Shop</option>
|
|
<option>Clockmaker's Hall</option>
|
|
<option>Databank</option>
|
|
<option>Flag Shop</option>
|
|
<option>Medbay</option>
|
|
<option>The Memorial Wall</option>
|
|
<option>The M-Shop</option>
|
|
<option>Mr. Tippy's Fully Licensed Totally Chompin' Above Board Lost and Found Emporium</option>
|
|
<option>Radio Station</option>
|
|
<option>Repair Bay</option>
|
|
<option>Supply Closet</option>
|
|
<option>Tranquility Gardens</option>
|
|
<option>Union Hall & Bowling Alley</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}}
|
|
|
|
{{#harm}}
|
|
<div class="sheet-powerHarm">
|
|
{{harm}} Harm
|
|
</div>
|
|
{{/harm}}
|
|
|
|
|
|
|
|
{{#description}}
|
|
<div class="sheet-description">
|
|
{{description}}
|
|
</div>
|
|
{{/description}}
|
|
|
|
{{#cost}}
|
|
<div class="sheet-cost">
|
|
{{fuel}} 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 -->
|
|
{{^mech}}
|
|
{{#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}}
|
|
{{/mech}}
|
|
|
|
|
|
<!-- You won and the space force was the only target -->
|
|
{{#mech}}
|
|
{{#isMilitary}}
|
|
{{^multiple}}
|
|
<div class="deets">The Swarm'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, The Swarm'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}}
|
|
{{/mech}}
|
|
|
|
</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.
|
|
{{#mech}}
|
|
Alternatively, Disable one mech assigned to this mission.
|
|
{{/mech}}
|
|
</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.
|
|
{{#mech}}
|
|
Alternatively, Disable one mech assigned to this mission.
|
|
{{/mech}}
|
|
</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}}
|
|
<div class="armament-reminder"><small><em>Did you use an armament? If so, check your fuse!</em></small></div>
|
|
</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',
|
|
Space_Armory: 'Armory',
|
|
The_Bar: 'The Bar',
|
|
Body_Shop: 'Body Shop',
|
|
Clockmakers_Hall: "Clockmaker's Hall",
|
|
Databank: 'Databank',
|
|
Flag_Shop: 'Flag Shop',
|
|
Medbay: 'Medbay',
|
|
The_Memorial_Wall: 'The Memorial Wall',
|
|
The_M_Shop: 'The M-Shop',
|
|
Mr_Tippys: "Mr. Tippy's Fully Licensed Totally Chompin' Above Board Lost and Found Emporium",
|
|
Radio_Station: 'Radio Station',
|
|
Repair_Bay: 'Repair Bay',
|
|
Supply_Closet: 'Supply Closet',
|
|
Tranquility_Gardens: 'Tranquility Gardens',
|
|
Union_Hall: 'Union Hall & Bowling Alley'
|
|
};
|
|
|
|
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,
|
|
SPACE_FORCE: 5,
|
|
SWARM: 6,
|
|
INTERLOPER_SPACE: 7,
|
|
NUM_FACTIONS: 8
|
|
};
|
|
|
|
const DropTableRewards = {
|
|
BIOTECH: 1,
|
|
HP: 2,
|
|
CONSTRUCTION_PIECE: 3,
|
|
GEAR_PART: 4,
|
|
SCHEMATIC: 5,
|
|
ALIEN_WEAPON: 6,
|
|
SCRAP: 7,
|
|
FUEL: 8,
|
|
HEALTH: 9,
|
|
ALIEN_WEAPON_BL: 10,
|
|
NUM_DROPS: 11
|
|
};
|
|
|
|
<!-- 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 getMechTug(mechType) {
|
|
switch(mechType) {
|
|
case "Beatbox":
|
|
return "You can spend Diesel as SP.";
|
|
case "Boomwagon":
|
|
return "Munition slots in your loadout can hold munitions or armaments. That is, you could have 6 armaments and 0 munitions, instead of the usual limit of 3 of each. Additionally, if you start your turn without any Diesel, you may take an additional action. If you are part of a supermech, the entire supermech must not have diesel. Each of your munitions with the \"blow a fuse\" condition can only activate if you have an unblown fuse to blow.";
|
|
case "Dynamo":
|
|
return "Cycle: Gain [2] Diesel, then increase this amount by 1 for the remainder of the mission.";
|
|
case "The Frog":
|
|
return "You have a hopper, a big, unfillable void in your gut. As an action, you can attempt to Gobble a close creature smaller than yourself. This is an automatic action if the creature is willing. Gobbled creatures are stored in The Frog's belly and are considered to be carried and isolated from all non-gobbled creatures. They are considered Weakened when harming the frog from the inside. The frog can store a max of [2] creatures. Mechs cannot be stored inside the frog, they are too big. The frog can open its mouth without spending an action, allowing all gobbled creatures out. Gobbled creatures can spend an action to force the pilot to make an Attribute test of their (the gobbled creature's) choice. On a failure, the gobbled creature escapes. There are no other failure or mixed success consequences.\r\nUpgrade cost 2: You may pull a mounted Operative directly into The Frog's belly, dismounting them in the process.";
|
|
case "The Germinator":
|
|
return "At the start of your turn, you may choose another mech at Close range. They gain Cycle: Gain [1] <Diesel>. If you choose the same mech multiple times, this effect stacks.";
|
|
case "Hotbox":
|
|
return "Hotbox has to constantly monitor Heat. Many of its powers and armaments generate Heat when used. Certain abilities can only be used in specific Heat ranges. General armaments and munitions can be used in any Heat range, and generate 1 Heat. If a pilot exceeds maximum Heat, the mech cannot take any actions.\r\nAny stacks of Burn applied to the mech increase Heat instead of damaging SP.";
|
|
case "The Juggler":
|
|
return "You gain additional Soak equal to the number of enemies you have Taunted.";
|
|
case "Leftovers":
|
|
return "You can consume fuel drops as health drops. Additionally, your mech can equip [2] powers that your pilot knows. These powers run off of Biotech and can be used while mounted. These powers do not occupy slots in the existing mech loadout.";
|
|
case "The Predatower":
|
|
return "Deal double Harm to creatures you have carried, moved, or immobilized this turn.";
|
|
case "Spider":
|
|
return "Egg Drop: As an automatic action, set down an egg sac in your location. When you do, start a 2-clock for that egg. Any creature forcibly moved into an egg sac becomes Immobilized and Dazed until the end of the ENEMY PHASE, destroying the egg sac. As an automatic action, you may pop (destroy) an egg sac, pulling all Near creatures Close to it. When the 2-clock fills up, the egg cracks and splits, revealing a still-damp hatchling. Each hatchling has 1 HP and Cycle: deal X Harm to one Close enemy, where X is the number of hatchlings. You can move all hatchlings one range band as a single automatic action.";
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
|
|
function getMechMshop(mechType) {
|
|
switch(mechType) {
|
|
case "Beatbox":
|
|
return "You gain Stereo Select. Start each mission modeless and gain Cycle: switch to a new mode. The modes are Volume: All your armaments gain the Arc tag. Bass: All your armaments gain the Shred tag. Treble: Your armaments deal 1 True Harm before other effects. Subs: All of your armaments gain the Slowing keyword. That's right, you must switch modes each round!";
|
|
case "Boomwagon":
|
|
return "When you would blow a fuse on one of your armaments for any reason other than this ability, instead mark a 2-clock. When this clock fills, blow a fuse and clear the clock. Supermech armaments aren't yours!";
|
|
case "Dynamo":
|
|
return "Increase your starting Diesel by your Sly score. Additionally, add your lowest Attribute to the fuse die whenever you roll it.";
|
|
case "The Frog":
|
|
return "On your turn, you can spend 2 points of Biotech to apply one of the following effects to all creatures you have Gobbled: Deal 1 True Harm, Recover 1 HP, Recover 1 Biotech. This is not an action.";
|
|
case "The Germinator":
|
|
return "Whenever you restore <Diesel> to yourself or another mech, increase the <Diesel> gained by your lowest Attribute.";
|
|
case "Hotbox":
|
|
return "On your turn, you may spend 1 fuel to shift up or down one temperature zone. Your Heat changes by the smallest amount necessary to move into the new zone. You may do this as often as you'd like. This is not an action.";
|
|
case "The Juggler":
|
|
return "Gain Soak equal to your lowest Attribute.";
|
|
case "Leftovers":
|
|
return "The first Power or Munition you use on your turn each round does not cost any Biotech or Diesel.";
|
|
case "The Predatower":
|
|
return "On your turn, you may spend 1 <Biotech> to roll a die. If you roll less than or equal to your highest Attribute, gain 2 <Diesel>. You may do this as often as you'd like. This is not an action.";
|
|
case "Spider":
|
|
return "At the start of each mission, gain a number of chits equal to your Cyber score. At any point before or after a roll, you can give yourself or a Close ally 1 chit to increase that roll by 1.";
|
|
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: 2`;
|
|
|
|
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).`;
|
|
|
|
case Rooms.Space_Armory:
|
|
return `Unlocks the Beam armament upgrade, several general armaments, and the Portable Turret item`;
|
|
|
|
case Rooms.The_Bar:
|
|
return `Injured Operatives can go on the primary mission. If an Operative who starts a Primary mission Injured would become Injured on the mission, they instead die.`;
|
|
|
|
case Rooms.Body_Shop:
|
|
return `Unlocks some personal abilities. Additionally, Operatives with careers may learn a power from their mutator as a downtime action.`;
|
|
|
|
case Rooms.Clockmakers_Hall:
|
|
return `Unlocks the Overclock Engine and Min's Cursed Stopwatch.`;
|
|
|
|
case Rooms.Databank:
|
|
return `Unlocks the Byte general munition and the Data Bank Item.`;
|
|
|
|
case Rooms.Flag_Shop:
|
|
return `Unlocks flags. Flags can be carried by any Operative or mech. Once placed down, a flag grants an effect to all Close allies. These effects end when the ally is no longer Close to the flag. Each flag can be placed once per mission, and cannot be moved after being placed. It does not cost an action to place a flag. Flags do not take a spot in loadout. There is only one copy of each flag.`;
|
|
|
|
case Rooms.Medbay:
|
|
return `Allows an Injured Operative to be healed. Spend 2 Scrap, then increase the cost of this service by 1 Scrap (max 5). Injured Operatives can also be healed with a successful secondary mission.`;
|
|
|
|
case Rooms.The_Memorial_Wall:
|
|
return `When an Operative dies, they may choose to give [1] piece of general equipment to their next of kin. This can be an Item, a general munition, general armament, or piece of personal gear. Special: The Memorial Wall can share space with another room. If there is no other room in this space, increase the number of hand-me-downs by 1.`;
|
|
|
|
case Rooms.The_M_Shop:
|
|
return `All mechs unlock their capstone abilities. These abilities do not occupy a loadout slot.\r\nAdditionally, any Operatives may swap out their specific capstone for Anointing Cleanse.`;
|
|
|
|
case Rooms.Mr_Tippys:
|
|
return `Unlocks the following items for purchase: Action Figure, Comically Large Horseshoe Magnet, Goggles, Magnifying Glass, Refined "Safe To Drink" Reactor Fuel (Tippy's Secret recipe), Rubber Boots, Suction Cups, Spray Glitter, Walkie Talkie.`;
|
|
|
|
case Rooms.Radio_Station:
|
|
return `Each Drone can be equipped with one general armament (purchased separately for the Drone). This armament activates automatically at the start of your turn, using your Cyber score. You may select the target. On a failure or partial success, or if it blows a fuse, the Drone is deactivated. If an ability would cause a drone to dismount, it is deactivated. If an ability would cause a drone to be killed, it is destroyed, and must be purchased again, retaining all protocols and armaments.`;
|
|
|
|
case Rooms.Repair_Bay:
|
|
return `Installed by default. Allows a Disabled mech to be repaired. Choose fast or cheap. Fast: spend 2 Scrap, then increase the cost of this service by 1 Scrap (max 5). Cheap: Start a 2-clock that increments at the start of Downtime. Collect your mech here when it's done. In the meantime, you're hoofin' it! The Repair Bay is the only way to repair a Disabled mech.`;
|
|
|
|
case Rooms.Supply_Closet:
|
|
return `Any Operative may take the Gearhead power. Passive: Whenever you use an Item, roll a d6. On a 4+, the item is not expended. This power does not work with Drones or while mounted.`;
|
|
|
|
case Rooms.Tranquility_Gardens:
|
|
return `Any Operative who spends their Downtime action in the Gardens may re-roll one 1 on their next mission. This includes on the secondary mission.`;
|
|
|
|
case Rooms.Union_Hall:
|
|
return `A place to gather after missions.`;
|
|
|
|
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, isArmament) {
|
|
// Not the cleanest but is the fastest.
|
|
const rangecount = 0 + (close ? 1 : 0) + (near ? 1 : 0) + (far ? 1 : 0);
|
|
|
|
const weapon = isArmament ? "armament" : "weapon";
|
|
|
|
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";
|
|
case DropTableRewards.ALIEN_WEAPON:
|
|
return "Alien Weapons";
|
|
case DropTableRewards.SCRAP:
|
|
return "Pieces of scrap";
|
|
case DropTableRewards.FUEL:
|
|
return "Fuel (Biotech or Diesel)";
|
|
case DropTableRewards.HEALTH:
|
|
return "Health (HP or SP)";
|
|
case DropTableRewards.ALIEN_WEAPON_BL:
|
|
return "Biolinked alien weapons";
|
|
}
|
|
}
|
|
|
|
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;
|
|
case EnemyFactions.SPACE_FORCE:
|
|
if(roll >= 6) return DropTableRewards.ALIEN_WEAPON;
|
|
if(roll >=5) return DropTableRewards.CONSTRUCTION_PIECE;
|
|
if(roll >=4) return DropTableRewards.SCRAP;
|
|
if(roll >=2) return DropTableRewards.HEALTH;
|
|
return DropTableRewards.FUEL;
|
|
break;
|
|
case EnemyFactions.SWARM:
|
|
if(roll >= 5) return DropTableRewards.HEALTH;
|
|
return DropTableRewards.FUEL;
|
|
break;
|
|
case EnemyFactions.INTERLOPER_SPACE:
|
|
if(roll >= 6) return DropTableRewards.ALIEN_WEAPON_BL;
|
|
if(roll >=5) return DropTableRewards.CONSTRUCTION_PIECE;
|
|
if(roll >=3) return DropTableRewards.HEALTH;
|
|
return DropTableRewards.FUEL;
|
|
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);
|
|
});
|
|
});
|
|
|
|
on("change:character_mechtype", function() {
|
|
getAttrs(["character_mechtype"], function(values) {
|
|
const mechType = (values.character_mechtype || "").trim().toLowerCase();
|
|
const isHotbox = mechType === "hotbox";
|
|
setAttrs({
|
|
show_hotbox: isHotbox ? "1" : "0"
|
|
});
|
|
});
|
|
});
|
|
|
|
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("clicked:repeating_arm:rollarm", function(eventInfo) {
|
|
getAttrs([
|
|
"repeating_arm_armname",
|
|
"repeating_arm_rangetext",
|
|
"repeating_arm_weapontext",
|
|
"repeating_arm_upgrades",
|
|
"repeating_arm_harm",
|
|
"repeating_arm_blown",
|
|
], function(values) {
|
|
if(values.repeating_arm_blown === "on") {
|
|
const armamentName = values.repeating_arm_armname;
|
|
startRoll(`&{template:default} {{name=Cannot Use Armament}} {{${armamentName}=Cannot use armament with blown fuse}}`,(results) => {
|
|
finishRoll(results.rollId, {});
|
|
});
|
|
return;
|
|
}
|
|
|
|
if(!values.repeating_arm_rangetext) {
|
|
values.repeating_arm_rangetext = "";
|
|
}
|
|
|
|
startRoll(`&{template:weapon} {{title=Armament}} {{name=@{character_name}}} {{description=${values.repeating_arm_weapontext}}} {{weaponname=${values.repeating_arm_armname}}} {{harm=${values.repeating_arm_harm}}} {{range=${values.repeating_arm_rangetext}}}`,(results) => {
|
|
finishRoll(results.rollId, {});
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
|
|
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("change:repeating_arm:closerange change:repeating_arm:nearrange change:repeating_arm:farrange", function(eventInfo) {
|
|
getAttrs([
|
|
"repeating_arm_closerange",
|
|
"repeating_arm_nearrange",
|
|
"repeating_arm_farrange"
|
|
], function(values) {
|
|
const close = values.repeating_arm_closerange === "true";
|
|
const near = values.repeating_arm_nearrange === "true";
|
|
const far = values.repeating_arm_farrange === "true";
|
|
const rangeText = getRangeText(close, near, far, true);
|
|
setAttrs({
|
|
repeating_arm_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
|
|
});
|
|
});
|
|
});
|
|
|
|
// Mech type change - autocomplete Tug and M-shop abilities
|
|
on("change:character_mechtype", function(eventInfo) {
|
|
const mechType = eventInfo.newValue;
|
|
const tugText = getMechTug(mechType);
|
|
const mshopText = getMechMshop(mechType);
|
|
|
|
setAttrs({
|
|
"mechtug": tugText,
|
|
"mechmshop": mshopText
|
|
});
|
|
});
|
|
|
|
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:repeating_muns:equipped", function(eventInfo) {
|
|
const changeval = eventInfo.newValue === "on" ? 1 : -1;
|
|
|
|
|
|
getAttrs(["munitionsEquipped"], (values) => {
|
|
setAttrs(
|
|
{
|
|
munitionsEquipped: parseInt(values.munitionsEquipped) + changeval
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
on("change:repeating_arm:equipped", function(eventInfo) {
|
|
const changeval = eventInfo.newValue === "on" ? 1 : -1;
|
|
|
|
getAttrs(["armsEquipped"], (values) => {
|
|
setAttrs(
|
|
{
|
|
armsEquipped: parseInt(values.armsEquipped) + changeval
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
on("change:repeating_arm:upgrades", function(eventInfo) {
|
|
const upgrades = parseInt(eventInfo.newValue) || 0;
|
|
const upgradesPlusOne = upgrades + 1;
|
|
|
|
setAttrs({
|
|
[`${eventInfo.sourceAttribute.replace("upgrades", "upgrades_plus_one")}`]: upgradesPlusOne
|
|
});
|
|
});
|
|
|
|
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,
|
|
//heat : sm,
|
|
smash_times2: (sm * 2),
|
|
smash_times3: (sm * 3),
|
|
smash_times4: (sm * 4)
|
|
|
|
});
|
|
});
|
|
});
|
|
|
|
// Used for hotbox heat
|
|
on("change:smash", function() {
|
|
getAttrs(["smash"], function(values) {
|
|
const smash = parseFloat(values.smash) || 0;
|
|
|
|
setAttrs({
|
|
smash_times2: (smash * 2),
|
|
smash_times3: (smash * 3),
|
|
smash_times4: (smash * 4)
|
|
|
|
});
|
|
});
|
|
});
|
|
|
|
on("change:heat change:smash", function() {
|
|
getAttrs(["heat", "smash"], function(values) {
|
|
const heat = parseFloat(values.heat) || 0;
|
|
const smash = parseFloat(values.smash) || 0;
|
|
let level = "Cold";
|
|
|
|
if (smash > 0) {
|
|
if (heat > 4 * smash) {
|
|
level = "OVERHEATING";
|
|
} else if (heat >= 3 * smash) {
|
|
level = "Hot";
|
|
} else if (heat >= 2 * smash) {
|
|
level = "Warm";
|
|
} else if (heat >= smash) {
|
|
level = "Cool";
|
|
}
|
|
}
|
|
|
|
setAttrs({
|
|
heat_level: level,
|
|
heat_level_class: level
|
|
});
|
|
});
|
|
});
|
|
|
|
on("clicked:secondary", function() {
|
|
getAttrs(["powerOps", "gearOps", "injuredOps", "careerOps", "dangerousSecondary", "bonusSecondary", "threatSecondary", "multipleSecondary", "milSecondary"], (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:secondaryMech", function() {
|
|
getAttrs(["mechOps", "mechLoadedOps", "injuredOps", "damageOps", "dangerousSecondary", "bonusSecondary", "threatSecondary", "multipleSecondary", "spaceForceSecondary"], (values) => {
|
|
const numMechs = parseInt(values.mechOps);
|
|
const numInj = parseInt(values.injuredOps);
|
|
const numLoadedMec = parseInt(values.mechLoadedOps);
|
|
const damageOps = parseInt(values.damageOps);
|
|
const bonusDice = parseInt(values.bonusSecondary);
|
|
const threat = parseInt(values.threatSecondary);
|
|
const isDangerous = values.dangerousSecondary == 1;
|
|
const isMultiple = values.multipleSecondary == 1;
|
|
const isSpaceForce = values.spaceForceSecondary == 1;
|
|
let zeroDice = false;
|
|
|
|
let numDice = 1;
|
|
|
|
numDice += (Math.floor(numMechs / 2)); // Extra dice for every 2 Operatives with a mech.
|
|
|
|
numDice -= numInj; // -1 per Injured Operative
|
|
|
|
numDice += numLoadedMec; // +1 per Operative with a fully loaded mech
|
|
|
|
numDice += damageOps; // +1 per Operative whose mech can deal 5 harm
|
|
|
|
|
|
|
|
// -1 die if it's just dismounted
|
|
if(numMechs === 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 = isSpaceForce ? "{{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 + "{{mech=true}}" + DangerousText + militaryText + multipleText, (results) => {
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
}
|
|
);
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
on("clicked:drops", function() {
|
|
getAttrs(["briDead", "milDead", "intDead", "divDead", "bonusDrops", "briny", "spaceIntDead", "swarmDead", "spaceDead"], (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 numSpaceInt = parseInt(values.spaceIntDead);
|
|
const numSwarm = parseInt(values.swarmDead);
|
|
const numSpaceForce = parseInt(values.spaceDead);
|
|
|
|
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);
|
|
drops = getDropForFaction(EnemyFactions.SPACE_FORCE, numSpaceForce, bonusDrops, drops);
|
|
drops = getDropForFaction(EnemyFactions.SWARM, numSwarm, bonusDrops, drops);
|
|
drops = getDropForFaction(EnemyFactions.INTERLOPER_SPACE, numSpaceInt, bonusDrops, drops);
|
|
|
|
const text = getTextFromDrops(drops);
|
|
|
|
startRoll(`&{template:drops} {{drops=${text}}}`, (results) => {
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
}
|
|
);
|
|
});
|
|
|
|
setAttrs({
|
|
"briDead" : 0,
|
|
"milDead" : 0,
|
|
"intDead" : 0,
|
|
"divDead" : 0,
|
|
"spaceIntDead" : 0,
|
|
"swarmDead" : 0,
|
|
"spaceDead" : 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", "mech_diesel_max", "mech_shard_max", "mech_SP_max", "mech_soak_max", "smash"], (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;
|
|
const md = values.mech_diesel_max;
|
|
const msh = values.mech_shard_max;
|
|
const msp = values.mech_SP_max;
|
|
const msk = values.mech_soak_max;
|
|
const smashVal = values.smash;
|
|
setAttrs({
|
|
"hp" : hp,
|
|
"biotech" : bt,
|
|
"barrier" : bm,
|
|
"soak": sk,
|
|
"shard": sd,
|
|
"mech_diesel" : md,
|
|
"mech_shard" : msh,
|
|
"mech_SP" : msp,
|
|
"mech_soak": msk,
|
|
"heat": smashVal
|
|
});
|
|
|
|
// 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 campaignList = ["campaignCore","campaignSpace","campaignCustom"];
|
|
campaignList.forEach(button => {
|
|
on(`clicked:${button}`, function() {
|
|
setAttrs({
|
|
campaignTab: button
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
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>
|
|
|
|
|
|
|
|
|
|
|