Files
roll20-character-sheets/Dark_Heresy/DarkHeresy.html
T

1964 lines
103 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- Logo Header -->
<div class="sheet-1colrow sheet-col" style="margin-bottom:-30px; padding-right:5%; width:60%;">
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Dark_Heresy/img/logo.png"
style="max-height: 100px; margin-left:21%;">
</div>
<!-- This is the main tab set up -->
<input type="radio" class="sheet-tab sheet-tab1" name="attr_core-tab" value="1" title="Player Sheet"
checked="checked" />
<span data-i18n="player-sheet-u" class="sheet-tab sheet-tab1" style='line-height: 40px;'>Main sheet</span>
<input type="radio" class="sheet-tab sheet-tab7" name="attr_core-tab" value="2" title="Psykana" />
<span data-i18n="psykana-u" class="sheet-tab sheet-tab7" style='line-height: 40px;'>Psychic Powers</span>
<input type="checkbox" class="sheet-tab sheet-gmroll" name="attr_gmroll" value="1" title="GM Roll" />
<span data-i18n="gm" class="sheet-tab sheet-gmroll" style='line-height: 40px;'>GM roll</span>
<input type="hidden" name="attr_abilityroll" />
<br><br>
<!-- End Main Tab setup -->
<!-- Core Tab -->
<div class="sheet-section-core">
<div class="sheet-wrapper">
<!-- Base Character Information -->
<div class="sheet-1colrow sheet-col">
<div class="sheet-row">
<div class="sheet-item" style="width:14%"><label data-i18n="charactername">Character Name</label></div>
<div class="sheet-item" style="width:35%"><input name="attr_character_name" type="text"></div>
<div class="sheet-item" style="width:14%"><label data-i18n="playername">Player Name</label></div>
<div class="sheet-item" style="width:37%"><input name="attr_Player" type="text"></div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:12%"><label data-i18n="homeworld">Home World</label></div>
<div class="sheet-item" style="width:20%"><input name="attr_Homeworld" type="text"></div>
<div class="sheet-item" style="width:12%"><label data-i18n="careerpath">Career Path</label></div>
<div class="sheet-item" style="width:20%"><input name="attr_Career" type="text"></div>
<div class="sheet-item" style="width:7%"><label data-i18n="rank">Rank</label></div>
<div class="sheet-item" style="width:29%"><input name="attr_Rank" type="text"></div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:12%"><label data-i18n="divination">Divination</label></div>
<div class="sheet-item" style="width:45%"><input name="attr_Divination" type="text"></div>
<div class="sheet-item" style="width:10%"><label data-i18n="quirck">Quirk</label></div>
<div class="sheet-item" style="width:17%"><input name="attr_Quirk" type="text"></div>
<div class="sheet-item" style="width:7%"><label data-i18n="gender">Gender</label></div>
<div class="sheet-item" style="width:9%"><input name="attr_Gender" type="text"></div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:7%"><label data-i18n="build">Build</label></div>
<div class="sheet-item" style="width:14%"><input name="attr_Build" type="text"></div>
<div class="sheet-item" style="width:7%"><label data-i18n="dh-height">Height</label></div>
<div class="sheet-item" style="width:7%"><input name="attr_Height" type="text"></div>
<div class="sheet-item" style="width:7%"><label data-i18n="weight">Weight</label></div>
<div class="sheet-item" style="width:7%"><input name="attr_Weight" type="text"></div>
<div class="sheet-item" style="width:5%"><label data-i18n="age">Age</label></div>
<div class="sheet-item" style="width:7%"><input name="attr_Age" type="text"></div>
<div class="sheet-item" style="width:6%"><label data-i18n="past">Past</label></div>
<div class="sheet-item" style="width:33%"><input name="attr_Past" type="text"></div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:11%"><label data-i18n="skincolor">Skin Colour</label></div>
<div class="sheet-item" style="width:12%"><input name="attr_Skin" type="text"></div>
<div class="sheet-item" style="width:11%"><label data-i18n="haircolor">Hair Colour</label></div>
<div class="sheet-item" style="width:12%"><input name="attr_Hair" type="text"></div>
<div class="sheet-item" style="width:11%"><label data-i18n="eyecolor">Eye Colour</label></div>
<div class="sheet-item" style="width:12%"><input name="attr_Eyes" type="text"></div>
<div class="sheet-item" style="width:12%"><label data-i18n="handedness">Handedness</label></div>
<div class="sheet-item" style="width:19%"><input name="attr_Handedness" type="text"></div>
</div>
</div>
<!-- Main Sheet First Tier -->
<div class="sheet-3colrow">
<!-- Left Column -->
<div class="sheet-col sheet-skills">
<hr>
<h3 data-i18n="basicskills">Basic Skills</h3>
<table data-i18n-list="skills-list">
<tr>
<th data-i18n="skillname">Skill Name</th>
<th></th>
<th>10</th>
<th>20</th>
<th style="width:60px">B</th>
<th data-i18n="roll">Roll</th>
</tr>
<tr data-i18n-list-item="awareness">
<td data-i18n="awarenessper">Awareness (Per)</td>
<td><input name="attr_Awareness1" type="checkbox" value="0.5"></td>
<td><input name="attr_Awareness2" type="checkbox" value="10"></td>
<td><input name="attr_Awareness3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Awareness4" type="number" value="0"></td>
<td><button name="roll_Awareness" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollawareness}}} [[floor((@{Awareness}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Awareness}]]}} {{target=[[@{Awareness} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Awareness" type="number"
value="floor((@{Awareness1}+0.5)*@{Per}+@{Awareness2}+@{Awareness3}+@{Awareness4})">
</button></td>
</tr>
<tr data-i18n-list-item="barter">
<td data-i18n="barterfel">Barter (Fel)</td>
<td><input name="attr_Barter1" type="checkbox" value="0.5"></td>
<td><input name="attr_Barter2" type="checkbox" value="10"></td>
<td><input name="attr_Barter3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Barter4" type="number" value="0"></td>
<td><button name="roll_Barter" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollbarter}}} [[floor((@{Barter}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Barter}]]}} {{target=[[@{Barter} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Barter" type="number"
value="floor((@{Barter1}+0.5)*@{Fel}+@{Barter2}+@{Barter3}+@{Barter4})">
</button></td>
</tr>
<tr data-i18n-list-item="carouse">
<td data-i18n="carouset">Carouse (T)</td>
<td><input name="attr_Carouse1" type="checkbox" value="0.5"></td>
<td><input name="attr_Carouse2" type="checkbox" value="10"></td>
<td><input name="attr_Carouse3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Carouse4" type="number" value="0"></td>
<td><button name="roll_Carouse" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollcarouse}}} [[floor((@{Carouse}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Carouse}]]}} {{target=[[@{Carouse} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Carouse" type="number"
value="floor((@{Carouse1}+0.5)*@{T}+@{Carouse2}+@{Carouse3}+@{Carouse4})">
</button></td>
</tr>
<tr data-i18n-list-item="charm">
<td data-i18n="charmfel">Charm (Fel)</td>
<td><input name="attr_Charm1" type="checkbox" value="0.5"></td>
<td><input name="attr_Charm2" type="checkbox" value="10"></td>
<td><input name="attr_Charm3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Charm4" type="number" value="0"></td>
<td><button name="roll_Charm" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollcharism}}} [[floor((@{Charm}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Charm}]]}} {{target=[[@{Charm} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Charm" type="number"
value="floor((@{Charm1}+0.5)*@{Fel}+@{Charm2}+@{Charm3}+@{Charm4})">
</button></td>
</tr>
<tr data-i18n-list-item="climb">
<td data-i18n="climbs">Climb (S)</td>
<td><input name="attr_Climb1" type="checkbox" value="0.5"></td>
<td><input name="attr_Climb2" type="checkbox" value="10"></td>
<td><input name="attr_Climb3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Climb4" type="number" value="0"></td>
<td><button name="roll_Climb" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollclimb}}} [[floor((@{Climb}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Climb}]]}} {{target=[[@{Climb} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Climb" type="number"
value="floor((@{Climb1}+0.5)*@{S}+@{Climb2}+@{Climb3}+@{Climb4})">
</button></td>
</tr>
<tr data-i18n-list-item="command">
<td data-i18n="command">Command (Fel)</td>
<td><input name="attr_Command1" type="checkbox" value="0.5"></td>
<td><input name="attr_Command2" type="checkbox" value="10"></td>
<td><input name="attr_Command3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Command4" type="number" value="0"></td>
<td><button name="roll_Command" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollcommand}}} [[floor((@{Command}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Command}]]}} {{target=[[@{Command} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Command" type="number"
value="floor((@{Command1}+0.5)*@{Fel}+@{Command2}+@{Command3}+@{Command4})">
</button></td>
</tr>
<tr data-i18n-list-item="concealment">
<td data-i18n="concealmentag">Concealment (Ag)</td>
<td><input name="attr_Concealment1" type="checkbox" value="0.5"></td>
<td><input name="attr_Concealment2" type="checkbox" value="10"></td>
<td><input name="attr_Concealment3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Concealment4" type="number" value="0"></td>
<td><button name="roll_Concealment" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollconcealment}}} [[floor((@{Concealment}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Concealment}]]}} {{target=[[@{Concealment} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Concealment" type="number"
value="floor((@{Concealment1}+0.5)*@{Ag}+@{Concealment2}+@{Concealment3}+@{Concealment4})">
</button></td>
</tr>
<tr data-i18n-list-item="contortionist">
<td data-i18n="contortionistag">Contortionist (Ag)</td>
<td><input name="attr_Contortionist1" type="checkbox" value="0.5"></td>
<td><input name="attr_Contortionist2" type="checkbox" value="10"></td>
<td><input name="attr_Contortionist3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Contortionist4" type="number" value="0"></td>
<td><button name="roll_Contortionist" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollcontortionist}}} [[floor((@{Contortionist}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Contortionist}]]}} {{target=[[@{Contortionist} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Contortionist" type="number"
value="floor((@{Contortionist1}+0.5)*@{Ag}+@{Contortionist2}+@{Contortionist3}+@{Contortionist4})">
</button></td>
</tr>
<tr data-i18n-list-item="deceive">
<td data-i18n="deceivefel">Deceive (Fel)</td>
<td><input name="attr_Deceive1" type="checkbox" value="0.5"></td>
<td><input name="attr_Deceive2" type="checkbox" value="10"></td>
<td><input name="attr_Deceive3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Deceive4" type="number" value="0"></td>
<td><button name="roll_Deceive" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rolldeceive}}} [[floor((@{Deceive}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Deceive}]]}} {{target=[[@{Deceive} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Deceive" type="number"
value="floor((@{Deceive1}+0.5)*@{Fel}+@{Deceive2}+@{Deceive3}+@{Deceive4})">
</button></td>
</tr>
<tr data-i18n-list-item="disguise">
<td data-i18n="disguisefel">Disguise (Fel)</td>
<td><input name="attr_Disguise1" type="checkbox" value="0.5"></td>
<td><input name="attr_Disguise2" type="checkbox" value="10"></td>
<td><input name="attr_Disguise3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Disguise4" type="number" value="0"></td>
<td><button name="roll_Disguise" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rolldisguise}}} [[floor((@{Disguise}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Disguise}]]}} {{target=[[@{Disguise} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Disguise" type="number"
value="floor((@{Disguise1}+0.5)*@{Fel}+@{Disguise2}+@{Disguise3}+@{Disguise4})">
</button></td>
</tr>
<tr data-i18n-list-item="dodge">
<td data-i18n="dodgeag">Dodge (Ag)</td>
<td><input name="attr_Dodge1" type="checkbox" value="0.5"></td>
<td><input name="attr_Dodge2" type="checkbox" value="10"></td>
<td><input name="attr_Dodge3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Dodge4" type="number" value="0"></td>
<td><button name="roll_Dodge" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rolldodge}}} [[floor((@{Dodge}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Dodge}]]}} {{target=[[@{Dodge} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Dodge" type="number"
value="floor((@{Dodge1}+0.5)*@{Ag}+@{Dodge2}+@{Dodge3}+@{Dodge4})">
</button></td>
</tr>
<tr data-i18n-list-item="evaluate">
<td data-i18n="evaluateint">Evaluate (Int)</td>
<td><input name="attr_Evaluate1" type="checkbox" value="0.5"></td>
<td><input name="attr_Evaluate2" type="checkbox" value="10"></td>
<td><input name="attr_Evaluate3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Evaluate4" type="number" value="0"></td>
<td><button name="roll_Evaluate" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollevaluate}}} [[floor((@{Evaluate}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Evaluate}]]}} {{target=[[@{Evaluate} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Evaluate" type="number"
value="floor((@{Evaluate1}+0.5)*@{Int}+@{Evaluate2}+@{Evaluate3}+@{Evaluate4})">
</button></td>
</tr>
<tr data-i18n-list-item="gamble">
<td data-i18n="gambleint">Gamble (Int)</td>
<td><input name="attr_Gamble1" type="checkbox" value="0.5"></td>
<td><input name="attr_Gamble2" type="checkbox" value="10"></td>
<td><input name="attr_Gamble3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Gamble4" type="number" value="0"></td>
<td><button name="roll_Gamble" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollgamble}}} [[floor((@{Gamble}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Gamble}]]}} {{target=[[@{Gamble} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Gamble" type="number"
value="floor((@{Gamble1}+0.5)*@{Int}+@{Gamble2}+@{Gamble3}+@{Gamble4})">
</button></td>
</tr>
<tr data-i18n-list-item="inquiry">
<td data-i18n="inquiryfel">Inquiry (Fel)</td>
<td><input name="attr_Inquiry1" type="checkbox" value="0.5"></td>
<td><input name="attr_Inquiry2" type="checkbox" value="10"></td>
<td><input name="attr_Inquiry3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Inquiry4" type="number" value="0"></td>
<td><button name="roll_Inquiry" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollinquiry}}} [[floor((@{Inquiry}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Inquiry}]]}} {{target=[[@{Inquiry} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Inquiry" type="number"
value="floor((@{Inquiry1}+0.5)*@{Fel}+@{Inquiry2}+@{Inquiry3}+@{Inquiry4})">
</button></td>
</tr>
<tr data-i18n-list-item="intimidate">
<td data-i18n="intimidates">Intimidate (S)</td>
<td><input name="attr_Intimidate1" type="checkbox" value="0.5"></td>
<td><input name="attr_Intimidate2" type="checkbox" value="10"></td>
<td><input name="attr_Intimidate3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Intimidate4" type="number" value="0"></td>
<td><button name="roll_Intimidate" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollintimidate}}} [[floor((@{Intimidate}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Intimidate}]]}} {{target=[[@{Intimidate} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Intimidate" type="number"
value="floor((@{Intimidate1}+0.5)*@{S}+@{Intimidate2}+@{Intimidate3}+@{Intimidate4})">
</button></td>
</tr>
<tr data-i18n-list-item="logic">
<td data-i18n="logicint">Logic (Int)</td>
<td><input name="attr_Logic1" type="checkbox" value="0.5"></td>
<td><input name="attr_Logic2" type="checkbox" value="10"></td>
<td><input name="attr_Logic3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Logic4" type="number" value="0"></td>
<td><button name="roll_Logic" type="roll"
value="@{abilityroll} &{template:dh1ed} [[floor((@{Logic}+?{Modifier|0}-[[1d100]])/10)]] {{rollname=^{rolllogic}}} {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Logic}]]}} {{target=[[@{Logic} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Logic" type="number"
value="floor((@{Logic1}+0.5)*@{Int}+@{Logic2}+@{Logic3}+@{Logic4})">
</button></td>
</tr>
<tr data-i18n-list-item="scrutiny">
<td data-i18n="scrutinyper">Scrutiny (Per)</td>
<td><input name="attr_Scrutiny1" type="checkbox" value="0.5"></td>
<td><input name="attr_Scrutiny2" type="checkbox" value="10"></td>
<td><input name="attr_Scrutiny3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Scrutiny4" type="number" value="0"></td>
<td><button name="roll_Scrutiny" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollscrutiny}}} [[floor((@{Scrutiny}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Scrutiny}]]}} {{target=[[@{Scrutiny} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Scrutiny" type="number"
value="floor((@{Scrutiny1}+0.5)*@{Per}+@{Scrutiny2}+@{Scrutiny3}+@{Scrutiny4})">
</button></td>
</tr>
<tr data-i18n-list-item="search">
<td data-i18n="searchper">Search (Per)</td>
<td><input name="attr_Search1" type="checkbox" value="0.5"></td>
<td><input name="attr_Search2" type="checkbox" value="10"></td>
<td><input name="attr_Search3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Search4" type="number" value="0"></td>
<td><button name="roll_Search" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollsearch}}} [[floor((@{Search}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Search}]]}} {{target=[[@{Search} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Search" type="number"
value="floor((@{Search1}+0.5)*@{Per}+@{Search2}+@{Search3}+@{Search4})">
</button></td>
</tr>
<tr data-i18n-list-item="silentmove">
<td data-i18n="silentmoveag">Silent Move (Ag)</td>
<td><input name="attr_SilentMove1" type="checkbox" value="0.5"></td>
<td><input name="attr_SilentMove2" type="checkbox" value="10"></td>
<td><input name="attr_SilentMove3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_SilentMove4" type="number" value="0"></td>
<td><button name="roll_SilentMove" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollsilentmove}}} [[floor((@{SilentMove}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{SilentMove}]]}} {{target=[[@{SilentMove} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_SilentMove" type="number"
value="floor((@{SilentMove1}+0.5)*@{Ag}+@{SilentMove2}+@{SilentMove3}+@{SilentMove4})">
</button></td>
</tr>
<tr data-i18n-list-item="swim">
<td data-i18n="swims">Swim (S)</td>
<td><input name="attr_Swim1" type="checkbox" value="0.5"></td>
<td><input name="attr_Swim2" type="checkbox" value="10"></td>
<td><input name="attr_Swim3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_Swim4" type="number" value="0"></td>
<td><button name="roll_Swim" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollswim}}} [[floor((@{Swim}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{Swim}]]}} {{target=[[@{Swim} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_Swim" type="number"
value="floor((@{Swim1}+0.5)*@{S}+@{Swim2}+@{Swim3}+@{Swim4})">
</button></td>
</tr>
</table>
<h3 data-i18n="weapontrainings">Weapon Trainings</h3>
<fieldset class="repeating_weapontalents">
<div class="sheet-row">
<div class="sheet-item sheet-tiny" style="width:25%;">
<input name="attr_weapontrainingclass" type="text" style="text-align: right;">
</div>
<div class="sheet-item sheet-large">
<label data-i18n="weapontraining">Weapon Training</label>
</div>
<div class="sheet-item sheet-big sheet-brackets">
<input name="attr_weapontraining" type="text" style="text-align: center;">
</div>
</div>
</fieldset>
<h3 data-i18n="talentsandntraits">Talents & Traits</h3>
<fieldset class="repeating_talents">
<input name="attr_reptalent" type="text">
</fieldset>
</div>
<!-- Mid Column / Characteristics -->
<div class="sheet-col sheet-characteristics">
<h3 data-i18n="characteristics">Characteristics</h3>
<button name="roll_WS" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollws}}} [[floor((@{WS}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{WS}}} {{target=[[@{WS} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="weaponskillws">Weapon Skill (WS)</label></button>
<input name="attr_WS" type="text" value="0">
<button name="roll_BS" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollbs}}} [[floor((@{BS}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{BS}}} {{target=[[@{BS} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="ballisticskillbs">Ballistic Skill (BS)</label></button>
<input name="attr_BS" type="text" value="0">
<button name="roll_S" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rolls}}} [[floor((@{S}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{S}}} {{target=[[@{S} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="strengths">Strength (S)</label></button>
<input name="attr_S" type="text" value="0">
<button name="roll_T" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollt}}} [[floor((@{T}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{T}}} {{target=[[@{T} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="toughnesst">Toughness (T)</label></button>
<input name="attr_T" type="text" value="0">
<button name="roll_Ag" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollag}}} [[floor((@{Ag}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{Ag}}} {{target=[[@{Ag} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="agilityag">Agility (Ag)</label></button>
<input name="attr_Ag" type="text" value="0">
<button name="roll_Int" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollint}}} [[floor((@{Int}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{Int}}} {{target=[[@{Int} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="intelligenceint">Intelligence (Int)</label></button>
<input name="attr_Int" type="text" value="0">
<button name="roll_Per" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollper}}} [[floor((@{Per}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{Per}}} {{target=[[@{Per} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="perceptionper">Perception (Per)</label></button>
<input name="attr_Per" type="text" value="0">
<button name="roll_Wp" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollwp}}} [[floor((@{Wp}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{Wp}}} {{target=[[@{Wp} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="willpowerwp">Willpower (Wp)</label></button>
<input name="attr_Wp" type="text" value="0">
<button name="roll_Fel" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollfel}}} [[floor((@{Fel}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{Fel}}} {{target=[[@{Fel} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<label data-i18n="fellowshi`fel">Fellowship (Fel)</label></button>
<input name="attr_Fel" type="text" value="0">
</div>
<!-- Right Column -->
<div class="sheet-col sheet-skills">
<hr>
<h3 data-i18n="advancedskills">Advanced Skills</h3>
<table>
<tr>
<th data-i18n="skillname">Skill Name</th>
<th></th>
<th>10</th>
<th>20</th>
<th style="width:60px">B</th>
<th data-i18n="roll">Roll</th>
</tr>
<tr>
<td data-i18n="speaklanguagelowgothic">Speak Language (Low Gothic)</td>
<td><input name="attr_speaklow1" type="checkbox" value="0.5"></td>
<td><input name="attr_speaklow2" type="checkbox" value="10"></td>
<td><input name="attr_speaklow3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_speaklow4" type="number" value="0"></td>
<td><button name="roll_speaklow" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollspeaklow}}} [[floor((@{speaklow}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{speaklow}]]}} {{target=[[@{speaklow} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_speaklow" type="number"
value="floor((@{speaklow1}+0.5)*@{Int}+@{speaklow2}+@{speaklow3}+@{speaklow4})">
</button></td>
</tr>
</table>
<fieldset class="repeating_advancedskills">
<table>
<tr>
<td>
<div class="sheet-row">
<div class="sheet-item sheet-bigger">
<input class="sheet-baseinfo" name="attr_advancedskillname" type="text">
</div>
<div class="sheet-item sheet-med">
<select class="charaselect" name="attr_advancedskillcharacteristic">
<option value="@{S}" data-i18n="(s)">(S)</option>
<option value="@{T}" data-i18n="(t)">(T)</option>
<option value="@{Ag}" data-i18n="(ag)">(Ag)</option>
<option value="@{Int}" data-i18n="(int)">(Int)</option>
<option value="@{Per}" data-i18n="(per)">(Per)</option>
<option value="@{Wp}" data-i18n="(wp)">(Wp)</option>
<option value="@{Fel}" data-i18n="(fel)">(Fel)</option>
</select>
</div>
</div>
</td>
<td><input name="attr_advancedskillbox1" type="checkbox" value="0.5"></td>
<td><input name="attr_advancedskillbox2" type="checkbox" value="10"></td>
<td><input name="attr_advancedskillbox3" type="checkbox" value="10"></td>
<td style="width:60px"><input name="attr_advancedskillbox4" type="number" value="0"></td>
<td><button name="roll_advanceskill" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{advancedskillname}}} [[floor((@{advancedskill}+?{Modifier|0}-[[1d100]])/10)]] {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=[[@{advancedskill}]]}} {{target=[[@{advancedskill} + ?{Modifier|0}]]}} {{modifier=?{Modifier|0}}} {{diceroll=$[[0]]}}">
<input disabled name="attr_advancedskill" type="number"
value="floor((@{advancedskillbox1}+0.5)*@{advancedskillcharacteristic}+@{advancedskillbox2}+@{advancedskillbox3}+@{advancedskillbox4})">
</button></td>
</tr>
</table>
</fieldset>
<hr>
<!-- ATTENTION PSYKERS AHEAD! -->
<h3 data-i18n="psychicpowers">Psychic Powers</h3>
<div class="sheet-row">
<div class="sheet-item" style="width:37.5%">
<label data-i18n="psychicdiscipline">Psychic Discipline</label>
</div>
<div class="sheet-item sheet-morebig">
<input name="attr_psychicdiscipline" type="text">
</div>
<div class="sheet-item sheet-puny">
<button name="roll_psycicpower" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{psychicdiscipline}}} {{psy=[[((?{Psy Rating|1}d10cs9cf11)+[[floor(@{wp}/10)]]+?{Modifier|0})]]}}"><label>Psy</label></button>
</div>
</div>
<fieldset class="repeating_psychicdiscipline">
<div class="sheet-row">
<div class="sheet-item" style="width:37.5%">
<label data-i18n="psychicdiscipline">Psychic Discipline</label>
</div>
<div class="sheet-item sheet-morebig">
<input name="attr_reppsychicdiscipline" type="text">
</div>
<div class="sheet-item sheet-puny">
<button name="roll_reppsycicpower" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{reppsychicdiscipline}}} {{psy=[[((?{Psy Rating|1}d10cs9cf11)+[[floor(@{wp}/10)]]+?{Modifier|0})]]}}"><label>Psy</label></button>
</div>
</div>
</fieldset><!-- Minor Powers -->
<fieldset class="repeating_minorpsychicpowers">
<div class="sheet-row">
<div class="sheet-item sheet-large">
<label data-i18n="minorpower">Minor Power</label>
</div>
<div class="sheet-item sheet-morebig sheet-brackets">
<input name="attr_repminorpsychicpower" type="text">
</div>
<div class="sheet-item sheet-puny">
<button name="roll_repminorpower" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{repminorpsychicpower}}} {{threshold=[[?{Threshold|7}]]}} {{psy=[[((?{Psy Rating|1}d10cs9cf11)+[[floor(@{wp}/10)]]+?{Modifier|0})]]}}"><label>Psy</label></button>
</div>
</div>
</fieldset><!-- Discipline Powers -->
<fieldset class="repeating_disciplinepsychicpowers">
<div class="sheet-row">
<div class="sheet-item sheet-large">
<label data-i18n="disciplinepower">Discipline Power</label>
</div>
<div class="sheet-item sheet-morebig sheet-brackets">
<input name="attr_repdisciplinepsychicpower" type="text">
</div>
<div class="sheet-item sheet-puny">
<button name="roll_repdisciplinepower" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{repdisciplinepsychicpower}}} {{threshold=[[?{Threshold|7}]]}} {{psy=[[((?{Psy Rating|1}d10cs9cf11)+[[floor(@{wp}/10)]]+?{Modifier|0})]]}}"><label>Psy</label></button>
</div>
</div>
</fieldset>
<!-- Mutations anyone? -->
<h3 data-i18n="mutations">Mutations</h3>
<textarea name="attr_mutations" style="width:95%; margin:auto; height:75px;">
</textarea>
<h3 data-i18n="talentsandtraits">Talents & Traits</h3>
<fieldset class="repeating_talents2">
<input name="attr_reptalent2" type="text">
</fieldset>
</div>
</div>
<!-- Page 2 -->
<div class="sheet-2colrow">
<div class="sheet-col">
<h3 data-i18n="meleeweapons">Melee Weapons</h3>
<fieldset class="repeating_meleeweapons">
<div class="sheet-quickborder">
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="name:">Name:</label>
</div>
<div class="sheet-item" style="width:55%">
<input name="attr_meleeweaponname" type="text">
</div>
<div class="sheet-item" style="width:12%">
<label data-i18n="class:">Class:</label>
</div>
<div class="sheet-item" style="width:19%">
<input name="attr_meleeweaponclass" type="text">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="damage:">Damage:</label>
</div>
<div class="sheet-item" style="width:20%">
<input name="attr_meleeweapondamage" type="text">
</div>
<div class="sheet-item" style="width:12%">
<label data-i18n="type:">Type:</label>
</div>
<div class="sheet-item" style="width:18%">
<input name="attr_meleeweapontype" type="text">
</div>
<div class="sheet-item" style="width:10%">
<label data-i18n="pen:">Pen:</label>
</div>
<div class="sheet-item" style="width:10%">
<input name="attr_meleeweaponpen" type="number" value="0">
</div>
<div class="sheet-item" style="width:10%; float: right;">
<button name="roll_meleehit" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{meleeweaponname} ^{tohit}}} [[floor((@{WS} ?{Aim | Half aim (+10),+10| No aim (+0),+0 | Full aim (+20),+20} ?{Attack Type | Standard (+0),+0 | Charge (+10),+10 | All out (+20),+20 | Lighting (-10),-10} + ?{Modifier|0}-[[1d100]])/10)]] {{weapondiceroll=$[[0]]}} {{roll=$[[1]]}} {{hit=$[[0]]}} {{skill=@{WS}}} {{target=[[@{WS} ?{Aim | } ?{Attack Type | } + ?{Modifier|0}]]}} {{aim=?{Aim | }}} {{attacktype=?{Attack Type | }}} {{modifier=?{Modifier|0}}}">
<label data-i18n="hit">Hit</label>
</button>
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="special:">Special:</label>
</div>
<div class="sheet-item" style="width:70%">
<input name="attr_meleeweaponspecial" type="text">
</div>
<div class="sheet-item" style="width:16%; float: right;">
<button name="roll_meleedamage" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{meleeweaponname} ^{damage}}} {{damage=[[@{meleeweapondamage}+(floor(@{s}/10))]] (Pen: @{meleeweaponpen})}} {{damagetype=@{meleeweapontype}}} {{special=@{meleeweaponspecial}}}">
<label data-i18n="damage">Damage</label>
</button>
</div>
</div>
</div>
</fieldset>
<!-- Movement -->
<h3 data-i18n="movement">Movement</h3>
<div class="sheet-row">
<div class="sheet-item" style="width:20%">
<label data-i18n="halfmove:">Half Move: </label>
</div>
<div class="sheet-item" style="width:8%">
<input disabled name="attr_halfspeed" type="number" value="floor(@{ag}/10)">
</div>
<div class="sheet-item" style="width:20%">
<label data-i18n="fullmove:">Full Move: </label>
</div>
<div class="sheet-item" style="width:8%">
<input disabled name="attr_fullspeed" type="number" value="2*(floor(@{ag}/10))">
</div>
<div class="sheet-item" style="width:16%">
<label data-i18n="charge:">Charge: </label>
</div>
<div class="sheet-item" style="width:8%">
<input disabled name="attr_chargespeed" type="number" value="3*(floor(@{ag}/10))">
</div>
<div class="sheet-item" style="width:10%">
<label data-i18n="run:">Run: </label>
</div>
<div class="sheet-item" style="width:8%">
<input disabled name="attr_runspeed" type="number" value="6*(floor(@{ag}/10))">
</div>
</div>
<br>
<!-- Initiative -->
<h3 data-i18n="initiative">Initiative</h3>
<div class="sheet-row">
<div class="sheet-item" style="width: 15%">
</div>
<div class="sheet-item sheet-redbgns" style="width: 20%">
<button name="roll_Initiative" title="Select your token first!" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollinitiative}}} {{initiative=[[1d10+floor(@{selected|ag}/10)&{tracker}]]}}."
class="btn ui-draggable"><label data-i18n="fromag">From Ag</label></button>
</div>
<div class="sheet-item" style="width: 15%">
</div>
<div class="sheet-item" style="width: 30%">
<input name="attr_CInitiativeInput" type="text" value="1d10">
</div>
<div class="sheet-item" style="width: 20%">
<button name="roll_CInitiative" title="Select your token first!" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=^{rollinitiative}}} {{initiative=[[@{selected|CInitiativeInput}&{tracker}]]}}."
class="btn ui-draggable"><label data-i18n="cust">Custom</label></button>
</div>
</div>
<br>
<!-- Armor! -->
<h3 data-i18n="armor">Armour</h3>
<div class="sheet-armourblock"></div>
<div class="sheet-quickborder sheet-armourblock">
<label data-i18n="head">Head</label> <input name="attr_Headarmourvalue" type="text"> <label>(1-10)
Type</label> <input name="attr_Headarmourtype" type="text">
</div><br>
<div class="sheet-quickborder sheet-armourblock">
<label data-i18n="leftarm">Left Arm</label> <input name="attr_LeftArmarmourvalue" type="text">
<label>(21-30) Type</label> <input name="attr_LeftArmarmourtype" type="text">
</div>
<div class="sheet-quickborder sheet-armourblock">
<label data-i18n="body">Body</label> <input name="attr_Bodyarmourvalue" type="text"> <label>(31-70)
Type</label> <input name="attr_Bodyarmourtype" type="text">
</div>
<div class="sheet-quickborder sheet-armourblock">
<label data-i18n="rightarm">Right Arm</label> <input name="attr_RightArmarmourvalue" type="text">
<label>(11-20) Type</label> <input name="attr_RightArmarmourtype" type="text">
</div>
<div class="sheet-quickborder sheet-armourblock" style="margin: 20px auto auto 11%;">
<label data-i18n="leftleg">Left Leg</label> <input name="attr_LeftLegarmourvalue" type="text">
<label>(71-85) Type</label> <input name="attr_LeftLegarmourtype" type="text">
</div>
<div class="sheet-quickborder sheet-armourblock" style="margin: 20px auto auto 11%;">
<label data-i18n="rightleg">Right Leg</label> <input name="attr_RightLegarmourvalue" type="text">
<label>(86-00) Type</label> <input name="attr_RightLegarmourtype" type="text">
</div>
</div>
<!-- Right Side -->
<div class="sheet-col">
<h3 data-i18n="rangedweapons">Ranged Weapons</h3>
<fieldset class="repeating_rangedweapons">
<div class="sheet-quickborder">
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="name:">Name:</label>
</div>
<div class="sheet-item" style="width:55%">
<input name="attr_rangedweaponname" type="text">
</div>
<div class="sheet-item" style="width:12%">
<label data-i18n="class:">Class:</label>
</div>
<div class="sheet-item" style="width:15%">
<input name="attr_rangedweaponclass" type="text">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="range:">Range:</label>
</div>
<div class="sheet-item" style="width:5%">
<label data-i18n="range_pb:">PB:</label>
</div>
<div class="sheet-item sheet-rangehover" style="width:10%">
<input name="attr_range_pb" type="number" value="3m">
</div>
<div class="sheet-item" style="width:5%">
<label data-i18n="range_n:">S:</label>
</div>
<div class="sheet-item sheet-rangehover" style="width:10%">
<input name="attr_range_n" type="number" placeholder="R/2">
</div>
<div class="sheet-item" style="width:5%">
<label data-i18n="range_m:">M:</label>
</div>
<div class="sheet-item sheet-rangehover" style="width:10%">
<input name="attr_range_m" type="number" placeholder="R*2">
</div>
<div class="sheet-item" style="width:5%">
<label data-i18n="range_f:">L:</label>
</div>
<div class="sheet-item sheet-rangehover" style="width:10%">
<input name="attr_range_f" type="number" placeholder="R*3">
</div>
<div class="sheet-item" style="width:5%">
<label data-i18n="range_e:">E:</label>
</div>
<div class="sheet-item sheet-rangehover" style="width:10%">
<input name="attr_range_e" type="number" placeholder="R*4">
</div>
<div class="sheet-rangehide" data-i18n="range_description:">The input fields always show the maximum value for the distance category and the minimum value is always the previous category +1</div>
<div class="sheet-item" style="width: 10%; float: right;">
<button name="roll_rangedhit" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{rangedweaponname} ^{tohit}}} [[floor((@{BS} ?{Aim | Half aim (+10),+10| No aim (+0),+0 | Full aim (+20),+20} ?{Range | Point Blank (+30),+30 | Short (+10),+10 | Middle (+0),+0 | Long (-10),-10 | Extreme (-30),-30} ?{Rate of Fire/Attack Type | Standard (+0),+0 | Semi auto (+10),+10 | Full Auto (+20),+20 | Called Shot (-20),-20 | Suppressing Fire (-20),-20} + ?{Modifier|0}-[[1d100]])/10)]] {{weapondiceroll=$[[0]]}} {{roll=$[[1]]}} {{hit=$[[0]]}} {{reliable=[[1d10]]}} {{skill=@{BS}}} {{target=[[@{BS} ?{Aim | } ?{Range | } ?{Rate of Fire/Attack Type | } + ?{Modifier|0}]]}} {{aim=?{Aim | }}} {{range=?{Range | }}} {{attacktype=?{Rate of Fire/Attack Type | }}} {{modifier=?{Modifier|0}}}">
<label data-i18n="hit">Hit</label>
</button>
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="damage:">Damage:</label>
</div>
<div class="sheet-item" style="width:19%">
<input name="attr_rangedweapondamage" type="text">
</div>
<div class="sheet-item" style="width:10%">
<label data-i18n="type:">Type:</label>
</div>
<div class="sheet-item" style="width:20%">
<input name="attr_rangedweapontype" type="text">
</div>
<div class="sheet-item" style="width:9%">
<label data-i18n="pen:">Pen:</label>
</div>
<div class="sheet-item" style="width:7%">
<input name="attr_rangedweaponpen" type="number" value="0">
</div>
<div class="sheet-item" style="width: 16%; float: right;">
<button name="roll_rangeddamage" type="roll"
value="@{abilityroll} &{template:dh1ed} {{rollname=@{rangedweaponname} ^{damage}}} {{damage=[[@{rangedweapondamage}]] (Pen: @{rangedweaponpen})}} {{damagetype=@{rangedweapontype}}} {{special=@{rangedweaponspecial}}}">
<label data-i18n="damage">Damage</label>
</button>
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="rof:">RoF:</label>
</div>
<div class="sheet-item" style="width:6%">
<input name="attr_rangedweaponsingle" type="number" value="0">
</div>
<div class="sheet-item" style="width:2%">
<label>/</label>
</div>
<div class="sheet-item" style="width:6%">
<input name="attr_rangedweaponsemi" type="number" value="0">
</div>
<div class="sheet-item" style="width:2%">
<label>/</label>
</div>
<div class="sheet-item" style="width:6%">
<input name="attr_rangedweaponfull" type="number" value="0">
</div>
<div class="sheet-item" style="width:9%">
<label data-i18n="clip:">Clip:</label>
</div>
<div class="sheet-item" style="width:10%">
<input name="attr_rangedweaponclipcurrent" type="number" value="0">
</div>
<div class="sheet-item" style="width:2%">
<label>/</label>
</div>
<div class="sheet-item" style="width:10%">
<input name="attr_rangedweaponclipfull" type="number" value="0">
</div>
<div class="sheet-item" style="width:8%">
<label data-i18n="reload:">Reload:</label>
</div>
<div class="sheet-item" style="width:20%">
<input name="attr_rangedweaponreload" type="text">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:15%">
<label data-i18n="special:">Special:</label>
</div>
<div class="sheet-item" style="width:75%">
<input name="attr_rangedweaponspecial" type="text">
</div>
</div>
</div>
</fieldset>
<h3 data-i18n="gear">Gear</h3>
<fieldset class="repeating_gear">
<input name="attr_repgear" type="text">
</fieldset>
<!-- Wealth -->
<div class="sheet-row">
<div class="sheet-item" style="width:25%">
<label data-i18n="thronegelt:">Throne Gelt: </label>
</div>
<div class="sheet-item" style="width:25%">
<input name="attr_ThroneGelt" type="number">
</div>
<div class="sheet-item sheet-puny"></div>
<div class="sheet-item" style="width:20%">
<label data-i18n="income:">Income: </label>
</div>
<div class="sheet-item" style="width:20%">
<input name="attr_Income" type="number">
</div>
</div>
</div>
</div>
<hr>
<!-- Footer Stuff -->
<div class="4colrow">
<div class="sheet-col sheet-wounds" style="width:15%">
<h3 data-i18n="wounds">Wounds</h3>
<div class="sheet-row">
<div class="sheet-item" style="width:60%">
<label data-i18n="total:">Total:</label>
</div>
<div class="sheet-item" style="width:40%">
<input name="attr_Wounds_max" type="number">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:60%">
<label data-i18n="current:">Current:</label>
</div>
<div class="sheet-item" style="width:40%">
<input name="attr_Wounds" type="number">
</div>
</div>
</div>
<div class="sheet-col sheet-fate" style="width:15%">
<h3 data-i18n="fatepoints">Fate Points</h3>
<div class="sheet-row">
<div class="sheet-item" style="width:60%">
<label data-i18n="total:">Total:</label>
</div>
<div class="sheet-item" style="width:40%">
<input name="attr_Fate_max" type="number">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:60%">
<label data-i18n="current:">Current:</label>
</div>
<div class="sheet-item" style="width:40%">
<input name="attr_Fate" type="number">
</div>
</div>
</div>
<div class="sheet-col sheet-insanity" style="width:34%">
<h3 data-i18n="insanity">Insanity</h3>
<div class="sheet-row">
<div class="sheet-item sheet-puny"></div>
<div class="sheet-item" style="width:55%">
<label data-i18n="insanitypoints:">Insanity Points:</label>
</div>
<div class="sheet-item" style="width:35%">
<input name="attr_Insanitypoints" type="number">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item sheet-puny"></div>
<div class="sheet-item" style="width:55%">
<label data-i18n="degreeofmadness:">Degree of Madness:</label>
</div>
<div class="sheet-item" style="width:35%">
<input name="attr_Insanitydegree" type="text">
</div>
</div>
<div class="sheet-row">
<textarea name="attr_Disorders" placeholder="Disorders"
style="width:95%; margin:auto; height:75px;">
</textarea>
</div>
<div class="sheet-row"></div>
</div>
<div class="sheet-col sheet-corruption" style="width:34%">
<h3 data-i18n="corruption">Corruption</h3>
<div class="sheet-row">
<div class="sheet-item sheet-puny"></div>
<div class="sheet-item" style="width:55%">
<label data-i18n="corruptionpoints:">Corruption Points:</label>
</div>
<div class="sheet-item" style="width:35%">
<input name="attr_Corruptionpoints" type="number">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item sheet-puny"></div>
<div class="sheet-item" style="width:55%">
<label data-i18n="degreeofcorruption:">Degree of Corruption:</label>
</div>
<div class="sheet-item" style="width:35%">
<input name="attr_Corruptionydegree" type="text">
</div>
</div>
<div class="sheet-row">
<textarea name="attr_Malignancies" placeholder="Malignancies"
style="width:95%; margin:auto; height:75px;">
</textarea>
</div>
<div class="sheet-row"></div>
</div>
</div>
<hr>
<!-- XP -->
<div class="1colrow colrow">
<h3 data-i18n="experiencepoints">Experience Points</h3>
<div class="sheet-row">
<div class="sheet-item" style="width:12%">
<label data-i18n="xptospend">XP to Spend:</label>
</div>
<div class="sheet-item" style="width:22%">
<input disabled name="attr_XPtoSpend" type="number" value="@{XPTotal} - @{XPSpent}">
</div>
<div class="sheet-item" style="width:1%"></div>
<div class="sheet-item" style="width:10%">
<label data-i18n="totalxpspent">Total Spent:</label>
</div>
<div class="sheet-item" style="width:24%">
<input name="attr_XPSpent" type="number" value="0" readonly>
</div>
<div class="sheet-item" style="width:1%"></div>
<div class="sheet-item" style="width:5%">
<label data-i18n="totalxp">Total:</label>
</div>
<div class="sheet-item" style="width:25%">
<input name="attr_XPTotal" type="number" value="0">
</div>
<label data-i18n="advancementtaken:">Advancements Taken:</label>
<fieldset class="repeating_advancements">
<div class="sheet-row">
<div class="sheet-item" style="width:26%;">
<input name="attr_advancement1" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement1xp" type="text">
</div>
<div class="sheet-item" style="width:26%;">
<input name="attr_advancement2" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement2xp" type="text">
</div>
<div class="sheet-item" style="width:26%;">
<input name="attr_advancement3" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement3xp" type="text">
</div>
</div>
</fieldset>
<hr>
<h3 data-i18n="othernotes:">Other Notes:</h3>
<textarea name="attr_othernotes">
</textarea>
</div><!-- Charsheet End -->
</div>
</div>
</div>
<div class="sheet-section-psykana sheet-watermark">
<!-- Psykana Tab Tab -->
<!-- This section contains Psychic Powers, Focus Power Rolls, and other Psyker Specific characteristics -->
<div class="sheet-wrapper">
<br>
<h3 data-i18n="psychic-powers-u">Psychic Powers</h3>
<img src="http://i.imgur.com/TKfHnQ9.png"><!-- Divider -->
<div class="sheet-2colrow">
<!-- Psychic Powers Left Column -->
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-item" style="width: 20%;"><span data-i18n="psy-rating-u">Psy Rating:</span></div>
<div class="sheet-item" style="width: 80%;"><input name="attr_PsyRating" type="number"
placeholder="0" /></div>
</div>
<!-- Psychic Powers Left Column, repeating field -->
<fieldset class="repeating_PsyPowers1">
<div class="sheet-quickborder">
<div class="sheet-row">
<div class="sheet-item" style="width: 10%;"><span data-i18n="name-u">Name:</span></div>
<div class="sheet-item" style="width: 40%;"><input name="attr_PsyName1" type="text" /></div>
<div class="sheet-item" style="width: 25%;"><span data-i18n="action-u">Focus:</span></div>
<div class="sheet-item" style="width: 25%;"><input name="attr_PsyAction1" type="text" />
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 20%;"><span
data-i18n="focus-power-u">Threshold:</span></div>
<div class="sheet-item" style="width: 20%;"><input name="attr_PsyFocusPower1" type="text" />
</div>
<div class="sheet-item" style="width: 25%;;"><span data-i18n="subtype-u">Subtype:</span>
</div>
<div class="sheet-item" style="width: 35%;"><input name="attr_PsySubtype1" type="text" />
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 15%;"><span data-i18n="range-u">Range:</span></div>
<div class="sheet-item" style="width: 10%;"><input name="attr_PsyRange1" type="text" />
</div>
<div class="sheet-item" style="width: 28%;;"><span data-i18n="sustained-u">Sustained:</span>
</div>
<div class="sheet-item" style="width: 15%;"><input name="attr_PsySustained1" type="text" />
</div>
<div class="sheet-item" style="width: 22%;"><span data-i18n="damage-type-u">Damage
Type:</span></div>
<div class="sheet-item" style="width: 10%;">
<select class="attr_PsyDamageType1">
<option selected data-i18n="e-u">E</option>
<option data-i18n="i-u">I</option>
<option data-i18n="r-u">P</option>
<option data-i18n="e-u">E</option>
</select>
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 20%;"><span data-i18n="damage-u">Damage:</span></div>
<div class="sheet-item" style="width: 30%;"><input name="attr_PsyDamage1" type="text" />
</div>
<div class="sheet-item" style="width: 20%;"><span data-i18n="penetration-u">Pen:</span>
</div>
<div class="sheet-item" style="width: 30%;"><input name="attr_PsyPen1" type="text" /></div>
</div>
<div><textarea name="attr_PsyPowersEffect1"></textarea></div>
</div>
</fieldset>
</div>
<!-- Break between Left and Right Secondary Columns -->
<!-- Psychic Powers Right Column -->
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-item" style="width: 20%;"><span data-i18n="sustaining-u">Sustaining:</span></div>
<div class="sheet-item" style="width: 80%;"><input name="attr_Sustaining" type="number"
placeholder="-4/-8/-16" /></div>
</div>
<!-- Psychic Powers Right Column, repeating field -->
<fieldset class="repeating_PsyPowers2">
<div class="sheet-quickborder">
<div class="sheet-row">
<div class="sheet-item" style="width: 10%;"><span data-i18n="name-u">Name:</span></div>
<div class="sheet-item" style="width: 40%;"><input name="attr_PsyName2" type="text" /></div>
<div class="sheet-item" style="width: 25%;"><span data-i18n="action-u">Focus:</span></div>
<div class="sheet-item" style="width: 25%;"><input name="attr_PsyAction2" type="text" />
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 20%;"><span
data-i18n="focus-power-u">Threshold:</span></div>
<div class="sheet-item" style="width: 20%;"><input name="attr_PsyFocusPower2" type="text" />
</div>
<div class="sheet-item" style="width: 25%;;"><span data-i18n="subtype-u">Subtype:</span>
</div>
<div class="sheet-item" style="width: 35%;"><input name="attr_PsySubtype2" type="text" />
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 15%;"><span data-i18n="range-u">Range:</span></div>
<div class="sheet-item" style="width: 10%;"><input name="attr_PsyRange2" type="text" />
</div>
<div class="sheet-item" style="width: 28%;;"><span data-i18n="sustained-u">Sustained:</span>
</div>
<div class="sheet-item" style="width: 15%;"><input name="attr_PsySustained2" type="text" />
</div>
<div class="sheet-item" style="width: 22%;"><span data-i18n="damage-type-u">Damage
Type:</span></div>
<div class="sheet-item" style="width: 10%;">
<select class="attr_PsyDamageType2">
<option selected data-i18n="e-u">E</option>
<option data-i18n="i-u">I</option>
<option data-i18n="r-u">P</option>
<option data-i18n="e-u">E</option>
</select>
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 20%;"><span data-i18n="damage-u">Damage:</span></div>
<div class="sheet-item" style="width: 30%;"><input name="attr_PsyDamage2" type="text" />
</div>
<div class="sheet-item" style="width: 20%;"><span data-i18n="penetration-u">Pen:</span>
</div>
<div class="sheet-item" style="width: 30%;"><input name="attr_PsyPen2" type="text" /></div>
</div>
<div><textarea name="attr_PsyPowersEffect2"></textarea></div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<!--Roll Template test-->
<rolltemplate class="sheet-rolltemplate-dh1ed">
<table>
<tr>
<th colspan="2" class="sheet-title">{{rollname}}</th>
</tr>
<tr>
<th colspan="2"><img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Dark_Heresy/img/spacer.png"
class="sheet-rolltemplate-spacer"></th>
</tr>
{{#skill}}
<tr>
<td><span class="sheet-tcat" data-i18n="skill:">Skill: </span></td>
<td><span class="sheet-inlinerollresult">{{skill}}</span></td>
</tr>
{{/skill}}
{{#aim}}
<tr>
<td><span class="sheet-tcat" data-i18n="aim:">Aim: </span></td>
<td><span class="sheet-inlinerollresult">{{aim}}</span></td>
</tr>
{{/aim}}
{{#range}}
<tr>
<td><span class="sheet-tcat" data-i18n="range:">Range: </span></td>
<td><span class="sheet-inlinerollresult">{{range}}</span></td>
</tr>
{{/range}}
{{#attacktype}}
<tr>
<td><span class="sheet-tcat" data-i18n="attacktype:">Attack Type: </span></td>
<td><span class="sheet-inlinerollresult">{{attacktype}}</span></td>
</tr>
{{/attacktype}}
{{#modifier}}
<tr>
<td><span class="sheet-tcat" data-i18n="modifier:">Modifier: </span></td>
<td><span class="sheet-inlinerollresult">{{modifier}}</span></td>
</tr>
{{/modifier}}
{{#target}}
<tr class="sheet-topline">
<th colspan="2"><span></span></th>
</tr>
<tr>
<td><span class="sheet-tcat" data-i18n="target:">Target: </span></td>
<td><span class="sheet-inlinerollresult">{{target}}</span></td>
</tr>
{{/target}}
{{#threshold}}
<tr>
<td><span class="sheet-tcat" data-i18n="threshold:">Threshold: </span></td>
<td><span class="sheet-inlinerollresult">{{threshold}}</span></td>
</tr>
{{/threshold}}
{{#diceroll}}
<tr>
<th colspan="2"><img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Dark_Heresy/img/spacer.png"
class="sheet-rolltemplate-spacer sheet-invert"></th>
</tr>
<tr>
<td><span class="sheet-tcat" data-i18n="diceroll:">dice roll: </span></td>
<td><span class="sheet-inlinerollresult">{{diceroll}}</span></td>
</tr>
{{/diceroll}}
{{#rollGreater() weapondiceroll 96}}
<tr>
<th colspan="2"><img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Dark_Heresy/img/spacer.png"
class="sheet-rolltemplate-spacer sheet-invert"></th>
</tr>
<tr class="sheet-failure">
<td><span class="sheet-tcat" data-i18n="diceroll:">dice roll: </span></td>
<td><span class="sheet-inlinerollresult">{{weapondiceroll}}</span></td>
</tr>
{{#rollTotal() reliable 10}}
<tr class="sheet-failure">
<td><span class="sheet-tcat" data-i18n="reliable:">reliable: </span></td>
<td><span class="sheet-inlinerollresult">{{reliable}}</span></td>
</tr>
{{/rollTotal() reliable 10}}
{{#rollLess() reliable 10}}
<tr>
<td><span class="sheet-tcat" data-i18n="reliable:">reliable: </span></td>
<td><span class="sheet-inlinerollresult">{{reliable}}</span></td>
</tr>
{{/rollLess() reliable 10}}
{{/rollGreater() weapondiceroll 96}}
{{#rollLess() weapondiceroll 97}}
<tr>
<th colspan="2"><img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Dark_Heresy/img/spacer.png"
class="sheet-rolltemplate-spacer sheet-invert"></th>
</tr>
<tr>
<td><span class="sheet-tcat" data-i18n="diceroll:">dice roll: </span></td>
<td><span class="sheet-inlinerollresult">{{weapondiceroll}}</span></td>
</tr>
{{/rollLess() weapondiceroll 97}}
{{#^rollLess() roll 0}}
<tr class="sheet-success">
<th colspan="2">
<span data-i18n="success">Success</span> <span data-i18n="with">with</span> {{roll}} <span
data-i18n="degrees">degrees</span>
</th>
</tr>
{{/^rollLess() roll 0}}
{{#rollLess() roll 0}}
<tr class="sheet-failure">
<th colspan="2">
<span data-i18n="failure">Failure</span> <span data-i18n="with">with</span> {{roll}} <span
data-i18n="degrees">degrees</span>
</th>
</tr>
{{/rollLess() roll 0}}
{{#psy}}
<tr>
<td><span class="sheet-tcat" data-i18n="resultpsy:">Result Psy: </span></td>
<td><span class="sheet-inlinerollresult">{{psy}}</span></td>
</tr>
{{/psy}}
{{#damage}}
<tr class="sheet-damage">
<td><span class="sheet-tcat" data-i18n="damage:">Damage: </span></td>
<td><span class="sheet-inlinerollresult">{{damage}}</span></td>
</tr>
{{/damage}}
{{#damagetype}}
<tr class="sheet-damage">
<td><span class="sheet-tcat" data-i18n="type:">Type: </span></td>
<td><span class="sheet-inlinerollresult">{{damagetype}}</span></td>
</tr>
{{/damagetype}}
{{#special}}
<tr>
<td><b><span class="sheet-tcat" data-i18n="special:">Special: </span></b></td>
<td><span class="sheet-inlinerollresult">{{special}}</span></td>
</tr>
{{/special}}
{{#initiative}}
<tr>
<td><span class="sheet-tcat" data-i18n="result:">Result: </span></td>
<td><span class="sheet-inlinerollresult">{{initiative}}</span></td>
</tr>
{{/initiative}}
</table>
</rolltemplate>
<script type="text/worker">
// Github: https://github.com/shdwjk/TheAaronSheet/blob/master/TheAaronSheet.js
// By: The Aaron, Arcane Scriptomancer
// Contact: https://app.roll20.net/users/104025/the-aaron
var TAS = TAS || (function(){
'use strict';
var version = '0.2.3',
lastUpdate = 1457098056,
loggingSettings = {
debug: {
key: 'debug',
title: 'DEBUG',
color: {
bgLabel: '#7732A2',
label: '#F2EF40',
bgText: '#FFFEB7',
text: '#7732A2'
}
},
error: {
key: 'error',
title: 'Error',
color: {
bgLabel: '#C11713',
label: 'white',
bgText: '#C11713',
text: 'white'
}
},
warn: {
key: 'warn',
title: 'Warning',
color: {
bgLabel: '#F29140',
label: 'white',
bgText: '#FFD8B7',
text: 'black'
}
},
info: {
key: 'info',
title: 'Info',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
notice: {
key: 'notice',
title: 'Notice',
color: {
bgLabel: '#33C133',
label: 'white',
bgText: '#ADF1AD',
text: 'black'
}
},
log: {
key: 'log',
title: 'Log',
color: {
bgLabel: '#f2f240',
label: 'black',
bgText: '#ffff90',
text: 'black'
}
},
callstack: {
key: 'TAS',
title: 'function',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
callstack_async: {
key: 'TAS',
title: 'ASYNC CALL',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#413FA9',
text: 'white'
}
},
TAS: {
key: 'TAS',
title: 'TAS',
color: {
bgLabel: 'grey',
label: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)',
bgText: 'grey',
text: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)'
}
}
},
config = {
debugMode: false,
logging: {
log: true,
notice: true,
info: true,
warn: true,
error: true,
debug: false
}
},
callstackRegistry = [],
queuedUpdates = {}, //< Used for delaying saves till the last momment.
complexType = function(o){
switch(typeof o){
case 'string':
return 'string';
case 'boolean':
return 'boolean';
case 'number':
return (_.isNaN(o) ? 'NaN' : (o.toString().match(/\./) ? 'decimal' : 'integer'));
case 'function':
return 'function: '+(o.name ? o.name+'()' : '(anonymous)');
case 'object':
return (_.isArray(o) ? 'array' : (_.isArguments(o) ? 'arguments' : ( _.isNull(o) ? 'null' : 'object')));
default:
return typeof o;
}
},
dataLogger = function(primaryLogger,secondaryLogger,data){
_.each(data,function(m){
var type = complexType(m);
switch(type){
case 'string':
primaryLogger(m);
break;
case 'undefined':
case 'null':
case 'NaN':
primaryLogger('['+type+']');
break;
case 'number':
case 'not a number':
case 'integer':
case 'decimal':
case 'boolean':
primaryLogger('['+type+']: '+m);
break;
default:
primaryLogger('['+type+']:=========================================');
secondaryLogger(m);
primaryLogger('=========================================================');
break;
}
});
},
colorLog = function(options){
var coloredLoggerFunction,
key = options.key,
label = options.title || 'TAS',
lBGColor = (options.color && options.color.bgLabel) || 'blue',
lTxtColor = (options.color && options.color.label) || 'white',
mBGColor = (options.color && options.color.bgText) || 'blue',
mTxtColor = (options.color && options.color.text) || 'white';
coloredLoggerFunction = function(message){
console.log(
'%c '+label+': %c '+message + ' ',
'background-color: '+lBGColor+';color: '+lTxtColor+'; font-weight:bold;',
'background-color: '+mBGColor+';color: '+mTxtColor+';'
);
};
return function(){
if('TAS'===key || config.logging[key]){
dataLogger(coloredLoggerFunction,function(m){console.log(m);},_.toArray(arguments));
}
};
},
logDebug = colorLog(loggingSettings.debug),
logError = colorLog(loggingSettings.error),
logWarn = colorLog(loggingSettings.warn),
logInfo = colorLog(loggingSettings.info),
logNotice = colorLog(loggingSettings.notice),
logLog = colorLog(loggingSettings.log),
log = colorLog(loggingSettings.TAS),
logCS = colorLog(loggingSettings.callstack),
logCSA = colorLog(loggingSettings.callstack_async),
registerCallstack = function(callstack,label){
var idx=_.findIndex(callstackRegistry,function(o){
return (_.difference(o.stack,callstack).length === _.difference(callstack,o.stack).length) &&
_.difference(o.stack,callstack).length === 0 &&
o.label === label;
});
if(-1 === idx){
idx=callstackRegistry.length;
callstackRegistry.push({
stack: callstack,
label: label
});
}
return idx;
},
setConfigOption = function(options){
var newconf =_.defaults(options,config);
newconf.logging=_.defaults(
(options && options.logging)||{},
config.logging
);
config=newconf;
},
debugMode = function(){
config.logging.debug=true;
config.debugMode = true;
},
getCallstack = function(){
var e = new Error('dummy'),
stack = _.map(_.rest(e.stack.replace(/^[^\(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
.split('\n')),function(l){
return l.replace(/\s+.*$/,'');
});
return stack;
},
logCallstackSub = function(cs){
var matches, csa;
_.find(cs,function(line){
matches = line.match(/TAS_CALLSTACK_(\d+)/);
if(matches){
csa=callstackRegistry[matches[1]];
logCSA( '===================='+(csa.label ? '> '+csa.label+' <' : '')+'====================');
logCallstackSub(csa.stack);
return true;
}
logCS(line);
return false;
});
},
logCallstack = function(){
var cs;
if(config.debugMode){
cs = getCallstack();
cs.shift();
log('==============================> CALLSTACK <==============================');
logCallstackSub(cs);
log('=========================================================================');
}
},
wrapCallback = function (label, callback, context){
var callstack;
if('function' === typeof label){
context=callback;
callback=label;
label=undefined;
}
if(!config.debugMode){
return (function(cb,ctx){
return function(){
cb.apply(ctx||{},arguments);
};
}(callback,context));
}
callstack = getCallstack();
callstack.shift();
return (function(cb,ctx,cs,lbl){
var ctxref=registerCallstack(cs,lbl);
/*jshint -W054 */
return new Function('cb','ctx','TASlog',
"return function TAS_CALLSTACK_"+ctxref+"(){"+
"TASlog('Entering: '+(cb.name||'(anonymous function)'));"+
"cb.apply(ctx||{},arguments);"+
"TASlog('Exiting: '+(cb.name||'(anonymous function)'));"+
"};")(cb,ctx,log);
/*jshint +W054 */
}(callback,context,callstack,label));
},
prepareUpdate = function( attribute, value ){
queuedUpdates[attribute]=value;
},
applyQueuedUpdates = function() {
setAttrs(queuedUpdates);
queuedUpdates = {};
},
namesFromArgs = function(args,base){
return _.chain(args)
.reduce(function(memo,attr){
if('string' === typeof attr) {
memo.push(attr);
} else if(_.isArray(args) || _.isArguments(args)){
memo = namesFromArgs(attr,memo);
}
return memo;
},(_.isArray(base) && base) || [])
.uniq()
.value();
},
addId = function(obj,value){
Object.defineProperty(obj,'id',{
value: value,
writeable: false,
enumerable: false
});
},
addProp = function(obj,prop,value,fullname){
(function(){
var pname=(_.contains(['S','F','I','D'],prop) ? '_'+prop : prop),
full_pname = fullname || prop,
pvalue=value;
_.each(['S','I','F'],function(p){
if( !_.has(obj,p)){
Object.defineProperty(obj, p, {
value: {},
enumerable: false,
readonly: true
});
}
});
if( !_.has(obj,'D')){
Object.defineProperty(obj, 'D', {
value: _.reduce(_.range(10),function(m,d){
Object.defineProperty(m, d, {
value: {},
enumerable: true,
readonly: true
});
return m;
},{}),
enumerable: false,
readonly: true
});
}
// Raw value
Object.defineProperty(obj, pname, {
enumerable: true,
set: function(v){
if(v!==pvalue) {
pvalue=v;
prepareUpdate(full_pname,v);
}
},
get: function(){
return pvalue;
}
});
// string value
Object.defineProperty(obj.S, pname, {
enumerable: true,
set: function(v){
var val=v.toString();
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return pvalue.toString();
}
});
// int value
Object.defineProperty(obj.I, pname, {
enumerable: true,
set: function(v){
var val=parseInt(v,10) || 0;
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseInt(pvalue,10) || 0;
}
});
// float value
Object.defineProperty(obj.F, pname, {
enumerable: true,
set: function(v){
var val=parseFloat(v) || 0;
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseFloat(pvalue) || 0;
}
});
_.each(_.range(10),function(d){
Object.defineProperty(obj.D[d], pname, {
enumerable: true,
set: function(v){
var val=(parseFloat(v) || 0).toFixed(d);
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return (parseFloat(pvalue) || 0).toFixed(d);
}
});
});
}());
},
repeating = function( section ) {
return (function(s){
var sectionName = s,
attrNames = [],
fieldNames = [],
operations = [],
after = [],
repAttrs = function TAS_Repeating_Attrs(){
attrNames = namesFromArgs(arguments,attrNames);
return this;
},
repFields = function TAS_Repeating_Fields(){
fieldNames = namesFromArgs(arguments,fieldNames);
return this;
},
repReduce = function TAS_Repeating_Reduce(func, initial, final, context) {
operations.push({
type: 'reduce',
func: (func && _.isFunction(func) && func) || _.noop,
memo: (_.isUndefined(initial) && 0) || initial,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repMap = function TAS_Repeating_Map(func, final, context) {
operations.push({
type: 'map',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repEach = function TAS_Repeating_Each(func, final, context) {
operations.push({
type: 'each',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repTap = function TAS_Repeating_Tap(final, context) {
operations.push({
type: 'tap',
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repAfter = function TAS_Repeating_After(callback,context) {
after.push({
callback: (callback && _.isFunction(callback) && callback) || _.noop,
context: context || {}
});
return this;
},
repExecute = function TAS_Repeating_Execute(callback,context){
var rowSet = {},
attrSet = {},
fieldIds = [],
fullFieldNames = [];
repAfter(callback,context);
// call each operation per row.
// call each operation's final
getSectionIDs("repeating_"+sectionName,function(ids){
fieldIds = ids;
fullFieldNames = _.reduce(fieldIds,function(memo,id){
return memo.concat(_.map(fieldNames,function(name){
return 'repeating_'+sectionName+'_'+id+'_'+name;
}));
},[]);
getAttrs( _.uniq(attrNames.concat(fullFieldNames)), function(values){
_.each(attrNames,function(aname){
if(values.hasOwnProperty(aname)){
addProp(attrSet,aname,values[aname]);
}
});
rowSet = _.reduce(fieldIds,function(memo,id){
var r={};
addId(r,id);
_.each(fieldNames,function(name){
var fn = 'repeating_'+sectionName+'_'+id+'_'+name;
addProp(r,name,values[fn],fn);
});
memo[id]=r;
return memo;
},{});
_.each(operations,function(op){
var res;
switch(op.type){
case 'tap':
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'each':
_.each(rowSet,function(r){
_.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'map':
res = _.map(rowSet,function(r){
return _.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
case 'reduce':
res = op.memo;
_.each(rowSet,function(r){
res = _.bind(op.func,op.context,res,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
}
});
// finalize attrs
applyQueuedUpdates();
_.each(after,function(op){
_.bind(op.callback,op.context)();
});
});
});
};
return {
attrs: repAttrs,
attr: repAttrs,
column: repFields,
columns: repFields,
field: repFields,
fields: repFields,
reduce: repReduce,
inject: repReduce,
foldl: repReduce,
map: repMap,
collect: repMap,
each: repEach,
forEach: repEach,
tap: repTap,
'do': repTap,
after: repAfter,
last: repAfter,
done: repAfter,
execute: repExecute,
go: repExecute,
run: repExecute
};
}(section));
},
repeatingSimpleSum = function(section, field, destination){
repeating(section)
.attr(destination)
.field(field)
.reduce(function(m,r){
return m + (r.F[field]);
},0,function(t,r,a){
a.S[destination]=t;
})
.execute();
};
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ The Aaron Sheet v'+version+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ Last update: '+(new Date(lastUpdate*1000))+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
return {
/* Repeating Sections */
repeatingSimpleSum: repeatingSimpleSum,
repeating: repeating,
/* Configuration */
config: setConfigOption,
/* Debugging */
callback: wrapCallback,
callstack: logCallstack,
debugMode: debugMode,
_fn: wrapCallback,
/* Logging */
debug: logDebug,
error: logError,
warn: logWarn,
info: logInfo,
notice: logNotice,
log: logLog
};
}());
/* ---- END: TheAaronSheet.js ---- */
on("change:gmroll", function(f) {
getAttrs(["gmroll"], function(v) {
let rollstring = "";
if (v.gmroll == "1") {
rollstring = "/w GM **@{character_name}**";
} else {
rollstring = "";
}
setAttrs({
abilityroll: rollstring
});
});
});
/*on('change:repeating_advancements',function(){
TAS.repeatingSimpleSum('advancements','advancementRe1xp','XPSpent');
});*/
on('change:repeating_advancements', function(){
TAS.repeating('advancements')
.attrs('XPSpent')
.fields('advancement1xp','advancement2xp', 'advancement3xp')
.reduce(function(memo, row)
{
memo += (row.I.advancement1xp);
memo += (row.I.advancement2xp);
memo += (row.I.advancement3xp);
return memo;
},0,function(memo, row, attrSet)
{
attrSet.I.XPSpent = memo;
})
.execute();
});
</script>