1245 lines
72 KiB
HTML
1245 lines
72 KiB
HTML
<div class="sheet-3colrow">
|
||
<div class="sheet-col" style="width:300px">
|
||
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/The Troubleshooters/Logo-Black.png" class="sheet-logo" title="'The Troubleshooters' logo and the coat of arms are © Helmgast and are used here with their kind permission">
|
||
</div>
|
||
<div class="sheet-col" style="width:160px"></div>
|
||
<div class="sheet-col" style="width:300px; border: 1px black solid; padding: 10px;">
|
||
<div class="sheet-pcstats">
|
||
<input type="number" name="attr_vitality" class="sheet-number" min="0" max="20" title="Current Vitality"/> / <input type="number" name="attr_vitality_max_vis" class="sheet-skill" value="4" readonly="true" title="Max Vitality (based on skill values & conditions)"/>
|
||
<input type="hidden" class="sheet-number" name="attr_vitality_max" value="4"/> |  
|
||
<input type="number" name="attr_storypoints" class="sheet-number" value="3" min="0" max="12" title="Story Points"/>  | 
|
||
<input type="number" name="attr_advancements" class="sheet-number" value="0" min="0" max="10" title="Advancement / Reward Rolls"/>
|
||
<br>
|
||
 <label style="display: inline; font-size: 1em">Vitality / Max</label>  | 
|
||
<label style="display: inline; font-size: 1em">Story Points</label> |
|
||
<label style="display: inline; font-size: 1em">Advances</label>
|
||
</div>
|
||
<br/>
|
||
 <button type="roll" class="sheet-blank-button" value="&{template:default} {{name=@{name}}} {{total=[[?{How many dice|0}d6 ]]}}" title="Summing Dice">Nd6</button>
|
||
 <button type="roll" class="sheet-blank-button" value="&{template:default} {{name=@{name}}} {{result=[[?{How many dice|0}d6>4 ]]}}" title="Non-exploding Dice Pool">NdP</button>
|
||
 <button type="roll" class="sheet-blank-button" value="&{template:default} {{name=@{name}}} {{result=[[?{How many dice|0}d6!>6>4 ]]}}" title="Exploding Dice Pool">NdX</button>
|
||
 <button type="roll" class="sheet-blank-button" value="&{template:default} {{name=@{name}}} {{result=[[1d100]]}}" title="Percentile Dice">d100</button>
