Files
roll20-character-sheets/BREAK!!/BREAK.html
T

1849 lines
84 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.
<!DOCTYPE html>
<html>
<div class="charsheet">
<input type="hidden" class="sheet-tabstoggle" name="attr_sheetTab" value="stats" />
<div class="sheet-flexRow">
<div>
<button type="action" class="sheet-tabButton" name="act_stats">Stats</button>
<button type="action" class="sheet-tabButton" name="act_notes">Notes</button>
</div>
<div class="sheet-flexGrow sheet-flexEnd">
<select name="attr_rollWhisperType">
<option value="" selected><span>Show rolls</span></option>
<option value="?{Whisper?|Public Roll,|Whisper Roll,/w gm }"><span>Ask each time</span></option>
<option value="/w gm"><span>Always whisper</span></option>
</select>
</div>
</div>
<div class="sheet-stats">
<div class="sheet-mainPageUpperSide">
<div class="sheet-flexIdentity sheet-flexColumnNoGap">
<h1>Identity</h1>
<div class="sheet-oneLineInfo"><span>Name</span><input type="text" name="attr_character_name" /></div>
<div class="sheet-oneLineInfo">
<span>Calling</span>
<input type="text" name="attr_calling" />
<span class="sheet-verticalLine">Rank
<span name="attr_rank"></span>
</span>
</div>
<div class="sheet-flexColumn">
<div class="sheet-oneLineInfo">
<span>Species</span>
<input type="text" name="attr_specie" />
<input type="checkbox" name="attr_specie_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
</div>
<input type="hidden" class="sheet-arrow" name="attr_specie_fold" value="on" />
<div class="sheet-oneLineInfo sheet-foldable" style="flex-flow: column wrap;">
<div style="display: flex; flex-flow: row wrap;">
<span>Size</span>
<select name="attr_size">
<option value="0">Small</option>
<option value="1" selected>Medium</option>
<option value="2">Large</option>
</select>
</div>
<textarea name="attr_specie_description" placeholder="Specie notes"></textarea>
</div>
</div>
<div class="sheet-oneLineInfo"><span>Homeland</span><input type="text" name="attr_homeland" /></div>
<div class="sheet-oneLineInfo"><span>Languages</span><input type="text" name="attr_languages" value="Low speech" /></div>
<div class="sheet-oneLineInfo"><span>History</span><input type="text" name="attr_history" /></div>
<div class="sheet-multiLineInfo"><span>Purviews</span><textarea name="attr_purviews" placeholder="My background grants me a minor bonus on..."></textarea></div>
<div class="sheet-multiLineInfo"><span>Description</span><textarea name="attr_description"></textarea></div>
</div>
<div class="sheet-flexIdentity sheet-flexColumnNoGap">
<h1>Aptitudes</h1>
<div class="sheet-box">
<div class="sheet-attributeHeader">
<div>
<h2>Might</h2>
<h6>Smash, crush, lift</h6>
</div>
<div class="sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_might_base" value="6" />
</div>
</div>
<div>
<input type="hidden" name="attr_might_total" value="6" />
<div>
<div class="sheet-statButtons">
<button type="action" name="act_might" class="sheet-attributeButton">
<span name="attr_might_total"></span>
</button>
<div>
<div class="sheet-traitsList">
<span><b>TRAIT</b></span>
<div><span>-2</span><input type="radio" name="attr_might_trait" value="-2" /></div>
<div><span>-1</span><input type="radio" name="attr_might_trait" value="-1" /></div>
<div><span>0</span><input type="radio" name="attr_might_trait" value="0" checked /></div>
<div><span>1</span><input type="radio" name="attr_might_trait" value="1" /></div>
<div><span>2</span><input type="radio" name="attr_might_trait" value="2" /></div>
</div>
<div class="sheet-squares">
<input type="hidden" name="attr_mightSquare1" class="sheet-squareInput" value="1">
<button type="action" name="act_mightSquare1" class="sheet-square" title="Roll Might 1"></button>
</input>
<input type="hidden" name="attr_mightSquare2" class="sheet-squareInput" value="1">
<button type="action" name="act_mightSquare2" class="sheet-square" title="Roll Might 2"></button>
</input>
<input type="hidden" name="attr_mightSquare3" class="sheet-squareInput" value="1">
<button type="action" name="act_mightSquare3" class="sheet-square" title="Roll Might 3"></button>
</input>
<input type="hidden" name="attr_mightSquare4" class="sheet-squareInput" value="1">
<button type="action" name="act_mightSquare4" class="sheet-square" title="Roll Might 4"></button>
</input>
<input type="hidden" name="attr_mightSquare5" class="sheet-squareInput" value="1">
<button type="action" name="act_mightSquare5" class="sheet-square sheet-squareSeparation" title="Roll Might 5"></button>
</input>
<input type="hidden" name="attr_mightSquare6" class="sheet-squareInput" value="1">
<button type="action" name="act_mightSquare6" class="sheet-square" title="Roll Might 6"></button>
</input>
<input type="hidden" name="attr_mightSquare7" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare7" class="sheet-square" title="Roll Might 7"></button>
</input>
<input type="hidden" name="attr_mightSquare8" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare8" class="sheet-square" title="Roll Might 8"></button>
</input>
<input type="hidden" name="attr_mightSquare9" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare9" class="sheet-square" title="Roll Might 9"></button>
</input>
<input type="hidden" name="attr_mightSquare10" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare10" class="sheet-square sheet-squareSeparation" title="Roll Might 10"></button>
</input>
<input type="hidden" name="attr_mightSquare11" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare11" class="sheet-square" title="Roll Might 11"></button>
</input>
<input type="hidden" name="attr_mightSquare12" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare12" class="sheet-square" title="Roll Might 12"></button>
</input>
<input type="hidden" name="attr_mightSquare13" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare13" class="sheet-square" title="Roll Might 13"></button>
</input>
<input type="hidden" name="attr_mightSquare14" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare14" class="sheet-square" title="Roll Might 14"></button>
</input>
<input type="hidden" name="attr_mightSquare15" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare15" class="sheet-square sheet-squareSeparation" title="Roll Might 15"></button>
</input>
<input type="hidden" name="attr_mightSquare16" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare16" class="sheet-square" title="Roll Might 16"></button>
</input>
<input type="hidden" name="attr_mightSquare17" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare17" class="sheet-square" title="Roll Might 17"></button>
</input>
<input type="hidden" name="attr_mightSquare18" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare18" class="sheet-square" title="Roll Might 18"></button>
</input>
<input type="hidden" name="attr_mightSquare19" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare19" class="sheet-square" title="Roll Might 19"></button>
</input>
<input type="hidden" name="attr_mightSquare20" class="sheet-squareInput" value="0">
<button type="action" name="act_mightSquare20" class="sheet-square" title="Roll Might 20"></button>
</input>
</div>
<div class="sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_might_modifier" value="0" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-box">
<div class="sheet-attributeHeader">
<div>
<h2>Deftness</h2>
<h6>Dodge, sneak, leap</h6>
</div>
<div class="sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_deftness_base" value="6" />
</div>
</div>
<div>
<input type="hidden" name="attr_deftness_total" value="6" />
<div>
<div class="sheet-statButtons">
<button type="action" name="act_deftness" class="sheet-attributeButton">
<span name="attr_deftness_total"></span>
</button>
<div>
<div class="sheet-traitsList">
<span><b>TRAIT</b></span>
<div><span>-2</span><input type="radio" name="attr_deftness_trait" value="-2" /></div>
<div><span>-1</span><input type="radio" name="attr_deftness_trait" value="-1" /></div>
<div><span>0</span><input type="radio" name="attr_deftness_trait" value="0" checked /></div>
<div><span>1</span><input type="radio" name="attr_deftness_trait" value="1" /></div>
<div><span>2</span><input type="radio" name="attr_deftness_trait" value="2" /></div>
</div>
<div class="sheet-squares">
<input type="hidden" name="attr_deftnessSquare1" class="sheet-squareInput" value="1">
<button type="action" name="act_deftnessSquare1" class="sheet-square" title="Roll Deftness 1"></button>
</input>
<input type="hidden" name="attr_deftnessSquare2" class="sheet-squareInput" value="1">
<button type="action" name="act_deftnessSquare2" class="sheet-square" title="Roll Deftness 2"></button>
</input>
<input type="hidden" name="attr_deftnessSquare3" class="sheet-squareInput" value="1">
<button type="action" name="act_deftnessSquare3" class="sheet-square" title="Roll Deftness 3"></button>
</input>
<input type="hidden" name="attr_deftnessSquare4" class="sheet-squareInput" value="1">
<button type="action" name="act_deftnessSquare4" class="sheet-square" title="Roll Deftness 4"></button>
</input>
<input type="hidden" name="attr_deftnessSquare5" class="sheet-squareInput" value="1">
<button type="action" name="act_deftnessSquare5" class="sheet-square sheet-squareSeparation" title="Roll Deftness 5"></button>
</input>
<input type="hidden" name="attr_deftnessSquare6" class="sheet-squareInput" value="1">
<button type="action" name="act_deftnessSquare6" class="sheet-square" title="Roll Deftness 6"></button>
</input>
<input type="hidden" name="attr_deftnessSquare7" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare7" class="sheet-square" title="Roll Deftness 7"></button>
</input>
<input type="hidden" name="attr_deftnessSquare8" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare8" class="sheet-square" title="Roll Deftness 8"></button>
</input>
<input type="hidden" name="attr_deftnessSquare9" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare9" class="sheet-square" title="Roll Deftness 9"></button>
</input>
<input type="hidden" name="attr_deftnessSquare10" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare10" class="sheet-square sheet-squareSeparation" title="Roll Deftness 10"></button>
</input>
<input type="hidden" name="attr_deftnessSquare11" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare11" class="sheet-square" title="Roll Deftness 11"></button>
</input>
<input type="hidden" name="attr_deftnessSquare12" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare12" class="sheet-square" title="Roll Deftness 12"></button>
</input>
<input type="hidden" name="attr_deftnessSquare13" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare13" class="sheet-square" title="Roll Deftness 13"></button>
</input>
<input type="hidden" name="attr_deftnessSquare14" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare14" class="sheet-square" title="Roll Deftness 14"></button>
</input>
<input type="hidden" name="attr_deftnessSquare15" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare15" class="sheet-square sheet-squareSeparation" title="Roll Deftness 15"></button>
</input>
<input type="hidden" name="attr_deftnessSquare16" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare16" class="sheet-square" title="Roll Deftness 16"></button>
</input>
<input type="hidden" name="attr_deftnessSquare17" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare17" class="sheet-square" title="Roll Deftness 17"></button>
</input>
<input type="hidden" name="attr_deftnessSquare18" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare18" class="sheet-square" title="Roll Deftness 18"></button>
</input>
<input type="hidden" name="attr_deftnessSquare19" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare19" class="sheet-square" title="Roll Deftness 19"></button>
</input>
<input type="hidden" name="attr_deftnessSquare20" class="sheet-squareInput" value="0">
<button type="action" name="act_deftnessSquare20" class="sheet-square" title="Roll Deftness 20"></button>
</input>
</div>
<div class="sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_deftness_modifier" value="0" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-box">
<div class="sheet-attributeHeader">
<div>
<h2>Grit</h2>
<h6>Cling, persist, press on</h6>
</div>
<div class="sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_grit_base" value="6" />
</div>
</div>
<div>
<input type="hidden" name="attr_grit_total" value="6" />
<div>
<div class="sheet-statButtons">
<button type="action" name="act_grit" class="sheet-attributeButton">
<span name="attr_grit_total"></span>
</button>
<div>
<div class="sheet-traitsList">
<span><b>TRAIT</b></span>
<div><span>-2</span><input type="radio" name="attr_grit_trait" value="-2" /></div>
<div><span>-1</span><input type="radio" name="attr_grit_trait" value="-1" /></div>
<div><span>0</span><input type="radio" name="attr_grit_trait" value="0" checked /></div>
<div><span>1</span><input type="radio" name="attr_grit_trait" value="1" /></div>
<div><span>2</span><input type="radio" name="attr_grit_trait" value="2" /></div>
</div>
<div class="sheet-squares">
<input type="hidden" name="attr_gritSquare1" class="sheet-squareInput" value="1">
<button type="action" name="act_gritSquare1" class="sheet-square" title="Roll Grit 1"></button>
</input>
<input type="hidden" name="attr_gritSquare2" class="sheet-squareInput" value="1">
<button type="action" name="act_gritSquare2" class="sheet-square" title="Roll Grit 2"></button>
</input>
<input type="hidden" name="attr_gritSquare3" class="sheet-squareInput" value="1">
<button type="action" name="act_gritSquare3" class="sheet-square" title="Roll Grit 3"></button>
</input>
<input type="hidden" name="attr_gritSquare4" class="sheet-squareInput" value="1">
<button type="action" name="act_gritSquare4" class="sheet-square" title="Roll Grit 4"></button>
</input>
<input type="hidden" name="attr_gritSquare5" class="sheet-squareInput" value="1">
<button type="action" name="act_gritSquare5" class="sheet-square sheet-squareSeparation" title="Roll Grit 5"></button>
</input>
<input type="hidden" name="attr_gritSquare6" class="sheet-squareInput" value="1">
<button type="action" name="act_gritSquare6" class="sheet-square" title="Roll Grit 6"></button>
</input>
<input type="hidden" name="attr_gritSquare7" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare7" class="sheet-square" title="Roll Grit 7"></button>
</input>
<input type="hidden" name="attr_gritSquare8" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare8" class="sheet-square" title="Roll Grit 8"></button>
</input>
<input type="hidden" name="attr_gritSquare9" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare9" class="sheet-square" title="Roll Grit 9"></button>
</input>
<input type="hidden" name="attr_gritSquare10" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare10" class="sheet-square sheet-squareSeparation" title="Roll Grit 10"></button>
</input>
<input type="hidden" name="attr_gritSquare11" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare11" class="sheet-square" title="Roll Grit 11"></button>
</input>
<input type="hidden" name="attr_gritSquare12" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare12" class="sheet-square" title="Roll Grit 12"></button>
</input>
<input type="hidden" name="attr_gritSquare13" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare13" class="sheet-square" title="Roll Grit 13"></button>
</input>
<input type="hidden" name="attr_gritSquare14" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare14" class="sheet-square" title="Roll Grit 14"></button>
</input>
<input type="hidden" name="attr_gritSquare15" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare15" class="sheet-square sheet-squareSeparation" title="Roll Grit 15"></button>
</input>
<input type="hidden" name="attr_gritSquare16" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare16" class="sheet-square" title="Roll Grit 16"></button>
</input>
<input type="hidden" name="attr_gritSquare17" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare17" class="sheet-square" title="Roll Grit 17"></button>
</input>
<input type="hidden" name="attr_gritSquare18" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare18" class="sheet-square" title="Roll Grit 18"></button>
</input>
<input type="hidden" name="attr_gritSquare19" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare19" class="sheet-square" title="Roll Grit 19"></button>
</input>
<input type="hidden" name="attr_gritSquare20" class="sheet-squareInput" value="0">
<button type="action" name="act_gritSquare20" class="sheet-square" title="Roll Grit 20"></button>
</input>
</div>
<div class="sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_grit_modifier" value="0" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-box">
<div class="sheet-attributeHeader">
<div>
<h2>Insight</h2>
<h6>Notice, know, remember</h6>
</div>
<div class="sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_insight_base" value="6" />
</div>
</div>
<div>
<input type="hidden" name="attr_insight_total" value="6" />
<div>
<div class="sheet-statButtons">
<button type="action" name="atc_insight" class="sheet-attributeButton" >
<span name="attr_insight_total"></span>
</button>
<div>
<div class="sheet-traitsList">
<span><b>TRAIT</b></span>
<div><span>-2</span><input type="radio" name="attr_insight_trait" value="-2" /></div>
<div><span>-1</span><input type="radio" name="attr_insight_trait" value="-1" /></div>
<div><span>0</span><input type="radio" name="attr_insight_trait" value="0" checked /></div>
<div><span>1</span><input type="radio" name="attr_insight_trait" value="1" /></div>
<div><span>2</span><input type="radio" name="attr_insight_trait" value="2" /></div>
</div>
<div class="sheet-squares">
<input type="hidden" name="attr_insightSquare1" class="sheet-squareInput" value="1">
<button type="action" name="act_insightSquare1" class="sheet-square" title="Roll Insight 1"></button>
</input>
<input type="hidden" name="attr_insightSquare2" class="sheet-squareInput" value="1">
<button type="action" name="act_insightSquare2" class="sheet-square" title="Roll Insight 2"></button>
</input>
<input type="hidden" name="attr_insightSquare3" class="sheet-squareInput" value="1">
<button type="action" name="act_insightSquare3" class="sheet-square" title="Roll Insight 3"></button>
</input>
<input type="hidden" name="attr_insightSquare4" class="sheet-squareInput" value="1">
<button type="action" name="act_insightSquare4" class="sheet-square" title="Roll Insight 4"></button>
</input>
<input type="hidden" name="attr_insightSquare5" class="sheet-squareInput" value="1">
<button type="action" name="act_insightSquare5" class="sheet-square sheet-squareSeparation" title="Roll Insight 5"></button>
</input>
<input type="hidden" name="attr_insightSquare6" class="sheet-squareInput" value="1">
<button type="action" name="act_insightSquare6" class="sheet-square" title="Roll Insight 6"></button>
</input>
<input type="hidden" name="attr_insightSquare7" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare7" class="sheet-square" title="Roll Insight 7"></button>
</input>
<input type="hidden" name="attr_insightSquare8" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare8" class="sheet-square" title="Roll Insight 8"></button>
</input>
<input type="hidden" name="attr_insightSquare9" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare9" class="sheet-square" title="Roll Insight 9"></button>
</input>
<input type="hidden" name="attr_insightSquare10" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare10" class="sheet-square sheet-squareSeparation" title="Roll Insight 10"></button>
</input>
<input type="hidden" name="attr_insightSquare11" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare11" class="sheet-square" title="Roll Insight 11"></button>
</input>
<input type="hidden" name="attr_insightSquare12" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare12" class="sheet-square" title="Roll Insight 12"></button>
</input>
<input type="hidden" name="attr_insightSquare13" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare13" class="sheet-square" title="Roll Insight 13"></button>
</input>
<input type="hidden" name="attr_insightSquare14" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare14" class="sheet-square" title="Roll Insight 14"></button>
</input>
<input type="hidden" name="attr_insightSquare15" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare15" class="sheet-square sheet-squareSeparation" title="Roll Insight 15"></button>
</input>
<input type="hidden" name="attr_insightSquare16" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare16" class="sheet-square" title="Roll Insight 16"></button>
</input>
<input type="hidden" name="attr_insightSquare17" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare17" class="sheet-square" title="Roll Insight 17"></button>
</input>
<input type="hidden" name="attr_insightSquare18" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare18" class="sheet-square" title="Roll Insight 18"></button>
</input>
<input type="hidden" name="attr_insightSquare19" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare19" class="sheet-square" title="Roll Insight 19"></button>
</input>
<input type="hidden" name="attr_insightSquare20" class="sheet-squareInput" value="0">
<button type="action" name="act_insightSquare20" class="sheet-square" title="Roll Insight 20"></button>
</input>
</div>
<div class="sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_insight_modifier" value="0" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-box">
<div class="sheet-attributeHeader">
<div>
<h2>Aura</h2>
<h6>Persuade, inspire, terrify</h6>
</div>
<div class="sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_aura_base" value="6" />
</div>
</div>
<div>
<input type="hidden" name="attr_aura_total" value="6" />
<div>
<div class="sheet-statButtons">
<button type="action" name="act_aura" class="sheet-attributeButton">
<span name="attr_aura_total"></span>
</button>
<div>
<div class="sheet-traitsList">
<span><b>TRAIT</b></span>
<div><span>-2</span><input type="radio" name="attr_aura_trait" value="-2" /></div>
<div><span>-1</span><input type="radio" name="attr_aura_trait" value="-1" /></div>
<div><span>0</span><input type="radio" name="attr_aura_trait" value="0" checked /></div>
<div><span>1</span><input type="radio" name="attr_aura_trait" value="1" /></div>
<div><span>2</span><input type="radio" name="attr_aura_trait" value="2" /></div>
</div>
<div class="sheet-squares">
<input type="hidden" name="attr_auraSquare1" class="sheet-squareInput" value="1">
<button type="action" name="act_auraSquare1" class="sheet-square" title="Roll Aura 1"></button>
</input>
<input type="hidden" name="attr_auraSquare2" class="sheet-squareInput" value="1">
<button type="action" name="act_auraSquare2" class="sheet-square" title="Roll Aura 2"></button>
</input>
<input type="hidden" name="attr_auraSquare3" class="sheet-squareInput" value="1">
<button type="action" name="act_auraSquare3" class="sheet-square" title="Roll Aura 3"></button>
</input>
<input type="hidden" name="attr_auraSquare4" class="sheet-squareInput" value="1">
<button type="action" name="act_auraSquare4" class="sheet-square" title="Roll Aura 4"></button>
</input>
<input type="hidden" name="attr_auraSquare5" class="sheet-squareInput" value="1">
<button type="action" name="act_auraSquare5" class="sheet-square sheet-squareSeparation" title="Roll Aura 5"></button>
</input>
<input type="hidden" name="attr_auraSquare6" class="sheet-squareInput" value="1">
<button type="action" name="act_auraSquare6" class="sheet-square" title="Roll Aura 6"></button>
</input>
<input type="hidden" name="attr_auraSquare7" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare7" class="sheet-square" title="Roll Aura 7"></button>
</input>
<input type="hidden" name="attr_auraSquare8" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare8" class="sheet-square" title="Roll Aura 8"></button>
</input>
<input type="hidden" name="attr_auraSquare9" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare9" class="sheet-square" title="Roll Aura 9"></button>
</input>
<input type="hidden" name="attr_auraSquare10" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare10" class="sheet-square sheet-squareSeparation" title="Roll Aura 10"></button>
</input>
<input type="hidden" name="attr_auraSquare11" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare11" class="sheet-square" title="Roll Aura 11"></button>
</input>
<input type="hidden" name="attr_auraSquare12" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare12" class="sheet-square" title="Roll Aura 12"></button>
</input>
<input type="hidden" name="attr_auraSquare13" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare13" class="sheet-square" title="Roll Aura 13"></button>
</input>
<input type="hidden" name="attr_auraSquare14" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare14" class="sheet-square" title="Roll Aura 14"></button>
</input>
<input type="hidden" name="attr_auraSquare15" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare15" class="sheet-square sheet-squareSeparation" title="Roll Aura 15"></button>
</input>
<input type="hidden" name="attr_auraSquare16" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare16" class="sheet-square" title="Roll Aura 16"></button>
</input>
<input type="hidden" name="attr_auraSquare17" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare17" class="sheet-square" title="Roll Aura 17"></button>
</input>
<input type="hidden" name="attr_auraSquare18" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare18" class="sheet-square" title="Roll Aura 18"></button>
</input>
<input type="hidden" name="attr_auraSquare19" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare19" class="sheet-square" title="Roll Aura 19"></button>
</input>
<input type="hidden" name="attr_auraSquare20" class="sheet-squareInput" value="0">
<button type="action" name="act_auraSquare20" class="sheet-square" title="Roll Aura 20"></button>
</input>
</div>
<div class="sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_aura_modifier" value="0" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-flexGrowFull">
<h1>Combat Values</h1>
<div class="sheet-2Row">
<div class="sheet-flexColumn sheet-box sheet-2RowItem">
<div class="sheet-flexRowNoGap">
<div class="sheet-flexColumn">
<h2>Attack bonus</h2>
<h6>Add to my attack rolls</h6>
</div>
<div class="sheet-flexRow sheet-flexGrow sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_attack_bonus" value="0" />
</div>
</div>
<input type="hidden" name="attr_attack_bonus_total" value="0" />
<input type="hidden" name="attr_attack_bonus_withPlus" />
<div class="sheet-flexRow">
<button type="roll" name="roll_attack_bonus" class="sheet-attributeButton" value="@{rollWhisperType} &{template:generic} {{charName=@{character_name}}} {{rollName=Attack}} {{subLabel= total}} {{total=[[?{Roll type|Basic,d20|Edge,2d20kh1|Snag,2d20kl1} +@{attack_bonus_total} +?{Modifier|0}]]}}"><span name="attr_attack_bonus_withPlus"></span></button>
<div class="sheet-flexColumn sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_attack_bonus_modifier" class="sheet-flexGrowFull" value="0" />
</div>
</div>
</div>
<div class="sheet-flexColumn sheet-box sheet-2RowItem">
<div class="sheet-flexRow">
<div class="sheet-flexColumn">
<h2>Health total</h2>
<h6>Protecting me from injury</h6>
</div>
<div class="sheet-attributeBase sheet-flexGrow">
<span>Base</span>
<input type="number" name="attr_health_base" value="2" />
</div>
</div>
<div class="sheet-flexRow">
<input type="hidden" name="attr_health_total" value="2" />
<button type="action" class="sheet-attributeButton" name="act_health" title="Click to refill hearts ♥"><span name="attr_health_hearts"></span></button>
<div class="sheet-flexColumn">
<div class="sheet-flexRow sheet-attributeModifier">
<span>Hearts</span>
<input type="number" name="attr_health_hearts" value="2" />/<span name="attr_health_total"></span>
<div class="sheet-flexRowNoGap sheet-wrap sheet-smallGap sheet-leftSeparation">
<input type="hidden" class="health-heart-input" name="attr_health_heart_1" value="1" >
<button type="action" class="health-heart" name="act_health_heart_1"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_2" value="1" >
<button type="action" class="health-heart" name="act_health_heart_2"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_3" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_3"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_4" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_4"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_5" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_5"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_6" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_6"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_7" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_7"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_8" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_8"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_9" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_9"></button>
</input>
<input type="hidden" class="health-heart-input" name="attr_health_heart_10" value="-1" >
<button type="action" class="health-heart" name="act_health_heart_10"></button>
</input>
</div>
</div>
<div class="sheet-flexRow sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_health_modifier" value="0" />
</div>
<div class="sheet-flexRow">
<span>Injury</span>
<input type="text" name="attr_injuries" />
</div>
</div>
</div>
</div>
<div class="sheet-flexColumn sheet-box sheet-2RowItem">
<input type="hidden" name="attr_defense_rating_total" value="10" />
<input type="hidden" name="attr_speed_defense_modifier" value="Average" />
<div class="sheet-flexColumn">
<div class="sheet-flexRow">
<div class="sheet-flexColumn">
<h2>Defense rating</h2>
<h6>Best this to strike me</h6>
</div>
<div class="sheet-flexRow sheet-attributeBase sheet-flexGrow">
<span>Base</span>
<input type="number" name="attr_defense_rating" value="10" />
</div>
</div>
<div class="sheet-flexRow">
<button type="roll" class="sheet-attributeButton" name="roll_defense_rating_button" value="&{template:generic} {{charName=@{character_name}}} {{rollName=Defense}} {{subLabel= total}} {{total=[[@{defense_rating}+@{defense_rating_modifier}+@{speed_defense_modifier}]]}}"><span name="attr_defense_rating_total"></span></button>
<div class="sheet-flexColumn sheet-attributeModifier">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_defense_rating_modifier" value="0" />
</div>
</div>
</div>
</div>
<div class="sheet-flexColumn sheet-box sheet-2RowItem">
<div class="sheet-flexColumn">
<h2>Speed rating</h2>
<h6>Decides how many Areas I can move</h6>
<input type="hidden" name="attr_speed_rating" value="0"/>
<div class="sheet-flexRowNoGap">
<input type="hidden" class="sheet-speedBox" name="attr_speed_rating_total" value="1" />
<button type="action" class="sheet-flexColumnNoGap sheet-speedBox" name="act_speed_rating_0" value="0" title="+0 Defense ; Must spend action to move">
<span>Slow</span>
<span>0 Area</span>
</button>
<button type="action" class="sheet-flexColumnNoGap sheet-speedBox" name="act_speed_rating_1" value="1" title="+0 Defense ; Can move 1 battlefield, 2 by spending an action">
<span>Average</span>
<span>1 Area</span>
</button>
<button type="action" class="sheet-flexColumnNoGap sheet-speedBox" name="act_speed_rating_2" value="2" title="+2 Defense ; Can move 2 battlefields, 3 by spending an action">
<span>Fast</span>
<span>2 Area</span>
</button>
<button type="action" class="sheet-flexColumnNoGap sheet-speedBox" name="act_speed_rating_3" value="3" title="+4 Defense ; Can move 2 battlefields, 3 by spending an action">
<span>Very Fast</span>
<span>2 Area</span>
</button>
</div>
<div class="sheet-flexRow sheet-attributeModifier">
<div>
<span>Bonuses/Penalties</span>
<input type="number" name="attr_speed_rating_modifier" value="0" />
</div>
<div>
<span>Total</span>
<input type="hidden" name="attr_speed_rating_name" value="Average" />
<span name="attr_speed_rating_name" class="sheet-bold"></span>
</div>
</div>
</div>
</div>
</div>
<h1>Weapons</h1>
<fieldset class="repeating_weapons">
<div class="sheet-flexColumn sheet-box">
<input type="hidden" name="attr_weapon_attack_bonus_label" value="+0" />
<div class="sheet-flexRow">
<input type="text" name="attr_weapon_name" placeholder="Weapon name" />
<span>Attack bonus</span>
<input type="number" name="attr_weapon_attack_bonus" value="0" />
<input type="checkbox" name="attr_weapon_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
<div class="sheet-flexGrow sheet-flexEnd">
<button type="roll" name="roll_weapon" value="@{rollWhisperType} &{template:weapon} [[ceil(floor([[?{Roll type|Basic,d20|Edge,2d20kh1|Snag,2d20kl1} + @{weapon_attack_bonus}+@{attack_bonus_total}+?{Modifier|0}]]/@{weapon_critical_range})/(21+ @{weapon_attack_bonus}+@{attack_bonus_total}+?{Modifier|0})) *@{weapon_extra_damage_value} +@{weapon_damage}]] {{charName=@{character_name}}} {{rollName=Attack}} {{subLabel=@{weapon_name}}} {{total=$[[0]]}} {{damages=$[[1]]}}"><span name="attr_weapon_attack_bonus_label"></span></button>
</div>
</div>
<input type="hidden" name="attr_weapon_fold" class="sheet-arrow" />
<div class="sheet-flexColumn sheet-foldable">
<div class="sheet-flexRowNoGap sheet-bigGap">
<div class="sheet-flexRow">
<span>Weapon damage </span>
<input type="number" name="attr_weapon_damage" value="1" />
</div>
<div class="sheet-flexRow">
<span>Extra damage threshold </span>
<input type="number" name="attr_weapon_critical_range" value="20" />
</div>
<div class="sheet-flexRow">
<span>Extra damage </span>
<input type="number" name="attr_weapon_extra_damage_value" value="1" />
</div>
<div class="sheet-flexRow">
<span>Weapon type</span>
<select name="attr_weapon_type">
<option value="-1">Unarmed</option>
<option value="0" selected>Standard</option>
<option value="1">Concealed</option>
<option value="2">Quick</option>
<option value="3">Master</option>
<option value="4">Mighty</option>
<option value="5">Arc</option>
<option value="6">Lash</option>
<option value="7">Thrown</option>
<option value="8">Drawn</option>
<option value="9">Mechanical (Small)</option>
<option value="10">Mechanical (Large)</option>
<option value="11">Combination</option>
</select>
</div>
</div>
<textarea name="attr_weapon_notes" class="sheet-autoWidth" placeholder="Weapon notes"></textarea>
</div>
</div>
</fieldset>
</div>
</div>
<div class="sheet-notes">
<div class="sheet-2Row">
<div class="sheet-flexColumn sheet-2RowItem">
<div>
<h1>Quirk</h1>
<div class="sheet-flexRow">
<input type="text" name="attr_quirk" placeholder="Quirk name" />
<input type="checkbox" name="attr_quirk_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
<div class="sheet-flexGrow sheet-flexEnd">
<button type="roll" name="roll_quirk" value="@{rollWhisperType} &{template:infos} {{charName=@{character_name}}} {{rollName=@{quirk}}} {{infos=@{quirk_notes}}}"></button>
</div>
</div>
<input type="hidden" name="attr_quirk_fold" class="sheet-arrow" />
<textarea name="attr_quirk_notes" class="sheet-scalableTextArea sheet-foldable" placeholder="Quirk description"></textarea>
</div>
<div>
<h1>Abilities</h1>
<fieldset class="repeating_abilities">
<div class="sheet-box sheet-flexColumn">
<div class="sheet-flexRow">
<input type="text" name="attr_ability_name" placeholder="Ability name" />
<input type="checkbox" name="attr_ability_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
<div class="sheet-flexGrow sheet-flexEnd">
<button type="roll" name="roll_ability" value="@{rollWhisperType} &{template:infos} {{charName=@{character_name}}} {{rollName=@{ability_name}}} {{infos=@{ability_notes}}}"></button>
</div>
</div>
<input type="hidden" name="attr_ability_fold" class="sheet-arrow" />
<textarea name="attr_ability_notes" class="sheet-autoWidth sheet-foldable" placeholder="Ability description"></textarea>
</div>
</fieldset>
</div>
<div>
<h1>Social Bonds & Reputation</h1>
<fieldset class="repeating_socialBonds">
<div class="sheet-box sheet-flexColumn">
<div class="sheet-flexRow">
<input type="text" name="attr_socialBond_name" placeholder="Social bond name" />
<input type="checkbox" name="attr_socialBond_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
<div class="sheet-flexGrow sheet-flexEnd">
<button type="roll" name="roll_socialBond" value="@{rollWhisperType} &{template:infos} {{charName=@{character_name}}} {{rollName=bond with @{socialBond_name}}} {{infos=@{socialBond_notes}}}"></button>
</div>
</div>
<input type="hidden" name="attr_socialBond_fold" class="sheet-arrow" />
<textarea name="attr_socialBond_notes" class="sheet-autoWidth sheet-foldable" placeholder="Bond/Reputation description"></textarea>
</div>
</fieldset>
</div>
<div>
<h1>Allegiance</h1>
<div class="sheet-flexRow">
<div class="sheet-flexGrow sheet-rightSeparation">
<div class="sheet-flexRow sheet-attributeBase">
<input type="number" name="attr_allegiance_dark" value="0" />
<span>
Dark<br>
Allegiance<br>
Points
</span>
</div>
<div class="sheet-flexRow sheet-attributeBase">
<input type="number" name="attr_allegiance_bright" value="0" />
<span>
Bright<br>
Allegiance<br>
Points
</span>
</div>
</div>
<div class="sheet-flexGrow sheet-flexColumn">
<div class="sheet-flexRow">
<input type="radio" name="attr_alignment" value="None" />
<span>None</span>
</div>
<div class="sheet-flexRow">
<input type="radio" name="attr_alignment" value="Dark" />
<span>Dark</span>
</div>
<div class="sheet-flexRow">
<input type="radio" name="attr_alignment" value="Twilight" />
<span>Twilight</span>
</div>
<div class="sheet-flexRow">
<input type="radio" name="attr_alignment" value="Light" />
<span>Light</span>
</div>
</div>
<div class="sheet-flexGrow">
<span>Gifts</span>
<textarea name="attr_gifts" class="sheet-unscaledTextArea"></textarea>
</div>
</div>
</div>
</div>
<div class="sheet-flexColumn sheet-2RowItem">
<div>
<h1>Gear</h1>
<div class="sheet-downSeparation">
<div class="sheet-flexColumn">
<div class="sheet-flexRow">
<span>Worn outfit</span>
<input type="text" name="attr_outfit" placeholder="Functional outfit" />
<input type="checkbox" name="attr_outfit_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
<div class="sheet-flexGrow sheet-flexEnd">
<button type="roll" name="roll_outfit" value="@{rollWhisperType} &{template:infos} {{charName=@{character_name}}} {{rollName=@{outfit}}} {{infos=@{outfit_notes}}}"></button>
</div>
</div>
<input type="hidden" name="attr_outfit_fold" class="sheet-arrow" />
<textarea name="attr_outfit_notes" class="sheet-autoWidth sheet-foldable" placeholder="These outfits are plain and practical.
► This Outfit does not provide any bonuses or penalties when worn."></textarea>
</div>
</div>
<div class="sheet-flexRow sheet-downGap sheet-upGap">
<div class="sheet-flexGrow sheet-flexColumn">
<div>
<input type="hidden" name="attr_inventory_total" value="10" />
<button type="roll" name="roll_inventory" value="&{template:generic} {{charName=@{character_name}}} {{rollName=Inventory}} {{subLabel= total}} {{total=[[@{inventory_base}+@{inventory_modifier}]]}}"><span name="attr_inventory_total"></span></button>
<span>Inventory slots</span>
</div>
<div>
<input type="hidden" name="attr_inventory_left" value="10" />
<button type="roll" name="roll_inventory_left" value="&{template:generic} {{charName=@{character_name}}} {{rollName=Inventory}} {{subLabel= left}} {{total=[[@{inventory_base}+@{inventory_modifier}-@{total_weight}]]}}"><span name="attr_inventory_left"></span></button>
<span>Inventory left</span>
</div>
</div>
<div class="sheet-flexGrow sheet-flexEnd sheet-flexColumn">
<div class="sheet-flexEnd sheet-attributeBase">
<span>Base</span>
<input type="number" name="attr_inventory_base" />
</div>
<div class="sheet-flexEnd sheet-attributeBase">
<span>Bonuses/Penalties</span>
<input type="number" name="attr_inventory_modifier" />
</div>
</div>
</div>
<div>
<input type="hidden" name="attr_total_weight" value="0" />
<fieldset class="repeating_inventory">
<div class="sheet-flexColumn sheet-downGap sheet-box">
<div class="sheet-flexRow">
<input type="text" name="attr_inventory_name" placeholder="Item name" />
<span>Quantity</span>
<input type="number" name="attr_inventory_quantity" value="1"/>
<input type="checkbox" name="attr_inventory_fold" class="sheet-arrow sheet-rightFloat" checked />
<span class="sheet-rightFloat"></span>
<div class="sheet-flexGrow sheet-flexEnd">
<button type="roll" name="roll_inventory_item" value="@{rollWhisperType} &{template:infos} {{charName=@{character_name}}} {{rollName=@{inventory_name}}} {{infos=@{inventory_notes}}}"></button>
</div>
</div>
<input type="hidden" name="attr_inventory_fold" class="sheet-arrow" />
<div class="sheet-flexColumn sheet-foldable">
<div class="sheet-flexRow">
<span>Object size</span>
<input type="number" name="attr_inventory_size" value="1"/>
</div>
<textarea name="attr_inventory_notes" class="sheet-autoWidth sheet-foldable" placeholder="Item description"></textarea>
</div>
</div>
</fieldset>
</div>
</div>
<div>
<h6>Retrieving items takes...</h6>
<h6>2 Actions from a <b>BACKPACK</b></h6>
<h6>1 Action from a <b>TRAVELERS BAG</b></h6>
</div>
<div>
<h1>Wealth</h1>
<h6>100 stones = 1 coin, 100 coins = 1 gem</h6>
<div class="sheet-flexRow">
<div class="sheet-flexGrow">
<span>Stones</span>
<input type="number" name="attr_wealth_stones" value="0" />
</div>
<div class="sheet-flexGrow">
<span>Coins</span>
<input type="number" name="attr_wealth_coins" value="0" />
</div>
<div class="sheet-flexGrow">
<span>Gems</span>
<input type="number" name="attr_wealth_gems" value="0" />
</div>
</div>
</div>
<div>
<h1>Rank & XP</h1>
<div class="sheet-flexRow">
<div class="sheet-flexGrow">
<span>Rank</span>
<input type="number" name="attr_rank" value="1" />
</div>
<div class="sheet-flexGrow">
<span>Current XP</span>
<input type="number" name="attr_xp_current" value="0" />
</div>
<div class="sheet-flexGrow">
<span>XP for next rank</span>
<input type="number" name="attr_xp_next" value="6" />
</div>
</div>
</div>
</div>
</div>
<div>
<h1>Notes</h1>
<div class="sheet-flexColumn">
<textarea name="attr_notes" class="sheet-scalableTextArea"></textarea>
</div>
</div>
</div>
</div>
<!-- End Of Characters Sheet -->
<!-- Rolls Templates -->
<rolltemplate class="sheet-rolltemplate-carac">
<div class="sheet-template-container">
<div class="sheet-template-header"><h1>{{charName}} {{rollName}}</h1></div>
<div class="sheet-template-contents">
<div class="sheet-template-row"><span>Total = </span>{{computed::roll1}} / {{computed::attribute}}</div>
<div class="sheet-template-row"><span></span>{{computed::result}}</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-generic">
<div class="sheet-template-container">
<div class="sheet-template-header"><h1>{{charName}} {{rollName}}</h1></div>
<div class="sheet-template-contents">
<div class="sheet-template-row">{{rollName}}{{subLabel}} = {{total}}</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-weapon">
<div class="sheet-template-container">
<div class="sheet-template-header"><h1>{{charName}} {{rollName}}</h1></div>
<div class="sheet-template-contents">
<div class="sheet-template-row"><span>Attack with </span>{{subLabel}} = {{total}}</div>
<div class="sheet-template-row"><span>Damages = </span>{{damages}}♥</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-infos">
<div class="sheet-template-container">
<div class="sheet-template-header"><h1>{{charName}} {{rollName}}</h1></div>
<div class="sheet-template-contents">
<div class="sheet-template-row"><span>{{infos}}</span></div>
</div>
</div>
</rolltemplate>
<!-- Rolls Templates End -->
</html>
<script type="text/worker">
// Worker
//tabs handler
const buttonlist = ["stats","notes"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
});
on("change:might_base change:might_trait change:might_modifier change:size", function() {
getAttrs(["might_base", "might_trait", "might_modifier", "size"], function(values) {
var output = {};
var might_total = 0;
might_total = parseInt(values["might_base"])||6;
might_total += parseInt(values["might_trait"])||0;
might_total += parseInt(values["might_modifier"])||0;
switch (values["size"]) {
case "0":
might_total -= 1;
break;
case "2":
might_total += 1;
break;
}
output["might_total"] = might_total;
for (let i = 1; i <= 20; i++) {
output[`mightSquare${i}`] = (i <= might_total) ? 1 : 0;
}
setAttrs(output, {silent: false});
});
});
on("change:deftness_base change:deftness_trait change:deftness_modifier change:size", function() {
getAttrs(["deftness_base", "deftness_trait", "deftness_modifier", "size"], function(values) {
var output = {};
var deftness_total = 0;
deftness_total = parseInt(values["deftness_base"])||6;
deftness_total += parseInt(values["deftness_trait"])||0;
deftness_total += parseInt(values["deftness_modifier"])||0;
deftness_total += values["size"] == "0" ? 1 : 0;
output["deftness_total"] = deftness_total;
for (let i = 1; i <= 20; i++) {
output[`deftnessSquare${i}`] = (i <= deftness_total) ? 1 : 0;
}
setAttrs(output, {silent: true});
});
});
on("change:grit_base change:grit_trait change:grit_modifier", function() {
getAttrs(["grit_base", "grit_trait", "grit_modifier"], function(values) {
var output = {};
var grit_total = 0;
grit_total = parseInt(values["grit_base"])||6;
grit_total += parseInt(values["grit_trait"])||0;
grit_total += parseInt(values["grit_modifier"])||0;
output["grit_total"] = grit_total;
for (let i = 1; i <= 20; i++) {
output[`gritSquare${i}`] = (i <= grit_total) ? 1 : 0;
}
setAttrs(output, {silent: true});
});
});
on("change:insight_base change:insight_trait change:insight_modifier", function() {
getAttrs(["insight_base", "insight_trait", "insight_modifier"], function(values) {
var output = {};
var insight_total = 0;
insight_total = parseInt(values["insight_base"])||6;
insight_total += parseInt(values["insight_trait"])||0;
insight_total += parseInt(values["insight_modifier"])||0;
output["insight_total"] = insight_total;
for (let i = 1; i <= 20; i++) {
output[`insightSquare${i}`] = (i <= insight_total) ? 1 : 0;
}
setAttrs(output, {silent: true});
});
});
on("change:aura_base change:aura_trait change:aura_modifier", function() {
getAttrs(["aura_base", "aura_trait", "aura_modifier"], function(values) {
var output = {};
var aura_total = 0;
aura_total = parseInt(values["aura_base"])||6;
aura_total += parseInt(values["aura_trait"])||0;
aura_total += parseInt(values["aura_modifier"])||0;
output["aura_total"] = aura_total;
for (let i = 1; i <= 20; i++) {
output[`auraSquare${i}`] = (i <= aura_total) ? 1 : 0;
}
setAttrs(output, {silent: true});
});
});
on("change:attack_bonus change:attack_bonus_modifier", function() {
getAttrs(["attack_bonus", "attack_bonus_modifier"], function(values) {
var output = {};
const base = parseInt(values["attack_bonus"])||0;
const modifier = parseInt(values["attack_bonus_modifier"])||0;
var total = base + modifier;
output["attack_bonus_total"] = total;
output["attack_bonus_withPlus"] = "+" + total;
setAttrs(output, {silent: false});
});
});
function Max(values) {
if (values.length == 0)
return 0;
var max = values[0];
for (var i = 1; i < values.length; i++) {
if (values[i] > max)
max = values[i];
}
return max;
}
function GetClosest(values, attribute, modifier) {
// Generate the dice array
var dice = [];
attribute = parseInt(attribute)||0;
modifier = parseInt(modifier)||0;
for (var i = 0; i < values.length; i++) {
values[i] = parseInt(values[i])||20;
// Compute the final modifier to apply to each roll
var finalModifier = 0;
if (modifier < 0) {
finalModifier = (values[i] - modifier > attribute) ? -modifier : modifier;
} else {
if (values[i] > attribute) {
finalModifier = Max([-modifier, attribute - values[i]]);
} else if (values[i] <= attribute) {
finalModifier = Max([modifier, values[i] - attribute]);
}
}
// Add the dice to the array
dice.push({
original: values[i],
result: values[i] + finalModifier,
index: i,
diff: attribute - (values[i] + finalModifier),
success: (values[i] + finalModifier) <= attribute
});
}
// If there is a critical, select it
var anyCrit = dice.some((die) => die.original == attribute);
var succi = dice.filter((die) => die.success);
var fails = dice.filter((die) => !die.success);
if (anyCrit)
return {
selected: dice.find((die) => die.original == attribute),
dice: dice,
succi: succi,
fails: fails
};
// Select dice with success and the closest result
if (succi.length > 0) {
succi.sort((a, b) => a.diff - b.diff);
return {selected: succi[0], dice: dice, succi: succi, fails: fails};
} else {
dice.sort((a, b) => b.diff - a.diff);
return {selected: dice[0], dice: dice, succi: succi, fails: fails};
}
}
function GetFarthest(values, attribute, modifier) {
// Generate the dice array
var dice = [];
attribute = parseInt(attribute)||0;
modifier = parseInt(modifier)||0;
for (var i = 0; i < values.length; i++) {
values[i] = parseInt(values[i])||20;
// Compute the final modifier to apply to each roll
var finalModifier = 0;
if (modifier < 0) {
finalModifier = (values[i] - modifier > attribute) ? -modifier : modifier;
} else {
if (values[i] > attribute && values[i] - modifier <= attribute) {
finalModifier = attribute - values[i];
} else if (values[i] > attribute && values[i] - modifier > attribute) {
finalModifier = -modifier;
} else if (values[i] <= attribute) {
finalModifier = Max([modifier, values[i] - attribute]);
}
}
// Add the dice to the array
dice.push({
original: values[i],
result: values[i] + finalModifier,
index: i,
diff: attribute - (values[i] + finalModifier),
success: values[i] + finalModifier <= attribute
});
}
// If there is a fumble, select it
var anyFumble = dice.some((die) => die.original == 20);
var succi = dice.filter((die) => die.success);
var fails = dice.filter((die) => !die.success);
if (anyFumble)
return {
selected: dice.find((die) => die.original == 20),
dice: dice,
succi: succi,
fails: fails
};
// Select dice with success and the closest result
if (fails.length > 0) {
fails.sort((a, b) => b.result - a.result);
return {selected: fails[0], dice: dice};
} else {
dice.sort((a, b) => a.result - b.result);
if (dice.filter((die) => die.diff == 0).some((die) => die.original == attribute))
return {selected: dice.find((die) => die.diff == 0 && die.original == attribute), dice: dice};
else
return {selected: dice[0], dice: dice};
}
}
function ComputeOneDieResult(value, attribute, modifier) {
// In case of a critical or a fumble, we don't care about the modifier
// Critical
if (value == attribute) {
return {total: value, result: "Critical!"};
}
// Fumble
else if (value == 20) {
return {total: value, result: "Fumble…"};
}
// Failure before modifier
else if (value > attribute) {
// Negative modifier result in a harsher failure
if (modifier < 0) {
return {total: value - modifier, result: "Failure"};
}
// Positive modifier may result in a success
else {
// Success if the modifier is enough to reach the attribute
if (value - modifier <= attribute) {
return {total: attribute, result: "Success"};
}
// Failure if the modifier is not enough to reach the attribute
else {
return {total: value - modifier, result: "Failure"};
}
}
}
// Success before modifier
else {
// Negative modifier may result in a failure
if (modifier < 0) {
// Failure if the modifier is enough to overshoot the attribute
if (value - modifier > attribute) {
return {total: value - modifier, result: "Failure"};
}
// If it's still a success, reduce the roll to make it less good
else {
return {total: value + modifier, result: "Success"};
}
}
else {
// Positive modifier result in a better success
if (value + modifier >= attribute) {
return {total: attribute, result: "Success"};
}
// In any case, increase the roll to make it better
else {
return {total: value + modifier, result: "Success"};
}
}
}
}
function ComputeWithEdge(values, attribute, modifier) {
var result = GetClosest(values, attribute, modifier);
if (result.selected.original == attribute) {
return {total: result.selected.original, result: "Critical!"};
} else if (result.selected.original == 20) {
return {total: result.selected.original, result: "Fumble…"};
} else if (result.selected.success) {
return {total: result.selected.result, result: "Success"};
} else {
return {total: result.selected.result, result: "Failure"};
}
}
function ComputeWithSnag(values, attribute, modifier) {
var result = GetFarthest(values, attribute, modifier);
if (result.selected.original == attribute) {
return {total: result.selected.original, result: "Critical!"};
} else if (result.selected.original == 20) {
return {total: result.selected.original, result: "Fumble…"};
} else if (result.selected.success) {
return {total: result.selected.result, result: "Success"};
} else {
return {total: result.selected.result, result: "Failure"};
}
}
const rollCarac = ["might", "deftness", "grit", "insight", "aura"].flatMap(name => {
return Array.from({ length: 20 }, (_, i) => `clicked:${name}Square${i + 1}`);
}).join(' ');
on(`${rollCarac}`, function(eventInfo) {
const squareNumber = parseInt(eventInfo.triggerName.replace(/\D/g, "")) || -1;
if (squareNumber == -1) {
return;
}
var attribute = eventInfo.triggerName.replace("clicked:", "").replace("square", "").replace(squareNumber, "");
attribute = attribute.charAt(0).toUpperCase() + attribute.slice(1);
const attributeName = attribute;
getAttrs(["character_name"], function(values) {
var character_name = values["character_name"]||"";
const rollString = `@{rollWhisperType} &{template:carac} {{charName=${character_name}}} {{rollName=${attributeName} ${squareNumber}}} {{roll1=[[[[1+abs(?{Roll Type|Basic, 0|Edge, 1|Snag, -1})]]d20cs${squareNumber}cf20 +?{Modifiers|0}]]}} {{rollType=[[?{Roll Type|Basic, 0|Edge, 1|Snag, -1}]]}} {{modifier=[[?{Modifiers|0}]]}} {{attribute=[[${squareNumber}]]}} {{result=[[0]]}}`;
startRoll(rollString, function(results) {
const l_roll1 = results.results.roll1;
const modifier = parseInt(results.results.modifier.result)||0;
const rollType = parseInt(results.results.rollType.result)||0;
var l_selectedDie = 0;
if (rollType == 0) {
l_selectedDie = ComputeOneDieResult(l_roll1.dice[0], squareNumber, modifier);
} else if (rollType == 1) {
l_selectedDie = ComputeWithEdge(l_roll1.dice, squareNumber, modifier);
} else {
l_selectedDie = ComputeWithSnag(l_roll1.dice, squareNumber, modifier);
}
var l_rollType = "";
if (rollType == 0) {
l_rollType = "Basic";
} else if (rollType == 1) {
l_rollType = "Edge";
} else {
l_rollType = "Snag";
}
const computed = {
roll1: l_selectedDie.total,
result: l_selectedDie.result,
attribute: squareNumber
};
finishRoll(results.rollId, computed);
});
});
});
const rollAttributes = ["might", "deftness", "grit", "insight", "aura"].map(name => `clicked:${name}`).join(' ');
on(`${rollAttributes}`, function(eventInfo) {
const attributeName = eventInfo.triggerName.replace("clicked:", "");
getAttrs([`${attributeName}_total`, "character_name"], function(values) {
const attribute = parseInt(values[`${attributeName}_total`])||0;
const character_name = values["character_name"]||"";
const rollString = `@{rollWhisperType} &{template:carac} {{charName=${character_name}}} {{rollName=${attributeName}}} {{roll1=[[[[1+abs(?{Roll Type|Basic, 0|Edge, 1|Snag, -1})]]d20cs${attribute}cf20 +?{Modifiers|0}]]}} {{rollType=[[?{Roll Type|Basic, 0|Edge, 1|Snag, -1}]]}} {{modifier=[[?{Modifiers|0}]]}} {{attribute=[[${attribute}]]}} {{result=[[0]]}}`;
startRoll(rollString, function(results) {
const l_roll1 = results.results.roll1;
const modifier = parseInt(results.results.modifier.result)||0;
const rollType = parseInt(results.results.rollType.result)||0;
var l_selectedDie = 0;
if (rollType == 0) {
l_selectedDie = ComputeOneDieResult(l_roll1.dice[0], attribute, modifier);
} else if (rollType == 1) {
l_selectedDie = ComputeWithEdge(l_roll1.dice, attribute, modifier);
} else {
l_selectedDie = ComputeWithSnag(l_roll1.dice, attribute, modifier);
}
var l_rollType = "";
if (rollType == 0) {
l_rollType = "Basic";
} else if (rollType == 1) {
l_rollType = "Edge";
} else {
l_rollType = "Snag";
}
const computed = {
roll1: l_selectedDie.total,
result: l_selectedDie.result,
attribute: attribute
};
finishRoll(results.rollId, computed);
});
});
});
on("clicked:health", function() {
getAttrs(["health_total"], function(values) {
var healthTotal = parseInt(values["health_total"])||0;
var output = {};
output["health_hearts"] = healthTotal;
setAttrs(output, {silent: false});
});
});
on("change:health_base change:health_modifier sheet:opened", function() {
getAttrs(["health_base", "health_modifier", "health_hearts"], function(values) {
const output = {};
var base = parseInt(values["health_base"])||0;
var modifier = parseInt(values["health_modifier"])||0;
var hearts = parseInt(values["health_hearts"])||0;
var total = base + modifier;
output["health_total"] = total;
for (let i = 1; i <= total; i++) {
output[`health_heart_${i}`] = (i <= hearts) ? 1 : 0;
}
for (let i = total + 1; i <= 10; i++) {
output[`health_heart_${i}`] = -1;
}
if (hearts > total) {
output["health_hearts"] = total;
}
setAttrs(output, {silent: true});
});
});
const damageButtons = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(i => `clicked:health_heart_${i}`).join(' ');
on(`${damageButtons}`, function(eventInfo) {
const triggerName = eventInfo.triggerName.replace("clicked:", "");
const eventSource = triggerName.replace("health_heart_", "");
const getAttrsParameters = ["health_total", "health_hearts", triggerName]
getAttrs(getAttrsParameters, function(values) {
const lastHearts = parseInt(values["health_hearts"])||0;
const clicked = parseInt(eventSource) || 3;
const lastValue = values[triggerName];
const total = parseInt(values["health_total"])||0;
const output = {};
if (clicked > lastHearts)
{
for (let i = 1; i <= clicked; i++) {
output[`health_heart_${i}`] = "1";
}
output["health_hearts"] = clicked;
}
else if (clicked < lastHearts)
{
for (let i = total; i > clicked; i--) {
output[`health_heart_${i}`] = "0";
}
output["health_hearts"] = clicked;
}
else
{
output[`health_heart_${clicked}`] = (lastValue == "1") ? "0" : "1";
output["health_hearts"] = clicked - (lastValue == "1" ? 1 : 0);
}
setAttrs(output, {silent: true});
});
});
on("change:health_hearts", function() {
getAttrs(["health_hearts", "health_total"], function(values) {
const hearts = parseInt(values["health_hearts"])||0;
const total = parseInt(values["health_total"])||0;
const output = {};
for (let i = 1; i <= 10; i++) {
if (i <= total)
output[`health_heart_${i}`] = (i <= hearts) ? "1" : "0";
else
output[`health_heart_${i}`] = "-1";
}
if (hearts > total) {
output["health_hearts"] = total;
}
setAttrs(output, {silent: true});
});
});
on("change:defense_rating change:defense_rating_modifier change:speed_rating_total change:size", function() {
getAttrs(["defense_rating", "defense_rating_modifier", "speed_rating_total", "size"], function(values) {
var output = {};
var base = parseInt(values["defense_rating"])||0;
var modifier = parseInt(values["defense_rating_modifier"])||0;
var speed = parseInt(values["speed_rating_total"])||0;
var speed_defense_modifier = 0;
if (speed <= 1) {
speed_defense_modifier = 0;
} else if (speed == 2) {
speed_defense_modifier = 2;
} else if (speed >= 3) {
speed_defense_modifier = 4;
}
var size_defense_modifier = 0;
switch (values["size"]) {
case "0":
size_defense_modifier = 1;
break;
case "2":
size_defense_modifier = -1;
break;
}
var total = base + modifier + speed_defense_modifier + size_defense_modifier;
output["defense_rating_total"] = total;
output["speed_defense_modifier"] = speed_defense_modifier;
setAttrs(output, {silent: true});
});
});
const speedButtons = [0, 1, 2, 3].map(i => `clicked:speed_rating_${i}`).join(' ');
on(speedButtons, function(eventInfo) {
var output = {};
const eventSource = eventInfo.triggerName.replace("clicked:speed_rating_", "");
const eventSourceInt = parseInt(eventSource) || 1;
output["speed_rating"] = eventSourceInt;
output["speed_rating_modifier"] = 0;
setAttrs(output, {silent: false});
});
on("change:speed_rating change:speed_rating_modifier", function(eventInfo) {
getAttrs(["speed_rating", "speed_rating_modifier"], function(values) {
var output = {};
var base = parseInt(values["speed_rating"])||0;
var modifier = parseInt(values["speed_rating_modifier"])||0;
var total = base + modifier;
var speed_rating_name = "";
if (total <= 0)
speed_rating_name = "Slow";
else if (total == 1)
speed_rating_name = "Average";
else if (total == 2)
speed_rating_name = "Fast";
else if (total >= 3)
speed_rating_name = "Very Fast";
output["speed_rating_name"] = speed_rating_name;
output["speed_rating_total"] = total;
setAttrs(output, {silent: false});
});
});
on("change:size", function() {
getAttrs(["size"], function(values) {
var output = {};
switch (values["size"]) {
case "0":
output["inventory_base"] = 8;
break;
case "1":
output["inventory_base"] = 10;
break;
case "2":
output["inventory_base"] = 12;
break;
}
setAttrs(output, {silent: false});
});
});
on("change:inventory_base change:inventory_modifier", function() {
getAttrs(["inventory_base", "inventory_modifier"], function(values) {
var output = {};
var inventory = parseInt(values["inventory_base"])||0;
var modifier = parseInt(values["inventory_modifier"])||0;
var total = inventory + modifier;
output["inventory_total"] = total;
setAttrs(output, {silent: false});
});
});
const repeatingSum = (destinations, section, fields) => {
if (!Array.isArray(destinations)) destinations = [destinations.replace(/\s/g, '').split(',')];
if (!Array.isArray(fields)) fields = [fields.replace(/\s/g, '').split(',')];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce((m, id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))], []);
getAttrs([...attrArray], v => {
const getValue = (section, id, field) => v[`repeating_${section}_${id}_${field}`] === 'on' ? 1 : parseFloat(v[`repeating_${section}_${id}_${field}`]) || 0;
const commonMultipliers = (fields.length <= destinations.length) ? [] : fields.splice(destinations.length, fields.length - destinations.length);
const output = {};
destinations.forEach((destination, index) => {
output[destination] = idArray.reduce((total, id) => total + getValue(section, id, fields[index]) * commonMultipliers.reduce((subtotal, mult) => subtotal * getValue(section, id, mult), 1), 0);
});
setAttrs(output, {silent: false});
});
});
};
on("change:repeating_inventory change:repeating_inventory:inventory_size change:repeating_inventory:inventory_quantity remove:repeating_inventory", function() {
repeatingSum("total_weight", 'inventory', ['inventory_size', 'inventory_quantity']);
});
on("change:total_weight change:inventory_total", function() {
getAttrs(["total_weight", "inventory_total"], function(values) {
var output = {};
var total_weight = parseInt(values["total_weight"])||0;
var inventory_total = parseInt(values["inventory_total"])||0;
output["inventory_left"] = inventory_total - total_weight;
setAttrs(output, {silent: false});
});
});
on("change:repeating_weapons:weapon_attack_bonus", function() {
getAttrs(["repeating_weapons_weapon_attack_bonus", "attack_bonus_total"], function(values) {
var output = {};
const weapon_attack_bonus = parseInt(values["repeating_weapons_weapon_attack_bonus"])||0;
const attack_bonus_total = parseInt(values["attack_bonus_total"])||0;
var total_attack_bonus = weapon_attack_bonus + attack_bonus_total;
output["repeating_weapons_weapon_attack_bonus_label"] = "+" + total_attack_bonus;
setAttrs(output, {silent: false});
});
});
on("change:repeating_weapons:weapon_name change:repeating_weapons:weapon_attack_bonus change:repeating_weapons:weapon_damage change:repeating_weapons:weapon_critical_range change:repeating_weapons:weapon_extra_damage_value change:repeating_weapons:weapon_notes change:repeating_weapons:weapon_type", function() {
getAttrs(["repeating_weapons_weapon_damage_bonus", "damage_bonus_total"], function(values) {
var output = {};
const weapon_damage_bonus = parseInt(values["repeating_weapons_weapon_damage_bonus"])||0;
const damage_bonus_total = parseInt(values["damage_bonus_total"])||0;
var total_damage_bonus = weapon_damage_bonus + damage_bonus_total;
output["repeating_weapons_weapon_damage_bonus_label"] = "+" + total_damage_bonus;
setAttrs(output, {silent: true});
});
});
on("change:repeating_weapons:weapon_type", function(eventInfo) {
const weapon_type = eventInfo.newValue;
var output = {};
switch (weapon_type) {
case "-1":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 20;
output["repeating_weapons_weapon_damage_bonus"] = 0;
output["repeating_weapons_weapon_notes"] = "Desperate situations sometimes call for adventurers to strike out with their bare hands.<br>Unarmed strikes suffer a Snag on their Attack roll when directed at armed or armored enemies.";
break;
case "0":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 20;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Standard Weapons are simple yet practical death dealing implements with no added frills.";
break;
case "1":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 22;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Concealed Weapons are usually small so that they can be hidden about your person with ease.<br> Unlike other arms, Concealed Weapons are not immediately visible.<br>During a Fight, drawing and striking with a Concealed Weapon can be performed in one Action.<br>Weapon Ability, Sneaky Swipe: If your target isnt aware of your Concealed Weapon you may attempt to Ambush them, even when you are in plain sight.<br>Your Target must be in the same Battlefeld Area as you, but otherwise this attack works like a normal Ambush (´ p252).<br>If your Ambush is successful, others using Concealed or Thrown weapons can join in the Ambush.";
break;
case "2":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 22;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Quick Weapons are lighter arms that emphasize speed over power, prized by those who prefer evasive fghting.<br>Weapon Ability, Darting Style: You gain a +1 to your Defense Rating when using a Quick Weapon.";
break;
case "3":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 18;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "These fnely crafted weapons are often diffcult to use and rather expensive. As such, they are favored by the warrior elite.<br>Weapon Ability, Perfect Strike: You gain a +1 to your Attack rolls when using a Master Weapon.";
break;
case "4":
output["repeating_weapons_weapon_damage"] = 2;
output["repeating_weapons_weapon_critical_range"] = 20;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "These heavy weapons require both hands to use. Enjoyed by warriors who wish to quickly dispatch their enemies.<br>When wielding one-handed you suffer a Minor Penalty (-2) on Attack rolls, Attack Stunts, & Combat Tricks. <br>Weapon Ability, Crushing Blow: You do 2 Hearts of damage, instead of 1, on a successful Attack.";
break;
case "5":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 20;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Long weapons that allow their wielders to make wide, dangerous strokes that hit several enemies at once.<br>When wielding one-handed you suffer a Minor Penalty (-2) on Attack rolls, Attack Stunts, & Combat Tricks. <br>Weapon Ability, Deadly Sweep: You can hit two enemies in the same Battlefeld Area with one Attack. <br>Make a single Attack roll, and apply the result to both enemies.";
break;
case "6":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 22;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Weapons that incorporate a chain or cord, capable of reaching foes a considerable distance away. <br>Weapon Ability, Crack!: You can Attack an enemy up to 1 Battlefeld Area away.";
break;
case "7":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 22;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "These small, hand-held weapons are shaped and balanced specifcally for throwing. Sneaks love them.<br>Range: 1 Battlefeld Area away.<br>Loading Time: None, but the weapon must be retrieved before reuse.<br>Weapon Ability, Hidden Fangs: If your target isnt aware of your Thrown Weapon, you may attempt to Ambush them, even when you are in plain sight.<br>Targets must be in Range, but otherwise this attack works like a normal Ambush (´ p252).<br>If your Ambush is successful, others using Concealed or Thrown weapons can join in the Ambush.";
break;
case "8":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 20;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Drawn Weapons include slingshots, bows, and other projectiles that require you to manually maintain tension.<br>Range: 2 Battlefeld Areas away.<br>Loading Time: These can be both loaded and fred in 1 Action.<br>You must use two hands while wielding a Drawn Missile Weapon.";
break;
case "9":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 18;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Mechanical Weapons are complex devices that require a lot of maintenance and upkeep. <br>They are often used by the military and other organizations that can afford to keep them in good repair.<br>Range: 2 Battlefeld Areas away.<br>Loading Time: These can be both loaded and fred in 1 Action.<br>You must use two hands while wielding a Mechanical Weapon.";
break;
case "10":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 18;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "While more accurate than their smaller cousins, these bombastic weapons are more cumbersome to operate.<br>Range: 2 Battlefeld Areas away.<br>Loading Time: 1 Action.<br>You must use two hands to load and fre these Weapons.<br>Weapon Ability, Thunderous Shot: You gain a +2 to your Attack roll.";
break;
case "11":
output["repeating_weapons_weapon_damage"] = 1;
output["repeating_weapons_weapon_critical_range"] = 20;
output["repeating_weapons_weapon_damage_bonus"] = 1;
output["repeating_weapons_weapon_notes"] = "Combination merges the benefts of two Weapon Types, making them diffcult and expensive to forge. <br>Combination Weapons inherit the properties of their two constituent weapons in the following way: <br>The Weapon Abilities of both. <br>The usage restrictions of both. <br>Take up the Inventory Slots from the largest of the two weapons. <br>The Extra Damage of the most effective weapon. <br>For example, a Master-Arc Combination Weapon would gain a +1 to Attack rolls (Master), be able to target two foes in the same area (Arc), require both hands to use without penalty (Arc), and take up 3 Inventory Slots (Arc). <br>If any Missile and Melee Weapon Types are combined, you must choose which mode of attack you are using for your Action (i.e Melee or Missile). <br>These weapons only beneft from Missile Weapon Abilities when making Missile attacks. <br>These weapons only beneft from Melee Weapon Abilities when making Melee attacks. <br>The Extra Damage value used is taken from the base weapon appropriate to your chosen mode of attack. <br>Concealed and Thrown Weapons can only be combined with each other, due to their small size. <br>Combining two weapons that each have an inherent Weapon Ability will take you to the 3 Ability limit. <br>Your GM may deem some combinations impossible. Common sense should be the guide.";
break;
default:
// Code for default case
break;
}
output["repeating_weapons_weapon_notes"] = output["repeating_weapons_weapon_notes"].replace(/<br>/g, "\n");
setAttrs(output, {silent: true});
});
on("change:attack_bonus_total", function() {
getSectionIDs("repeating_weapons", function(idArray) {
const attrArray = idArray.reduce((m, id) => [...m, `repeating_weapons_${id}_weapon_attack_bonus`], []);
getAttrs([...attrArray, "attack_bonus_total"], function(values) {
var output = {};
const attack_bonus_total = parseInt(values["attack_bonus_total"])||0;
idArray.forEach(id => {
const weapon_attack_bonus = parseInt(values[`repeating_weapons_${id}_weapon_attack_bonus`])||0;
var total_attack_bonus = weapon_attack_bonus + attack_bonus_total;
output[`repeating_weapons_${id}_weapon_attack_bonus_label`] = "+" + total_attack_bonus;
});
setAttrs(output, {silent: false});
});
});
});
function getNextXp(rank) {
const level_xp = [0, 6, 12, 24, 36, 48, 72, 96, 132, 168];
var next_xp = 0;
var increase = 36;
if (rank >= 0 && rank < level_xp.length) {
next_xp = level_xp[rank];
} else if (rank < 0) {
next_xp = 0;
} else {
next_xp = 168;
for (var i = 10; i <= rank; i++) {
increase += 12 * Math.floor((i + 2 - 10) / 3);
}
next_xp += (36 * (rank - 10)) + increase;
}
return next_xp;
}
on("change:rank", function(eventInfos) {
const rank = parseInt(eventInfos.newValue);
var output = {};
output["xp_next"] = getNextXp(rank);
console.log(eventInfos, output);
setAttrs(output, {silent: false});
});
</script>