mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
3072 lines
166 KiB
HTML
3072 lines
166 KiB
HTML
<div class="wrapper">
|
|
<input class="hidden" type="text" name="attr_sheet_version" value="1.0" />
|
|
<input class="hidden page-view" type="checkbox" name="attr_page_view" value="0" checked />
|
|
<input class="hidden page-view" type="checkbox" name="attr_page_view" value="1" />
|
|
<input class="hidden show-creature" type="checkbox" name="attr_show_creature" value="1" />
|
|
<nav class="small-nav">
|
|
<label for="page_view_0" data-i18n-title="view-sheet-left" title="View Left">
|
|
<span></span>
|
|
<input class="hidden page-view" type="radio" id="page_view_0" name="attr_page_view" value="0" title="@{page_view}" checked/>
|
|
</label>
|
|
<label for="page_view_1" data-i18n-title="view-sheet-right" title="View Right">
|
|
<span></span>
|
|
<input class="hidden page-view" type="radio" id="page_view_1" name="attr_page_view" value="1" title="@{page_view}" />
|
|
</label>
|
|
</nav>
|
|
<div class="show-creature-style">
|
|
<label for="show_creature" data-i18n-title="toggle-creature-sheet">
|
|
<input type="checkbox" id="show_creature" name="attr_show_creature" value="1" title="@{show_creature}" />
|
|
<span class="pc-sheet" data-i18n="player-character-abbrv">PC</span>
|
|
<span>|</span>
|
|
<span class="creature-sheet" data-i18n="creature-u">CREATURE</span>
|
|
</label>
|
|
</div>
|
|
<section class="show-pc">
|
|
<div class="col1">
|
|
<div class="col1-a">
|
|
<span class="header-left"></span>
|
|
<section class="name">
|
|
<span class="section-header kanji-text class-column-one">名</span>
|
|
<span class="section-header name-style span-2" data-i18n="character-name-u">NAME</span>
|
|
<input class="span-2" type="text" name="attr_character_name" title="@{character_name}" value="" />
|
|
</section>
|
|
<section class="nickname">
|
|
<span class="class-column-one"></span>
|
|
<span class="section-header name-style span-2" data-i18n="character-nickname-u">NICKNAME</span>
|
|
<input class="span-2" type="text" name="attr_character_nickname" title="@{character_nickname}" value="" />
|
|
</section>
|
|
<section class="class">
|
|
<span class="section-header kanji-text class-column-one">階 級</span>
|
|
<span class="section-header name-style span-2" data-i18n="class-u">CLASS</span>
|
|
<input class="span-2" type="text" name="attr_class" value="" title="@{class}">
|
|
</section>
|
|
<section class="description">
|
|
<span class="section-header" data-i18n="description-abilities">Description/Abilities</span>
|
|
<textarea name="attr_description" title="@{description}"></textarea>
|
|
</section>
|
|
<section class="features">
|
|
<span class="section-header" data-i18n="features">Features</span>
|
|
<textarea name="attr_features" title="@{features}"></textarea>
|
|
</section>
|
|
<section class="texts">
|
|
<!-- TEXTS -->
|
|
<div>
|
|
<button type="roll" name="roll_dailytexts" title="%{dailytexts}" value="@{dailytexts}">
|
|
<span class="section-header texts-style" data-i18n="texts-u">TEXTS</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_dailytexts-button"></button>
|
|
<input type="text" class="hidden" name="attr_dailytexts" value="" />
|
|
|
|
<span class="section-notes" data-i18n="texts-notes-1">Spirit +d4 times per day =</span>
|
|
<span class="nowrap">
|
|
<input type="text" class="input-width-small" name="attr_texts_per_day" value="0" title="@{texts_per_day}" />
|
|
<span style="color: initial;">/</span>
|
|
<input type="text" class="input-width-small" name="attr_texts_per_day_max" value="0" title="@{texts_per_day|max}" />
|
|
<button type="roll" name="roll_kamisvengeance" title="%{kamisvengeance}" value="@{kamisvengeance}">
|
|
<span class="kamis-style" data-i18n="kamis-vengeance">Kamis Vengeance</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_kamisvengeance-button"></button>
|
|
<input type="text" class="hidden" name="attr_kamisvengeance" value="" />
|
|
</span>
|
|
</div>
|
|
<fieldset class="repeating_texts">
|
|
<div class="flex-row">
|
|
<span class="nowrap">
|
|
<input type="text" name="attr_name" class="input-width-large" value="" title="@{repeating_texts_$X_name}" />
|
|
<button type="roll" name="roll_test" title="%{repeating_texts_$X_test}" value="@{test}"></button>
|
|
<button type="action" class="hidden" name="act_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_test" value="" />
|
|
</span>
|
|
<textarea name="attr_description" class="input-width-full" title="@{repeating_texts_$X_description}"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
<div class="section-notes center" data-i18n="texts-notes-2" style="margin-inline: 15%;">Spirit DR12, or -d2 HP and no Texts for 1 hour</div>
|
|
</section>
|
|
<section class="col1-footer">
|
|
<span class="credits"></span>
|
|
<button type='roll' name='roll_senshi' title='www.slightlyrecklessgames.com/senshi' value='[www.slightlyrecklessgames.com/senshi](https://www.slightlyrecklessgames.com/senshi)'>
|
|
<span data-i18n="character-generator">Character Generator</span>
|
|
</button>
|
|
</section>
|
|
</div>
|
|
<div class="col1-b">
|
|
<section class="logo">
|
|
<div class="virtues">
|
|
<!-- VIRTUES -->
|
|
<div class="virtues-box span-all">
|
|
<button type="roll" name="roll_virtues" title="%{virtues}" value="@{virtues}">
|
|
<span class="section-header virtues-style" data-i18n="virtues-u">VIRTUES</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_virtues-button"></button>
|
|
<input type="text" class="hidden" name="attr_virtues" value="" />
|
|
</div>
|
|
<div class="span-all">
|
|
<label>
|
|
<span class="die-style" data-i18n="die-u">DIE:</span>
|
|
<select class="input-width-small" name="attr_virtue_die" title="@{virtue_die}">
|
|
<option value="2" selected>d2</option>
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
</select>
|
|
</label>
|
|
<label>
|
|
<input type="text" class="input-width-small" name="attr_virtue" value="0" title="@{virtue}" />
|
|
<span>/</span>
|
|
<input type="text" class="input-width-small" name="attr_virtue_max" value="0" title="@{virtue|max}" />
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section class="swiftness">
|
|
<!-- ABILITIES -->
|
|
<button type="roll" name="roll_swiftness_test" title="%{swiftness_test}" value="@{swiftness_test}">
|
|
<span class="section-header" data-i18n="swiftness-u">SWIFTNESS</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_swiftness_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_swiftness_test" value="" />
|
|
<span class="ability-base-mod">
|
|
<select name="attr_swiftness" class="ability-input" title="@{swiftness}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
<select name="attr_swiftness_mod" class="ability-mod" title="@{swiftness_mod}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>+0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
</span>
|
|
<!-- INITIATIVE-->
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_initiative" data-i18n-title="initiative-group" title="Group Initiative | %{initiative}" value="@{initiative}">
|
|
<span data-i18n="roll-initiative">d6 Initiative</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_initiative-button"></button>
|
|
<input type="text" class="hidden" name="attr_initiative" value="" />
|
|
|
|
<button type="roll" name="roll_initiative2" data-i18n-title="initiative-individual" title="Individual Initiative, Swiftness +d6 | %{initiative2}" value="@{initiative2}">
|
|
<span data-i18n="roll-initiative-individual">Swiftness + d6</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_initiative2-button"></button>
|
|
<input type="text" class="hidden" name="attr_initiative2" value="" />
|
|
</div>
|
|
</section>
|
|
<section class="spirit">
|
|
<button type="roll" name="roll_spirit_test" title="%{spirit_test}" value="@{spirit_test}">
|
|
<span class="section-header" data-i18n="spirit-u">SPIRIT</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_spirit_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_spirit_test" value="" />
|
|
<span class="ability-base-mod">
|
|
<select name="attr_spirit" class="ability-input" title="@{spirit}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
<select name="attr_spirit_mod" class="ability-mod" title="@{spirit_mod}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>+0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
</span>
|
|
</section>
|
|
<section class="vigor">
|
|
<button type="roll" name="roll_vigor_test" title="%{vigor_test}" value="@{vigor_test}">
|
|
<span class="section-header" data-i18n="vigor-u">VIGOR</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_vigor_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_vigor_test" value="" />
|
|
<span class="ability-base-mod">
|
|
<select name="attr_vigor" class="ability-input" title="@{vigor}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
<select name="attr_vigor_mod" class="ability-mod" title="@{vigor_mod}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>+0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
</span>
|
|
</section>
|
|
<section class="resilience">
|
|
<button type="roll" name="roll_resilience_test" title="%{resilience_test}" value="@{resilience_test}">
|
|
<span class="section-header" data-i18n="resilience-u">RESILIENCE</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_resilience_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_resilience_test" value="" />
|
|
<span class="ability-base-mod">
|
|
<select name="attr_resilience" class="ability-input" title="@{resilience}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
<select name="attr_resilience_mod" class="ability-mod" title="@{resilience_mod}">
|
|
<option value="6">+6</option>
|
|
<option value="5">+5</option>
|
|
<option value="4">+4</option>
|
|
<option value="3">+3</option>
|
|
<option value="2">+2</option>
|
|
<option value="1">+1</option>
|
|
<option value="0" selected>+0</option>
|
|
<option value="-1">-1</option>
|
|
<option value="-2">-2</option>
|
|
<option value="-3">-3</option>
|
|
<option value="-4">-4</option>
|
|
<option value="-5">-5</option>
|
|
<option value="-6">-6</option>
|
|
</select>
|
|
</span>
|
|
</section>
|
|
<section class="honour">
|
|
<!-- HONOUR -->
|
|
<span class="section-header honour-style" data-i18n="honour-u">HONOUR</span>
|
|
<div class="honour-grid" title="@{honour}">
|
|
<label style="left: -18px;"><input type="radio" name="attr_honour" value="1" title="@{honour}"><span>1</span></label>
|
|
<label><input type="radio" name="attr_honour" value="2" title="@{honour}"><span>2</span></label>
|
|
<label><input type="radio" name="attr_honour" value="3" title="@{honour}"><span>3</span></label>
|
|
<label><input type="radio" name="attr_honour" value="4" title="@{honour}"><span>4</span></label>
|
|
<label><input type="radio" name="attr_honour" value="5" title="@{honour}"><span>5</span></label>
|
|
<label><input type="radio" name="attr_honour" value="6" title="@{honour}"><span>6</span></label>
|
|
<label><input type="radio" name="attr_honour" value="7" title="@{honour}"><span>7</span></label>
|
|
<label><input type="radio" name="attr_honour" value="8" title="@{honour}"><span>8</span></label>
|
|
<label><input type="radio" name="attr_honour" value="9" title="@{honour}"><span>9</span></label>
|
|
<label><input type="radio" name="attr_honour" value="10" title="@{honour}" checked /><span>10</span></label>
|
|
<label><input type="radio" name="attr_honour" value="11" title="@{honour}"><span>11</span></label>
|
|
<label><input type="radio" name="attr_honour" value="12" title="@{honour}"><span>12</span></label>
|
|
<label><input type="radio" name="attr_honour" value="13" title="@{honour}"><span>13</span></label>
|
|
<label><input type="radio" name="attr_honour" value="14" title="@{honour}"><span>14</span></label>
|
|
<label><input type="radio" name="attr_honour" value="15" title="@{honour}"><span>15</span></label>
|
|
<label><input type="radio" name="attr_honour" value="16" title="@{honour}"><span>16</span></label>
|
|
<label><input type="radio" name="attr_honour" value="17" title="@{honour}"><span>17</span></label>
|
|
<label><input type="radio" name="attr_honour" value="18" title="@{honour}"><span>18</span></label>
|
|
<label><input type="radio" name="attr_honour" value="19" title="@{honour}"><span>19</span></label>
|
|
<label><input type="radio" name="attr_honour" value="20" title="@{honour}"><span>20</span></label>
|
|
</div>
|
|
</section>
|
|
<section class="woes">
|
|
<!-- WOES -->
|
|
<span class="section-header woes-style" data-i18n="woes-u">WOES</span>
|
|
<div class="woes-grid" title="@{woes}">
|
|
<label style="bottom: -19px; right: -11px;"><input type="radio" name="attr_woes" value="0" title="@{woes}" checked /><span>0</span></label>
|
|
<label><input type="radio" name="attr_woes" value="1" title="@{woes}" /><span>1</span></label>
|
|
<label><input type="radio" name="attr_woes" value="2" title="@{woes}" /><span>2</span></label>
|
|
<label><input type="radio" name="attr_woes" value="3" title="@{woes}" /><span>3</span></label>
|
|
<label style="top: -16px; left: -5px;"><input type="radio" name="attr_woes" value="4" title="@{woes}" /><span>4</span></label>
|
|
<label style="left: -7px; top: -10px;"><input type="radio" name="attr_woes" value="5" title="@{woes}" /><span>5</span></label>
|
|
<label style="left: -11px;"><input type="radio" name="attr_woes" value="6" title="@{woes}" /><span>6</span></label>
|
|
<label><input type="radio" name="attr_woes" value="7" title="@{woes}" /><span>黑</span></label>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
<div class="col2">
|
|
<section class="weapons">
|
|
<div class="weapon-notes-style section-notes">
|
|
<label for="weapon_notes_max_damage" data-i18n-title="weapon-notes">
|
|
<input type="checkbox" id="weapon_notes_max_damage" name="attr_weapon_notes_max_damage" value="1"/>
|
|
<span data-i18n="weapon-notes-max-damage">Maximum damage</span>
|
|
</label>
|
|
<label for="weapon_notes_reroll" data-i18n-title="weapon-notes">
|
|
<input type="checkbox" id="weapon_notes_reroll" name="attr_weapon_notes_reroll" value="1"/>
|
|
<span data-i18n="weapon-notes-reroll">Reroll</span>
|
|
</label>
|
|
<label for="weapon_notes_damage_less_d6" data-i18n-title="weapon-notes">
|
|
<input type="checkbox" id="weapon_notes_damage_less_d6" name="attr_weapon_notes_damage_less_d6" value="1"/>
|
|
<span data-i18n="weapon-notes-d6">-d6 damage</span>
|
|
</label>
|
|
<label for="weapon_notes_dr_less_d4" data-i18n-title="weapon-notes">
|
|
<input type="checkbox" id="weapon_notes_dr_less_d4" name="attr_weapon_notes_dr_less_d4" value="1"/>
|
|
<span data-i18n="weapon-notes-dr">DR -4</span>
|
|
</label>
|
|
<label for="weapon_notes_no_crit_fumble" data-i18n-title="weapon-notes">
|
|
<input type="checkbox" id="weapon_notes_no_crit_fumble" name="attr_weapon_notes_no_crit_fumble" value="1"/>
|
|
<span data-i18n="weapon-notes-no-crit-fumble">No Crit/Fumble</span>
|
|
</label>
|
|
<label for="weapon_notes_auto_parry" data-i18n-title="weapon-notes">
|
|
<input type="checkbox" id="weapon_notes_auto_parry" name="attr_weapon_notes_auto_parry" value="1"/>
|
|
<span data-i18n="weapon-notes-auto-parry">Auto Parry</span>
|
|
</label>
|
|
</div>
|
|
<!-- WEAPONS -->
|
|
<div class="weapons-grid">
|
|
<span class="span-all sword-image"></span>
|
|
|
|
<span class="span-2 section-header weapon-style" data-i18n="weapons-u">WEAPONS</span>
|
|
<span></span>
|
|
<span class="span-2">
|
|
<label for="duel" data-i18n-title="duel-mode-toggle" title="Enable/Disable Dueling features">
|
|
<input type="checkbox" class="show-duel" id="duel" name="attr_duel" value="1" title="@{duel}">
|
|
<span class="dueling-style" data-i18n="dueling-u">DUELING</span>
|
|
</label>
|
|
</span>
|
|
|
|
<span class="column-header"></span>
|
|
<span class="column-header" data-i18n="damage-abbrv">DMG</span>
|
|
<span class="column-header" data-i18n="weapon-type">Type</span>
|
|
<span class="column-header" data-i18n="weapon-broken">Broken</span>
|
|
<span class="column-header" data-i18n="weapon-action">Action</span>
|
|
|
|
<input type="checkbox" class="hidden show-duel" id="duel" name="attr_duel" value="1">
|
|
<fieldset class="repeating_weapons">
|
|
<div class="weapons-grid-row">
|
|
<input type="hidden" name="attr_crit_multiplier" value="1" />
|
|
<input type="text" class="input-width-full" name="attr_name" value="" title="@{repeating_weapons_$X_name}" />
|
|
<input type="text" class="input-width-full center" name="attr_damage" value="d2" data-i18n-title="valid-input-damage" title="@{repeating_weapons_$X_damage} | example; 'd4', '1d8', '2d6+3', etc." />
|
|
<select name="attr_type" title="@{repeating_weapons_$X_type}">
|
|
<option value="@{vigor}" data-i18n="striking" selected>Striking</option>
|
|
<option value="@{spirit}" data-i18n="ranged">Ranged</option>
|
|
</select>
|
|
<input type="hidden" name="attr_type_label" value="" />
|
|
<input type="hidden" name="attr_type_label_ability" value="" />
|
|
<input type="hidden" name="attr_type_mod" value="0" />
|
|
|
|
<input type="checkbox" class="lost-broken" name="attr_broken_weapon" value="1" data-i18n-title="lost-broken" />
|
|
<label class="lost-broken">
|
|
<span data-i18n="lost-broken">Lost/Broken</span>
|
|
<input type="checkbox" class="lost-broken hidden" name="attr_broken_weapon" value="1" />
|
|
</label>
|
|
<!-- normal -->
|
|
<span class="weapon-actions normal-view">
|
|
<button type="roll" name="roll_attack" title="%{repeating_weapons_$X_attack}" value="@{attack}">
|
|
<span data-i18n="attack">Attack</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_attack-button"></button>
|
|
<input type="text" class="hidden" name="attr_attack" value="" />
|
|
|
|
<button type="roll" name="roll_parry" title="%{repeating_weapons_$X_parry}" value="@{parry}">
|
|
<span data-i18n="parry">Parry</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_parry-button"></button>
|
|
<input type="text" class="hidden" name="attr_parry" value="" />
|
|
</span>
|
|
<!-- dueling -->
|
|
<span class="weapon-actions dueling-view">
|
|
<button type="roll" name="roll_attack" title="%{repeating_weapons_$X_attack}" value="@{attack}">
|
|
<span data-i18n="attack">Attack</span>
|
|
</button>
|
|
|
|
<button type="roll" name="roll_guard" title="%{repeating_weapons_$X_guard}" value="@{guard}">
|
|
<span data-i18n="guard">Guard</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_guard-button"></button>
|
|
<input type="text" class="hidden" name="attr_guard" value="" />
|
|
|
|
<button type="roll" name="roll_riposte" title="%{repeating_weapons_$X_riposte}" value="@{riposte}">
|
|
<span data-i18n="riposte">Riposte</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_riposte-button"></button>
|
|
<input type="text" class="hidden" name="attr_riposte" value="" />
|
|
</span>
|
|
</div>
|
|
<input type="checkbox" class="weapon-type hidden" name="attr_show_ranged" value="1"/>
|
|
<div class="weapons-grid-row show-ranged">
|
|
<span class="span-4 right">
|
|
<span class="nowrap">
|
|
<input type="text" class="input-width-smallest" name="attr_ammo" value="1" title="@{repeating_weapons_$X_ammo}" />
|
|
<span style="color: initial;">/</span>
|
|
<input type="text" class="input-width-smallest" name="attr_ammo_max" value="1" title="@{repeating_weapons_$X_ammo|max}" />
|
|
</span>
|
|
<label class="nowrap" data-i18n-title="track-ammo-title">
|
|
<input type="checkbox" name="attr_track_ammo" value="1" title="@{repeating_weapons_$X_track_ammo}" />
|
|
<span class="column-header" data-i18n="track-ammo-u">TRACK</span>
|
|
</label>
|
|
</span>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</section>
|
|
<section class="battle">
|
|
<!-- DEFENCE and PC DAMAGE-->
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_defence" title="%{defence}" value="@{defence}">
|
|
<span class="defence-style" data-i18n="defence-u">DEFENCE</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_defence-button"></button>
|
|
<input type="text" class="hidden" name="attr_defence" value="" />
|
|
</div>
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_takedamage" title="%{takedamage}" data-i18n-title="take-damage-title" value="@{takedamage}">
|
|
<span data-i18n="damage">Damage</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_takedamage-button"></button>
|
|
<input type="text" class="hidden" name="attr_takedamage" value="" />
|
|
|
|
<button type="roll" name="roll_takedamagenoarmour" title="%{takedamagenoarmour}" data-i18n-title="take-damage-without-armour-title" value="@{takedamagenoarmour}">
|
|
<span data-i18n="damage-without-armour">Damage(Armour N/A)</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_takedamagenoarmour-button"></button>
|
|
<input type="text" class="hidden" name="attr_takedamagenoarmour" value="" />
|
|
</div>
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_morale" title="%{morale}" value="@{morale}">
|
|
<span data-i18n="morale">Morale</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_morale-button"></button>
|
|
<input type="text" class="hidden" name="attr_morale" value="" />
|
|
|
|
<button type="roll" name="roll_reaction" title="%{reaction}" value="@{reaction}">
|
|
<span data-i18n="reaction">Reaction</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_reaction-button"></button>
|
|
<input type="text" class="hidden" name="attr_reaction" value="" />
|
|
</div>
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_dr_test" data-i18n-title="dr-test-roll" value="@{dr_test}">
|
|
<span class="defence-style" data-i18n="dr-test">DR Test</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_dr_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_dr_test" value="" />
|
|
|
|
<button type="roll" name="roll_dice" value="&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolling-dice}}} {{roll_dice=[[0]]}} {{roll=@{dice_query2} = [[@{dice_query2}]]}} {{roll_query_footer=[&nbsp;](`&#64;{@{character_name_safe}|dice_query_inline_roll})}}">
|
|
<span data-i18n="roll-dice-query">Roll Dice</span>
|
|
</button>
|
|
<button type="roll" name="roll_d66" value="&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolling-dice}}} {{roll_dice=[[0]]}} {{roll=d66 = [[1d6]]}} {{roll2=[[1d6]]}} {{roll_query_footer=[&nbsp;](`&#64;{@{character_name_safe}|dice_query_inline_roll})}}">d66</button>
|
|
</div>
|
|
</section>
|
|
<section class="armour">
|
|
<!-- ARMOUR -->
|
|
<span class="section-header armour-style" data-i18n="armour-u">ARMOUR</span>
|
|
<input type="text" class="left input-width-full" name="attr_armour" value="" title="@{armour}" />
|
|
<span></span>
|
|
<div class="armour-tier-grid" title="@{armour_tier}">
|
|
<label for="tier0"><input type="checkbox" id="tier0" name="attr_armour_tier" value="0" title="@{armour_tier}" checked /><span>-0</span></label>
|
|
<label for="tier1"><input type="checkbox" id="tier1" name="attr_armour_tier" value="2" title="@{armour_tier}" /><span>-d2</span></label>
|
|
<label for="tier2"><input type="checkbox" id="tier2" name="attr_armour_tier" value="4" title="@{armour_tier}" /><span>-d4</span></label>
|
|
<label for="tier3"><input type="checkbox" id="tier3" name="attr_armour_tier" value="6" title="@{armour_tier}" /><span>-d6</span></label>
|
|
<input type="hidden" name="attr_armour_swift_pen" value="0" />
|
|
<input type="hidden" name="attr_armour_def_pen" value="0" />
|
|
</div>
|
|
<span class="span-3 section-notes" data-i18n="armour-notes-tier2">Tier 2. +2 DR penalty on Swiftness tests. Defence is DR+2.</span>
|
|
<label for="armour_damaged" data-i18n-title="armour-damaged-note" title="When armour is damaged penalties to Vigor and Swiftness tests are not modified.">
|
|
<input type="checkbox" id="armour_damaged" name="attr_armour_damaged" value="1" title="@{armour_damaged}" />
|
|
<span class="damaged-style" data-i18n="damaged-u">DAMAGED</span>
|
|
</label>
|
|
<span class="span-all section-notes" data-i18n="armour-notes-tier3">Tier 3. +4 DR penalty on Swiftness tests. Defence is DR+2.</span>
|
|
</section>
|
|
<section class="equipment">
|
|
<!-- EQUIPMENT-->
|
|
<label class="ryo center">
|
|
<span class="kanji-text">両</span>
|
|
<input type="text" class="input-width-small" name="attr_ryo" value="0" title="@{ryo}" />
|
|
<span data-i18n="ryo-u">RYO</span>
|
|
</label>
|
|
<span class="section-notes equipment-notes" data-i18n="carrying-capacity-notes">Vigor+8 normal size items or DR+2 on Swiftness/Vigor tests</span>
|
|
<span class="section-header right equipment-style" data-i18n="equipment-u">EQUIPMENT</span>
|
|
|
|
<!-- CONSUMABLES -->
|
|
<div class="consumables">
|
|
<label class="center">
|
|
<input type="text" class="input-width-small" name="attr_food" value="0" title="@{food}" />
|
|
<span class="section-header font-special-elite" data-i18n="food">food</span>
|
|
</label>
|
|
<label class="center">
|
|
<input type="text" class="input-width-small" name="attr_water" value="0" title="@{water}" />
|
|
<span class="section-header font-special-elite" data-i18n="water">water</span>
|
|
</label>
|
|
<div class="center">
|
|
<button type="roll" name="roll_hunger" title="%{hunger}" value="@{hunger}">
|
|
<span class="font-jolly-lodger" data-i18n="hunger">Hunger</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_hunger-button"></button>
|
|
<input type="text" class="hidden" name="attr_hunger" value="" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="span-2">
|
|
<fieldset class="repeating_equipment">
|
|
<textarea class="input-width-full" name="attr_name" title="@{repeating_equipment_$X_name}"></textarea>
|
|
<select name="attr_weight" title="@{repeating_equipment_$X_weight}">
|
|
<option value="1" data-i18n-title="weight-normal-title" data-i18n="weight-normal" selected>Normal</option>
|
|
<option value="2" data-i18n-title="weight-heavy-title" data-i18n="weight-heavy">Heavy</option>
|
|
<option value="0" data-i18n-title="weight-not-applicable-abbrv-title" data-i18n="weight-not-applicable-abbrv">N/A</option>
|
|
</select>
|
|
</fieldset>
|
|
<span class="three-columns">
|
|
<label class="right span-2">
|
|
<span class="section-header" data-i18n="carrying-capacity">Carrying Capacity</span>
|
|
<input type="text" class="input-width-small" name="attr_carrying_capacity" value="0" title="@{carrying_capacity}" readonly/>
|
|
</label>
|
|
<span class="right">
|
|
<span class="section-header-inline" data-i18n="load">Load</span>
|
|
<input type="checkbox" class="hidden warning" name="attr_load_warning" value="1" />
|
|
<input type="text" class="input-width-small" name="attr_load" value="0" title="@{load}" readonly />
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</section>
|
|
<section class="tenets">
|
|
<!-- TENETS -->
|
|
<span class="section-header tenets-style" data-i18n="tenets-u">TENETS</span>
|
|
<div class="tenets-grid">
|
|
<label class="span-all center">
|
|
<input type="text" name="attr_tenets_title" value="" title="@{tenets_title}" />
|
|
</label>
|
|
<input type="text" class="input-width-medium" name="attr_tenets_1" value="" title="@{tenets_1}" />
|
|
<input type="text" class="input-width-medium" name="attr_tenets_2" value="" title="@{tenets_2}" />
|
|
<input type="text" class="input-width-medium" name="attr_tenets_3" value="" title="@{tenets_3}" />
|
|
<input type="text" class="input-width-medium" name="attr_tenets_4" value="" title="@{tenets_4}" />
|
|
<input type="text" class="input-width-medium" name="attr_tenets_5" value="" title="@{tenets_5}" />
|
|
<input type="text" class="input-width-medium" name="attr_tenets_6" value="" title="@{tenets_6}" />
|
|
</div>
|
|
<div class="right">
|
|
<button type="roll" name="roll_haiku" title="%{haiku}" value="@{haiku}">
|
|
<span class="haiku-style" data-i18n="haiku-u">HAIKU</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_haiku-button"></button>
|
|
<input type="text" class="hidden" name="attr_haiku" value="" />
|
|
|
|
<button type="roll" name="roll_improve" title="%{improve}" value="@{improve}">
|
|
<span class="chance-style" data-i18n="roll-improve">Chance to Improve</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_improve-button"></button>
|
|
<input type="text" class="hidden" name="attr_improve" value="" />
|
|
</div>
|
|
</section>
|
|
<section class="hp-box">
|
|
<label for="ressurection" class="resurrection vertical-text">
|
|
<input type="checkbox" id="ressurection" name="attr_resurrection" value="1" title="@{resurrection}" />
|
|
<span class="section-header" data-i18n="resurrection-u">RESURRECTION</span>
|
|
</label>
|
|
<label for="meditation" class="meditation vertical-text">
|
|
<input type="checkbox" id="meditation" name="attr_meditation" value="1" title="@{meditation}" />
|
|
<span class="section-header" data-i18n="meditation-u">MEDITATION</span>
|
|
</label>
|
|
<!-- HIT POINTS -->
|
|
<span class="hpCurrMax">
|
|
<span class="section-header span-all width-full red-background nowrap">
|
|
<span class="hit-points-style">
|
|
<span class="kanji-text" style="font-size: 1.85rem;margin-top: -3px;">害</span>
|
|
<span data-i18n="hit-points-mixed-case">HiT PoINts</span>
|
|
</span>
|
|
</span>
|
|
<span class="column-header center" data-i18n="current-u">CURRENT</span>
|
|
<span class="red-background"> </span>
|
|
<span class="column-header center" data-i18n="maximum-u">MAXIMUM</span>
|
|
<span>
|
|
<input type="checkbox" class="hidden warning" name="attr_hp_warning" value="1" />
|
|
<input type="text" class="ability-input" name="attr_hp" value="1" title="@{hp}" />
|
|
</span>
|
|
<span class="red-background"> </span>
|
|
<input type="text" class="ability-input" name="attr_hp_max" value="1" title="@{hp|max}" />
|
|
<!-- INFECTED -->
|
|
<div class="span-all nowrap red-background width-full">
|
|
<label for="infected" class="center">
|
|
<button type="roll" name="roll_infection" title="%{infection}" value="@{infection}">
|
|
<span class="infected-style" data-i18n-title="infection-poison" data-i18n="infected-u">INFECTED</span>
|
|
</button>
|
|
<input type="checkbox" id="infected" name="attr_infected" value="1" title="@{infected}" />
|
|
</label>
|
|
<button type="action" class="hidden" name="act_infection-button"></button>
|
|
<input type="text" class="hidden" name="attr_infection" value="" />
|
|
</div>
|
|
<!-- REST -->
|
|
<div class="span-all nowrap">
|
|
<span class="center">
|
|
<button type="roll" name="roll_rest" title="%{rest}" value="@{rest}">
|
|
<span data-i18n="rest">Short/Long REST</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_rest-button"></button>
|
|
<input type="text" class="hidden" name="attr_rest" value="" />
|
|
</span>
|
|
</div>
|
|
<!-- BROKEN roll -->
|
|
<div class="span-all nowrap">
|
|
<input type="checkbox" class="hidden broken-pc" name="attr_broken_warning" value="1"/>
|
|
<span class="broken-pc center">
|
|
<button type="roll" name="roll_broken" title="%{broken}" value="@{broken}">
|
|
<span data-i18n="broken-u">BROKEN</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_broken-button"></button>
|
|
<input type="text" class="hidden" name="attr_broken" value="" />
|
|
</span>
|
|
</div>
|
|
</span>
|
|
<span class="seppuku">
|
|
<label for="seppuku_status" class="span-all nowrap center">
|
|
<input type="checkbox" id="seppuku_status" name="attr_seppuku_status" value="1" title="@{seppuku_status}" />
|
|
<button type="roll" name="roll_seppuku" title="%{seppuku}" value="@{seppuku}">
|
|
<span class="infected-style" data-i18n="seppuku-u">SEPPUKU</span>
|
|
</button>
|
|
</label>
|
|
<button type="action" class="hidden" name="act_seppuku-button"></button>
|
|
<input type="text" class="hidden" name="attr_seppuku" value="" />
|
|
<div class="span-all center seppuku-box">
|
|
<!-- hide these after testing -->
|
|
<button type="roll" name="roll_seppuku2" title="%{seppuku2}" value="@{seppuku2}">
|
|
<span data-i18n="seppuku-u">SEPPUKU</span>2
|
|
</button>
|
|
<button type="action" class="hidden" name="act_seppuku2-button"></button>
|
|
<input type="text" class="hidden" name="attr_seppuku2" value="" />
|
|
|
|
<button type="roll" name="roll_seppukudamage" title="%{seppukudamage}" value="@{seppukudamage}">
|
|
<span data-i18n="damage">Damage</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_seppukudamage-button"></button>
|
|
<input type="text" class="hidden" name="attr_seppukudamage" value="" />
|
|
|
|
<button type="roll" name="roll_seppukuhonour" title="%{seppukuhonour}" value="@{seppukuhonour}">
|
|
<span data-i18n="honour-u">HONOUR</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_seppukuhonour-button"></button>
|
|
<input type="text" class="hidden" name="attr_seppukuhonour" value="" />
|
|
|
|
<button type="roll" name="roll_seppukuhonourhalf" title="%{seppukuhonourhalf}" value="@{seppukuhonourhalf}">
|
|
<span data-i18n="honour-u">HONOUR</span> ½
|
|
</button>
|
|
<button type="action" class="hidden" name="act_seppukuhonourhalf-button"></button>
|
|
<input type="text" class="hidden" name="attr_seppukuhonourhalf" value="" />
|
|
|
|
<button type="roll" name="roll_debilitating" title="%{debilitating}" value="@{debilitating}">
|
|
<span data-i18n="debilitating-injuries">Debilitating Injuries</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_debilitating-button"></button>
|
|
<input type="text" class="hidden" name="attr_debilitating" value="" />
|
|
</div>
|
|
</span>
|
|
</section>
|
|
<section class="legal-gutter">
|
|
<span class="legal-margin" data-i18n="legal-text">Rōnin is an independent production by Slightly Reckless Games and is not affiliated with Ockult Örtmästare Games or Stockholm Kartell. It is published under the MÖRK BORG Third Party License. ©Slightly Reckless Games. All Rights Reserved.</span>
|
|
</section>
|
|
</div>
|
|
</section>
|
|
<section class="show-creature">
|
|
<div class="col1">
|
|
<div class="col1-a">
|
|
<section class="name">
|
|
<span class="section-header kanji-text class-column-one">名</span>
|
|
<span class="section-header name-style span-2" data-i18n="creature-yokai-u">CREATURE/YOKAI</span>
|
|
<input class="span-2" type="text" name="attr_character_name" title="@{character_name}" value="" />
|
|
</section>
|
|
<section class="description">
|
|
<span class="section-header" data-i18n="description-abilities">Description/Abilities</span>
|
|
<textarea name="attr_description" title="@{description}"></textarea>
|
|
</section>
|
|
<section class="features">
|
|
<span class="section-header" data-i18n="special">Special</span>
|
|
<textarea name="attr_features" title="@{features}"></textarea>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
<div class="col2">
|
|
<section class="weapons">
|
|
<!-- WEAPONS -->
|
|
<div class="weapons-grid">
|
|
<span class="section-header weapon-style" data-i18n="weapons-u">WEAPONS</span>
|
|
<span class="column-header" data-i18n="damage-abbrv">DMG</span>
|
|
<span class="column-header" data-i18n="weapon-type">Type</span>
|
|
<span class="column-header" data-i18n="weapon-broken">Broken</span>
|
|
<span class="column-header" data-i18n="weapon-action">Action</span>
|
|
|
|
<input type="checkbox" class="hidden show-duel" id="duel" name="attr_duel" value="1">
|
|
<fieldset class="repeating_weapons">
|
|
<div class="weapons-grid-row">
|
|
<input type="hidden" name="attr_crit_multiplier" value="1" />
|
|
<input type="text" class="input-width-full" name="attr_name" value="" title="@{repeating_weapons_$X_name}" />
|
|
<input type="text" class="input-width-full center" name="attr_damage" value="d2" data-i18n-title="valid-input-damage" title="@{repeating_weapons_$X_damage} | example; 'd4', '1d8', '2d6+3', etc." />
|
|
<select name="attr_type" title="@{repeating_weapons_$X_type}">
|
|
<option value="@{vigor}" data-i18n="striking" selected>Striking</option>
|
|
<option value="@{spirit}" data-i18n="ranged">Ranged</option>
|
|
</select>
|
|
<input type="hidden" name="attr_type_label" value="" />
|
|
<input type="hidden" name="attr_type_label_ability" value="" />
|
|
<input type="hidden" name="attr_type_mod" value="0" />
|
|
|
|
<input type="checkbox" class="lost-broken" name="attr_broken_weapon" value="1" data-i18n-title="lost-broken" />
|
|
<label class="lost-broken">
|
|
<span data-i18n="lost-broken">Lost/Broken</span>
|
|
<input type="checkbox" class="lost-broken hidden" name="attr_broken_weapon" value="1" />
|
|
</label>
|
|
<!-- normal -->
|
|
<span class="weapon-actions center">
|
|
<button type="roll" name="roll_monsterdamage" title="%{repeating_weapons_$X_monsterdamage}" value="@{monsterdamage}">
|
|
<span data-i18n="roll-damage">Roll Damage</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_monsterdamage-button"></button>
|
|
<input type="text" class="hidden" name="attr_monsterdamage" value="" />
|
|
</span>
|
|
</div>
|
|
<input type="checkbox" class="weapon-type hidden" name="attr_show_ranged" value="1" />
|
|
<div class="weapons-grid-row show-ranged">
|
|
<span class="span-4 right">
|
|
<span class="nowrap">
|
|
<input type="text" class="input-width-smallest" name="attr_ammo" value="1" title="@{repeating_weapons_$X_ammo}" />
|
|
<span style="color: initial;">/</span>
|
|
<input type="text" class="input-width-smallest" name="attr_ammo_max" value="1" title="@{repeating_weapons_$X_ammo|max}" />
|
|
</span>
|
|
<label class="nowrap" data-i18n-title="track-ammo-monster-title">
|
|
<input type="checkbox" name="attr_track_ammo" value="1" title="@{repeating_weapons_$X_track_ammo}" />
|
|
<span class="column-header" data-i18n="track-ammo-u">TRACK</span>
|
|
</label>
|
|
</span>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</section>
|
|
<section class="battle">
|
|
<!-- DEFENCE and PC DAMAGE-->
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_defence" title="%{defence}" value="@{defence}">
|
|
<span class="defence-style" data-i18n="defence-u">DEFENCE</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_defence-button"></button>
|
|
<input type="text" class="hidden" name="attr_defence" value="" />
|
|
</div>
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_takedamage" title="%{takedamage}" data-i18n-title="take-damage-title" value="@{takedamage}">
|
|
<span data-i18n="damage">Damage</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_takedamage-button"></button>
|
|
<input type="text" class="hidden" name="attr_takedamage" value="" />
|
|
|
|
<button type="roll" name="roll_takedamagenoarmour" title="%{takedamagenoarmour}" data-i18n-title="take-damage-without-armour-title" value="@{takedamagenoarmour}">
|
|
<span data-i18n="damage-without-armour">Damage(Armour N/A)</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_takedamagenoarmour-button"></button>
|
|
<input type="text" class="hidden" name="attr_takedamagenoarmour" value="" />
|
|
</div>
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_morale" title="%{morale}" value="@{morale}">
|
|
<span data-i18n="morale">Morale</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_morale-button"></button>
|
|
<input type="text" class="hidden" name="attr_morale" value="" />
|
|
|
|
<button type="roll" name="roll_reaction" title="%{reaction}" value="@{reaction}">
|
|
<span data-i18n="reaction">Reaction</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_reaction-button"></button>
|
|
<input type="text" class="hidden" name="attr_reaction" value="" />
|
|
</div>
|
|
<div class="flex-inline-row">
|
|
<button type="roll" name="roll_dr_test" data-i18n-title="dr-test-roll" value="@{dr_test}">
|
|
<span class="defence-style" data-i18n="dr-test">DR Test</span>
|
|
</button>
|
|
<button type="action" class="hidden" name="act_dr_test-button"></button>
|
|
<input type="text" class="hidden" name="attr_dr_test" value="" />
|
|
|
|
<button type="roll" name="roll_dice" value="&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolling-dice}}} {{roll_dice=[[0]]}} {{roll=@{dice_query2} = [[@{dice_query2}]]}} {{roll_query_footer=[&nbsp;](`&#64;{@{character_name_safe}|dice_query_inline_roll})}}">
|
|
<span data-i18n="roll-dice-query">Roll Dice</span>
|
|
</button>
|
|
<button type="roll" name="roll_d66" value="&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolling-dice}}} {{roll_dice=[[0]]}} {{roll=d66 = [[1d6]]}} {{roll2=[[1d6]]}} {{roll_query_footer=[&nbsp;](`&#64;{@{character_name_safe}|dice_query_inline_roll})}}">d66</button>
|
|
</div>
|
|
</section>
|
|
<section class="armour">
|
|
<!-- ARMOUR -->
|
|
<span class="section-header armour-style" data-i18n="armour-u">ARMOUR</span>
|
|
<input type="text" class="left input-width-full" name="attr_armour" value="" title="@{armour}" />
|
|
<span></span>
|
|
<div class="armour-tier-grid" title="@{armour_tier}">
|
|
<label for="tier0"><input type="checkbox" id="tier0" name="attr_armour_tier" value="0" title="@{armour_tier}" checked /><span>-0</span></label>
|
|
<label for="tier1"><input type="checkbox" id="tier1" name="attr_armour_tier" value="2" title="@{armour_tier}" /><span>-d2</span></label>
|
|
<label for="tier2"><input type="checkbox" id="tier2" name="attr_armour_tier" value="4" title="@{armour_tier}" /><span>-d4</span></label>
|
|
<label for="tier3"><input type="checkbox" id="tier3" name="attr_armour_tier" value="6" title="@{armour_tier}" /><span>-d6</span></label>
|
|
<label for="tier4"><input type="checkbox" id="tier4" name="attr_armour_tier" value="8" title="@{armour_tier}" /><span>-d8</span></label>
|
|
<input type="hidden" name="attr_armour_swift_pen" value="0" />
|
|
<input type="hidden" name="attr_armour_def_pen" value="0" />
|
|
</div>
|
|
<span></span>
|
|
<label for="armour_damaged" data-i18n-title="armour-damaged-note" title="When armour is damaged penalties to Vigor and Swiftness tests are not modified.">
|
|
<input type="checkbox" id="armour_damaged" name="attr_armour_damaged" value="1" title="@{armour_damaged}" />
|
|
<span class="damaged-style" data-i18n="damaged-u">DAMAGED</span>
|
|
</label>
|
|
</section>
|
|
<section class="hp-box">
|
|
<!-- HIT POINTS -->
|
|
<span class="hpCurrMax">
|
|
<span class="section-header span-all width-full red-background nowrap">
|
|
<span class="hit-points-style">
|
|
<span class="kanji-text" style="font-size: 1.85rem;margin-top: -3px;">害</span>
|
|
<span data-i18n="hit-points-mixed-case">HiT PoINts</span>
|
|
</span>
|
|
</span>
|
|
<span class="column-header center" data-i18n="current-u">CURRENT</span>
|
|
<span class="red-background"> </span>
|
|
<span class="column-header center" data-i18n="maximum-u">MAXIMUM</span>
|
|
<span>
|
|
<input type="checkbox" class="hidden warning" name="attr_hp_warning" value="1" />
|
|
<input type="text" class="ability-input" name="attr_hp" value="1" title="@{hp}" />
|
|
</span>
|
|
<span class="red-background"> </span>
|
|
<input type="text" class="ability-input" name="attr_hp_max" value="1" title="@{hp|max}" />
|
|
</span>
|
|
</section>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
<rolltemplate class="sheet-rolltemplate-ronin">
|
|
<div class="sheet-heading-row">
|
|
{{#name}}<span class="sheet-span-all sheet-heading">{{name}}</span>{{/name}}
|
|
{{#heading}}<span class="sheet-span-all sheet-heading">{{heading}}</span>{{/heading}}
|
|
{{#subheading}}
|
|
<span class="sheet-span-all sheet-subheading">
|
|
{{subheading}}
|
|
<!-- ammo -->
|
|
{{#rollTotal() attack_track_ammo 1}}<br>{{computed::attack_ammo}}{{/rollTotal() attack_track_ammo 1}}
|
|
<!-- armour worn-->
|
|
{{#rollGreater() computed::armour_pen 0}}<span> ⬦ {{armour_worn}}</span>{{/rollGreater() computed::armour_pen 0}}
|
|
<!-- short/long rest, infection/poison labels -->
|
|
{{#rollTotal() computed::short_rest 4}}<span data-i18n="short-rest">Short Rest</span>{{/rollTotal() computed::short_rest 4}}
|
|
{{#rollTotal() computed::long_rest 6}}<span data-i18n="long-rest">Long Rest</span>{{/rollTotal() computed::long_rest 6}}
|
|
{{#rollTotal() computed::hungry 4}}<span data-i18n="hunger-thirst">Hunger/Thirst</span>{{/rollTotal() computed::hungry 4}}
|
|
{{#rollTotal() computed::infection 6}}<span data-i18n="infection-poison">Infection/Poison</span>{{/rollTotal() computed::infection 6}}
|
|
</span>
|
|
{{/subheading}}
|
|
<!-- dueling label -->
|
|
{{#rollTotal() dueling 1}}<span class="sheet-span-all sheet-subheading sheet-duel-label" data-i18n="duel-u">DUEL</span>{{/rollTotal() dueling 1}}
|
|
</div>
|
|
<div class="sheet-template-body">
|
|
|
|
<!-- generic -->
|
|
{{#roll_default}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{roll}}
|
|
{{#dr_final}}<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}{{/dr_final}}
|
|
<!-- Swiftness rolls show DR+armour -->
|
|
{{#rollGreater() computed::armour_pen 0}}
|
|
<span class="sheet-roll-detail" data-i18n-title="dr-armour-penalty" title="DR + armour">[{{computed::dr_base}}+{{computed::armour_pen}}]</span>
|
|
{{/rollGreater() computed::armour_pen 0}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
<!-- crit -->
|
|
{{#rollTotal() computed::crit 1}}
|
|
{{#crit}}<span class="sheet-crit-roll" data-i18n="test-critical-success">Critical!{{computed::crit}}</span>{{/crit}}
|
|
{{/rollTotal() computed::crit 1}}
|
|
<!-- non-crit -->
|
|
{{#^rollTotal() computed::crit 1}}
|
|
<!-- show for Success, set crit=[[0]] -->
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
{{/^rollTotal() computed::crit 1}}
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#^rollTotal() computed::success 1}}
|
|
<!-- fumble -->
|
|
{{#rollTotal() computed::fumble 1}}
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
{{#texts_kamis_note}}{{texts_kamis_note}}{{/texts_kamis_note}}
|
|
{{/rollTotal() computed::fumble 1}}
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_default}}
|
|
|
|
<!-- initiative -->
|
|
{{#roll_initiative}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{roll}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollGreater() roll 3}}
|
|
<!-- show for Success, set crit=[[0]] -->
|
|
<span class="sheet-success-roll" data-i18n="test-successful">Success</span>
|
|
<span data-i18n="pc-goes">PCs go first.</span>
|
|
{{/rollGreater() roll 3}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#^rollGreater() roll 3}}
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
<span class="sheet-failed-roll" data-i18n="test-failed">Fail</span>
|
|
<span data-i18n="enemy-goes">Enemies go first.</span>
|
|
{{/^rollGreater() roll 3}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_initiative}}
|
|
|
|
<!-- attack -->
|
|
{{#roll_attack}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
<!-- Defence and Swiftness rolls show DR+armour -->
|
|
{{#rollGreater() computed::armour_pen 0}}
|
|
<span class="sheet-roll-detail" data-i18n-title="dr-armour-penalty" title="DR + armour">[{{computed::dr_base}}+{{computed::armour_pen}}]</span>
|
|
{{/rollGreater() computed::armour_pen 0}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
<!-- crit -->
|
|
{{#rollTotal() computed::crit 1}}
|
|
{{#crit}}<span class="sheet-crit-roll" data-i18n="test-critical-hit">Critical Hit!{{computed::crit}}</span>{{/crit}}
|
|
{{#attack_crit_note}}
|
|
{{#damage}}<span data-i18n="damage-doubled">Double Damage</span> = {{computed::damage}}{{/damage}}
|
|
<span class="sheet-description sheet-center" data-i18n="crit-attack-note">Enemy takes x2 Damage, Armour reduced 1 tier after damage.</span>
|
|
{{/attack_crit_note}}
|
|
{{/rollTotal() computed::crit 1}}
|
|
<!-- non-crit -->
|
|
{{#^rollTotal() computed::crit 1}}
|
|
<!-- show for Success, set crit=[[0]] -->
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
{{#attack_success_note}}
|
|
{{#damage}}<span data-i18n="damage">Damage</span> = {{computed::damage}}{{/damage}}
|
|
{{/attack_success_note}}
|
|
{{/^rollTotal() computed::crit 1}}
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<!-- fumble -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
{{#rollTotal() computed::fumble 1}}
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
{{#attack_fumble_note}}<span class="sheet-block sheet-span-all" data-i18n="fumble-attack-note">Weapon is lost or broken</span>{{/attack_fumble_note}}
|
|
{{/rollTotal() computed::fumble 1}}
|
|
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
{{#attack_fail_note}}
|
|
<!-- {{#damagePC}}{{damagePC}}{{/damagePC}} -->
|
|
<!-- dueling -->
|
|
{{#rollTotal() dueling 1}}<span class="sheet-description sheet-center" data-i18n="fail-duel-attack-note">Enemy rolls damage.</span>{{/rollTotal() dueling 1}}
|
|
{{/attack_fail_note}}
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_attack}}
|
|
|
|
<!-- parry -->
|
|
{{#roll_parry}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
<!-- crit -->
|
|
{{#rollTotal() computed::crit 1}}
|
|
{{#crit}}<span class="sheet-crit-roll" data-i18n="test-critical-hit">Critical Hit!{{computed::crit}}</span>{{/crit}}
|
|
{{#parry_crit_note}}
|
|
{{#damage}}<span data-i18n="damage-doubled">Double Damage</span> = {{computed::damage}}{{/damage}}
|
|
<span class="sheet-description sheet-center" data-i18n="crit-attack-note">Enemy takes x2 Damage, Armour reduced 1 tier after damage.</span>
|
|
{{/parry_crit_note}}
|
|
{{/rollTotal() computed::crit 1}}
|
|
<!-- non-crit -->
|
|
{{#^rollTotal() computed::crit 1}}
|
|
<!-- show for Success, set crit=[[0]] -->
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
{{/^rollTotal() computed::crit 1}}
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<!-- fumble -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
{{#rollTotal() computed::fumble 1}}
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
{{#parry_fumble_note}}
|
|
{{#damagePC}}{{damagePC}} x2{{/damagePC}}
|
|
<span class="sheet-block sheet-span-all" data-i18n="fumble-parry-note">PC takes x2 Damage, Armour reduced 1 tier after damage, and weapon breaks.</span>
|
|
{{/parry_fumble_note}}
|
|
{{/rollTotal() computed::fumble 1}}
|
|
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
{{#parry_fail_note}}{{#damagePC}}{{damagePC}}{{/damagePC}}{{/parry_fail_note}}
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_parry}}
|
|
|
|
<!-- guard -->
|
|
{{#roll_guard}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
<!-- crit -->
|
|
{{#rollTotal() computed::crit 1}}
|
|
{{#crit}}<span class="sheet-crit-roll" data-i18n="test-critical-hit">Critical Hit!{{computed::crit}}</span>{{/crit}}
|
|
{{#guard_crit_note}}
|
|
{{#damage}}<span data-i18n="damage-doubled">Double Damage</span> = {{computed::damage}}{{/damage}}
|
|
<span class="sheet-description sheet-center" data-i18n="crit-attack-note">Enemy takes x2 Damage, Armour reduced 1 tier after damage.</span>
|
|
{{/guard_crit_note}}
|
|
{{/rollTotal() computed::crit 1}}
|
|
<!-- non-crit -->
|
|
{{#^rollTotal() computed::crit 1}}
|
|
<!-- show for Success, set crit=[[0]] -->
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
{{#guard_success_note}}
|
|
<span class="sheet-description sheet-center" data-i18n="success-guard-note">Take no damage and gain +4 to next Attack or Riposte.</span>
|
|
{{/guard_success_note}}
|
|
{{/^rollTotal() computed::crit 1}}
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<!-- fumble -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
{{#rollTotal() computed::fumble 1}}
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
{{#guard_fumble_note}}
|
|
{{#damagePC}}{{damagePC}} x2{{/damagePC}}
|
|
<span class="sheet-block sheet-span-all" data-i18n="fumble-parry-note">PC takes x2 Damage, Armour reduced 1 tier after damage, and weapon breaks.</span>
|
|
{{/guard_fumble_note}}
|
|
{{/rollTotal() computed::fumble 1}}
|
|
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
{{#guard_fail_note}}
|
|
{{#damagePChalf}}{{damagePChalf}}{{/damagePChalf}}
|
|
<span class="sheet-description sheet-center" data-i18n="fail-guard-note">Take half damage.</span>
|
|
{{/guard_fail_note}}
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_guard}}
|
|
|
|
<!-- riposte -->
|
|
{{#roll_riposte}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
<!-- crit -->
|
|
{{#rollTotal() computed::crit 1}}
|
|
{{#crit}}<span class="sheet-crit-roll" data-i18n="test-critical-hit">Critical Hit!{{computed::crit}}</span>{{/crit}}
|
|
{{#riposte_crit_note}}<span class="sheet-description sheet-center" data-i18n="crit-defence-note">PC gains a free attack.</span>{{/riposte_crit_note}}
|
|
{{/rollTotal() computed::crit 1}}
|
|
<!-- non-crit -->
|
|
{{#^rollTotal() computed::crit 1}}
|
|
<!-- show for Success, set crit=[[0]] -->
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
{{#riposte_success_note}}
|
|
{{#damage}}<span data-i18n="damage-doubled">Double Damage</span> = {{computed::damage}}{{/damage}}
|
|
<span class="sheet-description sheet-center" data-i18n="success-riposte-note">Deal double damage</span>
|
|
{{/riposte_success_note}}
|
|
{{/^rollTotal() computed::crit 1}}
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<!-- fumble -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
{{#rollTotal() computed::fumble 1}}
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
{{#riposte_fumble_note}}
|
|
{{#damagePC}}{{damagePC}} x2{{/damagePC}}
|
|
<span class="sheet-block sheet-span-all" data-i18n="fumble-defence-note">PC takes x2 Damage, Armour reduced 1 tier after damage.</span>
|
|
{{/riposte_fumble_note}}
|
|
{{/rollTotal() computed::fumble 1}}
|
|
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
{{#riposte_fail_note}}
|
|
<span class="sheet-description sheet-center" data-i18n="fail-riposte-note">You are dealt a fatal blow.</span>
|
|
{{/riposte_fail_note}}
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_riposte}}
|
|
|
|
<!-- damage -->
|
|
{{#roll_damage}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span data-i18n="damage-roll">Damage Roll =</span> {{roll}}
|
|
</span>
|
|
{{#rollGreater() armour_reduction 0}}
|
|
<span class="sheet-span-all">
|
|
<strong>-</strong>{{armour_worn}} <span data-i18n="armour">Armour</span> =<strong> - </strong>{{computed::armour_reduction}}
|
|
</span>
|
|
{{/rollGreater() armour_reduction 0}}
|
|
{{#^rollGreater() armour_reduction 0}}
|
|
<span class="sheet-span-all">
|
|
<span data-i18n="armour">Armour</span> =<strong> 0 or N/A </strong>
|
|
</span>
|
|
{{/^rollGreater() armour_reduction 0}}
|
|
<span class="sheet-span-all">
|
|
<strong><span data-i18n="hit-point-damage">HP Damage =</span> {{computed::damage_total}}</strong>
|
|
</span>
|
|
</div>
|
|
{{/roll_damage}}
|
|
|
|
<!-- defence -->
|
|
{{#roll_defence}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
<!-- Defence rolls show DR+armour -->
|
|
{{#rollGreater() computed::armour_pen 0}}
|
|
<span class="sheet-roll-detail" data-i18n-title="dr-armour-penalty" title="DR + armour">[{{computed::dr_base}}+{{computed::armour_pen}}]</span>
|
|
{{/rollGreater() computed::armour_pen 0}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
<!-- crit -->
|
|
{{#rollTotal() computed::crit 1}}
|
|
{{#crit}}<span class="sheet-crit-roll" data-i18n="test-critical-success">Critical!{{computed::crit}}</span>{{/crit}}
|
|
</span>
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
{{#defence_crit_note}}<span data-i18n="crit-defence-note">PC gains a free attack</span>{{/defence_crit_note}}
|
|
</span>
|
|
{{/rollTotal() computed::crit 1}}
|
|
<!-- non-crit -->
|
|
{{#^rollTotal() computed::crit 1}}
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
{{#defence_success_note}}<span data-i18n="success-defence-note">No Damage</span>{{/defence_success_note}}
|
|
</span>
|
|
{{/^rollTotal() computed::crit 1}}
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<!-- fumble -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
{{#rollTotal() computed::fumble 1}}
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
</span>
|
|
{{#defence_fumble_note}}
|
|
<span class="sheet-block sheet-span-all">{{#damagePC}}{{damagePC}} x2{{/damagePC}}</span>
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span data-i18n="fumble-defence-note">PC takes x2 Damage, Armour reduced 1 tier after damage.</span>
|
|
</span>
|
|
{{/defence_fumble_note}}
|
|
{{/rollTotal() computed::fumble 1}}
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
{{#defence_fumble_note}}
|
|
{{#damagePC}}{{damagePC}}{{/damagePC}}
|
|
{{/defence_fumble_note}}
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_defence}}
|
|
|
|
<!-- seppuku -->
|
|
{{#roll_seppuku}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{roll2}}
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
{{#rollTotal() computed::success 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
</div>
|
|
{{#seppuku_success_note}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
<span data-i18n="success-seppuku-note">If successful, the character ritually prepares themselves and their surroundings, meditating on the reasons for their act and writing a death Haiku.</span>
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">{{#menu1}}<span class="sheet-span-all">{{menu1}}</span>{{/menu1}}</div>
|
|
{{/seppuku_success_note}}
|
|
{{#seppuku2_success_note}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
<span data-i18n="success-seppuku2-note">If successful, the character then disembowels themselves and dies.</span>
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">{{#menu2}}<span class="sheet-span-all">{{menu2}}</span>{{/menu2}}</div>
|
|
{{/seppuku2_success_note}}
|
|
{{/rollTotal() computed::success 1}}
|
|
<!-- FAIL -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
{{#seppuku_fail_note}}<span data-i18n="fail-seppuku-note">If the character fails the Spirit Test they cannot begin the ritual.</span>{{/seppuku_fail_note}}
|
|
{{#seppuku2_fail_note}}<span data-i18n="fail-seppuku2-note">If the character fails the Resilience Test, a 'second' can behead the character to complete the ritual. 1/2 the Honour Roll result. If there is no second, they suffer d8 damage and roll on the Debilitating Injuries table.</span>
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">{{#menu1}}<span class="sheet-span-all">{{menu1}}</span>{{/menu1}}</div>
|
|
{{/seppuku2_fail_note}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
{{/roll}}
|
|
<!-- seppuku honour -->
|
|
{{#roll2}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">{{roll2}}</span>
|
|
</div>
|
|
{{#rollTotal() resurrected 0}}
|
|
<!-- fight in Yomi -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span data-i18n="honour-note"></span>
|
|
</span>
|
|
</div>
|
|
{{/rollTotal() resurrected 0}}
|
|
{{#rollTotal() resurrected 1}}
|
|
<!-- DEAD -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span data-i18n="honour-note2"></span>
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span class="sheet-fumble-roll" data-i18n="broken-outcome4">Dead</span><br>
|
|
<span data-i18n="death-note">A character can only be resurrected once.</span><br>
|
|
{{#rollGreater() roll3 9}}
|
|
<span data-i18n="death-with-honour">You have died Honourably.</span> {{roll3}}
|
|
{{/rollGreater() roll3 9}}
|
|
{{#^rollGreater() roll3 9}}
|
|
<span data-i18n="death-without-honour">You have died Dishonourably.</span> {{roll3}}
|
|
{{/^rollGreater() roll3 9}}
|
|
</span>
|
|
</div>
|
|
{{/rollTotal() resurrected 1}}
|
|
{{/roll2}}
|
|
{{/roll_seppuku}}
|
|
|
|
<!-- haiku -->
|
|
{{#roll_haiku}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
{{#rollTotal() computed::success 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
{{#haiku_success_note}}
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span data-i18n="success-haiku-note">Regain 1 Virtue. Hidden meaning?</span>
|
|
</span>
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-roll-query" data-i18n-title="roll-query">{{roll_query}}</span>
|
|
</span>
|
|
{{/haiku_success_note}}
|
|
</div>
|
|
{{/rollTotal() computed::success 1}}
|
|
<!-- FAIL -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
<span class="sheet-span-all sheet-description">
|
|
{{#haiku_fail_note}}<span data-i18n="fail-haiku-note">Suffer a -1 penalty to all Spirit rolls until the end of the day.</span>{{/haiku_fail_note}}
|
|
</span>
|
|
</div>
|
|
{{/^rollTotal() computed::success 1}}
|
|
{{/roll}}
|
|
{{/roll_haiku}}
|
|
|
|
<!-- texts -->
|
|
{{#roll_texts}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
{{#dr_final}}
|
|
<span data-i18n="versus-difficulty-rating">vs DR</span>{{computed::dr_final}}
|
|
{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
{{#rollTotal() computed::success 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#success}}<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
</div>
|
|
{{/rollTotal() computed::success 1}}
|
|
<!-- FAIL -->
|
|
{{#^rollTotal() computed::success 1}}
|
|
<!-- fumble -->
|
|
{{#rollTotal() computed::fumble 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#fumble}}<span class="sheet-fumble-roll" data-i18n="test-critical-failure">Fumble!{{computed::fumble}}</span>{{/fumble}}
|
|
</span>
|
|
<span class="sheet-span-all">
|
|
{{#texts_kamis_note}}{{texts_kamis_note}}{{/texts_kamis_note}}
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
{{#texts_hp_note}}
|
|
<strong>-</strong>
|
|
<span>{{computed::texts_hp_note}}</span>
|
|
<span data-i18n="hit-points-abbrv">HP</span>
|
|
<span data-i18n="texts-notes-fail">and no Texts for 1 hour</span>
|
|
{{/texts_hp_note}}
|
|
</span>
|
|
</div>
|
|
{{/rollTotal() computed::fumble 1}}
|
|
<!-- non-fumble -->
|
|
{{#^rollTotal() computed::fumble 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<!-- show for Fail, set fumble=[[0]] -->
|
|
{{#success}}<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>{{/success}}
|
|
</span>
|
|
<span class="sheet-span-all">
|
|
{{#texts_hp_note}}
|
|
<strong>-</strong>
|
|
<span>{{computed::texts_hp_note}}</span>
|
|
<span data-i18n="hit-points-reduced">HP has been reduced</span>
|
|
<span data-i18n="texts-notes-fail">and no Texts for 1 hour</span>.
|
|
{{/texts_hp_note}}
|
|
</span>
|
|
</div>
|
|
{{/^rollTotal() computed::fumble 1}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
{{/roll_texts}}
|
|
|
|
<!-- rest -->
|
|
{{#roll_rest}}
|
|
<div class="sheet-row">
|
|
{{#roll}}
|
|
<span class="sheet-span-all">{{roll}}</span>
|
|
{{#rollTotal() computed::long_rest 6}}
|
|
{{#roll2}}<span class="sheet-span-all">{{roll2}}</span>{{/roll2}}
|
|
{{/rollTotal() computed::long_rest 6}}
|
|
{{/roll}}
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
{{#rollTotal() computed::short_rest 4}}<span data-i18n="short-rest-note">10+ min, Consumes 1 Food and 1 Water. HP increased.</span>{{/rollTotal() computed::short_rest 4}}
|
|
{{#rollTotal() computed::long_rest 6}}<span data-i18n="long-rest-note">6+ hr, Consumes 1 Food and 1 Water. Virtues reset and HP increased.</span>{{/rollTotal() computed::long_rest 6}}
|
|
</span>
|
|
</div>
|
|
{{/roll_rest}}
|
|
|
|
<!-- ailment -->
|
|
{{#roll_infected}}
|
|
<div class="sheet-row">
|
|
{{#roll}}
|
|
<span class="sheet-span-all">{{roll}}</span>
|
|
{{/roll}}
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
<span data-i18n="infection-poison-note">You are Infected or Poisoned. Rest won't help. -d6/day. HP reduced.</span>
|
|
</span>
|
|
</div>
|
|
{{/roll_infected}}
|
|
|
|
<!-- hunger -->
|
|
{{#roll_hunger}}
|
|
<div class="sheet-row">
|
|
{{#roll}}
|
|
<span class="sheet-span-all">{{roll}}</span>
|
|
{{/roll}}
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
<span data-i18n="hunger-thirst-note">Two days without Food or Water. -d4/day. HP reduced.</span>
|
|
</span>
|
|
</div>
|
|
{{/roll_hunger}}
|
|
|
|
<!-- debilitating -->
|
|
{{#roll_debilitating}}
|
|
<div class="sheet-row"><span class="sheet-span-all">{{roll}}</span></div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description">
|
|
{{#rollTotal() roll 1}}<span data-i18n="debilitating-injuries-1">TRANSLATED</span>{{/rollTotal() roll 1}}
|
|
{{#rollTotal() roll 2}}<span data-i18n="debilitating-injuries-2">TRANSLATED</span>{{/rollTotal() roll 2}}
|
|
{{#rollTotal() roll 3}}<span data-i18n="debilitating-injuries-3">TRANSLATED</span>{{/rollTotal() roll 3}}
|
|
{{#rollTotal() roll 4}}<span data-i18n="debilitating-injuries-4">TRANSLATED</span>{{/rollTotal() roll 4}}
|
|
{{#rollTotal() roll 5}}<span data-i18n="debilitating-injuries-5">TRANSLATED</span>{{/rollTotal() roll 5}}
|
|
{{#rollTotal() roll 6}}<span data-i18n="debilitating-injuries-6">TRANSLATED</span>{{/rollTotal() roll 6}}
|
|
{{#rollTotal() roll 7}}<span data-i18n="debilitating-injuries-7">TRANSLATED</span>{{/rollTotal() roll 7}}
|
|
{{#rollTotal() roll 8}}<span data-i18n="debilitating-injuries-8">TRANSLATED</span>{{/rollTotal() roll 8}}
|
|
{{#rollTotal() roll 9}}<span data-i18n="debilitating-injuries-9">TRANSLATED</span>{{/rollTotal() roll 9}}
|
|
{{#rollTotal() roll 10}}<span data-i18n="debilitating-injuries-10">TRANSLATED</span>{{/rollTotal() roll 10}}
|
|
</span>
|
|
</div>
|
|
{{/roll_debilitating}}
|
|
|
|
<!-- broken -->
|
|
{{#roll_broken}}
|
|
<div class="sheet-row"><span class="sheet-span-all">{{roll}}</span></div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
{{#rollTotal() roll 1}}
|
|
<span data-i18n="broken-outcome1">Fall unconscious. d4 rounds, awaken with d4 HP</span><br>
|
|
<strong>d4</strong> <span data-i18n="unconscious">Unconscious</span> = {{roll2}}<span data-i18n="rounds">rounds</span><br>
|
|
<strong>d4</strong> <span data-i18n="hit-points-abbrv">HP</span> = {{roll3}}<br>
|
|
<span data-i18n="hit-points-increased">HP has been increased</span>
|
|
{{/rollTotal() roll 1}}
|
|
{{#rollTotal() roll 2}}
|
|
<span><strong>d6</strong> <span data-i18n="roll-result">Roll =</span> {{roll4}}</span><br>
|
|
{{#rollLess() roll4 6}}<span data-i18n="broken-outcome2-1">Broken or severed limb.</span>{{/rollLess() roll4 6}}
|
|
{{#rollTotal() roll4 6}}<span data-i18n="broken-outcome2-6">Lost eye. Can't act for d4 rounds then become active with d4 HP</span><br>
|
|
<strong>d4</strong> <span data-i18n="cannot-act">Cannot act</span> = {{roll5}} <span data-i18n="rounds">rounds</span><br>
|
|
<strong>d4</strong> <span data-i18n="hit-points-abbrv">HP</span> = {{roll6}}<br>
|
|
<span data-i18n="hit-points-increased">HP has been increased</span>
|
|
{{/rollTotal() roll4 6}}
|
|
{{/rollTotal() roll 2}}
|
|
{{#rollTotal() roll 3}}
|
|
<span data-i18n="broken-outcome3">Hemorrhage. Death in d2 hours unless treated. All tests are DR16 the first hour. DR18 the last hour.</span><br>
|
|
<strong>d2</strong> <span data-i18n="death">Death</span> = {{roll7}} <span data-i18n="hours">hours</span>
|
|
{{/rollTotal() roll 3}}
|
|
{{#rollTotal() roll 4}}
|
|
<span class="sheet-fumble-roll" data-i18n="broken-outcome4">Dead</span><br>
|
|
<span data-i18n="resurrection-note">When a warrior falls, they are cast into the depths of Yomi.</span><br>
|
|
<span data-i18n="hit-points-features-restored">HP and Features have been restored.</span>
|
|
{{/rollTotal() roll 4}}
|
|
</span>
|
|
</div>
|
|
{{/roll_broken}}
|
|
|
|
{{#roll_death}}
|
|
{{#rollTotal() roll_death 0}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span class="sheet-fumble-roll" data-i18n="broken-outcome4">Dead</span><br>
|
|
<span data-i18n="resurrection-note">When a warrior falls, they are cast into the depths of Yomi.</span><br>
|
|
<span data-i18n="hit-points-features-restored">HP and Features have been restored.</span>
|
|
</span>
|
|
</div>
|
|
{{/rollTotal() roll_death 0}}
|
|
{{#rollTotal() roll_death 1}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
<span class="sheet-fumble-roll" data-i18n="broken-outcome4">Dead</span><br>
|
|
<span data-i18n="death-note">A character can only be resurrected once.</span><br>
|
|
{{#rollGreater() roll 9}}
|
|
<span data-i18n="death-with-honour">You have died Honourably.</span> {{roll}}
|
|
{{/rollGreater() roll 9}}
|
|
{{#^rollGreater() roll 9}}
|
|
<span data-i18n="death-without-honour">You have died Dishonourably.</span> {{roll}}
|
|
{{/^rollGreater() roll 9}}
|
|
</span>
|
|
</div>
|
|
{{/rollTotal() roll_death 1}}
|
|
{{/roll_death}}
|
|
|
|
<!-- kamis vengeance -->
|
|
{{#roll_kami}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-d20-roll">{{roll}}</span>
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
{{#rollTotal() roll 1}}<span data-i18n="kamis-vengeance-1">TRANSLATED</span>{{/rollTotal() roll 1}}
|
|
{{#rollTotal() roll 2}}
|
|
<span data-i18n="kamis-vengeance-2">TRANSLATED</span>
|
|
<span class="sheet-roll-query" data-i18n-title="roll-query">{{roll_query}}</span>
|
|
{{/rollTotal() roll 2}}
|
|
{{#rollTotal() roll 3}}<span data-i18n="kamis-vengeance-3">TRANSLATED</span>{{/rollTotal() roll 3}}
|
|
{{#rollTotal() roll 4}}<span data-i18n="kamis-vengeance-4">TRANSLATED</span><br>{{menu3}}{{/rollTotal() roll 4}}
|
|
{{#rollTotal() roll 5}}<span data-i18n="kamis-vengeance-5">TRANSLATED</span>{{/rollTotal() roll 5}}
|
|
{{#rollTotal() roll 6}}<span data-i18n="kamis-vengeance-6">TRANSLATED</span>{{/rollTotal() roll 6}}
|
|
{{#rollTotal() roll 7}}<span data-i18n="kamis-vengeance-7">TRANSLATED</span>{{/rollTotal() roll 7}}
|
|
{{#rollTotal() roll 8}}<span data-i18n="kamis-vengeance-8">TRANSLATED</span>{{/rollTotal() roll 8}}
|
|
{{#rollTotal() roll 9}}<span data-i18n="kamis-vengeance-9">TRANSLATED</span>{{/rollTotal() roll 9}}
|
|
{{#rollTotal() roll 10}}<span data-i18n="kamis-vengeance-10">TRANSLATED</span>{{/rollTotal() roll 10}}
|
|
{{#rollTotal() roll 11}}<span data-i18n="kamis-vengeance-11">TRANSLATED</span>{{/rollTotal() roll 11}}
|
|
{{#rollTotal() roll 12}}<span data-i18n="kamis-vengeance-12">TRANSLATED</span>{{/rollTotal() roll 12}}
|
|
{{#rollTotal() roll 13}}<span data-i18n="kamis-vengeance-13">TRANSLATED</span><br>{{menu1}}{{/rollTotal() roll 13}}
|
|
{{#rollTotal() roll 14}}<span data-i18n="kamis-vengeance-14">TRANSLATED</span>{{/rollTotal() roll 14}}
|
|
{{#rollTotal() roll 15}}<span data-i18n="kamis-vengeance-15">TRANSLATED</span><br>{{menu2}}{{/rollTotal() roll 15}}
|
|
{{#rollTotal() roll 16}}<span data-i18n="kamis-vengeance-16">TRANSLATED</span>{{/rollTotal() roll 16}}
|
|
{{#rollTotal() roll 17}}
|
|
<span data-i18n="kamis-vengeance-17">TRANSLATED</span><br>
|
|
{{damagePC}}
|
|
{{/rollTotal() roll 17}}
|
|
{{#rollTotal() roll 18}}<span data-i18n="kamis-vengeance-18">TRANSLATED</span>{{/rollTotal() roll 18}}
|
|
{{#rollTotal() roll 19}}<span data-i18n="kamis-vengeance-19">TRANSLATED</span>{{/rollTotal() roll 19}}
|
|
{{#rollTotal() roll 20}}<span data-i18n="kamis-vengeance-20">TRANSLATED</span><br>{{menu2}}{{/rollTotal() roll 20}}
|
|
</span>
|
|
</div>
|
|
{{/roll_kami}}
|
|
|
|
<!-- dice -->
|
|
{{#roll_dice}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-dice-roll">{{roll}}</span>
|
|
<span class="sheet-dice-roll">{{roll2}}</span>
|
|
</span>
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-roll-query" data-i18n-title="roll-query">{{roll_query}}</span>
|
|
</span>
|
|
</div>
|
|
{{/roll_dice}}
|
|
|
|
<!-- improve -->
|
|
{{#roll_improve}}
|
|
<div class="sheet-row"><strong class="sheet-span-all" data-i18n="hit-points-u">HIT POINTS</strong></div>
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">{{roll}}</span>
|
|
{{#rollTotal() computed::hp_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-success-roll" data-i18n="test-successful">Success</span> +{{roll2}}</span>
|
|
{{/rollTotal() computed::hp_success 1}}
|
|
{{#^rollTotal() computed::hp_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-failed-roll" data-i18n="test-failed">Fail</span> +0</span>
|
|
{{/^rollTotal() computed::hp_success 1}}
|
|
</div>
|
|
{{/roll}}
|
|
<hr>
|
|
<div class="sheet-row"><strong class="sheet-span-all" data-i18n="swiftness-u">SWIFTNESS</strong></div>
|
|
{{#roll3}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">{{roll3}}</span>
|
|
{{#rollTotal() computed::swiftness_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-success-roll" data-i18n="test-successful">Success</span> +1</span>
|
|
{{/rollTotal() computed::swiftness_success 1}}
|
|
{{#^rollTotal() computed::swiftness_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-failed-roll" data-i18n="test-failed">Fail</span> -1</span>
|
|
{{/^rollTotal() computed::swiftness_success 1}}
|
|
</div>
|
|
{{/roll3}}
|
|
<hr>
|
|
<div class="sheet-row"><strong class="sheet-span-all" data-i18n="spirit-u">SPIRIT</strong></div>
|
|
{{#roll4}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">{{roll4}}</span>
|
|
{{#rollTotal() computed::spirit_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-success-roll" data-i18n="test-successful">Success</span> +1</span>
|
|
{{/rollTotal() computed::spirit_success 1}}
|
|
{{#^rollTotal() computed::spirit_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-failed-roll" data-i18n="test-failed">Fail</span> -1</span>
|
|
{{/^rollTotal() computed::spirit_success 1}}
|
|
</div>
|
|
{{/roll4}}
|
|
<hr>
|
|
<div class="sheet-row"><strong class="sheet-span-all" data-i18n="vigor-u">VIGOR</strong></div>
|
|
{{#roll5}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">{{roll5}}</span>
|
|
{{#rollTotal() computed::vigor_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-success-roll" data-i18n="test-successful">Success</span> +1</span>
|
|
{{/rollTotal() computed::vigor_success 1}}
|
|
{{#^rollTotal() computed::vigor_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-failed-roll" data-i18n="test-failed">Fail</span> -1</span>
|
|
{{/^rollTotal() computed::vigor_success 1}}
|
|
</div>
|
|
{{/roll5}}
|
|
<hr>
|
|
<div class="sheet-row"><strong class="sheet-span-all" data-i18n="resilience-u">RESILIENCE</strong></div>
|
|
{{#roll6}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">{{roll6}}</span>
|
|
{{#rollTotal() computed::resilience_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-success-roll" data-i18n="test-successful">Success</span> +1</span>
|
|
{{/rollTotal() computed::resilience_success 1}}
|
|
{{#^rollTotal() computed::resilience_success 1}}
|
|
<span class="sheet-span-all"><span class="sheet-failed-roll" data-i18n="test-failed">Fail</span> -1</span>
|
|
{{/^rollTotal() computed::resilience_success 1}}
|
|
</div>
|
|
{{/roll6}}
|
|
|
|
{{/roll_improve}}
|
|
|
|
<!-- morale -->
|
|
{{#roll_morale}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{roll}}
|
|
{{#dr_final}}<span data-i18n="versus-morale-rating">vs Morale</span>{{computed::dr_final}}{{/dr_final}}
|
|
</span>
|
|
</div>
|
|
<!-- SUCCESS -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#rollTotal() computed::success 1}}
|
|
{{#success}}
|
|
<span class="sheet-success-roll" data-i18n="test-successful">Success{{computed::success}}</span>
|
|
<span data-i18n="enemy-is-demoralized">Enemy is Demoralized{{computed::success}}</span>
|
|
{{/success}}
|
|
</span>
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
{{#rollLess() roll2 4}}
|
|
<span data-i18n="morale-result-1-3">Fights even harder, driven by their anger and determination to avenge their fallen comrades.</span>
|
|
{{/rollLess() roll2 4}}
|
|
{{#^rollLess() roll2 4}}
|
|
<span data-i18n="morale-result-4-6">Surrenders or retreats, unable to face the shame of defeat.</span>
|
|
{{/^rollLess() roll2 4}}
|
|
</span>
|
|
{{/rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
<!-- FAIL -->
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{#^rollTotal() computed::success 1}}
|
|
{{#success}}
|
|
<span class="sheet-failed-roll" data-i18n="test-failed">Fail{{computed::success}}</span>
|
|
<span data-i18n="enemy-is-not-demoralized">Enemy is not Demoralized{{computed::success}}</span>
|
|
{{/success}}
|
|
{{/^rollTotal() computed::success 1}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_morale}}
|
|
|
|
<!-- reaction -->
|
|
{{#roll_reaction}}
|
|
{{#roll}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
{{roll}}
|
|
</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all sheet-description sheet-center">
|
|
{{#rollBetween() roll 2 3}}<span data-i18n="reaction-result-2-3">You will be slaughtered!</span>{{/rollBetween() roll 2 3}}
|
|
{{#rollBetween() roll 4 6}}<span data-i18n="reaction-result-4-6">Fury</span>{{/rollBetween() roll 4 6}}
|
|
{{#rollBetween() roll 7 8}}<span data-i18n="reaction-result-7-8">Apathetic</span>{{/rollBetween() roll 7 8}}
|
|
{{#rollBetween() roll 9 10}}<span data-i18n="reaction-result-9-10">Almost courteous</span>{{/rollBetween() roll 9 10}}
|
|
{{#rollBetween() roll 11 12}}<span data-i18n="reaction-result-11-12">Cooperative</span>{{/rollBetween() roll 11 12}}
|
|
</span>
|
|
</div>
|
|
{{/roll}}
|
|
{{/roll_reaction}}
|
|
|
|
{{#description}}
|
|
<div class="sheet-row"><span class="sheet-span-all sheet-description">{{description}}</span></div>
|
|
{{/description}}
|
|
|
|
{{#description_center}}
|
|
<div class="sheet-row"><span class="sheet-span-all sheet-description sheet-center">{{description_center}}</span></div>
|
|
{{/description_center}}
|
|
|
|
{{#allprops() armour_pen armour_reduction armour_worn attack_ammo attack_track_ammo attack_crit_note attack_fail_note attack_fumble_note attack_success_note crit damage damagePC damagePChalf damage_total defence_crit_note defence_fail_note defence_fumble_note defence_success_note description description_center dr_base dr_final dueling footnote fumble guard_crit_note guard_fail_note guard_fumble_note guard_success_note haiku_fail_note haiku_success_note heading hungry infection long_rest menu1 menu2 menu3 menu4 name parry_crit_note parry_fail_note parry_fumble_note parry_success_note resurrected riposte_crit_note riposte_fumble_note riposte_fail_note riposte_success_note roll roll2 roll3 roll4 roll5 roll6 roll7 roll_attack roll_dice roll_parry roll_guard roll_riposte roll_broken roll_infected roll_damage roll_death roll_debilitating roll_default roll_defence roll_haiku roll_improve roll_initiative roll_hunger roll_kami roll_morale roll_reaction roll_query roll_query_footer roll_rest roll_seppuku roll_texts seppuku2_fail_note seppuku2_success_note seppuku_fail_note seppuku_success_note short_rest subheading success texts_hp_note texts_kamis_note hp_success swiftness_success spirit_success vigor_success resilience_success}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-key">{{key}}</span>
|
|
<span class="sheet-value">{{value}}</span>
|
|
</div>
|
|
{{/allprops() armour_pen armour_reduction armour_worn attack_ammo attack_track_ammo attack_crit_note attack_fail_note attack_fumble_note attack_success_note crit damage damagePC damagePChalf damage_total defence_crit_note defence_fail_note defence_fumble_note defence_success_note description description_center dr_base dr_final dueling footnote fumble guard_crit_note guard_fail_note guard_fumble_note guard_success_note haiku_fail_note haiku_success_note heading hungry infection long_rest menu1 menu2 menu3 menu4 name parry_crit_note parry_fail_note parry_fumble_note parry_success_note resurrected riposte_crit_note riposte_fumble_note riposte_fail_note riposte_success_note roll roll2 roll3 roll4 roll5 roll6 roll7 roll_attack roll_dice roll_parry roll_guard roll_riposte roll_broken roll_infected roll_damage roll_death roll_debilitating roll_default roll_defence roll_haiku roll_improve roll_initiative roll_hunger roll_kami roll_morale roll_reaction roll_query roll_query_footer roll_rest roll_seppuku roll_texts seppuku2_fail_note seppuku2_success_note seppuku_fail_note seppuku_success_note short_rest subheading success texts_hp_note texts_kamis_note hp_success swiftness_success spirit_success vigor_success resilience_success}}
|
|
|
|
{{#footnote}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-footnote sheet-span-all">{{footnote}}</span>
|
|
</div>
|
|
{{/footnote}}
|
|
|
|
{{#roll_query_footer}}
|
|
<div class="sheet-row">
|
|
<span class="sheet-span-all">
|
|
<span class="sheet-roll-query" data-i18n-title="roll-query">{{roll_query_footer}}</span>
|
|
</span>
|
|
</div>
|
|
{{/roll_query_footer}}
|
|
</div>
|
|
|
|
</rolltemplate>
|
|
|
|
<!-- query text translations and hidden attributes -->
|
|
<div class="hidden">
|
|
<span class="hidden" data-i18n="ask-broken">Roll Broken?</span>
|
|
<span class="hidden" data-i18n="ask-yes">YES</span>
|
|
<span class="hidden" data-i18n="ask-no">NO</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-6">Simple</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-8">Routine</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-10">Pretty simple</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-12">Normal</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-14">Difficult</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-16">Very hard</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-text-18">Should not be possible</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-6">DR6</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-8">DR8</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-10">DR10</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-12">DR12</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-14">DR14</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-16">DR16</span>
|
|
<span class="hidden" data-i18n="difficulty-rating-abbrv-18">DR18</span>
|
|
<span class="hidden" data-i18n="difficulty-rating">Difficulty Rating</span>
|
|
<span class="hidden" data-i18n="enter-morale-rating">Enter Morale Rating</span>
|
|
<span class="hidden" data-i18n="short-long-rest">Short or Long Rest?</span>
|
|
<span class="hidden" data-i18n="short-d4">Short d4</span>
|
|
<span class="hidden" data-i18n="long-d6">Long d6</span>
|
|
<span class="hidden" data-i18n="choose-ailment">Choose your ailment</span>
|
|
<span class="hidden" data-i18n="hunger-or-thirst">Hunger or Thirst -d4</span>
|
|
<span class="hidden" data-i18n="infection-or-poison">Infection or Poison -d</span>
|
|
<span class="hidden" data-i18n="choose-dice">Choose your die</span>
|
|
<span class="hidden" data-i18n="enter-dice-number">Enter #of Dice</span>
|
|
<span class="hidden" data-i18n="enter-dice-sides">Enter #of Sides and any +/- modifier</span>
|
|
<span class="hidden" data-i18n="enter-morale-rating">Enter Morale Rating</span>
|
|
|
|
<!-- placeholder attrs used between rolls -->
|
|
<input class="hidden" type="hidden" name="attr_damage_multiplier" value="1" />
|
|
<input class="hidden" type="hidden" name="attr_armour_tier_damage" value="1" />
|
|
<input class="hidden" type="text" name="attr_character_name_safe" value="" />
|
|
|
|
<input class="hidden" type="text" name="attr_swiftness_roll_label" value="[swiftness]" />
|
|
<input class="hidden" type="text" name="attr_spirit_roll_label" value="[spirit]" />
|
|
<input class="hidden" type="text" name="attr_vigor_roll_label" value="[vigor]" />
|
|
<input class="hidden" type="text" name="attr_resilience_roll_label" value="[resilience]" />
|
|
<input class="hidden" type="text" name="attr_query12" value="?{Difficulty Rating?|DR12 Normal.,12|DR6 Simple.,6|DR8 Routine.,8|DR10 Pretty simple.,10|DR12 Normal.,12|DR14 Difficult.,14|DR16 Very hard.,16|DR18 Should not be possible.,18}" />
|
|
<input class="hidden" type="text" name="attr_query14" value="?{Difficulty Rating?|DR14 Normal.,14|DR6 Simple.,6|DR8 Routine.,8|DR10 Pretty simple.,10|DR12 Normal.,12|DR14 Difficult.,14|DR16 Very hard.,16|DR18 Should not be possible.,18}" />
|
|
<input class="hidden" type="text" name="attr_morale_query" value="?{Choose Morale Rating|7}" />
|
|
<input class="hidden" type="text" name="attr_armour_query" value="?{Armour tier of target?|0,0|-d2,2|-d4,4|-d6,6|-d8,8}" />
|
|
<input class="hidden" type="text" name="attr_rest_query" value="?{Short or Long Rest?|Short d4, d4|Long d6, d6}" />
|
|
<input class="hidden" type="text" name="attr_dice_query" value="?{Choose your die|d2|d4|d6|d8|d10|d12|d20}" />
|
|
<input class="hidden" type="text" name="attr_dice_query2" value="?{Enter #of Dice|1}d?{Enter #of Sides|2}" />
|
|
<input class="hidden" type="text" name="attr_dice_d6" value="d6" />
|
|
<!-- <input class="hidden" type="text" name="attr_dice_query_inline_roll" value="&{template:ronin} {{heading=^{rolling-dice}}} {{ ?{Choose your die|d2|d4|d6|d8|d10|d12|d20}= = [[?{Choose your die|d2|d4|d6|d8|d10|d12|d20}]]}} {{roll_query_footer=[&nbsp;](`&#64;{selected|dice_query_inline_roll})}}" /> -->
|
|
<input class="hidden" type="text" name="attr_dice_query_inline_roll" value="&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolling-dice}}} {{roll_dice=[[0]]}} {{roll=?{Enter #of Dice|1}d?{Enter #of Sides|2} = [[?{Enter #of Dice|1}d?{Enter #of Sides|2}]]}} {{roll_query_footer=[&nbsp;](`&#64;{@{character_name_safe}|dice_query_inline_roll})}}" />
|
|
<input class="hidden" type="text" name="attr_dice_d6_inline_roll" value="&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolling-dice}}} {{roll_dice=[[0]]}} {{roll=@{dice_d6} = [[@{dice_d6}]]}} {{roll_query_footer=[&nbsp;](`&#64;{@{character_name_safe}|dice_query_inline_roll})}}" />
|
|
</div>
|
|
|
|
<script type="text/worker">
|
|
// concatenates repeating attribute
|
|
// (repeating section, rowID, attribute)
|
|
const section_attribute = (section, id, field) => `repeating_${section}_${id}_${field}`;
|
|
|
|
// non-repeating buttons
|
|
const buttonSet = [
|
|
'broken',
|
|
'dailytexts',
|
|
'defence',
|
|
'dr_test',
|
|
'haiku',
|
|
'improve',
|
|
'hunger',
|
|
'infection',
|
|
'initiative',
|
|
'initiative2',
|
|
'kamisvengeance',
|
|
'morale',
|
|
'reaction',
|
|
'resilience_test',
|
|
'rest',
|
|
'seppuku',
|
|
'seppuku2',
|
|
'seppukudamage',
|
|
'debilitating',
|
|
'seppukuhonour',
|
|
'seppukuhonourhalf',
|
|
'spirit_test',
|
|
'swiftness_test',
|
|
'takedamage',
|
|
'takedamagenoarmour',
|
|
'vigor_test',
|
|
'virtues',
|
|
];
|
|
|
|
// enables drag/drop of action buttons by syncing with a normal button
|
|
on('change:character_name sheet:opened', (eventInfo) => {
|
|
getSectionIDs('repeating_weapons', (idArrayWeapons) => {
|
|
getSectionIDs('repeating_texts', (idArrayTexts) => {
|
|
getAttrs(['character_name'], (v) => {
|
|
let allAttributeValues = {};
|
|
// process non-repeating buttons
|
|
allAttributeValues = buttonSet.reduce((all, one) => {
|
|
return {...all, [one]: `%{${v.character_name}|${one}-button}`};
|
|
}, {});
|
|
// process each repeating sections buttons
|
|
idArrayTexts.forEach((id) => {
|
|
// repeating buttons
|
|
const repeatingButtonSet = ['test'];
|
|
const attribute_values = repeatingButtonSet.reduce((all, one) => {
|
|
return {...all, [`repeating_texts_${id}_${one}`]: `%{${v.character_name}|repeating_texts_${id}_${one}-button}`};
|
|
}, {});
|
|
allAttributeValues = {...allAttributeValues, ...attribute_values};
|
|
});
|
|
idArrayWeapons.forEach((id) => {
|
|
// repeating buttons
|
|
const repeatingButtonSet = ['attack', 'monsterdamage', 'guard', 'parry', 'riposte'];
|
|
const attribute_values = repeatingButtonSet.reduce((all, one) => {
|
|
return {...all, [`repeating_weapons_${id}_${one}`]: `%{${v.character_name}|repeating_weapons_${id}_${one}-button}`};
|
|
}, {});
|
|
allAttributeValues = {...allAttributeValues, ...attribute_values};
|
|
});
|
|
setAttrs(allAttributeValues, {silent: true});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
const stats = [
|
|
'broken-button',
|
|
'dailytexts-button',
|
|
'defence-button',
|
|
'dr_test-button',
|
|
'haiku-button',
|
|
'hunger-button',
|
|
'improve-button',
|
|
'infection-button',
|
|
'initiative-button',
|
|
'initiative2-button',
|
|
'kamisvengeance-button',
|
|
'morale-button',
|
|
'reaction-button',
|
|
'resilience_test-button',
|
|
'rest-button',
|
|
'seppuku-button',
|
|
'seppuku2-button',
|
|
'seppukudamage-button',
|
|
'debilitating-button',
|
|
'seppukuhonour-button',
|
|
'seppukuhonourhalf-button',
|
|
'spirit_test-button',
|
|
'swiftness_test-button',
|
|
'takedamage-button',
|
|
'takedamagenoarmour-button',
|
|
'vigor_test-button',
|
|
'virtues-button',
|
|
];
|
|
const stat_changes = stats.map((stat) => `clicked:${stat}`).join(' ');
|
|
on(stat_changes, (eventInfo) => {
|
|
console.log(eventInfo.triggerName);
|
|
// include attributes here
|
|
const fields = [
|
|
'armour_damaged',
|
|
'armour_def_pen',
|
|
'armour_swift_pen',
|
|
'armour_tier_damage',
|
|
'armour_tier',
|
|
'character_name_safe',
|
|
'damage_multiplier',
|
|
'dr_query_12',
|
|
'dr_query_14',
|
|
'morale_query',
|
|
'food',
|
|
'honour',
|
|
'hp_max',
|
|
'hp',
|
|
'resilience',
|
|
'resurrection',
|
|
'spirit',
|
|
'swiftness',
|
|
'vigor',
|
|
'virtue',
|
|
'virtue_die',
|
|
'virtue_max',
|
|
'water',
|
|
];
|
|
// which button was pressed?
|
|
const trigger = eventInfo.triggerName.replace('clicked:', '');
|
|
getAttrs(fields, (v) => {
|
|
const output = {};
|
|
const character_name = v.character_name_safe;
|
|
// non-repeating CRP rolls
|
|
const nonRepeatingRolls = {
|
|
['broken-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{broken}}} {{roll=^{roll-result} [[1d4]]}} {{roll2=[[1d4]]}} {{roll3=[[1d4]]}} {{roll4=[[1d6]]}} {{roll5=[[1d4]]}} {{roll6=[[1d4]]}} {{roll7=[[1d2]]}} {{roll_broken=[[0]]}}`,
|
|
['improve-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{roll-improve}}} {{roll_improve=[[0]]}} {{roll=[[ 6d10 ]]^{hit-points-maximum-abbrv} @{hp|max}}} {{roll2=[[ 1d6 ]]}} {{roll3=[[ 1d6 ]]^{versus-swiftness} @{swiftness}}} {{roll4=[[ 1d6 ]]^{versus-spirit} @{spirit}}} {{roll5=[[ 1d6 ]]^{versus-vigor} @{vigor}}} {{roll6=[[ 1d6 ]]^{versus-resilience} @{resilience}}} {{hp_success=[[0]]}} {{swiftness_success=[[0]]}} {{spirit_success=[[0]]}} {{vigor_success=[[0]]}} {{resilience_success=[[0]]}}`,
|
|
['dailytexts-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{daily-texts}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d4 + @{spirit} @{spirit_roll_label} + @{spirit_mod} [mod] ]]}} {{description_center=^{daily-texts-result}}}`,
|
|
['defence-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{defence}}}} {{armour_worn=@{armour}}} {{roll_defence=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{swiftness} @{swiftness_roll_label} + @{swiftness_mod} [mod] ]]}} {{armour_pen=[[0]]}} {{defence_success_note=[[0]]}} {{defence_crit_note=[[0]]}} {{defence_fumble_note=[[0]]}} {{damagePC=[^{roll-pc-damage}](\`@{${character_name}|takedamage})}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['takedamage-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=@{dice_query2} ^{damage}}} {{armour_worn=d@{armour_tier}}} {{roll_damage=[[0]]}} {{roll=[[ floor(@{dice_query2}*@{damage_multiplier} [mult]) ]]}} {{armour_reduction=[[ d@{armour_tier} ]]}} {{damage_total=[[0]]}} {{description_center=^{hit-points-reduced}}}`,
|
|
['takedamagenoarmour-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=@{dice_query2} ^{damage}}} {{roll_damage=[[0]]}} {{roll=[[ @{dice_query2} ]]}} {{armour_reduction=[[0]]}} {{damage_total=[[0]]}} {{description_center=^{hit-points-reduced}}}`,
|
|
['initiative-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{initiative-group}}} {{roll_initiative=[[0]]}} {{roll=^{roll-result} [[ 1d6 ]]}}`,
|
|
['initiative2-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{initiative-individual}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d6 + @{swiftness} @{swiftness_roll_label}&{tracker} ]]}} {{description_center=^{added-to-tracker} }}`,
|
|
['kamisvengeance-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{kamis-vengeance}}} {{roll_kami=[[0]]}} {{roll=^{roll-result} [[1d20]]}} {{menu1=[^{roll-resilience}](\`@{${character_name}|resilience_test})}} {{menu2=[^{roll-swiftness}](\`@{${character_name}|swiftness_test})}} {{menu3=[^{roll-spirit}](\`@{${character_name}|spirit_test})}} {{damagePC=[^{roll-pc-damage}](\`@{${character_name}|takedamagenoarmour})}} {{roll_query=[ ](\`@{${character_name}|dice_d6_inline_roll})}}`,
|
|
['rest-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls}}} {{roll_rest=[[0]]}} {{roll=**+** [[ @{rest_query} ]] ^{hit-points-abbrv}}} {{roll2=d@{virtue_die} ^{virtues-u} = [[ d@{virtue_die} ]]}} {{short_rest=[[0]]}} {{long_rest=[[0]]}} {{footnote=[[ @{food}-1 ]]^{food} | [[ @{water}-1 ]]^{water}}}`,
|
|
['infection-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls}}} {{roll=**-** [[ 1d6 ]] ^{hit-points-abbrv}}}} {{roll_infected=[[0]]}} {{infection=[[0]]}}`,
|
|
['hunger-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{hunger-thirst}}} {{roll=**-** [[ 1d4 ]] ^{hit-points-abbrv}}}} {{roll_hunger=[[0]]}} {{hungry=[[0]]}`,
|
|
['virtues-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{virtues-u}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d@{virtue_die} ]]}}`,
|
|
['seppuku-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{seppuku-u} ⬦ ^{spirit-u} ^{test}}} {{roll_seppuku=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{spirit} @{spirit_roll_label} + @{spirit_mod} [mod] ]]}} {{dr_final=[[0]]}} {{dr_base}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}} {{seppuku_success_note=[[1]]}} {{seppuku_fail_note=[[0]]}} {{menu1=[^{roll-resilience}](\`@{${character_name}|seppuku2})}}`,
|
|
['seppuku2-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{seppuku-u} ⬦ ^{resilience-u} ^{test}}} {{roll_seppuku=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{resilience} @{resilience_roll_label} ]]}} {{dr_final=[[14]]}} {{dr_base}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}} {{seppuku2_success_note=[[0]]}} {{seppuku2_fail_note=[[0]]}} {{menu1=[^{roll-pc-damage}](\`@{${character_name}|seppukudamage}) **|** [^{roll-half-honour}](\`@{${character_name}|seppukuhonourhalf})}} {{menu2=[^{roll-honour}](\`@{${character_name}|seppukuhonour})}}`,
|
|
['seppukudamage-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{seppuku-u} ⬦ ^{hit-points-abbrv} ^{damage}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d8 ]] %NEWLINE% [^{roll-debilitating-injuries}](\`@{${character_name}|debilitating})}}`,
|
|
['debilitating-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{debilitating-injuries}}} {{roll_debilitating=[[0]]}} {{roll=^{roll-result} [[ 1d10 ]]}}`,
|
|
['seppukuhonour-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{honour-u}}} {{roll_seppuku=[[0]]}} {{roll2=^{roll-result} [[ 2d6+2 ]]}} {{roll3=[[@{honour}]]}} {{resurrected=[[@{resurrection}]]}}`,
|
|
['seppukuhonourhalf-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ½ ^{honour-u}}} {{roll_seppuku=[[0]]}} {{roll2=^{roll-result} [[ floor((2d6+2)/2) ]]}} {{roll3=[[@{honour}]]}} {{resurrected=[[@{resurrection}]]}}`,
|
|
['haiku-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{haiku-u}}} {{roll_haiku=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{spirit} @{spirit_roll_label} + @{spirit_mod} [mod] ]]}} {{haiku_fail_note=[[0]]}} {{haiku_success_note=[[0]]}} {{roll_query=[ ](\`@{${character_name}|dice_d6_inline_roll})}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['dr_test-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{dr-test}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d20 ]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['swiftness_test-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{swiftness-u}}} {{armour_worn=@{armour}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{swiftness} @{swiftness_roll_label} + @{swiftness_mod} [mod] ]]}} {{armour_pen=[[0]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['spirit_test-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{spirit-u}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{spirit} @{spirit_roll_label} + @{spirit_mod} [mod]]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['vigor_test-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{vigor-u}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{vigor} @{vigor_roll_label} + @{vigor_mod} [mod]]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['resilience_test-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{resilience-u}}} {{roll_default=[[0]]}} {{roll=^{roll-result} [[ 1d20 + @{resilience} @{resilience_roll_label} + @{resilience_mod} [mod]]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
['morale-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{morale-u}}} {{roll_morale=[[0]]}} {{roll=^{roll-result} [[ 2d6 ]]}} {{roll2=[[ 1d6 ]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}}`,
|
|
['reaction-button']: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{reaction-u}}} {{roll_reaction=[[0]]}} {{roll=^{roll-result} [[ 2d6 ]]}}`,
|
|
};
|
|
const roll_string = nonRepeatingRolls[trigger];
|
|
const dr_string12 = `!&{template:ronin}{{answer=![[${v.dr_query_12}]]}}`;
|
|
const dr_string14 = `!&{template:ronin}{{answer=![[${v.dr_query_14}]]}}`;
|
|
const morale_string = `!&{template:ronin}{{answer=![[${v.morale_query}]]}}`;
|
|
const swiftness = +v.swiftness || 0;
|
|
const spirit = +v.spirit || 0;
|
|
const vigor = +v.vigor || 0;
|
|
const resilience = +v.resilience || 0;
|
|
const armourTier = +v.armour_tier || 0;
|
|
// armour penalty does not apply to Swiftness when damaged
|
|
const armourDamaged = +v.armour_damaged || 0;
|
|
const armourTierSwiftPen = +armourDamaged === 0 ? v.armour_swift_pen : 0;
|
|
const armourTierDefPen = +v.armour_def_pen || 0;
|
|
const hp = +v.hp || 0;
|
|
const hpMax = +v.hp_max || 0;
|
|
const honour = +v.honour || 10;
|
|
const food = +v.food || 0;
|
|
const water = +v.water || 0;
|
|
const resurrection = +v.resurrection || 0;
|
|
const virtue = +v.virtue || 0;
|
|
const virtueMax = +v.virtue_max || 0;
|
|
|
|
// process each button's roll
|
|
if (trigger === 'dailytexts-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
const result = roll.results.roll.result;
|
|
output.texts_per_day = result;
|
|
output.texts_per_day_max = result;
|
|
finishRoll(roll.rollId);
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
} else if (trigger === 'virtues-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
const result = roll.results.roll.result;
|
|
output.virtue = result;
|
|
output.virtue_max = result;
|
|
finishRoll(roll.rollId);
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
} else if (trigger === 'takedamage-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
const armourResult = roll.results.armour_reduction.result;
|
|
const damageResult = roll.results.roll.result;
|
|
const damageMult = v.damage_multiplier;
|
|
const armourTierDamage = v.armour_tier_damage;
|
|
console.log(`Damage rolled: damageMult:${damageMult} armourTierDamage:${armourTierDamage}`);
|
|
const adjustedDamage = Math.max(damageResult - armourResult, 0);
|
|
finishRoll(roll.rollId, {
|
|
damage_total: adjustedDamage,
|
|
});
|
|
output.hp = hp - adjustedDamage;
|
|
output.armour_tier = armourTierDamage === 1 ? Math.max(armourTier - 2, 0) : armourTier;
|
|
output.armour_damaged = armourTierDamage === 1 ? 1 : 0;
|
|
// reset placeholder attrs
|
|
output.damage_multiplier = 1;
|
|
output.armour_tier_damage = 0;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'takedamagenoarmour-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
const damageResult = roll.results.roll.result;
|
|
finishRoll(roll.rollId, {
|
|
damage_total: damageResult,
|
|
});
|
|
output.hp = hp - damageResult;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'rest-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
const die = roll.results.roll.rolls[0].sides;
|
|
const virtueReroll = roll.results.roll2.result;
|
|
finishRoll(roll.rollId, {
|
|
short_rest: die,
|
|
long_rest: die,
|
|
});
|
|
output.food = food - 1;
|
|
output.water = water - 1;
|
|
output.hp = Math.min(hp + result, hpMax);
|
|
output.virtue_max = virtueReroll;
|
|
output.virtue = virtueReroll;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'infection-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
const result = roll.results.roll.result;
|
|
const die = roll.results.roll.rolls[0].sides;
|
|
finishRoll(roll.rollId, {
|
|
infection: die,
|
|
});
|
|
output.infected = 1;
|
|
output.hp = hp - result;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'hunger-button') {
|
|
startRoll(roll_string, (roll) => {
|
|
const result = roll.results.roll.result;
|
|
const die = roll.results.roll.rolls[0].sides;
|
|
finishRoll(roll.rollId, {
|
|
hungry: die,
|
|
});
|
|
output.hp = hp - result;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'defence-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
// armour penalty applies
|
|
const DR = baseDR + armourTierDefPen;
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
armour_pen: armourTierDefPen,
|
|
});
|
|
// pass to damage roll
|
|
output.armour_tier_damage = isFumble === 1 ? 1 : 0;
|
|
output.damage_multiplier = isFumble === 1 ? 2 : 1;
|
|
setAttrs(output);
|
|
});
|
|
});
|
|
} else if (trigger === 'swiftness_test-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
// add the armour penalty
|
|
const DR = baseDR + armourTierSwiftPen;
|
|
console.log(`Change detected: dr:${DR}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
armour_pen: armourTierSwiftPen,
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'spirit_test-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
console.log(`Change detected: dr:${DR}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'seppuku-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
const result = roll.results.roll.result;
|
|
const DR = 12;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
});
|
|
output.seppuku_status = isSuccess === 1 ? 1 : 0;
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
} else if (trigger === 'seppuku2-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
const DR = 14;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
});
|
|
});
|
|
} else if (trigger === 'seppukudamage-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
finishRoll(roll.rollId);
|
|
output.hp = hp - result;
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
} else if (trigger === 'seppukuhonour-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll2) => {
|
|
console.log(roll2);
|
|
const result = roll2.results.roll2.result;
|
|
finishRoll(roll2.rollId);
|
|
// first death?
|
|
output.hp = resurrection === 0 ? hpMax : hp;
|
|
output.honour = Math.min(honour + result, 10);
|
|
output.resurrection = 1;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'seppukuhonourhalf-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll2) => {
|
|
console.log(roll2);
|
|
const result = roll2.results.roll2.result;
|
|
finishRoll(roll2.rollId);
|
|
// first death?
|
|
output.hp = resurrection === 0 ? hpMax : hp;
|
|
output.honour = Math.min(honour + result, 10);
|
|
output.resurrection = 1;
|
|
setAttrs(output);
|
|
});
|
|
} else if (trigger === 'debilitating-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
// const result = roll.results.roll.result;
|
|
finishRoll(roll.rollId);
|
|
});
|
|
} else if (trigger === 'dr_test-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
console.log(`Change detected: dr:${DR}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'vigor_test-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
console.log(`Change detected: dr:${DR}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'resilience_test-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
console.log(`Change detected: dr:${DR}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'haiku-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
console.log(`Change detected: dr:${DR}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
});
|
|
output.virtue = isSuccess === 1 ? Math.min(virtue + 1, virtueMax) : virtue;
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'morale-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(morale_string, (morale_prompt) => {
|
|
const baseMorale = morale_prompt.results.answer.result;
|
|
const morale = baseMorale;
|
|
console.log(`Change detected: dr:${morale}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
const isSuccess = result >= morale ? 1 : 0;
|
|
finishRoll(roll.rollId, {
|
|
dr_base: baseMorale,
|
|
dr_final: morale,
|
|
success: isSuccess,
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger === 'reaction-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
finishRoll(roll.rollId);
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
} else if (trigger === 'broken-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
brokenRoll(roll_string);
|
|
} else if (trigger === 'kamisvengeance-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// DO STUFF WITH THIS ROLL
|
|
console.log(roll);
|
|
// const result = roll.results.roll.result;
|
|
finishRoll(roll.rollId);
|
|
});
|
|
} else if (trigger === 'improve-button') {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
const hpResult = roll.results.roll.result;
|
|
const hpBonusResult = roll.results.roll2.result;
|
|
const swiftnessResult = roll.results.roll3.result;
|
|
const spiritResult = roll.results.roll4.result;
|
|
const vigorResult = roll.results.roll5.result;
|
|
const resilienceResult = roll.results.roll6.result;
|
|
let swiftness_success = 0;
|
|
let spirit_success = 0;
|
|
let vigor_success = 0;
|
|
let resilience_success = 0;
|
|
let swiftnessMOD = 0;
|
|
let spiritMOD = 0;
|
|
let vigorMOD = 0;
|
|
let resilienceMOD = 0;
|
|
|
|
if (swiftnessResult === 1 || swiftnessResult < swiftness) {
|
|
swiftness_success = 0;
|
|
swiftnessMOD = Math.max(-3, swiftness - 1);
|
|
} else if (swiftnessResult >= swiftness) {
|
|
swiftness_success = 1;
|
|
swiftnessMOD = Math.min(6, swiftness + 1);
|
|
}
|
|
|
|
if (spiritResult === 1 || spiritResult < spirit) {
|
|
spirit_success = 0;
|
|
spiritMOD = Math.max(-3, spirit - 1);
|
|
} else if (spiritResult >= spirit) {
|
|
spirit_success = 1;
|
|
spiritMOD = Math.min(6, spirit + 1);
|
|
}
|
|
|
|
if (vigorResult === 1 || vigorResult < vigor) {
|
|
vigor_success = 0;
|
|
vigorMOD = Math.max(-3, vigor - 1);
|
|
} else if (vigorResult >= vigor) {
|
|
vigor_success = 1;
|
|
vigorMOD = Math.min(6, vigor + 1);
|
|
}
|
|
|
|
if (resilienceResult === 1 || resilienceResult < resilience) {
|
|
resilience_success = 0;
|
|
resilienceMOD = Math.max(-3, resilience - 1);
|
|
} else if (resilienceResult >= resilience) {
|
|
resilience_success = 1;
|
|
resilienceMOD = Math.min(6, resilience + 1);
|
|
}
|
|
|
|
finishRoll(roll.rollId, {
|
|
hp_success: hpResult >= hpMax ? 1 : 0,
|
|
swiftness_success: swiftness_success,
|
|
spirit_success: spirit_success,
|
|
vigor_success: vigor_success,
|
|
resilience_success: resilience_success,
|
|
});
|
|
output.hp_max = hpResult >= hpMax ? hpMax + hpBonusResult : hpMax;
|
|
output.swiftness = swiftnessMOD;
|
|
output.spirit = spiritMOD;
|
|
output.vigor = vigorMOD;
|
|
output.resilience = resilienceMOD;
|
|
setAttrs(output);
|
|
});
|
|
} else {
|
|
// NORMAL ROLL NO SPECIAL HANDLING NEEDED
|
|
console.log(`Normal roll - No special handling`);
|
|
startRoll(roll_string, (roll) => {
|
|
finishRoll(roll.rollId);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
on(
|
|
'clicked:repeating_weapons:attack-button clicked:repeating_weapons:monsterdamage-button clicked:repeating_weapons:guard-button clicked:repeating_weapons:parry-button clicked:repeating_weapons:riposte-button clicked:repeating_texts:test-button',
|
|
(eventInfo) => {
|
|
const id = eventInfo.sourceAttribute.split('_')[2].toLowerCase();
|
|
console.log(eventInfo.triggerName);
|
|
// include non-rep attribute here
|
|
const fields = [
|
|
'armour_def_pen',
|
|
'armour_swift_pen',
|
|
'armour_tier',
|
|
'armour_damaged',
|
|
'armour_query',
|
|
'character_name_safe',
|
|
'dr_query_12',
|
|
'dr_query_14',
|
|
'duel',
|
|
'hp',
|
|
'resilience',
|
|
'spirit',
|
|
'swiftness',
|
|
'texts_per_day',
|
|
'vigor',
|
|
`repeating_weapons_${id}_type`,
|
|
`repeating_weapons_${id}_track_ammo`,
|
|
`repeating_weapons_${id}_ammo`,
|
|
`repeating_weapons_${id}_ammo_max`,
|
|
];
|
|
getAttrs(fields, (v) => {
|
|
const output = {};
|
|
const character_name = v.character_name_safe;
|
|
const weaponTypeRanged = v[`repeating_weapons_${id}_type`] === '@{spirit}' ? 1 : 0;
|
|
const trackAmmo = +v[`repeating_weapons_${id}_track_ammo`];
|
|
const ammo = +v[`repeating_weapons_${id}_ammo`];
|
|
const ammoMax = +v[`repeating_weapons_${id}_ammo_max`];
|
|
console.log(`Change detected: weaponTypeRanged:${weaponTypeRanged} trackAmmo:${trackAmmo} ammo:${ammo}/${ammoMax}`);
|
|
// repeating CRP rolls
|
|
const repeatingRolls = {
|
|
[`repeating_texts_${id}_test-button`]: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{wield-text} - @{repeating_texts_${id}_name}}} {{roll_texts=[[0]]}} {{roll=[[ 1d20 + @{spirit} @{spirit_roll_label} + @{spirit_mod} [mod] ]]}} {{texts_hp_note=[[1d2]]}} {{texts_kamis_note=[^{roll-kamis-vengeance}](\`@{${character_name}|kamisvengeance})}} {{description=**@{repeating_texts_${id}_name}** - @{repeating_texts_${id}_description}}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
[`repeating_weapons_${id}_attack-button`]: `&{template:ronin} {{heading=@{character_name}}} {{subheading=@{repeating_weapons_${id}_type_label} ^{attack} - @{repeating_weapons_${id}_name}}} {{roll_attack=[[0]]}} {{roll=[[ 1d20 + @{repeating_weapons_${id}_type} [@{repeating_weapons_${id}_type_label_ability}] + @{repeating_weapons_${id}_type_mod} [mod] ]]}} {{damage=[[@{repeating_weapons_${id}_damage}]]}} {{damagePC=[^{roll-pc-damage}](\`@{${character_name}|takedamage})}} {{attack_success_note=[[0]]}} {{attack_crit_note=[[0]]}} {{attack_fail_note=[[0]]}} {{attack_fumble_note=[[0]]}} {{attack_track_ammo=[[@{repeating_weapons_${id}_track_ammo}]]}} {{attack_ammo=[[@{repeating_weapons_${id}_ammo}]]^{portion-of} @{repeating_weapons_${id}_ammo|max} ^{remaining}}} {{dueling=[[@{duel}]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
[`repeating_weapons_${id}_monsterdamage-button`]: `&{template:ronin} {{heading=@{character_name}}} {{subheading=@{repeating_weapons_${id}_type_label} ^{attack} - @{repeating_weapons_${id}_name}}} {{roll=[[@{repeating_weapons_${id}_damage}]]}} {{roll_damage=[[0]]}} {{damage=[[0]]}} {{armour_worn=d@{armour_query}}} {{armour_reduction=[[ d@{armour_query} ]]}} {{damage_total=[[0]]}} {{attack_track_ammo=[[@{repeating_weapons_${id}_track_ammo}]]}} {{attack_ammo=[[@{repeating_weapons_${id}_ammo}]]^{portion-of} @{repeating_weapons_${id}_ammo|max} ^{remaining}}} {{description_center=^{reduce-hit-points-target}}}`,
|
|
[`repeating_weapons_${id}_parry-button`]: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{parry} - @{repeating_weapons_${id}_name}}} {{roll_parry=[[0]]}} {{roll=[[ 1d20 + @{resilience} @{resilience_roll_label} + @{resilience_mod} [mod] ]]}} {{damage=[[ @{repeating_weapons_${id}_damage} ]]}} {{damagePC=[^{roll-pc-damage}](\`@{${character_name}|takedamage})}} {{parry_success_note=[[0]]}} {{parry_crit_note=[[0]]}} {{parry_fail_note=[[0]]}} {{parry_fumble_note=[[0]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
[`repeating_weapons_${id}_guard-button`]: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{guard} - @{repeating_weapons_${id}_name}}} {{roll_guard=[[0]]}} {{roll=[[ 1d20 + @{swiftness} @{swiftness_roll_label} + @{swiftness_mod} [mod] ]]}} {{damage=[[@{repeating_weapons_${id}_damage}]]}} {{damagePC=[^{roll-pc-damage}](\`@{${character_name}|takedamage})}} {{damagePChalf=[^{roll-half-pc-damage}](\`@{${character_name}|takedamage})}} {{guard_crit_note=[[0]]}} {{guard_success_note=[[0]]}} {{guard_fail_note=[[0]]}} {{guard_fumble_note=[[0]]}} {{dueling=[[@{duel}]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
[`repeating_weapons_${id}_riposte-button`]: `&{template:ronin} {{heading=@{character_name}}} {{subheading=^{riposte} - @{repeating_weapons_${id}_name}}} {{roll_riposte=[[0]]}} {{roll=[[ 1d20 + @{resilience} @{resilience_roll_label} + @{resilience_mod} [mod] ]]}} {{damage=[[@{repeating_weapons_${id}_damage}]]}} {{damagePC=[^{roll-pc-damage}](\`@{${character_name}|takedamage})}} {{riposte_crit_note=[[0]]}} {{riposte_success_note=[[0]]}} {{riposte_fail_note=[[0]]}} {{riposte_fumble_note=[[0]]}} {{dueling=[[@{duel}]]}} {{dr_final=[[0]]}} {{dr_base=[[0]]}} {{success=[[0]]}} {{crit=[[0]]}} {{fumble=[[0]]}}`,
|
|
};
|
|
// which button was pressed?
|
|
const trigger = eventInfo.triggerName.replace('clicked:', '');
|
|
const roll_string = repeatingRolls[trigger];
|
|
const dr_string12 = `!&{template:ronin}{{answer=![[${v.dr_query_12}]]}}`;
|
|
const dr_string14 = `!&{template:ronin}{{answer=![[${v.dr_query_14}]]}}`;
|
|
const textsPerDay = +v.texts_per_day || 0;
|
|
const currentHP = +v.hp || 0;
|
|
const isDuel = v.duel || 0;
|
|
|
|
// process each button's roll
|
|
if (trigger.includes('test-button')) {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
const failedHP = roll.results.texts_hp_note.result;
|
|
output.texts_per_day = Math.max(0, textsPerDay - 1);
|
|
output.hp = result >= DR ? currentHP : currentHP - failedHP; // allow negative HP
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
fumble: isFumble,
|
|
texts_hp_note: failedHP,
|
|
});
|
|
setAttrs(output);
|
|
});
|
|
});
|
|
} else if (trigger.includes('attack-button')) {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
const damageRoll = roll.results.damage.result;
|
|
const critMult = isCrit === 1 ? 2 : 1;
|
|
const damageTotal = damageRoll * critMult;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
damage: damageTotal,
|
|
attack_ammo: Math.max(0, weaponTypeRanged === 1 && trackAmmo === 1 ? ammo - 1 : ammo),
|
|
});
|
|
output[`repeating_weapons_${id}_broken_weapon`] = isFumble === 1 ? 1 : 0;
|
|
output[`repeating_weapons_${id}_ammo`] = Math.max(0, weaponTypeRanged === 1 && trackAmmo === 1 ? ammo - 1 : ammo);
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger.includes('monsterdamage-button')) {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const damageResult = roll.results.roll.result;
|
|
const armourResult = roll.results.armour_reduction.result;
|
|
const adjustedDamage = Math.max(damageResult - armourResult, 0);
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
damage: damageResult,
|
|
damage_total: adjustedDamage,
|
|
attack_ammo: Math.max(0, weaponTypeRanged === 1 && trackAmmo === 1 ? ammo - 1 : ammo),
|
|
});
|
|
output[`repeating_weapons_${id}_ammo`] = Math.max(0, weaponTypeRanged === 1 && trackAmmo === 1 ? ammo - 1 : ammo);
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
} else if (trigger.includes('parry-button')) {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string14, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
const damageRoll = roll.results.damage.result;
|
|
const critMult = isCrit === 1 ? 2 : 1;
|
|
const damageTotal = damageRoll * critMult;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
damage: damageTotal,
|
|
});
|
|
// pass to damage roll
|
|
output.armour_tier_damage = isFumble === 1 ? 1 : 0;
|
|
output.damage_multiplier = isFumble === 1 ? 2 : 1;
|
|
if (isDuel === 1) {
|
|
output[`repeating_weapons_${id}_broken_weapon`] = isFumble === 1 ? 1 : 0;
|
|
}
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger.includes('guard-button')) {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string12, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
const damageRoll = roll.results.damage.result;
|
|
const critMult = isCrit === 1 ? 2 : 1;
|
|
const damageTotal = damageRoll * critMult;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
damage: damageTotal,
|
|
});
|
|
// pass to damage roll
|
|
output.damage_multiplier = isSuccess !== 1 ? 0.5 : 1;
|
|
output.armour_tier_damage = isFumble === 1 ? 1 : 0;
|
|
output[`repeating_weapons_${id}_broken_weapon`] = isFumble === 1 ? 1 : 0;
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else if (trigger.includes('riposte-button')) {
|
|
console.log(`Change detected: trigger:${trigger}`);
|
|
startRoll(dr_string14, (dr_prompt) => {
|
|
const baseDR = dr_prompt.results.answer.result;
|
|
const DR = baseDR;
|
|
startRoll(roll_string, (roll) => {
|
|
// console.log(roll);
|
|
const d20Roll = roll.results.roll.dice[0];
|
|
const result = roll.results.roll.result;
|
|
const isCrit = d20Roll === 20 ? 1 : 0;
|
|
const isFumble = d20Roll === 1 ? 1 : 0;
|
|
const isSuccess = result >= DR ? 1 : 0;
|
|
let damageRoll = roll.results.damage.result;
|
|
// riposte does x2 on success
|
|
damageRoll = damageRoll * 2;
|
|
const critMult = isCrit === 1 ? 2 : 1;
|
|
const damageTotal = damageRoll * critMult;
|
|
finishRoll(roll.rollId, {
|
|
//'name of key': 'computed value'
|
|
dr_base: baseDR,
|
|
dr_final: DR,
|
|
success: isSuccess,
|
|
crit: isCrit,
|
|
fumble: isFumble,
|
|
damage: damageTotal,
|
|
});
|
|
output[`repeating_weapons_${id}_broken_weapon`] = isFumble === 1 ? 1 : 0;
|
|
output.armour_tier_damage = isFumble === 1 ? 1 : 0;
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
} else {
|
|
// NORMAL ROLL NO SPECIAL HANDLING NEEDED
|
|
console.log(`Normal roll - No special handling`);
|
|
startRoll(roll_string, (roll) => {
|
|
finishRoll(roll.rollId);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
);
|
|
|
|
on('change:armour_tier change:armour', (eventInfo) => {
|
|
getAttrs(['armour_tier', 'armour'], (v) => {
|
|
const output = {};
|
|
const armourTier = +v['armour_tier'];
|
|
let armourTierSwiftPen = 0;
|
|
let armourTierDefPen = 0;
|
|
if (armourTier === 4) {
|
|
armourTierSwiftPen = 2;
|
|
armourTierDefPen = 2;
|
|
}
|
|
if (armourTier === 6) {
|
|
armourTierSwiftPen = 4;
|
|
armourTierDefPen = 2;
|
|
}
|
|
// rules do not specify above tier 3
|
|
if (armourTier === 8) {
|
|
armourTierSwiftPen = 4;
|
|
armourTierDefPen = 2;
|
|
}
|
|
output.armour_swift_pen = armourTierSwiftPen;
|
|
output.armour_def_pen = armourTierDefPen;
|
|
console.log(`
|
|
armour_tier:${armourTier}
|
|
armour_swift_pen:${armourTierSwiftPen}
|
|
armour_def_pen:${armourTierDefPen}`);
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
|
|
// equipment weight
|
|
on('change:repeating_equipment change:vigor', (eventInfo) => {
|
|
console.log(`Change detected: ${eventInfo.sourceAttribute}`);
|
|
getSectionIDs('repeating_equipment', (idArray) => {
|
|
const output = {};
|
|
const fields = [];
|
|
_.each(idArray, (id) => {
|
|
fields.push(section_attribute('equipment', id, 'name'));
|
|
fields.push(section_attribute('equipment', id, 'weight'));
|
|
});
|
|
getAttrs(['vigor', ...fields], (v) => {
|
|
const totalEquipmentWeight = [];
|
|
const vigor = +v.vigor || 0;
|
|
idArray.forEach((id) => {
|
|
name = v[section_attribute('equipment', id, 'name')];
|
|
if (name !== '') {
|
|
weight = +v[section_attribute('equipment', id, 'weight')] || 0;
|
|
} else {
|
|
weight = 0;
|
|
}
|
|
totalEquipmentWeight.push(weight);
|
|
});
|
|
output.carrying_capacity = vigor + 8;
|
|
output.load = totalEquipmentWeight.reduce((sum, weight) => sum + weight, 0);
|
|
setAttrs(output);
|
|
});
|
|
});
|
|
});
|
|
|
|
// set field warnings
|
|
const setWarning = (attr, flag) => {
|
|
const output = {};
|
|
output[`${attr}_warning`] = flag;
|
|
setAttrs(output);
|
|
};
|
|
|
|
// check for Broken
|
|
on('change:hp', (eventInfo) => {
|
|
getAttrs(['hp', 'hp_max', 'resurrection', 'ask_broken'], (v) => {
|
|
const output = {};
|
|
const roll_string =
|
|
'&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{broken}}} {{roll=^{roll-result} [[1d4]]}} {{roll2=[[1d4]]}} {{roll3=[[1d4]]}} {{roll4=[[1d6]]}} {{roll5=[[1d4]]}} {{roll6=[[1d4]]}} {{roll7=[[1d2]]}} {{roll_broken=[[0]]}}';
|
|
const HP = +v.hp || 0;
|
|
const hpMax = +v.hp_max || 0;
|
|
const resurrection = +v.resurrection || 0;
|
|
const askBroken = v.ask_broken;
|
|
if (HP > 0) {
|
|
// INJURED
|
|
console.log(`Change detected: INJURED`);
|
|
setWarning('hp', 0);
|
|
setWarning('broken', 0);
|
|
return;
|
|
} else if (resurrection === 1) {
|
|
// DEAD DEAD
|
|
console.log(`Change detected: DEAD DEAD`);
|
|
const roll_string = '&{template:ronin} {{heading=@{character_name}}} {{subheading}} {{roll_death=[[1]]}} {{roll=[[ @{honour} ]]}}';
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
finishRoll(roll.rollId);
|
|
});
|
|
setWarning('hp', 1);
|
|
setWarning('broken', 0);
|
|
return;
|
|
} else if (HP < 0) {
|
|
// RESURRECTION go to Yomi
|
|
console.log(`Change detected: RESURRECTION go to Yomi`);
|
|
const roll_string = '&{template:ronin} {{heading=@{character_name}}} {{subheading}} {{roll_death=[[0]]}}';
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
finishRoll(roll.rollId);
|
|
});
|
|
output.resurrection = 1;
|
|
output.hp = hpMax;
|
|
setWarning('hp', 1);
|
|
setWarning('broken', 0);
|
|
} else {
|
|
// ROLL BROKEN
|
|
console.log(`Change detected: BROKEN`);
|
|
brokenRoll(roll_string, HP, hpMax, resurrection, askBroken);
|
|
setWarning('hp', 1);
|
|
setWarning('broken', 1);
|
|
}
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
|
|
const brokenRoll = (roll_string, HP, hpMax, resurrection, askBroken) => {
|
|
const output = {};
|
|
// Broken roll was pushed but HP is not 0
|
|
if (HP !== 0) {
|
|
console.log(`Change detected: HP is not at 0. PC is not Broken`);
|
|
startRoll(
|
|
'&{template:ronin} {{heading=@{character_name}}} {{subheading=^{rolls} ^{broken}}} {{description_center=^{hit-points-abbrv} = [[@{hp}]]%NEWLINE%^{not-broken}}}',
|
|
(roll) => {
|
|
console.log(roll);
|
|
finishRoll(roll.rollId);
|
|
},
|
|
);
|
|
return;
|
|
}
|
|
// QUERY
|
|
startRoll(`!{{template:default}}{{ask=![[${askBroken}]]}}`, (question) => {
|
|
const query = question.results.ask.result;
|
|
if (query) {
|
|
startRoll(roll_string, (roll) => {
|
|
console.log(roll);
|
|
const result = roll.results.roll.result;
|
|
const hpRecoveryRoll3 = roll.results.roll3.result || 0;
|
|
const subRoll = roll.results.roll4.result || 0;
|
|
const hpRecoveryRoll6 = roll.results.roll6.result || 0;
|
|
console.log(`Change detected: hpRecoveryRoll3 ${hpRecoveryRoll3} hpRecoveryRoll6 ${hpRecoveryRoll6}`);
|
|
// first time Dead?
|
|
if (result === 4 && resurrection === 0) {
|
|
output.resurrection = 1;
|
|
output.hp = hpMax;
|
|
}
|
|
finishRoll(roll.rollId);
|
|
if (result === 1) {
|
|
output.hp = hpRecoveryRoll3;
|
|
}
|
|
if (result === 2 && subRoll === 6) {
|
|
output.hp = hpRecoveryRoll6;
|
|
}
|
|
setAttrs(output);
|
|
});
|
|
} else {
|
|
console.log(`Change detected: DO NOT ROLL BROKEN`);
|
|
}
|
|
});
|
|
};
|
|
|
|
// warns for over-loaded
|
|
on('change:load', (eventInfo) => {
|
|
getAttrs(['load', 'carrying_capacity'], (v) => {
|
|
const load = +v.load;
|
|
const carryingCapacity = +v.carrying_capacity || 0;
|
|
const flag = load > carryingCapacity ? 1 : 0;
|
|
setWarning('load', flag);
|
|
});
|
|
});
|
|
|
|
// translation for queries
|
|
const translateWeaponType = () => {
|
|
getSectionIDs('repeating_weapons', (idArray) => {
|
|
const output = {};
|
|
const fields = [];
|
|
_.each(idArray, (id) => {
|
|
fields.push(section_attribute('weapons', id, 'type'));
|
|
});
|
|
getAttrs(fields, (v) => {
|
|
idArray.forEach((id) => {
|
|
const weaponType = v[section_attribute('weapons', id, 'type')];
|
|
const striking = getTranslationByKey('striking');
|
|
const ranged = getTranslationByKey('ranged');
|
|
output[section_attribute('weapons', id, 'type_label')] = weaponType.includes('vigor') ? striking : ranged;
|
|
output[section_attribute('weapons', id, 'type_label_ability')] = weaponType.includes('vigor') ? 'vigor' : 'spirit';
|
|
output[section_attribute('weapons', id, 'type_mod')] = weaponType.includes('vigor') ? '@{vigor_mod}' : '@{spirit_mod}';
|
|
output[section_attribute('weapons', id, 'show_ranged')] = weaponType.includes('vigor') ? 0 : 1;
|
|
});
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
};
|
|
|
|
on('sheet:opened', function (eventInfo) {
|
|
setAttrs(
|
|
{
|
|
dr_query_12:
|
|
'?{' +
|
|
getTranslationByKey('difficulty-rating') +
|
|
'|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-12') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-12') +
|
|
',12|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-6') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-6') +
|
|
',6|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-8') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-8') +
|
|
',8|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-10') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-10') +
|
|
',10|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-12') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-12') +
|
|
',12|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-14') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-14') +
|
|
',14|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-16') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-16') +
|
|
',16|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-18') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-18') +
|
|
',18}',
|
|
dr_query_14:
|
|
'?{' +
|
|
getTranslationByKey('difficulty-rating') +
|
|
'|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-14') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-14') +
|
|
',14|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-6') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-6') +
|
|
',6|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-8') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-8') +
|
|
',8|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-10') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-10') +
|
|
',10|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-12') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-12') +
|
|
',12|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-14') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-14') +
|
|
',14|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-16') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-16') +
|
|
',16|' +
|
|
getTranslationByKey('difficulty-rating-abbrv-18') +
|
|
' ' +
|
|
getTranslationByKey('difficulty-rating-text-18') +
|
|
',18}',
|
|
armour_query: '?{' + getTranslationByKey('enter-armour-tier') + '|0,0|-d2,2|-d4,4|-d6,6|-d8,8}',
|
|
morale_query: '?{' + getTranslationByKey('enter-morale-rating') + '|7}',
|
|
rest_query: '?{' + getTranslationByKey('short-long-rest') + '|' + getTranslationByKey('short-d4') + ',d4|' + getTranslationByKey('long-d6') + ',d6}',
|
|
dice_query: '?{' + getTranslationByKey('choose-dice') + '|d2|d4|d6|d8|d10|d12|d20}',
|
|
dice_query2: '?{' + getTranslationByKey('enter-dice-number') + '|1}d' + '?{' + getTranslationByKey('enter-dice-sides') + '|6}',
|
|
ask_broken: '?{' + getTranslationByKey('ask-broken') + '|' + getTranslationByKey('ask-yes') + ',1|' + getTranslationByKey('ask-no') + ',0|' + '}',
|
|
silent: true,
|
|
},
|
|
translateWeaponType(),
|
|
);
|
|
});
|
|
|
|
// sync weapon type selector
|
|
on('change:vigor change:spirit change:vigor_mod change:spirit_mod change:repeating_weapons:name change:repeating_weapons:type', (eventInfo) => {
|
|
translateWeaponType();
|
|
});
|
|
|
|
// Auto-generates a repeating row as a placeholder
|
|
// generate a unique ID 100 % of the time
|
|
const uniqueids = {};
|
|
const generateUniqueRowID = () => {
|
|
let generated = generateRowID();
|
|
while (uniqueids[generated] === true) {
|
|
// console.log(`generateUniqueRowID: ${generated} is not a unique ID, trying again.`);
|
|
generated = generateRowID();
|
|
}
|
|
uniqueids[generated] = true;
|
|
return generated;
|
|
};
|
|
|
|
on('sheet:opened', (eventInfo) => {
|
|
getSectionIDs('repeating_texts', (textsID) => {
|
|
getSectionIDs('repeating_weapons', (weaponID) => {
|
|
getSectionIDs('repeating_equipment', (equipmentID) => {
|
|
const output = {};
|
|
const textsRows = textsID.length;
|
|
const weaponRows = weaponID.length;
|
|
const equipmentRows = equipmentID.length;
|
|
|
|
if (textsRows === 0) {
|
|
const newrowid = generateUniqueRowID();
|
|
output[`repeating_texts_${newrowid}_text_value`] = 1;
|
|
}
|
|
while (weaponRows + Object.keys(output).filter((key) => key.includes('repeating_weapons')).length < 2) {
|
|
const newrowid = generateUniqueRowID();
|
|
output[`repeating_weapons_${newrowid}_weapon_value`] = 1;
|
|
}
|
|
while (equipmentRows + Object.keys(output).filter((key) => key.includes('repeating_equipment')).length < 3) {
|
|
const newrowid = generateUniqueRowID();
|
|
output[`repeating_equipment_${newrowid}_equipment_value`] = 1;
|
|
}
|
|
|
|
if (Object.keys(output).length > 0) {
|
|
setAttrs(output, {silent: true});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
// resets placeholder attributes used by startRoll
|
|
on('sheet:opened', (eventInfo) => {
|
|
const output = {};
|
|
output.damage_multiplier = 1;
|
|
output.armour_tier_damage = 0;
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
|
|
// replace double quotes for chat menu buttons
|
|
on('change:character_name sheet:opened', (eventInfo) => {
|
|
getAttrs(['character_name'], (v) => {
|
|
const output = {};
|
|
output.character_name_safe = v.character_name ? v.character_name.replace(/"/g, '"') : '';
|
|
setAttrs(output, {silent: true});
|
|
});
|
|
});
|
|
</script> |