|
||
</div>
|
||
</div>
|
||
<br />
|
||
|
||
<input type="radio" class="sheet-page1" name="attr_page" value="1" checked="checked" id="sheet-page1">
|
||
<label for="sheet-page1" class="sheet-pagetab">COVER</label>
|
||
<input type="radio" class="sheet-page2" name="attr_page" value="2" id="sheet-page2">
|
||
<label for="sheet-page2">CHARACTER</label>
|
||
<input type="radio" class="sheet-page3" name="attr_page" value="3" id="sheet-page3">
|
||
<label for="sheet-page3">SKILLS</label>
|
||
<input type="radio" class="sheet-page4" name="attr_page" value="4" id="sheet-page4">
|
||
<label for="sheet-page4">GEAR / VISAS</label>
|
||
<input type="radio" class="sheet-page5" name="attr_page" value="5" id="sheet-page5">
|
||
<label for="sheet-page5">JOURNAL</label>
|
||
<input type="radio" class="sheet-page6" name="attr_page" value="6" id="sheet-page6">
|
||
<label for="sheet-page6">COMBAT</label>
|
||
<input type="radio" class="sheet-page7" name="attr_page" value="7" id="sheet-page7">
|
||
<label for="sheet-page7">NPC</label>
|
||
|
||
<div class="sheet-cover">
|
||
|
||
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/The Troubleshooters/Achievement_col.png" class="sheet-shield" title="'The Troubleshooters' logo and the coat of arms are © Helmgast and are used here with their kind permission">
|
||
<br />
|
||
|
||
<h2>EMERGENCY PASSPORT</h2>
|
||
<h2>PASSEPORT TEMPORAIRE</h2>
|
||
<h2>PASSERSATZ</h2>
|
||
<br />
|
||
|
||
<input class="sheet-coverfluff" type="text" name="attr_passport_number" placeholder="Passport Number"/><br /><h3>No of Passport / No du Passeport / Nummer des Reisepasses</h3>
|
||
<br />
|
||
<input class="sheet-coverfluff" type="text" name="attr_character_name" placeholder="Name" /><br /><h3>Name of bearer / Nom du titulaire / Name des Passinhabers</h3>
|
||
<br />
|
||
<input class="sheet-coverfluff" type="text" name="attr_nationality" placeholder="Nationality" /><br /><h3>National status / Nationalité / Staatsangehörigkeit</h3>
|
||
<br />
|
||
|
||
</div>
|
||
|
||
<div class="sheet-character">
|
||
|
||
<div class="sheet-2colrow">
|
||
|
||
<div class="sheet-col" style="width: 400px; padding-left: 10px; border-right: 3px dashed #f2f2f2">
|
||
|
||
<h3>Description / Description / Beschreibung</h3>
|
||
<br />
|
||
|
||
<input class="sheet-fluff" type="text" name="attr_profession" placeholder="Profession"/> <br />
|
||
<h4>Profession / Profession / Beruf</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_surname" placeholder="Family name"/><br />
|
||
<h4>Name / Nom / Name</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_name" placeholder="Given name"/><br />
|
||
<h4>Given name / Prénom / Vornamen</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_residence" placeholder="Place of residence"/><br />
|
||
<h4>Residence / Domicile / Wohnort</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_height" placeholder="Height"/><br />
|
||
<h4>Height / Taille / Größe</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_eyecolour" placeholder="Eye colour"/><br />
|
||
<h4>Colour of eyes / Couleur des yeux / Augenfarbe</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_haircolour" placeholder="Hair colour"/><br />
|
||
<h4>Colour of hair / Couleur des cheveux / Haarfarbe</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_marks" placeholder="Distinguishing marks" /><br />
|
||
<input class="sheet-fluff" type="text" name="attr_marks2" /><br />
|
||
<h4>Distinguishing marks / Signes particuliers / Unveränderliche Kennzeichen</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_dob" placeholder="Date of birth"/><br />
|
||
<h4>Date of birth / Date de naissance / Geburtsdatum</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_birthplace" placeholder="Birthplace"/><br />
|
||
<h4>Place of birth / Lieu de naissance / Geburtsort</h4>
|
||
<input class="sheet-fluff" type="text" name="attr_character_name" placeholder="Signature" style="font-family: Parisienne"/><br />
|
||
<h4>Holder's signature/ Signature du titulaire / Unterschrift des Passinhabers</h4>
|
||
|
||
</div>
|
||
|
||
<div class="sheet-col" style="width: 400px">
|
||
<div class="sheet-mugshot">
|
||
<img class="sheet-portrait" name="attr_character_avatar" height="350px" width="auto"/>
|
||
<div class="sheet-caption">Photo of holder/Photo du titulaire/Foto des Passinhabers</div>
|
||
</div>
|
||
<br/>
|
||
<h3>Native language(s) / Langue(s) maternelle / Muttersprache(n)</h3>
|
||
|
||
<input class="sheet-fluff" type="text" name="attr_language1" placeholder="Language" style="width: 45%"/>
|
||
<input class="sheet-fluff" type="text" name="attr_language2" placeholder="Language" style="width: 45%"/>
|
||
<br />
|
||
<br/>
|
||
<h3>Fluent languages / Langues parlées / Sprachkenntnisse</h3>
|
||
|
||
<fieldset class="repeating_languages">
|
||
<input class="sheet-fluff" type="text" name="attr_language" placeholder="Language" style="width: 45%"/><input class="sheet-skill" type="text" value="Cost" style="width: 8ch"/>
|
||
<input type="checkbox" name="attr_languagetick1" value="1"/>
|
||
<input type="checkbox" name="attr_languagetick2" value="1"/>
|
||
<input type="checkbox" name="attr_languagetick3" value="1"/>
|
||
<input type="checkbox" name="attr_languagetick4" value="1"/>
|
||
<input type="checkbox" name="attr_languagetick5" value="1"/>
|
||
</fieldset>
|
||
<br />
|
||
<h3>Contacts / Contacts / Kontakte</h3>
|
||
|
||
<input class="sheet-fluff" type="text" name="attr_plothook1" placeholder="Plot hook/Accroche scénaristique/Handlungsstrang"/>
|
||
<input class="sheet-fluff" type="text" name="attr_plothook2" placeholder="Plot hook/Accroche scénaristique/Handlungsstrang"/>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-skills">
|
||
|
||
<div class="sheet-2colrow">
|
||
|
||
<div class="sheet-col" style="width: 400px; padding-left: 10px; border-right: 3px dashed #f2f2f2">
|
||
|
||
<h3>Complications / Desavantages / Komplikationen</h3>
|
||
<br/>
|
||
<fieldset class="repeating_complications">
|
||
<details>
|
||
<summary><input type="text" name="attr_complication" placeholder="Complication"/></summary>
|
||
<textarea name="attr_compdesc" placeholder="Description" style="width:95%"></textarea>
|
||
</details>
|
||
</fieldset>
|
||
<br/>
|
||
<h3>Abilities / Capacites / Fahigkeiten</h3>
|
||
<br/>
|
||
<fieldset class="repeating_abilities">
|
||
<details>
|
||
<summary><input type="text" name="attr_ability" placeholder="Ability"/>
|
||
<input class="sheet-skill" type="text" placeholder="Cost" style="width: 8ch"/>
|
||
<input type="checkbox" name="attr_abilitytick1" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick2" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick3" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick4" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick5" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick6" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick7" value="1"/>
|
||
<input type="checkbox" name="attr_abilitytick8" value="1"/></summary>
|
||
<textarea name="attr_abilitydesc" placeholder="Description" style="width:95%"></textarea>
|
||
</details>
|
||
</fieldset>
|
||
|
||
</div>
|
||
|
||
<div class="sheet-col" style="width: 400px">
|
||
|
||
<div class="sheet-2colrow">
|
||
|
||
<h3>Skills / Competences / Kompetenzen</h3>
|
||
<br/>
|
||
|
||
<div class="sheet-col" style="width: 45%; margin: 0px">
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Agility" value="limbers up">Agility</button><input type="number" name="attr_agility" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_agilityused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Alertness" value="is on the alert">Alertness</button><input type="number" name="attr_alertness" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_alertnessused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Charm" value="turns on the charm">Charm</button><input type="number" name="attr_charm" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_charmused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Contacts" value="calls in a favour">Contacts</button><input type="number" name="attr_contacts" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_contactsused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Credit" value="flashes some cash">Credit</button><input type="number" name="attr_credit" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_creditused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Electronics" value="tinkers with the wiring">Electronics</button><input type="number" name="attr_electronics" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_electronicsused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Endurance" value="digs deep">Endurance</button><input type="number" name="attr_endurance" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_enduranceused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Engineering" value="checks the blueprints">Engineering</button><input type="number" name="attr_engineering" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_engineeringused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Entertainment" value="puts on a show">Entertainment</button><input type="number" name="attr_entertainment" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_entertainmentused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Humanities" value="ponders the meaning">Humanities</button><input type="number" name="attr_humanities" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_humanitiesused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Investigation" value="tries to put two and two together">Investigation</button><input type="number" name="attr_investigation" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_investigationused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Languages" value="attempts to communicate">Languages</button><input type="number" name="attr_languages" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_languagesused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Machinery" value="powers it up">Machinery</button><input type="number" name="attr_machinery" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_machineryused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Medicine" value="tends to the patient">Medicine</button><input type="number" name="attr_medicine" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_medicineused" value="1" title="Check when used"/>
|
||
<br />
|
||
</div>
|
||
|
||
<div class="sheet-col" style="width: 45%; margin: 0px; border-left: 1px solid black; padding-left: 5px">
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Melee" value="gets stuck in">Melee</button><input type="number" name="attr_melee" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_meleeused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Prestidigitation" value="tries some sleight of hand">Prestidigitation</button><input type="number" name="attr_prestidigitation" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_prestidigitationused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="RangedCombat" value="lets fly">Ranged Combat</button><input type="number" name="attr_rangedcombat" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_rangedused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="RedTape" value="tries to cut through the red tape">Red Tape</button><input type="number" name="attr_redtape" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_redtapeused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Science" value="puts on a lab coat">Science</button><input type="number" name="attr_science" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_scienceused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Search" value="searches high and low">Search</button><input type="number" name="attr_search" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_searchused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Security" value="attempts a bit of breaking and entering">Security</button><input type="number" name="attr_security" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_securityused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Sneak" value="tries to be inconspicuous">Sneak</button><input type="number" name="attr_sneak" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_sneakused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Status" value="asks 'Don't you know who I am?'">Status</button><input type="number" name="attr_status" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_statusused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Strength" value="applies the elbow grease">Strength</button><input type="number" name="attr_strength" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_strengthused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Subterfuge" value="employs some trickery">Subterfuge</button><input type="number" name="attr_subterfuge" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_subterfugeused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Survival" value="channels their wild side">Survival</button><input type="number" name="attr_survival" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_survivalused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Vehicles" value="sees what this baby can do">Vehicles</button><input type="number" name="attr_vehicles" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_vehiclesused" value="1" title="Check when used"/>
|
||
<br />
|
||
<button type="action" class="sheet-skillroll" name="act_skillroll" title="Willpower" value="attempts to get a grip">Willpower</button><input type="number" name="attr_willpower" class="sheet-skill" value = "15" min="0" style="width: 2.5em; text-align: right"/>
|
||
<input type="checkbox" name="attr_willpowerused" value="1" title="Check when used"/>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<hr />
|
||
<h3>Conditions</h3>
|
||
<br/>
|
||
<div class="sheet-2colrow">
|
||
<div class="sheet-col">
|
||
<label class="sheet-conditionlabel" title="All checks to notice something by sight automatically fail. All checks for Search and Investigation, and all Attack checks and Defence checks are at −5 pips. Many actions, like reading, are impossible. If the cause of the blindness is due to darkness, drop the Blinded Condition when light is restored. If the cause of the blindness is temporary, drop the Blinded Condition after the scene.">Blinded</label><input class="sheet-showcondition" type="checkbox" name="attr_blinded" value="1"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="All checks to notice something by hearing automatically fail. Checks for Charm, Languages, Entertainment and even Contacts and Sneak can be at −2 or −5 pips. If the cause of the deafness is a sudden loud sound, drop the Deaf Condition after the scene.">Deaf</label><input class="sheet-showcondition" type="checkbox" name="attr_deaf" value="2"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Temporarily halve your Max Vitality. If your vitality exceeds the temporary Max Vitality, your current Vitality is equal to your temporary Max Vitality. Exhausted Conditions stack. Drop one Exhausted Condition after eating, rehydrating and having a good night’s sleep.">Exhausted</label><input class="sheet-showcondition" type="checkbox" name="attr_exhausted1" value="3"/><input class="sheet-showcondition" type="checkbox" name="attr_exhausted2" value="3"/><input class="sheet-showcondition" type="checkbox" name="attr_exhausted3" value="3"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You cannot enter the same zone as the source of your fright. Attack checks are at −2 pips. Drop the Frightened Condition by making a successful Willpower task check as your main action.">Frightened</label><input class="sheet-showcondition" type="checkbox" name="attr_frightened" value="4"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="All task checks are at −2 pips. You can’t take defence actions at all. You gain 1d6 Protection. The Intoxicated Condition stacks up to three times. You don’t get a fourth Intoxicated Condition, but instead collapse and fall unconscious (counts as Out Cold). Drop one Intoxicated Condition the next morning, and then another at each six-hour interval thereafter.">Intoxicated</label><input class="sheet-showcondition" type="checkbox" name="attr_intoxicated1" value="5"/><input class="sheet-showcondition" type="checkbox" name="attr_intoxicated2" value="5"/><input class="sheet-showcondition" type="checkbox" name="attr_intoxicated3" value="5"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Take the Mortal Peril Condition instead of Vitality loss. You can only take the Mortal Peril Condition if you do not already have the Mortal Peril Condition. Flip any Attack check for the remainder of the fight. If Vitality runs out in the current fight, you die, unconditionally.">Mortal Peril</label><input class="sheet-showcondition" type="checkbox" name="attr_mortalperil" value="6"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="At the start of your turn, take 1dX Damage. If you are Out Cold at the start of your turn and still On Fire, take one Wounded Condition. You can take a Main action to try to put out the fire if you are in a zone that is not on fire. Make an Agility task check. If successful, drop the On Fire Condition. Someone else can also put out the fire in the same way on their turn. If you have a blanket or other fire-extinguishing tool, the task check is at +2 pips or more.">On Fire</label><input class="sheet-showcondition" type="checkbox" name="attr_onfire" value="7"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="When Vitality runs out, you’re Out Cold and you are no longer in the fight. Drop the Out Cold Condition at the start of the next scene if another character makes a successful Medicine task check. Drop the Condition at the start of the scene after that if the task check failed or if there was no Medicine task check.">Out Cold</label><input class="sheet-showcondition" type="checkbox" name="attr_outcold" value="8"/>
|
||
</div>
|
||
<div class="sheet-col">
|
||
<label class="sheet-conditionlabel" title="When Overburdened, movement and attack checks are at −2 pips. Drop the Overburdened Condition as a Free action if you can put down or drop the items that make you Overburdened. Drop the Overburdened Condition as a main action if you have to wriggle out of a harness to put down the items that make you Overburdened.">Overburdened</label><input class="sheet-showcondition" type="checkbox" name="attr_overburdened" value="9"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You can’t take any actions on your turn. At the end of your turn, make an Endurance task check. If successful, “unlock” one kind of action (Free, Move, Main or Bonus) for the rest of the scene. Depending on the reason for the paralysis, there may be a modifier on the task check. Drop the Paralysed Condition when the source of the paralysis says it should be dropped.">Paralysed</label><input class="sheet-showcondition" type="checkbox" name="attr_paralysed" value="10"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You can’t take a Move action. You can take a Sprint action, but it requires an Agility task check. Ranged Attack checks made against you from another zone are at −2 pips. Your Defence checks against melee attacks or ranged attacks from the same zone are at −2 pips. At the end of your turn, you may get up and drop the Prone Condition as a bonus action.">Prone</label><input class="sheet-showcondition" type="checkbox" name="attr_prone" value="11"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You cannot take a Move action or Sprint action. Drop the Restrained Condition by making a successful Unarmed Melee, Strength or Agility task check as your Main action. The check is opposed if another character is holding you. If the check fails, or if you lose, you’re still Restrained.">Restrained</label><input class="sheet-showcondition" type="checkbox" name="attr_restrained" value="12"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Attack checks are at −5 pips. Sprint or Move actions that normally require a task check are also at −5 pips. Regular Sprint or Move actions now require a task check. Other task checks are at −2 pips. Unless being Stunned is the result of poison or illness, you can often use your Main action to make a Willpower task check. If successful, drop the Stunned Condition. Drop the Stunned Condition at the start of the next scene if it is still in effect.">Stunned</label><input class="sheet-showcondition" type="checkbox" name="attr_stunned" value="13"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Whenever you are surprised, caught unprepared, or otherwise not ready for action, you get the Surprised Condition. You can only take a Free action on your turn. Drop the Surprised Condition at the end of your turn.">Surprised</label><input class="sheet-showcondition" type="checkbox" name="attr_surprised" value="14"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="All checks are at −2 pips. Attack checks against the source of your terror are at −5 pips. You cannot move closer to the source of your terror. At the start of your turn, if you are in the same zone as the source of your terror, make a Willpower task check as a Free action. If it fails, you must move out of the zone before doing anything else. Replace the Terrified Condition with the Frightened Condition by making a successful Willpower task check as your Main action.">Terrified</label><input class="sheet-showcondition" type="checkbox" name="attr_terrified" value = "15" min="0"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Take the Wounded Condition instead of Vitality loss. You don’t have to take the Wounded Condition if you don’t want to. You can only take the Wounded Condition if you do not already have the Wounded Condition. Once the fight ends, all further task checks are at −2 pips until the Wounded Condition heals. Ignore the effects of the Wounded Condition for one scene if someone else makes a successful Medicine task check. Drop the Wounded Condition after a two-day recuperating scene and a successful Medicine, Credits or Contacts task check (and possibly some uncomfortable questions from the police), or by spending downtime on Mend and Recuperate.">Wounded</label><input class="sheet-showcondition" type="checkbox" name="attr_wounded" value="16"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-npc" style="padding-left: 10px;">
|
||
<input type="text" name="attr_character_name" placeholder="Name" style="width:25%"/>
|
||
<input type="text" name="attr_name" placeholder="Chat Name" style="width:15%"/>
|
||
<input type="text" name="attr_npcaffiliation" placeholder="Affiliation" style="width:15%"/>
|
||
<select name="attr_npclevel" style="width:15%">
|
||
<option value="" hidden>Rank</option>
|
||
<option value="Mook" >Mook</option>
|
||
<option value="Underling" >Underling</option>
|
||
<option value="Lieutenant" >Lieutenant</option>
|
||
<option value="Boss" >Boss</option>
|
||
</select>
|
||
<div class="sheet-2colrow">
|
||
<div class="sheet-col" style="width:60%">
|
||
<label>Stats</label>
|
||
<label class="sheet-skilllabel">Vitality</label><input type="number" name="attr_vitality" class="sheet-number" min="0" max="20"/>
|
||
<label class="sheet-skilllabel"> Initiative</label><input type="number" class="sheet-npcskill" name="attr_npcinitiative" value="0"/>
|
||
<button type="action" class="sheet-npcroll" name="act_init_npcfix" title="NPC fixed initiative" value="3">Fixed</button>
|
||
<button type="action" class="sheet-npcroll" name="act_init_npc" title="NPC rolled initiative" value="2">Roll</button><br>
|
||
<label class="sheet-skilllabel">Conditional Max</label><input type="number" name="attr_vitality_max_vis" class="sheet-number" value="0" readonly="true"/>
|
||
<label class="sheet-skilllabel"> Defence</label><input type="number" class="sheet-npcskill" name="attr_npcdefence" value="0"/>
|
||
<button type="action" class="sheet-npcroll" name="act_def_npc" title="NPC defence" value="3">Roll</button><br>
|
||
<label class="sheet-skilllabel">Vitality Max</label><input type="number" class="sheet-number" name="attr_vitality_npc_max" title="Overrides calculated values. Should be set to 0 unless NPC" value="0"/>
|
||
<label class="sheet-skilllabel"> Protection</label><input type="number" name="attr_soakvalue" value="0" min="0" title="Protection value"/>dP
|
||
<button type="action" class="sheet-npcroll" name="act_soak" title="NPC Protection / Armour">Soak</button><br>
|
||
<button type="action" class="sheet-cbtroll" name="act_recover" title="Recovery">Recovery</button>
|
||
<br><br>
|
||
<label>Attacks</label>
|
||
<fieldset class="repeating_attacks">
|
||
<input type="text" name="attr_npcatktxt" placeholder="Attack" style="width:25%"/>
|
||
<input type="number" name="attr_npcattack" class="sheet-npcskill" value = "15" min="0" title="Attack skill"/>
|
||
<input type="number" name="attr_npcweapondmg" value="0" min="0" title="Damage dice"/>dX
|
||
<input type="text" name="attr_npcweapontags" placeholder="Tags"/>
|
||
<input type="number" name="attr_npcreloadval" title="Reload: Enter lower tag value OR use 99 for single-shot and melee weapons" value="99" min="0"/>
|
||
<button type="action" class="sheet-npcroll" name="act_atknpc" title="NPC attack">Roll</button><br>
|
||
</fieldset>
|
||
</div>
|
||
<div class="sheet-col" style="width:35%">
|
||
<label>Skills</label>
|
||
<button type="action" class="sheet-skillroll" name="act_gennpc" title="General" value="gives it a go">General</button>
|
||
<input type="number" name="attr_general" class="sheet-npcskill" value = "15" min="0"/><br>
|
||
<button type="action" class="sheet-skillroll" name="act_specnpc" title="Special" value="works a little magic">Specialist</button>
|
||
<input type="number" name="attr_special" class="sheet-npcskill" value = "15" min="0"/><br>
|
||
<fieldset class="repeating_skills">
|
||
<input type="text" class="sheet-skilllabel" name="attr_npcskilltext" placeholder="Skill"/>
|
||
<input type="number" name="attr_skillnpc" class="sheet-npcskill" value = "15" min="0"/>
|
||
<button type="action" class="sheet-npcroll" name="act_skillnpc" title="Other skills">Roll</button><br>
|
||
</fieldset><br>
|
||
<label>Tags</label>
|
||
<textarea name="attr_npctags" placeholder="Tags" style="height: 40px"></textarea>
|
||
<br>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-npc" style="padding-left: 10px;">
|
||
<br/>
|
||
<div class="sheet-3colrow">
|
||
<h3>Conditions</h3>
|
||
<div class="sheet-col" style="width:28%">
|
||
<label class="sheet-conditionlabel" title="All checks to notice something by sight automatically fail. All checks for Search and Investigation, and all Attack checks and Defence checks are at −5 pips. Many actions, like reading, are impossible. If the cause of the blindness is due to darkness, drop the Blinded Condition when light is restored. If the cause of the blindness is temporary, drop the Blinded Condition after the scene.">Blinded</label><input class="sheet-showcondition" type="checkbox" name="attr_blinded" value="1"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="All checks to notice something by hearing automatically fail. Checks for Charm, Languages, Entertainment and even Contacts and Sneak can be at −2 or −5 pips. If the cause of the deafness is a sudden loud sound, drop the Deaf Condition after the scene.">Deaf</label><input class="sheet-showcondition" type="checkbox" name="attr_deaf" value="2"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Temporarily halve your Max Vitality. If your vitality exceeds the temporary Max Vitality, your current Vitality is equal to your temporary Max Vitality. Exhausted Conditions stack. Drop one Exhausted Condition after eating, rehydrating and having a good night’s sleep.">Exhausted</label><input class="sheet-showcondition" type="checkbox" name="attr_exhausted1" value="3"/><input class="sheet-showcondition" type="checkbox" name="attr_exhausted2" value="3"/><input class="sheet-showcondition" type="checkbox" name="attr_exhausted3" value="3"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You cannot enter the same zone as the source of your fright. Attack checks are at −2 pips. Drop the Frightened Condition by making a successful Willpower task check as your main action.">Frightened</label><input class="sheet-showcondition" type="checkbox" name="attr_frightened" value="4"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="All task checks are at −2 pips. You can’t take defence actions at all. You gain 1d6 Protection. The Intoxicated Condition stacks up to three times. You don’t get a fourth Intoxicated Condition, but instead collapse and fall unconscious (counts as Out Cold). Drop one Intoxicated Condition the next morning, and then another at each six-hour interval thereafter.">Intoxicated</label><input class="sheet-showcondition" type="checkbox" name="attr_intoxicated1" value="5"/><input class="sheet-showcondition" type="checkbox" name="attr_intoxicated2" value="5"/><input class="sheet-showcondition" type="checkbox" name="attr_intoxicated3" value="5"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Take the Mortal Peril Condition instead of Vitality loss. You can only take the Mortal Peril Condition if you do not already have the Mortal Peril Condition. Flip any Attack check for the remainder of the fight. If Vitality runs out in the current fight, you die, unconditionally.">Mortal Peril</label><input class="sheet-showcondition" type="checkbox" name="attr_mortalperil" value="6"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="At the start of your turn, take 1dX Damage. If you are Out Cold at the start of your turn and still On Fire, take one Wounded Condition. You can take a Main action to try to put out the fire if you are in a zone that is not on fire. Make an Agility task check. If successful, drop the On Fire Condition. Someone else can also put out the fire in the same way on their turn. If you have a blanket or other fire-extinguishing tool, the task check is at +2 pips or more.">On Fire</label><input class="sheet-showcondition" type="checkbox" name="attr_onfire" value="7"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="When Vitality runs out, you’re Out Cold and you are no longer in the fight. Drop the Out Cold Condition at the start of the next scene if another character makes a successful Medicine task check. Drop the Condition at the start of the scene after that if the task check failed or if there was no Medicine task check.">Out Cold</label><input class="sheet-showcondition" type="checkbox" name="attr_outcold" value="8"/>
|
||
</div>
|
||
<div class="sheet-col" style="width: 28.3%">
|
||
<label class="sheet-conditionlabel" title="When Overburdened, movement and attack checks are at −2 pips. Drop the Overburdened Condition as a Free action if you can put down or drop the items that make you Overburdened. Drop the Overburdened Condition as a main action if you have to wriggle out of a harness to put down the items that make you Overburdened.">Overburdened</label><input class="sheet-showcondition" type="checkbox" name="attr_overburdened" value="9"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You can’t take any actions on your turn. At the end of your turn, make an Endurance task check. If successful, “unlock” one kind of action (Free, Move, Main or Bonus) for the rest of the scene. Depending on the reason for the paralysis, there may be a modifier on the task check. Drop the Paralysed Condition when the source of the paralysis says it should be dropped.">Paralysed</label><input class="sheet-showcondition" type="checkbox" name="attr_paralysed" value="10"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You can’t take a Move action. You can take a Sprint action, but it requires an Agility task check. Ranged Attack checks made against you from another zone are at −2 pips. Your Defence checks against melee attacks or ranged attacks from the same zone are at −2 pips. At the end of your turn, you may get up and drop the Prone Condition as a bonus action.">Prone</label><input class="sheet-showcondition" type="checkbox" name="attr_prone" value="11"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="You cannot take a Move action or Sprint action. Drop the Restrained Condition by making a successful Unarmed Melee, Strength or Agility task check as your Main action. The check is opposed if another character is holding you. If the check fails, or if you lose, you’re still Restrained.">Restrained</label><input class="sheet-showcondition" type="checkbox" name="attr_restrained" value="12"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Attack checks are at −5 pips. Sprint or Move actions that normally require a task check are also at −5 pips. Regular Sprint or Move actions now require a task check. Other task checks are at −2 pips. Unless being Stunned is the result of poison or illness, you can often use your Main action to make a Willpower task check. If successful, drop the Stunned Condition. Drop the Stunned Condition at the start of the next scene if it is still in effect.">Stunned</label><input class="sheet-showcondition" type="checkbox" name="attr_stunned" value="13"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Whenever you are surprised, caught unprepared, or otherwise not ready for action, you get the Surprised Condition. You can only take a Free action on your turn. Drop the Surprised Condition at the end of your turn.">Surprised</label><input class="sheet-showcondition" type="checkbox" name="attr_surprised" value="14"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="All checks are at −2 pips. Attack checks against the source of your terror are at −5 pips. You cannot move closer to the source of your terror. At the start of your turn, if you are in the same zone as the source of your terror, make a Willpower task check as a Free action. If it fails, you must move out of the zone before doing anything else. Replace the Terrified Condition with the Frightened Condition by making a successful Willpower task check as your Main action.">Terrified</label><input class="sheet-showcondition" type="checkbox" name="attr_terrified" value = "15" min="0"/>
|
||
<br/>
|
||
<label class="sheet-conditionlabel" title="Take the Wounded Condition instead of Vitality loss. You don’t have to take the Wounded Condition if you don’t want to. You can only take the Wounded Condition if you do not already have the Wounded Condition. Once the fight ends, all further task checks are at −2 pips until the Wounded Condition heals. Ignore the effects of the Wounded Condition for one scene if someone else makes a successful Medicine task check. Drop the Wounded Condition after a two-day recuperating scene and a successful Medicine, Credits or Contacts task check (and possibly some uncomfortable questions from the police), or by spending downtime on Mend and Recuperate.">Wounded</label><input class="sheet-showcondition" type="checkbox" name="attr_wounded" value="16"/>
|
||
</div>
|
||
<div class="sheet-col" style="width: 35%">
|
||
<label>Notes</label>
|
||
<textarea name="attr_npcnotes" placeholder="Notes" style="height: 60px"></textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-gear">
|
||
|
||
<div class="sheet-2colrow">
|
||
<div class="sheet-col" style="width: 400px; padding-left: 10px; border-right: 3px dashed #f2f2f2">
|
||
<h3>Licences for dangerous items /</h3>
|
||
<h3>Permis pour objets reglementes /</h3>
|
||
<h3>Lizenzen fur verbotene gegenstande</h3>
|
||
<hr />
|
||
<fieldset class="repeating_gearkits">
|
||
<details>
|
||
<summary><input type="text" name="attr_gearkit" placeholder="Gear kit"/>
|
||
<input type="number" name="attr_gearcost" title="Cost in Story Points" value="1">
|
||
<input type="checkbox" name="attr_signatureitem" title="Character's Signature Item?" value="1"/><input type="text" style="width: 25ch; text-align: center; border: none; background-color: #f9f9eb; font-weight: bold; margin = 0" value="Signature item | Equipped" readonly="true"/>
|
||
<input type="checkbox" name="attr_equipped" title="Tick if carried" value="1"/></summary>
|
||
<textarea name="attr_gearcontents" placeholder="Contents" style="height: 60px; width:95%"></textarea>
|
||
<textarea name="attr_geartags" placeholder="Tags" style="height: 40px; width:95%"></textarea>
|
||
</details>
|
||
</fieldset>
|
||
</div>
|
||
<div class="sheet-col" style="width: 400px">
|
||
<h3>Visa Stamps /</h3>
|
||
<h3>Visas /</h3>
|
||
<h3>Visastempel</h3>
|
||
<hr/>
|
||
<textarea name="attr_journal" placeholder="Notes"></textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-journal" style="padding-left: 10px;">
|
||
|
||
<h3>Visa Stamps / Visas / Visastempel</h3>
|
||
|
||
<textarea name="attr_journal" placeholder="Notes"></textarea>
|
||
|
||
</div>
|
||
|
||
<div class="sheet-combat">
|
||
<!--
|
||
Set the 'value' for the PAM and RATATATAT buttons to 1 and 2 respectively and 3 and 4 for the
|
||
normal attack and Whump! where the value is only used as part of the roll template.
|
||
Things seem out of order, but it allows this value to be used for the bonus damage
|
||
calculation in the Custom Roll Parsing reducing the number of values passed.
|
||
-->
|
||
<h2>Combat rolls</h2>
|
||
<button type="action" class="sheet-cbtroll" name="act_init_pc" title="Initiative" value="1">Initiative</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_defend_ranged" title="Defend with AGILITY" value="1">Take Cover!</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_defend_melee" title="Defend with MELEE" value="2">Parry!</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_recover" title="Recovery">Recovery</button>
|
||
<br />
|
||
<hr/>
|
||
|
||
<input type="text" name="attr_armour" class="sheet-short" placeholder="Armour"/>
|
||
<input type="number" name="attr_soakvalue" title="Protection value" value="0" min="0"/>dP
|
||
<input name="attr_armourtags" placeholder="Tags" style="width: 40ch"/>
|
||
<button type="action" class="sheet-cbtroll" name="act_soak" title="Soak damage" value="soak">Soak</button>
|
||
<br/>
|
||
<br/>
|
||
<input type="text" name="attr_weapon" class="sheet-short" value="Unarmed attack" readonly="true"/>
|
||
<input name="attr_unarmedskill" class="sheet-shorter" value="Melee" readonly="true"/>
|
||
<input type="number" name="attr_weapondmg" value="2" min="0" title="Damage Dice"/>dX
|
||
<input type="text" name="attr_unarmedtags" placeholder="Tags" style="width: 40ch"/>
|
||
|
||
<button type="action" class="sheet-cbtroll" name="act_attack_unarmed" title="Attack!" value="3">Attack!</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_whump_unarmed" title="Whump!" value="4">Whump!</button>
|
||
<br />
|
||
<br />
|
||
|
||
<fieldset class="repeating_attacks">
|
||
<input type="text" name="attr_weapon" class="sheet-short" placeholder="Weapon"/>
|
||
<select name="attr_weaponskill" class="sheet-shorter" style="width: 9%">
|
||
<option value="0">Skill</option>
|
||
<option value="1">Melee</option>
|
||
<option value="2">Ranged</option>
|
||
</select>
|
||
<input class="sheet-revealbuttons" type="checkbox" name="attr_weaponskill" value="1" style="display: none"/>
|
||
<input class="sheet-revealbuttons" type="checkbox" name="attr_weaponskill" value="2" style="display: none"/>
|
||
<input type="number" name="attr_weapondmg" value="0" min="0" title="Damage Dice">dX
|
||
|
||
<div class="sheet-meleebuttons">
|
||
<input type="text" name="attr_weapontags" placeholder="Tags" style="width: 40ch"/>
|
||
<button type="action" class="sheet-cbtroll" name="act_melee" title="Attack!" value="3">Attack!</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_whump" title="Whump!" value="4">Whump!</button>
|
||
</div>
|
||
|
||
<div class="sheet-rangedbuttons">
|
||
<input type="text" name="attr_weapontags" placeholder="Tags" style="width: 33ch"/>
|
||
<input type="number" name="attr_reloadval" title="Reload: Enter lower tag value OR use 99 for single-shot" value="99" min="0"/>
|
||
<button type="action" class="sheet-cbtroll" name="act_ranged" title="Attack!" value="3">Attack!</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_pam" title="Aimed Shot!" value="1">Pam!</button>
|
||
<button type="action" class="sheet-cbtroll" name="act_rat" title="Empty the magazine!" value="2">Ratatatat!</button>
|
||
</div>
|
||
</fieldset>
|
||
|
||
</div>
|
||
|
||
<footer>
|
||
<hr/>
|
||
'The Troubleshooters' logo and the coat of arms are © Helmgast and are used here with their kind permission
|
||
</footer>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-std">
|
||
<table>
|
||
<caption>{{char}} {{skill}}</caption>
|
||
<tr><td>Roll: {{roll1}} vs {{target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    Success!</td>
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! Failure</td>
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma!</td>
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes!</td>
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
</table>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-init">
|
||
<table>
|
||
<caption>{{char}} leaps into action!</caption>
|
||
{{#rollBetween() computed::type 1 2}}
|
||
<tr><td>Roll: {{roll1}} vs {{computed::target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    Success!</td>
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! Failure</td>
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma!</td>
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes!</td>
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
<tr><td>    Initiative {{computed::init}}</td>
|
||
{{/rollBetween() computed::type 1 2}}
|
||
{{#rollBetween() computed::type 3 3}}
|
||
<tr><td>    Initiative {{computed::init}}</td>
|
||
{{/rollBetween() computed::type 3 3}}
|
||
<table>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-def">
|
||
<table>
|
||
{{#rollBetween() computed::type 1 1}}
|
||
<caption>{{char}} takes cover!</caption>
|
||
{{/rollBetween() computed::type 1 1}}
|
||
{{#rollBetween() computed::type 2 2}}
|
||
<caption>{{char}} ducks and weaves!</caption>
|
||
{{/rollBetween() computed::type 2 2}}
|
||
{{#rollBetween() computed::type 3 3}}
|
||
<caption>{{char}} defends!</caption>
|
||
{{/rollBetween() computed::type 3 3}}
|
||
<tr><td>Roll: {{roll1}} vs {{computed::target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    Success!</td>
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! Failure</td>
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma!</td>
|
||
<tr><td>Make a RECOVERY roll after any damage is applied</td>
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes!</td>
|
||
<tr><td>Knocked PRONE!</td>
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
<table>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-atk">
|
||
<table>
|
||
{{#rollBetween() computed::type 1 1}}
|
||
<caption>{{char}} takes aim and...PAM!</caption>
|
||
<tr><td>Roll: {{roll1}} vs {{target}}</td>
|
||
<tr><td>  Reduce initiative score by 2</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    A hit!</td>
|
||
<tr><td>    {{computed::bonusdamage}} damage!</td>
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! A miss</td>
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma! Underlings and Mooks are OUT COLD.</td>
|
||
<tr><td>    {{computed::bonusdamage}} Damage!</td>
|
||
<tr><td>Re-roll damage if you wish.</td>
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes! your next check is at -2 pips</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Weapon jammed!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
{{/rollBetween() computed::type 1 1}}
|
||
{{#rollBetween() computed::type 2 2}}
|
||
<caption>RATATATAT! {{char}} empties their weapon at the target</caption>
|
||
<tr><td>Roll: {{roll1}} vs {{target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    A hit! Choose from:</td>
|
||
<tr><td>        {{computed::damage}} damage to all targets</td>
|
||
<tr><td>    or</td>
|
||
<tr><td>        {{computed::bonusdamage}} damage to one target</td>
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! a miss</td>
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma! Underlings and Mooks are OUT COLD.</td>
|
||
<tr><td>    Choose from:</td>
|
||
<tr><td>        {{computed::damage}} damage to all targets</td>
|
||
<tr><td>    or</td>
|
||
<tr><td>        {{computed::bonusdamage}} damage to one target</td>
|
||
<tr><td>Re-roll damage if you wish.</td>
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes! your next check is at -2 pips</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Weapon jammed!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
{{/rollBetween() computed::type 2 2}}
|
||
{{#rollBetween() computed::type 3 3}}
|
||
<caption>{{char}} attacks!</caption>
|
||
<tr><td>Roll: {{roll1}} vs {{target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    A hit!</td>
|
||
<tr><td>    {{computed::damage}} damage!</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Out of ammo!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! A miss</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Out of ammo!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma! Underlings and Mooks are OUT COLD.</td>
|
||
<tr><td>    {{computed::damage}} Damage!</td>
|
||
<tr><td>Re-roll damage if you wish.</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Out of ammo!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes! your next check is at -2 pips</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Weapon jammed!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
{{/rollBetween() computed::type 3 3}}
|
||
{{#rollBetween() computed::type 4 4}}
|
||
<caption>WHUMP! {{char}} attempts a takedown</caption>
|
||
<tr><td>Roll: {{roll1}} vs {{target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    Success! Choose two from:</td>
|
||
<tr><td>        {{computed::wdamage}} damage!</td>
|
||
<tr><td>        The target is RESTRAINED</td>
|
||
<tr><td>        The target is PRONE</td>
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! Failure</td>
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma! Underlings and Mooks are OUT COLD.</td>
|
||
<tr><td>    Choose two from:</td>
|
||
<tr><td>        {{computed::wdamage}} damage!</td>
|
||
<tr><td>        The target is RESTRAINED</td>
|
||
<tr><td>        The target is PRONE</td>
|
||
<tr><td>Re-roll damage if you wish.</td>
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes! your next check is at -2 pips</td>
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
{{/rollBetween() computed::type 4 4}}
|
||
{{#rollBetween() computed::type 5 5}}
|
||
<caption>{{char}} attacks with {{atktxt}}!</caption>
|
||
<tr><td>Roll: {{roll1}} vs {{target}}</td>
|
||
{{#rollBetween() computed::outcome 1 1}}
|
||
<tr><td>    A hit!</td>
|
||
<tr><td>    {{computed::damage}} damage!</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Out of ammo!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 1 1}}
|
||
{{#rollBetween() computed::outcome 2 2}}
|
||
<tr><td>    Zut! A miss</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Out of ammo!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 2 2}}
|
||
{{#rollBetween() computed::outcome 3 3}}
|
||
<tr><td>Good Karma! Underlings and Mooks are OUT COLD.</td>
|
||
<tr><td>    {{computed::damage}} Damage!</td>
|
||
<tr><td>Re-roll damage if you wish.</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Out of ammo!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 3 3}}
|
||
{{#rollBetween() computed::outcome 4 4}}
|
||
<tr><td>#$@$*#@! Bad Karma strikes! your next check is at -2 pips</td>
|
||
{{#rollBetween() computed::reload 1 1}}
|
||
<tr><td>    Weapon jammed!</td>
|
||
{{/rollBetween() computed::reload 1 1}}
|
||
{{/rollBetween() computed::outcome 4 4}}
|
||
{{/rollBetween() computed::type 5 5}}
|
||
<table>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-soakrecover">
|
||
<table>
|
||
<caption>{{char}}</caption>
|
||
{{#rollBetween() computed::type 1 1}}
|
||
<tr><td>Soaks {{computed::soak}} points of damage</td>
|
||
{{/rollBetween() computed::type 1 1}}
|
||
{{#rollBetween() computed::type 2 2}}
|
||
<tr><td>Recovers {{computed::recover}} points of vitality</td>
|
||
{{/rollBetween() computed::type 2 2}}
|
||
<table>
|
||
</rolltemplate>
|
||
|
||
<script type="text/worker">
|
||
|
||
//Set max Vitality based on skill values
|
||
on("change:agility change:melee change:rangedcombat change:vitality_npc_max sheet:opened", function() {
|
||
getAttrs(["agility","melee","rangedcombat","vitality_npc_max"], function(values) {
|
||
var agi = parseInt(values["agility"])||0;
|
||
var mel = parseInt(values["melee"])||0;
|
||
var rng = parseInt(values["rangedcombat"])||0;
|
||
var npc = parseInt(values["vitality_npc_max"])||0;
|
||
|
||
let agimod = 0;
|
||
if(agi > 64) agimod = 2;
|
||
else if(agi > 44) agimod = 1;
|
||
|
||
let cbtmod = 0;
|
||
if(mel > 64 || rng > 64) cbtmod = 2;
|
||
else if(mel > 44 || rng > 44) cbtmod = 1;
|
||
|
||
let mod = 4;
|
||
if (npc > 0) mod = npc;
|
||
else if(agimod == 2 && cbtmod == 2) mod = 7;
|
||
else if(agimod == 2 || cbtmod == 2) mod = 6;
|
||
else if(agimod == 1 && cbtmod == 1) mod = 5;
|
||
else if(agimod == 1 || cbtmod == 1) mod = 5;
|
||
|
||
setAttrs({
|
||
vitality_max: mod
|
||
});
|
||
});
|
||
});
|
||
|
||
//Modify max Vitality if exhausted
|
||
on("change:exhausted1 change:exhausted2 change:exhausted3 change:vitality_max sheet:opened", function() {
|
||
getAttrs(["exhausted1","exhausted2","exhausted3","vitality_max"], function(values) {
|
||
var ex1 = parseInt(values.exhausted1)||0;
|
||
var ex2 = parseInt(values.exhausted2)||0;
|
||
var ex3 = parseInt(values.exhausted3)||0;
|
||
var vmax = parseInt(values.vitality_max)||0;
|
||
|
||
let ex = ex1 + ex2 + ex3;
|
||
let newmax = vmax
|
||
if(ex == 3) newmax = Math.ceil(vmax/2);
|
||
else if(ex == 6) newmax = Math.ceil(vmax / 4);
|
||
else if(ex == 9) newmax = Math.ceil(vmax / 8);
|
||
|
||
setAttrs({
|
||
vitality_max_vis: newmax
|
||
});
|
||
});
|
||
});
|
||
|
||
//Regular skill rolls
|
||
on('clicked:skillroll clicked:gennpc clicked:specnpc', (event) => {
|
||
const rolltext = "&{template:std} {{char=@{name}}} {{skill="+event.htmlAttributes.value+"}} {{target=[[@{"+event.htmlAttributes.title+"}]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{karma=[[0]]}} {{pips=[[?{Total Pips|0}]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const total = results.results.roll1.result
|
||
const tens = Math.floor(total / 10);
|
||
const ones = total % 10;
|
||
const target = results.results.target.result;
|
||
const pips = results.results.pips.result;
|
||
const invpips = pips * -1;
|
||
var tens2 = tens
|
||
var krm = 0;
|
||
var out = 0;
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
}
|
||
else if (total <= target && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (total > target && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (total <= target) {
|
||
out = 1;
|
||
}
|
||
else if (total > target) {
|
||
out = 2;
|
||
}
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
outcome: out,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
//NPC skill rolls
|
||
on('clicked:repeating_skills:skillnpc', (event) => {
|
||
const trigger = event.triggerName.slice(8); // this always starts with 'clicked:'
|
||
const prefix = trigger.startsWith('repeating_') ? trigger.split('_').slice(0,3).join('_') + '_' : '' // prefix gets an empty string for normal attributes, and repeating_section_ID_ for repeating attributes
|
||
let txtVal = "@{npcskilltext}";
|
||
let txtPart = txtVal.replaceAll('@{', `@{${prefix}`);
|
||
let tgtVal = "@{skillnpc}";
|
||
let tgtPart = tgtVal.replaceAll('@{', `@{${prefix}`);
|
||
const rolltext = "&{template:std} {{char=@{character_name}}} {{skill= rolls to "+txtPart+"}} {{target=[["+tgtPart+"]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{pips=[[?{Total Pips|0}]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const total = results.results.roll1.result
|
||
const tens = Math.floor(total / 10);
|
||
const ones = total % 10;
|
||
const target = results.results.target.result;
|
||
const pips = results.results.pips.result;
|
||
const invpips = pips * -1;
|
||
var tens2 = tens
|
||
var krm = 0;
|
||
var out = 0;
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
}
|
||
else if (total <= target && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (total > target && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (total <= target) {
|
||
out = 1;
|
||
}
|
||
else if (total > target) {
|
||
out = 2;
|
||
}
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
outcome: out,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
|
||
//Melee combat rolls
|
||
on('clicked:attack_unarmed clicked:whump_unarmed clicked:repeating_attacks:melee clicked:repeating_attacks:whump', (event) => {
|
||
const trigger = event.triggerName.slice(8); // this always starts with 'clicked:'
|
||
const prefix = trigger.startsWith('repeating_') ? trigger.split('_').slice(0,3).join('_') + '_' : '' // prefix gets an empty string for normal attributes, and repeating_section_ID_ for repeating attributes
|
||
let dmgVal = "@{weapondmg}";
|
||
let dmgPart = dmgVal.replaceAll('@{', `@{${prefix}`);
|
||
const rolltext = "&{template:atk} {{char=@{name}}} {{target=[[@{melee}]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{pips=[[?{Total Pips|0}]]}} {{type=[["+event.htmlAttributes.value+"]]}} {{damage=[["+dmgPart+"d6!>6>4]]}} {{wdamage=[[1d6!>6>4]]}} {{reload=[[0]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const total = results.results.roll1.result;
|
||
const tens = Math.floor(total / 10);
|
||
const ones = total % 10;
|
||
const target = results.results.target.result;
|
||
const pips = results.results.pips.result;
|
||
const invpips = pips * -1;
|
||
const dmg = results.results.damage.result;
|
||
const wdmg = results.results.wdamage.result;
|
||
var tens2 = tens;
|
||
var out = 0;
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
}
|
||
else if (total <= target && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (total > target && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (total <= target) {
|
||
out = 1;
|
||
}
|
||
else if (total > target) {
|
||
out = 2;
|
||
}
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
outcome: out,
|
||
damage: dmg,
|
||
wdamage: wdmg,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
//Ranged combat rolls
|
||
on('clicked:repeating_attacks:ranged clicked:repeating_attacks:pam clicked:repeating_attacks:rat', (event) => {
|
||
const trigger = event.triggerName.slice(8); // this always starts with 'clicked:'
|
||
const prefix = trigger.startsWith('repeating_') ? trigger.split('_').slice(0,3).join('_') + '_' : '' // prefix gets an empty string for normal attributes, and repeating_section_ID_ for repeating attributes
|
||
let dmgVal = "@{weapondmg}";
|
||
let dmgPart = dmgVal.replaceAll('@{', `@{${prefix}`);
|
||
let relVal = "@{reloadval}";
|
||
let relPart = relVal.replaceAll('@{', `@{${prefix}`);
|
||
const rolltext = "&{template:atk} {{char=@{name}}} {{target=[[@{rangedcombat}]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{pips=[[?{Total Pips|0}]]}} {{type=[["+event.htmlAttributes.value+"]]}} {{damage=[["+dmgPart+"d6!>6>4]]}} {{bonusdamage=[["+event.htmlAttributes.value+"d6!>6>4]]}} {{reload=[["+relPart+"]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const total = results.results.roll1.result;
|
||
const tens = Math.floor(total / 10);
|
||
const ones = total % 10;
|
||
const target = results.results.target.result;
|
||
const pips = results.results.pips.result;
|
||
const invpips = pips * -1;
|
||
const dmg = results.results.damage.result;
|
||
var rld = results.results.reload.result;
|
||
var bonusdmg = results.results.bonusdamage.result;
|
||
var tens2 = tens;
|
||
var out = 0;
|
||
let bondmg = dmg + bonusdmg;
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (rld < 99 && rld <= ones) {
|
||
rld = 1;
|
||
}
|
||
if (ones == 0) {
|
||
rld = 1;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
}
|
||
else if (total <= target && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (total > target && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (total <= target) {
|
||
out = 1;
|
||
}
|
||
else if (total > target) {
|
||
out = 2;
|
||
}
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
outcome: out,
|
||
damage: dmg,
|
||
bonusdamage: bondmg,
|
||
reload: rld,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
//NPC combat rolls
|
||
on('clicked:repeating_attacks:atknpc', (event) => {
|
||
const trigger = event.triggerName.slice(8); // this always starts with 'clicked:'
|
||
const prefix = trigger.startsWith('repeating_') ? trigger.split('_').slice(0,3).join('_') + '_' : '' // prefix gets an empty string for normal attributes, and repeating_section_ID_ for repeating attributes
|
||
let dmgVal = "@{npcweapondmg}";
|
||
let dmgPart = dmgVal.replaceAll('@{', `@{${prefix}`);
|
||
let relVal = "@{npcreloadval}";
|
||
let relPart = relVal.replaceAll('@{', `@{${prefix}`);
|
||
let tgtVal = "@{npcattack}";
|
||
let tgtPart = tgtVal.replaceAll('@{', `@{${prefix}`);
|
||
let txtVal = "@{npcatktxt}";
|
||
let txtPart = txtVal.replaceAll('@{', `@{${prefix}`);
|
||
const rolltext = "&{template:atk} {{char=@{name}}} {{atktxt="+txtPart+"}} {{target=[["+tgtPart+"]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{pips=[[?{Total Pips|0}]]}} {{type=[[5]]}} {{damage=[["+dmgPart+"d6!>6>4]]}} {{reload=[["+relPart+"]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const total = results.results.roll1.result;
|
||
const tens = Math.floor(total / 10);
|
||
const ones = total % 10;
|
||
const target = results.results.target.result;
|
||
const pips = results.results.pips.result;
|
||
const invpips = pips * -1;
|
||
const dmg = results.results.damage.result;
|
||
var rld = results.results.reload.result;
|
||
var tens2 = tens;
|
||
var out = 0;
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (rld < 99 && (rld <= ones || ones == 0)) {
|
||
rld = 1;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
}
|
||
else if (total <= target && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (total > target && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (total <= target) {
|
||
out = 1;
|
||
}
|
||
else if (total > target) {
|
||
out = 2;
|
||
}
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
outcome: out,
|
||
damage: dmg,
|
||
reload: rld,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
//Soak and recovery rolls
|
||
on('clicked:soak', (info) => {
|
||
const rolltext = "&{template:soakrecover} {{char=@{name}}} {{soak=[[@{soakvalue}d6>4]]}} {{type=[[1]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const soaked = results.results.soak.result;
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
soak: soaked,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
on('clicked:recover', (info) => {
|
||
const rolltext = "&{template:soakrecover} {{char=@{name}}} {{recover=[[?{How many Recovery dice}d6>4]]}} {{type=[[2]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const recovered = results.results.recover.result;
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
recover: recovered,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
//Defence rolls
|
||
on('clicked:defend_ranged clicked:defend_melee clicked:def_npc', (event) => {
|
||
const rolltext = "&{template:def} {{char=@{name}}} {{targetm=[[@{melee}]]}} {{targetr=[[@{agility}]]}} {{targetn=[[@{npcdefence}]]}} {{target=[[0]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{pips=[[?{Total Pips|0}]]}} {{type=[["+event.htmlAttributes.value+"]]}}"
|
||
startRoll(rolltext, (results) => {
|
||
const total = results.results.roll1.result;
|
||
const tens = Math.floor(total / 10);
|
||
const ones = total % 10;
|
||
const tgtm = results.results.targetm.result;
|
||
const tgtr = results.results.targetr.result;
|
||
const tgtn = results.results.targetn.result;
|
||
const pips = results.results.pips.result;
|
||
const invpips = pips * -1;
|
||
const rolltype = results.results.type.result;
|
||
var tens2 = tens;
|
||
var out = 0;
|
||
var tgt = tgtm;
|
||
if (rolltype == 1) {
|
||
tgt = tgtr;
|
||
}
|
||
else if (rolltype == 3) {
|
||
tgt = tgtn;
|
||
}
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
}
|
||
else if (total <= tgt && tens2 == ones) {
|
||
out = 3;
|
||
}
|
||
else if (total > tgt && tens2 == ones) {
|
||
out = 4;
|
||
}
|
||
else if (total <= tgt) {
|
||
out = 1;
|
||
}
|
||
else if (total > tgt) {
|
||
out = 2;
|
||
}
|
||
finishRoll(
|
||
results.rollId,
|
||
{
|
||
outcome: out,
|
||
target: tgt,
|
||
}
|
||
);
|
||
});
|
||
});
|
||
|
||
//Initiative rolls
|
||
|
||
on('clicked:init_pc clicked:init_npc',async (event)=>{
|
||
const rollText = "&{template:init} {{char=@{character_name}}} {{target=[[@{alertness}]]}} {{target2=[[@{npcinitiative}]]}} {{type=[["+event.htmlAttributes.value+"]]}} {{roll1=[[1d100]]}} {{outcome=[[0]]}} {{init=[[0]]}} {{pips=[[?{Total Pips|0}]]}}"
|
||
const displayRoll = await startRoll(rollText);
|
||
const total = displayRoll.results.roll1.result
|
||
const tens = Math.floor(total / 10); //Tens
|
||
const ones = total % 10; //placeholder
|
||
const tgt1 = displayRoll.results.target.result;
|
||
const tgt2 = displayRoll.results.target2.result;
|
||
const pips = displayRoll.results.pips.result;
|
||
const invpips = pips * -1;
|
||
const rolltype = displayRoll.results.type.result;
|
||
var tens2 = tens;
|
||
var ones2 = ones;
|
||
var tgt = tgt1
|
||
var out = 0;
|
||
var ini = 0;
|
||
if (tens == 10) {
|
||
tens2 = 0;
|
||
}
|
||
if (ones == 0) {
|
||
ones2 = 10;
|
||
}
|
||
if (rolltype == 2) {
|
||
tgt = tgt2;
|
||
}
|
||
if (pips > 0 && ones > 0 && pips >= ones && tens2 == ones) {
|
||
out = 3;
|
||
ini = 10 + tens + ones2;
|
||
}
|
||
else if (pips > 0 && ones > 0 && pips >= ones) {
|
||
out = 1;
|
||
ini = tens + ones2;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones && tens2 == ones) {
|
||
out = 4;
|
||
ini = 0;
|
||
}
|
||
else if (invpips > 0 && ones > 0 && invpips >= ones) {
|
||
out = 2;
|
||
ini = ones2;
|
||
}
|
||
else if (total <= tgt && tens2 == ones) {
|
||
out = 3;
|
||
ini = 10 + tens + ones2;
|
||
}
|
||
else if (total > tgt && tens2 == ones) {
|
||
out = 4;
|
||
ini = 0;
|
||
}
|
||
else if (total <= tgt) {
|
||
out = 1;
|
||
ini = tens + ones2;
|
||
}
|
||
else if (total > tgt) {
|
||
out = 2;
|
||
ini = ones2;
|
||
}
|
||
//let trueInitiative = displayRoll.results.init.result*5.5/displayRoll.results.init.result;//some random math to demonstrate
|
||
finishRoll(
|
||
displayRoll.rollId,
|
||
{
|
||
outcome: out,
|
||
init: ini,
|
||
target: tgt,
|
||
});//Finish of the display roll so that the roll is displayed to the players
|
||
const trackerRoll = await startRoll(`![[${ini}&{tracker}]]`);//Now send the calculated roll to the tracker. Doing it as an API command by starting it with '!' will make it invisible to the players
|
||
finishRoll(trackerRoll.rollId);//finish the tracker roll immediately since we aren't going to do any manipulation of it
|
||
});
|
||
|
||
on('clicked:init_npcfix', async (event)=>{
|
||
const rollText = "&{template:init} {{char=@{character_name}}} {{init=[[@{npcinitiative}]]}} {{type=[[3]]}}"
|
||
const displayRoll = await startRoll(rollText);
|
||
const ini = displayRoll.results.init.result
|
||
//let trueInitiative = displayRoll.results.init.result*5.5/displayRoll.results.init.result;//some random math to demonstrate
|
||
finishRoll(
|
||
displayRoll.rollId,
|
||
{
|
||
init:ini,
|
||
});//Finish of the display roll so that the roll is displayed to the players
|
||
const trackerRoll = await startRoll(`![[${ini}&{tracker}]]`);//Now send the calculated roll to the tracker. Doing it as an API command by starting it with '!' will make it invisible to the players
|
||
finishRoll(trackerRoll.rollId);//finish the tracker roll immediately since we aren't going to do any manipulation of it
|
||
});
|
||
</script> |