Files
RingBRP/templates/character-sheet.hbs
T
slaguru666andClaude Opus 5 24b1aaa682 Development: skills improve from what beat you, not what worked
Reversed experience. A skill is marked when it FAILS - failure or fumble - and
never when it works, and the improvement roll is the same reversal: roll OVER
your rating and the skill goes up 1d6. Nobody learns anything from the lock that
opened first time.

The two halves pull against each other on purpose, so ratings converge instead of
running away. Simulated over 2000 campaigns: a 10% and an 85% skill start 75
points apart and are 11 apart after 60 cases.

- rules.mjs owns it: DEVELOPMENT, developmentMarksOn, developmentImproves,
  developmentCeiling, developmentGainFor
- trainingCap has been on the skill schema and the item sheet since it was
  written and nothing has ever read it. Development reads it now: a skill stops
  at its own cap, and everything else stops at DEVELOPMENT.ceiling, because a
  d6 gain could otherwise push a 98% skill past 100
- GM opens the phase from a GM-only toggle in the token controls; it posts a
  card naming every agent and their marked count, and puts a Development button
  on each sheet. Players press their own
- the toggle re-reads the setting on change, since getSceneControlButtons only
  fires at load and the button would otherwise lie if the phase were opened by
  the API or a second GM
- rules journal and player primer rewritten from the tables; the old text
  described the pre-reversal rule on both halves
- 7 spot-checks, 4 behaviour tests; verified end to end in a running Foundry

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 23:23:03 +01:00

628 lines
35 KiB
Handlebars
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<form class="ringbrp-sheet" autocomplete="off">
<header class="rb-header">
<div class="rb-ident">
<img class="rb-portrait" src="{{actor.img}}" data-edit="img" title="{{actor.name}}"/>
<div class="rb-headline">
<input class="rb-name" name="name" type="text" value="{{actor.name}}" placeholder="{{localize 'RINGBRP.Sheet.Name'}}"/>
{{#if isCharacter}}<input class="rb-rank" name="system.rank" type="text" value="{{sys.rank}}" placeholder="{{localize 'RINGBRP.Sheet.RankPlaceholder'}}"/>{{/if}}
<div class="rb-origin">
<label class="rb-style">{{localize "RINGBRP.Sheet.Style"}}
<select name="system.marksmanship.chosenStyle">
{{#each RINGBRP.marksmanship as |m key|}}
<option value="{{key}}" {{#if (rbEq key ../sys.marksmanship.style)}}selected{{/if}}>{{localize m.label}}</option>
{{/each}}
</select>
</label>
<ul class="rb-style-compare" title="{{localize 'RINGBRP.Style.Hint.Title'}}">
{{#each styleHints as |s|}}
<li class="{{#if s.on}}on{{/if}}"><b>{{s.label}}</b> {{s.hint}}</li>
{{/each}}
</ul>
</div>
{{#if isCharacter}}
<div class="rb-ages">
<label>{{localize "RINGBRP.Sheet.Chronological"}}<input type="number" name="system.age.chronological" value="{{sys.age.chronological}}"/></label>
<label>{{localize "RINGBRP.Sheet.Physiological"}}<input type="number" name="system.age.physiological" value="{{sys.age.physiological}}"/></label>
</div>
{{/if}}
</div>
</div>
<div class="rb-status">
<div class="rb-vitals">
<div class="rb-hp">
<span class="rb-vital-label">{{localize "RINGBRP.Sheet.HP"}}</span>
<input type="number" name="system.hp.value" value="{{sys.hp.value}}"/>
<span class="rb-slash">/</span>
<span class="rb-max">{{sys.hp.max}}</span>
</div>
<div class="rb-mw" title="{{localize 'RINGBRP.Sheet.MajorWoundHint'}}">
<span class="rb-vital-label">{{localize "RINGBRP.Sheet.MajorWound"}}</span>
<span class="rb-big">{{sys.majorWound.value}}</span>
</div>
<div class="rb-vital-coh rb-coh-{{coherence.band.id}}"
data-tooltip="{{localize coherence.band.note}}">
<span class="rb-vital-label">{{localize "RINGBRP.Coh.Label"}}</span>
<span class="rb-coh-row">
<a data-action="coherence-adjust" data-delta="-1" class="rb-cohbtn">&minus;</a>
<span class="rb-big">{{sys.coherence.value}}</span>
<a data-action="coherence-adjust" data-delta="1" class="rb-cohbtn">+</a>
</span>
<span class="rb-cohband">{{localize coherence.band.label}}</span>
</div>
<div class="rb-vital-panic rb-panic-{{panic.band.id}}"
data-tooltip="{{localize panic.band.note}}">
<span class="rb-vital-label">{{localize "RINGBRP.Panic.Label"}}</span>
<span class="rb-coh-row">
<a data-action="panic-adjust" data-delta="-1" class="rb-cohbtn">&minus;</a>
<span class="rb-big">{{sys.panic.value}}</span>
<a data-action="panic-adjust" data-delta="1" class="rb-cohbtn">+</a>
</span>
<span class="rb-cohband">{{localize panic.band.label}}</span>
</div>
<div class="rb-armour{{#if armourUnworn.length}} rb-unworn{{/if}}"
{{#if armourUnworn.length}}data-tooltip="{{localize "RINGBRP.Sheet.ArmourUnworn"}}"{{/if}}>
<span class="rb-vital-label">{{localize "RINGBRP.Sheet.Armour"}}</span>
<span class="rb-big">{{sys.armourPoints}}</span>
{{#if sys.armourUneven}}<span class="rb-armour-range">{{sys.armourRange.min}}&ndash;{{sys.armourRange.max}} {{localize "RINGBRP.Sheet.ByLocation"}}</span>{{/if}}
{{#if armourUnworn.length}}<span class="rb-unworn-flag">{{localize "RINGBRP.Sheet.NotWorn"}}</span>{{/if}}
</div>
<div class="rb-minibody" data-tooltip="{{localize 'RINGBRP.Sheet.MiniBodyHint'}}">
{{> "systems/ringbrp/templates/partials/body-figure.hbs" map=bodyMap label=speciesLabel svgClass="rb-body-mini"}}
<ul class="rb-minilocs">
{{#each bodyMap.parts as |p|}}
<li class="rb-miniloc rb-miniloc-{{p.state}}" data-loc="{{p.id}}"
data-tooltip="{{localize p.label}} — {{p.taken}}/{{p.max}}">
<span class="rb-miniloc-name">{{localize p.label}}</span>
<span class="rb-miniloc-hp">{{p.taken}}/{{p.max}}</span>
<span class="rb-miniloc-ap{{#unless p.armour}} rb-miniloc-noap{{/unless}}">{{#if p.armour}}{{p.armour}}{{else}}&mdash;{{/if}}</span>
</li>
{{/each}}
</ul>
</div>
{{#if wounds.length}}
<div class="rb-wounded">
<span class="rb-vital-label">{{localize "RINGBRP.Tab.Wounds"}}</span>
<span class="rb-big" style="color:var(--rb-danger)">{{wounds.length}}</span>
<span class="rb-wound-flag">{{localize "RINGBRP.Sheet.Wounded"}}</span>
</div>
{{/if}}
</div>
<section class="rb-derived">
<div class="rb-derived-group">
<span class="rb-dl">{{localize "RINGBRP.Sheet.DamageMod"}}</span><span class="rb-dv">{{sys.damageModifier}}</span>
</div>
<div class="rb-derived-group">
<span class="rb-dl">{{localize "RINGBRP.Sheet.MOV"}}</span><span class="rb-dv">{{sys.mov}}</span>
</div>
<div class="rb-derived-group">
<span class="rb-dl">{{localize "RINGBRP.Sheet.Carry"}}</span>
<span class="rb-dv {{#if sys.encumbrance.steps}}rb-warn{{/if}}">{{sys.carriedKg}} / {{sys.freeCarryKg}} kg</span>
</div>
<div class="rb-rolls">
<button type="button" data-action="roll-attribute" data-attribute="stamina">{{localize "RINGBRP.Roll.stamina"}} {{sys.rolls.stamina}}</button>
<button type="button" data-action="roll-attribute" data-attribute="idea">{{localize "RINGBRP.Roll.idea"}} {{sys.rolls.idea}}</button>
<button type="button" data-action="roll-attribute" data-attribute="luck">{{localize "RINGBRP.Roll.luck"}} {{sys.rolls.luck}}</button>
</div>
</section>
<section class="rb-weaponstrip">
<span class="rb-strip-label">{{localize "RINGBRP.Sheet.Readied"}}</span>
{{#each equippedWeapons as |w|}}
<span class="rb-strip-weapon" data-item-id="{{w.id}}">
<a data-action="roll-attack">{{w.name}}</a>
<span class="rb-strip-dmg" data-action="roll-damage">{{#if (rbEq w.system.damage.mode "byBand")}}{{w.system.damage.short}}/{{w.system.damage.medium}}/{{w.system.damage.long}}{{else}}{{w.system.damage.formula}}{{/if}}</span>
{{#if w.system.rangeSummary}}<span class="rb-strip-range">{{w.system.rangeSummary}}</span>{{/if}}
{{#if w.system.ammo.capacity}}<span class="rb-strip-ammo">{{w.system.ammo.loaded}}/{{w.system.ammo.capacity}}</span>{{/if}}
</span>
{{else}}
<span class="rb-strip-empty">{{localize "RINGBRP.Sheet.NothingReadied"}}</span>
{{/each}}
</section>
</div>
</header>
<section class="rb-characteristics">
{{#each sys.characteristics as |c key|}}
<div class="rb-char" data-characteristic="{{key}}">
<a class="rb-char-label" data-action="roll-characteristic"
title="{{localize 'RINGBRP.Sheet.RollCharHint'}}">{{localize (rbConcat "RINGBRP.Char." key)}}</a>
<input type="number" name="system.characteristics.{{key}}.value" value="{{c.value}}"/>
<a class="rb-char-x5" data-action="roll-characteristic"
title="{{localize 'RINGBRP.Sheet.RollCharHint'}}">{{rbTimes5 c.value}}</a>
</div>
{{/each}}
</section>
<div class="rb-main">
<nav class="sheet-tabs rb-tabs" data-group="primary">
<a class="item" data-tab="skills"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Skills"}}</span></a>
<a class="item" data-tab="combat"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Combat"}}</span></a>
<a class="item" data-tab="talents"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Talents"}}</span>{{#if talents.length}}<span class="rb-tab-count">{{talents.length}}</span>{{/if}}</a>
<a class="item" data-tab="powers"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Powers"}}</span>{{#if powers.length}}<span class="rb-tab-count">{{powers.length}}</span>{{/if}}</a>
<a class="item" data-tab="gear"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Gear"}}</span></a>
<a class="item" data-tab="anatomy"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Anatomy"}}</span>{{#if sys.disabledLocations}}<span class="rb-tab-count rb-tab-bad">{{sys.disabledLocations}}</span>{{/if}}</a>
<a class="item" data-tab="wounds"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Wounds"}}</span>{{#if wounds.length}}<span class="rb-tab-count rb-tab-bad">{{wounds.length}}</span>{{/if}}</a>
<a class="item" data-tab="bio"><span class="rb-tab-label">{{localize "RINGBRP.Tab.Bio"}}</span></a>
</nav>
<section class="sheet-body rb-body">
<div class="tab" data-group="primary" data-tab="skills">
{{#if dyingNow}}
<div class="rb-dyingbar{{#if stabilised}} rb-stable{{/if}}">
<span class="rb-dyingbar-title">{{localize "RINGBRP.Condition.dying"}}</span>
{{#if stabilised}}
<span>{{localize "RINGBRP.Death.StableTag"}}</span>
{{else}}
<span>{{localize "RINGBRP.Death.CountTag"}} {{dyingRounds}} / {{dyingLimit}}</span>
{{/if}}
</div>
{{/if}}
{{#if deadNow}}
<div class="rb-deadbar">
<span class="rb-dyingbar-title">{{localize "RINGBRP.Condition.dead"}}</span>
<span>{{lastEntry}}</span>
</div>
{{/if}}
{{#if impaired.active}}
<div class="rb-woundbar" data-tooltip="{{localize 'RINGBRP.Sheet.WoundBarHint'}}">
<span class="rb-woundbar-title"><i class="fas fa-triangle-exclamation"></i>
{{#if impaired.unconscious}}{{localize "RINGBRP.Sheet.Unconscious"}}
{{else if impaired.defenceOnly}}{{localize "RINGBRP.Sheet.OutOfFight"}}
{{else}}{{localize "RINGBRP.Sheet.Wounded"}}{{/if}}</span>
{{#each impaired.chips as |c|}}<span class="rb-woundchip">{{c}}</span>{{/each}}
<span class="rb-woundbar-pen">{{impaired.summary}}</span>
</div>
{{/if}}
<div class="rb-skillbar">
<span class="rb-dim">{{skillCount}} {{localize "RINGBRP.Sheet.SkillsShown"}}</span>
{{#if development.marked}}
<span class="rb-dev-count" title="{{localize 'RINGBRP.Dev.Tooltip'}}">{{development.marked}} {{localize "RINGBRP.Dev.Marked"}}</span>
{{/if}}
{{#if development.open}}
<a class="rb-cbtn rb-cbtn-dev" data-action="development"
title="{{localize 'RINGBRP.Dev.Tooltip'}}">{{localize "RINGBRP.Dev.Button"}}</a>
{{/if}}
<a class="rb-cbtn" data-action="full-skills">{{localize "RINGBRP.Sheet.FullList"}}</a>
</div>
{{#each RINGBRP.categories as |cat key|}}
<div class="rb-cat">
<h3 class="rb-cat-head">
{{localize cat.label}}
<span class="rb-catbonus" title="{{localize 'RINGBRP.Sheet.CategoryBonusHint'}}">+{{lookup ../sys.categoryBonus key}}</span>
<a class="rb-add" data-action="item-create" data-type="skill" title="{{localize 'RINGBRP.Sheet.AddSkill'}}"><i class="fas fa-plus"></i></a>
</h3>
<ol class="rb-skills">
{{#unless (rbLen (lookup ../skillsByCategory key))}}
<li class="rb-skill-empty">{{localize "RINGBRP.Sheet.NoSkillsHere"}}</li>
{{/unless}}
{{#each (lookup ../skillsByCategory key) as |sk|}}
<li class="rb-skill" data-item-id="{{sk.id}}">
<a class="rb-tick {{#if sk.system.experienceTicked}}on{{/if}}" data-action="toggle-tick" title="{{localize 'RINGBRP.Sheet.ExperienceTick'}}"></a>
<img class="rb-li-icon" src="{{sk.img}}" alt=""/><a class="rb-skill-name" data-action="roll-skill">{{sk.name}}</a>
<span class="rb-skill-val">{{sk.system.value}}%</span>
<span class="rb-skill-bands" title="{{localize 'RINGBRP.Sheet.BandsHint'}}">{{rbBands sk.system.value}}</span>
<a data-action="item-edit" title="{{localize 'RINGBRP.Sheet.Edit'}}"><i class="fas fa-edit"></i></a>
<a data-action="item-delete" title="{{localize 'RINGBRP.Sheet.Delete'}}"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>
</div>
{{/each}}
</div>
<div class="tab" data-group="primary" data-tab="combat">
<h3 class="rb-cat-head">{{localize "RINGBRP.Tab.Weapons"}}
<a class="rb-add" data-action="item-create" data-type="weapon"><i class="fas fa-plus"></i></a>
</h3>
<p class="rb-hint rb-ready-hint">{{localize "RINGBRP.Sheet.ReadyHint"}}</p>
<table class="rb-table rb-weapontable">
<thead><tr>
<th class="rb-col-ready" data-tooltip="{{localize 'RINGBRP.Sheet.ReadyHint'}}">{{localize "RINGBRP.Sheet.Ready"}}</th>
<th>{{localize "RINGBRP.Sheet.Weapon"}}</th><th>{{localize "RINGBRP.Sheet.Damage"}}</th>
<th>{{localize "RINGBRP.Sheet.Range"}}</th><th>{{localize "RINGBRP.Sheet.Ammo"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Sheet.Mass"}}</th><th></th>
</tr></thead>
<tbody>
{{#each weapons as |w|}}
<tr data-item-id="{{w.id}}" class="{{#if w.system.equipped}}rb-wrow-ready{{/if}}">
<td class="rb-col-ready">
<a class="rb-equip {{#if w.system.equipped}}on{{/if}}" data-action="toggle-equipped"
data-tooltip="{{localize 'RINGBRP.Sheet.ReadyToggle'}}"><i class="fas fa-hand-fist"></i></a>
</td>
<td class="rb-td-icon"><img class="rb-li-icon rb-weapon-icon" src="{{w.img}}" alt=""/><a data-action="roll-attack" class="rb-weapon-name">{{w.name}}</a></td>
<td><a data-action="roll-damage" class="rb-weapon-dmg">{{#if (rbEq w.system.damage.mode "byBand")}}{{w.system.damage.short}}/{{w.system.damage.medium}}/{{w.system.damage.long}}{{else}}{{w.system.damage.formula}}{{/if}}</a></td>
<td>{{w.system.rangeSummary}}</td>
<td>{{#if w.system.ammo.capacity}}{{w.system.ammo.loaded}}/{{w.system.ammo.capacity}}{{/if}}</td>
<td class="rb-col-num">{{w.system.massKg}} kg</td>
<td class="rb-actions">
<a data-action="item-edit"><i class="fas fa-edit"></i></a>
<a data-action="item-delete"><i class="fas fa-trash"></i></a>
</td>
</tr>
{{/each}}
</tbody>
</table>
<h3 class="rb-cat-head">{{localize "RINGBRP.Tab.Armour"}}
<a class="rb-add" data-action="item-create" data-type="armour"><i class="fas fa-plus"></i></a>
</h3>
<ol class="rb-list">
{{#each armours as |a|}}
<li data-item-id="{{a.id}}" class="{{#if a.raisedNow}}rb-shield-up{{/if}}{{#if a.brokenNow}} rb-shield-broken{{/if}}">
<a class="rb-equip {{#if a.system.equipped}}on{{/if}}" data-action="toggle-equipped"><i class="fas fa-shield-halved"></i></a>
{{#if a.system.shield}}
<a class="rb-raise {{#if a.raisedNow}}on{{/if}}" data-action="toggle-raised"
data-tooltip="{{localize 'RINGBRP.Sheet.RaiseHint'}}"><i class="fas fa-hand-back-fist"></i></a>
{{/if}}
<img class="rb-li-icon" src="{{a.img}}" alt=""/><span class="rb-strong">{{a.name}}</span>
<span class="rb-dim">{{a.system.points}} {{localize "RINGBRP.Sheet.Points"}}</span>
{{#if a.system.shield}}
<span class="rb-shield-state">{{#if a.brokenNow}}{{localize "RINGBRP.Sheet.ShieldBroken"}}{{else if a.raisedNow}}{{localize "RINGBRP.Sheet.ShieldUp"}}{{else}}{{localize "RINGBRP.Sheet.ShieldDown"}}{{/if}}</span>
<span class="rb-dim rb-shield-wear">{{a.system.degradation.current}}/{{a.system.degradation.max}}</span>
{{/if}}
<span class="rb-dim">{{localize (rbConcat "RINGBRP.Coverage." a.system.coverage)}}</span>
<span class="rb-dim rb-mass">{{a.system.massKg}} kg</span>
<a data-action="item-edit"><i class="fas fa-edit"></i></a>
<a data-action="item-delete"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>
<div class="rb-defbar">
<span class="rb-defbar-label">{{localize "RINGBRP.Sheet.Defend"}}</span>
<a class="rb-cbtn" data-action="defend" data-type="dodge"
data-tooltip="{{localize 'RINGBRP.Sheet.DefendHint'}}">{{localize "RINGBRP.Defence.dodge"}}</a>
<a class="rb-cbtn" data-action="defend" data-type="parry"
data-tooltip="{{localize 'RINGBRP.Sheet.DefendHint'}}">{{localize "RINGBRP.Defence.parry"}}</a>
{{#if sys.shieldUp}}
<a class="rb-cbtn rb-cbtn-shield" data-action="defend" data-type="shield"
data-tooltip="{{localize 'RINGBRP.Sheet.ShieldHint'}}">{{sys.shieldUp.name}} {{sys.shieldUp.points}}</a>
{{/if}}
<span class="rb-defbar-count">
{{#if sys.combat.defencesThisRound}}
{{sys.combat.defencesThisRound}} {{localize "RINGBRP.Sheet.ThisRound"}} · {{localize "RINGBRP.Sheet.NextAt"}} {{defenceNext}}%
{{else}}{{localize "RINGBRP.Sheet.FirstIsFree"}}{{/if}}
</span>
</div>
<h3 class="rb-cat-head">{{localize "RINGBRP.React.Title"}}</h3>
<div class="rb-railbox">
<div class="rb-rail-head">
<span class="rb-rail-base">{{reaction.printed}}</span>
<span class="rb-rail-cap">{{localize "RINGBRP.React.Printed"}}</span>
<span class="rb-dim">{{localize "RINGBRP.React.Reflex"}} {{reaction.reflex}} · {{localize "RINGBRP.React.Awareness"}} {{reaction.aware}} — {{localize "RINGBRP.React.Uses"}} {{localize (rbConcat "RINGBRP.React.From." reaction.from)}}</span>
{{#if reaction.load}}
<span class="rb-rail-load">{{localize "RINGBRP.React.Base"}} {{reaction.base}} − {{localize "RINGBRP.React.Load"}} {{reaction.load}}</span>
{{/if}}
</div>
<table class="rb-rail">
<tr>{{#each reaction.rail as |r|}}<th class="{{#if r.current}}on{{/if}}">{{rbSign r.mod}}</th>{{/each}}</tr>
<tr>{{#each reaction.rail as |r|}}<td class="{{#if r.current}}on{{/if}}">{{r.value}}</td>{{/each}}</tr>
</table>
<details class="rb-react-work">
<summary>{{localize "RINGBRP.React.HowIsThis"}}</summary>
<table class="rb-worktable">
<tr><th>{{localize "RINGBRP.React.Reflex"}}</th>
<td>DEX {{reaction.work.dex}} &divide; {{reaction.work.dexDiv}}, rounded up</td>
<td class="rb-worknum">{{reaction.work.reflex}}</td></tr>
<tr><th>{{localize "RINGBRP.React.Awareness"}}</th>
<td>{{localize "RINGBRP.React.Readiness"}} {{reaction.work.readiness}} &divide; {{reaction.work.readyDiv}}, rounded up</td>
<td class="rb-worknum">{{reaction.work.aware}}</td></tr>
<tr class="rb-worknote"><td colspan="3">
{{#if reaction.work.fromTraining}}
{{localize "RINGBRP.React.ReadyFromSkill"}} ({{reaction.work.best}}) &mdash; {{localize "RINGBRP.React.ReadyIntFloor"}} {{reaction.work.intFloor}}
{{else}}
{{localize "RINGBRP.React.ReadyFromInt"}} ({{reaction.work.intFloor}}) &mdash; {{localize "RINGBRP.React.ReadyBestSkill"}} {{reaction.work.best}}
{{/if}}
</td></tr>
<tr><th>{{localize "RINGBRP.React.Lane"}}</th>
<td>{{localize "RINGBRP.React.BetterOf"}} &times; {{reaction.work.mult}}</td>
<td class="rb-worknum">{{reaction.work.base}}</td></tr>
{{#if reaction.work.load}}
<tr class="rb-workload"><th>{{localize "RINGBRP.React.Load"}}</th>
<td>{{reaction.work.carried}} / {{reaction.work.free}} kg &mdash; {{reaction.work.overKg}} kg over</td>
<td class="rb-worknum">&minus;{{reaction.work.load}}</td></tr>
{{/if}}
<tr class="rb-worktotal"><th>{{localize "RINGBRP.React.Printed"}}</th>
<td>{{localize "RINGBRP.React.ThenAddDie"}} d{{reaction.work.die}}</td>
<td class="rb-worknum">{{reaction.work.printed}}</td></tr>
</table>
</details>
<p class="rb-hint">{{localize "RINGBRP.React.RailHint"}}</p>
</div>
<h3 class="rb-cat-head">{{localize "RINGBRP.Sheet.BodyHead"}}
<a class="rb-add" data-action="roll-location"
data-tooltip="{{localize 'RINGBRP.Loc.RollHint'}}"><i class="fas fa-crosshairs"></i></a>
</h3>
<div class="rb-bodyblock">
<div class="rb-figure">
{{> "systems/ringbrp/templates/partials/body-figure.hbs" map=bodyMap label=speciesLabel svgClass=""}}
<span class="rb-figure-species">{{speciesLabel}}</span>
<a class="rb-cbtn rb-figure-roll" data-action="roll-location"
data-tooltip="{{localize 'RINGBRP.Loc.RollHint'}}">{{localize "RINGBRP.Loc.RollButton"}}</a>
</div>
<div class="rb-bodyside">
<table class="rb-table rb-loctable rb-loctable-compact">
<thead><tr>
<th class="rb-col-loc">{{localize "RINGBRP.Sheet.Locations"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Loc.Melee"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Loc.Ranged"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Loc.Taken"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Sheet.Armour"}}</th>
</tr></thead>
<tbody>
{{#each bodyMap.parts as |l|}}
<tr class="rb-locrow rb-locrow-{{l.state}}" data-loc="{{l.id}}">
<td class="rb-col-loc">{{localize l.label}}</td>
<td class="rb-col-num">{{l.melee}}</td>
<td class="rb-col-num">{{l.ranged}}</td>
<td class="rb-col-num">{{l.taken}}/{{l.max}}</td>
<td class="rb-col-ap">
<span class="rb-ap-num">{{l.armour}}</span>
{{#if l.armourFrom.length}}
<span class="rb-ap-from">{{#each l.armourFrom as |a|}}<span class="rb-ap-piece" data-tooltip="{{a.name}} — {{a.points}}">{{a.name}}</span>{{/each}}</span>
{{else}}
<span class="rb-ap-bare">{{localize "RINGBRP.Sheet.Unarmoured"}}</span>
{{/if}}
</td>
</tr>
{{/each}}
</tbody>
</table>
<h4 class="rb-sub-head">{{localize "RINGBRP.Tab.Wounds"}}{{#if wounds.length}} ({{wounds.length}}){{/if}}</h4>
{{#if wounds.length}}
<ol class="rb-list rb-wounds rb-wounds-compact">
{{#each wounds as |w|}}
<li data-wound-id="{{w.id}}">
<span class="rb-strong">{{localize (rbConcat "RINGBRP.Wound." w.key ".title")}}</span>
<span class="rb-dim">{{localize (rbConcat "RINGBRP.Wound." w.key ".text")}}</span>
<a data-action="wound-clear" title="{{localize 'RINGBRP.Sheet.ClearWound'}}"><i class="fas fa-times"></i></a>
</li>
{{/each}}
</ol>
{{else}}
<p class="rb-empty">{{localize "RINGBRP.Sheet.NoWounds"}}</p>
{{/if}}
</div>
</div>
</div>
<div class="tab" data-group="primary" data-tab="talents">
{{#each talentGroups as |grp|}}
{{#if grp.items.length}}
<h3 class="rb-cat-head">{{localize grp.label}}</h3>
<ol class="rb-talents">
{{#each grp.items as |t|}}
<li class="rb-talent" data-item-id="{{t.id}}">
<img class="rb-talent-icon" src="{{t.img}}" alt=""/>
<div class="rb-talent-body">
<a class="rb-talent-name" data-action="item-edit">{{t.name}}</a>
<div class="rb-talent-summary">{{t.system.summary}}</div>
<div class="rb-talent-rule">{{t.system.rule}}</div>
</div>
<div class="rb-talent-cost">
{{#if t.active}}
<a class="rb-cbtn {{#unless t.available}}rb-disabled{{/unless}}"
data-action="use-talent" title="{{t.whyUnavailable}}">{{localize "RINGBRP.Talent.Use"}}</a>
{{else}}
<span class="rb-talent-passive">{{localize "RINGBRP.Talent.Passive"}}</span>
{{/if}}
{{#if t.system.coherenceCost}}<span class="rb-talent-coh" title="{{localize 'RINGBRP.Talent.CoherenceCost'}}">&minus;{{t.system.coherenceCost}}</span>{{/if}}
{{#if t.system.usesPerCase}}<span class="rb-talent-uses">{{t.system.usedThisCase}}/{{t.system.usesPerCase}}</span>{{/if}}
{{#if t.system.skillBonus.value}}<span class="rb-talent-bonus">+{{t.system.skillBonus.value}}%</span>{{/if}}
</div>
<a data-action="item-delete" title="{{localize 'RINGBRP.Sheet.Delete'}}"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>
{{/if}}
{{/each}}
{{#unless talents.length}}<p class="rb-empty">{{localize "RINGBRP.Talent.None"}}</p>{{/unless}}
</div>
<div class="tab" data-group="primary" data-tab="powers">
{{#if powers.length}}
<ol class="rb-list rb-powers">
{{#each powers as |p|}}
<li data-item-id="{{p.id}}">
<div class="rb-power-head">
<img class="rb-li-icon" src="{{p.img}}" alt=""/>
<a class="rb-strong rb-power-name" data-action="power-use">{{p.name}}</a>
<span class="rb-power-val">{{p.system.value}}%</span>
<span class="rb-power-cost">−{{p.system.coherenceCost}}</span>
<a class="rb-cbtn" data-action="power-use">{{localize "RINGBRP.Power.Use"}}</a>
<a class="rb-cbtn rb-power-push" data-action="power-push"
data-tooltip="{{p.system.pushRule}}">{{localize "RINGBRP.Power.Push"}} −{{p.system.pushCost}}</a>
<a data-action="item-edit"><i class="fas fa-edit"></i></a>
<a data-action="item-delete"><i class="fas fa-trash"></i></a>
</div>
<p class="rb-power-summary">{{p.system.summary}}</p>
<p class="rb-power-rule">{{p.system.rule}}</p>
{{#if p.system.origin}}
<p class="rb-power-origin">{{localize "RINGBRP.Power.Origin"}}: {{p.system.origin}}</p>
{{/if}}
</li>
{{/each}}
</ol>
{{else}}
<p class="rb-empty">{{localize "RINGBRP.Power.None"}}</p>
{{/if}}
</div>
<div class="tab" data-group="primary" data-tab="gear">
{{#if authorities.length}}
<h3 class="rb-cat-head">{{localize "RINGBRP.Tab.Access"}}</h3>
<ol class="rb-list rb-authorities">
{{#each authorities as |a|}}
<li data-item-id="{{a.id}}" class="{{#if a.system.burned}}rb-auth-dead{{else if a.system.suspect}}rb-auth-flagged{{/if}}">
<div class="rb-auth-head">
<img class="rb-li-icon" src="{{a.img}}" alt=""/>
<span class="rb-strong">{{#if a.system.holderName}}{{a.system.holderName}}{{else}}{{a.name}}{{/if}}</span>
<span class="rb-dim">{{a.system.holderRole}}</span>
<span class="rb-auth-trust" title="{{localize 'RINGBRP.Authority.Trust'}}">
{{localize "RINGBRP.Authority.Trust"}} {{a.system.trust.value}}/{{a.system.trust.max}}</span>
{{#if a.system.burned}}<span class="rb-auth-tag">{{localize "RINGBRP.Authority.BurnedTag"}}</span>
{{else if a.system.suspect}}<span class="rb-auth-tag">{{localize "RINGBRP.Authority.SuspectTag"}}</span>{{/if}}
<a data-action="item-edit"><i class="fas fa-edit"></i></a>
<a data-action="item-delete"><i class="fas fa-trash"></i></a>
</div>
<div class="rb-auth-body">
<span class="rb-dim">{{a.scopeLabel}}{{#if a.system.scopeNote}} — {{a.system.scopeNote}}{{/if}}</span>
{{#if a.system.expires}}<span class="rb-dim">{{localize "RINGBRP.Authority.Expires"}}: {{a.system.expires}}</span>{{/if}}
{{#if a.flagCount}}<span class="rb-auth-flags">{{a.flagCount}} {{localize "RINGBRP.Authority.RedFlags"}}</span>{{/if}}
{{#if a.merged}}<span class="rb-auth-merge-tag">{{localize "RINGBRP.Authority.MergingTag"}}</span>{{/if}}
</div>
<div class="rb-auth-acts">
<a class="rb-cbtn" data-action="authority-use">{{localize "RINGBRP.Authority.Use"}}</a>
<a class="rb-cbtn" data-action="authority-widen">{{localize "RINGBRP.Authority.Widen"}}</a>
{{#if a.system.suspect}}<a class="rb-cbtn" data-action="authority-rehab">{{localize "RINGBRP.Authority.Rehab"}}</a>{{/if}}
</div>
</li>
{{/each}}
</ol>
{{/if}}
{{#if vehicles.length}}
<h3 class="rb-cat-head">{{localize "RINGBRP.Tab.Transport"}}</h3>
<ol class="rb-list rb-vehicles">
{{#each vehicles as |v|}}
<li data-item-id="{{v.id}}">
<img class="rb-li-icon" src="{{v.img}}" alt=""/><span class="rb-strong">{{v.name}}</span>
<span class="rb-dim">{{v.speedLabel}}</span>
<span class="rb-dim">{{localize "RINGBRP.Vehicle.Hull"}} {{v.system.hull.value}}/{{v.system.hull.max}}</span>
<span class="rb-dim">{{localize "RINGBRP.Vehicle.Seats"}} {{v.system.seats}}</span>
<span class="rb-dim">{{v.rating}}%</span>
<a data-action="item-edit"><i class="fas fa-edit"></i></a>
<a data-action="item-delete"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>
{{/if}}
<h3 class="rb-cat-head">{{localize "RINGBRP.Tab.Gear"}}
<a class="rb-add" data-action="item-create" data-type="gear"><i class="fas fa-plus"></i></a>
<a class="rb-add" data-action="item-create" data-type="device" title="{{localize 'RINGBRP.New.device'}}"><i class="fas fa-microchip"></i></a>
<a class="rb-add" data-action="item-create" data-type="vehicle" title="{{localize 'RINGBRP.New.vehicle'}}"><i class="fas fa-truck"></i></a>
<a class="rb-add" data-action="item-create" data-type="authority" title="{{localize 'RINGBRP.New.authority'}}"><i class="fas fa-id-badge"></i></a>
</h3>
<ol class="rb-list">
{{#each gear as |g|}}
<li data-item-id="{{g.id}}">
<img class="rb-li-icon" src="{{g.img}}" alt=""/><span class="rb-strong">{{g.name}}</span>
<span class="rb-dim">{{g.system.massKg}} kg</span>
{{#if (rbEq g.type "device")}}
<span class="rb-dim">{{localize "RINGBRP.Sheet.Integrity"}} {{g.system.integrity.value}}/{{g.system.integrity.max}}</span>
{{/if}}
<a data-action="item-edit"><i class="fas fa-edit"></i></a>
<a data-action="item-delete"><i class="fas fa-trash"></i></a>
</li>
{{#if (rbEq g.type "device")}}
<li class="rb-devicebar" data-item-id="{{g.id}}">
{{#each g.functions as |f|}}
<span class="rb-devfn {{#unless f.usable}}rb-devfn-blocked{{/unless}}">
<a class="rb-cbtn {{#unless f.usable}}rb-disabled{{/unless}}"
data-action="device-fn" data-fn="{{f.id}}" title="{{f.why}}">{{localize f.label}}</a>
<span class="rb-devfn-why">{{f.why}}</span>
</span>
{{/each}}
</li>
{{/if}}
{{/each}}
</ol>
</div>
<div class="tab" data-group="primary" data-tab="anatomy">
<h3 class="rb-cat-head">{{speciesLabel}}
<a class="rb-add" data-action="roll-location" title="{{localize 'RINGBRP.Loc.RollHint'}}"><i class="fas fa-crosshairs"></i></a>
</h3>
<div class="rb-anatblock">
<div class="rb-figure">
{{> "systems/ringbrp/templates/partials/body-figure.hbs" map=bodyMap label=speciesLabel svgClass=""}}
<span class="rb-figure-species">{{speciesLabel}}</span>
<a class="rb-cbtn rb-figure-roll" data-action="roll-location"
data-tooltip="{{localize 'RINGBRP.Loc.RollHint'}}">{{localize "RINGBRP.Loc.RollButton"}}</a>
</div>
<div class="rb-anatside">
<table class="rb-table rb-loctable">
<thead><tr>
<th class="rb-col-loc">{{localize "RINGBRP.Sheet.Locations"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Loc.Melee"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Loc.Ranged"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Loc.Taken"}}</th>
<th class="rb-col-num">{{localize "RINGBRP.Sheet.Armour"}}</th>
</tr></thead>
<tbody>
{{#each sys.locations as |l|}}
<tr class="{{#if l.destroyed}}rb-loc-row-destroyed{{else if l.disabled}}rb-loc-row-disabled{{/if}}">
<td class="rb-col-loc rb-loc-cell">{{localize l.label}}
{{#if l.destroyed}}<span class="rb-loc-flag rb-loc-flag-x">{{localize "RINGBRP.Loc.Destroyed"}}</span>
{{else if l.disabled}}<span class="rb-loc-flag">{{localize "RINGBRP.Loc.Disabled"}}</span>{{/if}}</td>
<td class="rb-col-num">{{l.melee}}</td>
<td class="rb-col-num">{{l.ranged}}</td>
<td class="rb-col-num">{{l.taken}}/{{l.max}}</td>
<td class="rb-col-ap">
<span class="rb-ap-num">{{l.armour}}</span>
{{#if l.armourFrom.length}}
<span class="rb-ap-from">{{#each l.armourFrom as |a|}}<span class="rb-ap-piece">{{a.name}} <b>{{a.points}}</b></span>{{/each}}</span>
{{else}}
<span class="rb-ap-bare">{{localize "RINGBRP.Sheet.Unarmoured"}}</span>
{{/if}}
</td>
</tr>
{{/each}}
</tbody>
</table>
</div>
</div>
<p class="rb-hint">{{localize "RINGBRP.Sheet.LocationNote"}}</p>
</div>
<div class="tab" data-group="primary" data-tab="wounds">
{{#if wounds.length}}
<ol class="rb-list rb-wounds">
{{#each wounds as |w|}}
<li data-wound-id="{{w.id}}">
<span class="rb-strong">{{localize (rbConcat "RINGBRP.Wound." w.key ".title")}}</span>
<span class="rb-dim">{{localize (rbConcat "RINGBRP.Wound." w.key ".text")}}</span>
<a data-action="wound-clear" title="{{localize 'RINGBRP.Sheet.ClearWound'}}"><i class="fas fa-times"></i></a>
</li>
{{/each}}
</ol>
{{else}}
<p class="rb-empty">{{localize "RINGBRP.Sheet.NoWounds"}}</p>
{{/if}}
</div>
<div class="tab" data-group="primary" data-tab="bio">
<label class="rb-block">{{localize "RINGBRP.Sheet.Species"}}</label>
<select name="system.speciesProfile" class="rb-species-select">
{{#each RINGBRP.locationTables as |tbl key|}}
<option value="{{key}}" {{#if (rbEq key ../sys.speciesProfile)}}selected{{/if}}>{{localize tbl.label}}</option>
{{/each}}
</select>
<p class="rb-hint">{{localize "RINGBRP.Sheet.SpeciesHint"}}</p>
<label class="rb-block">{{localize "RINGBRP.Sheet.Biography"}}</label>
{{editor bioHTML target="system.biography" button=true editable=editable engine="prosemirror"}}
<label class="rb-block">{{localize "RINGBRP.Sheet.Notes"}}</label>
{{editor notesHTML target="system.notes" button=true editable=editable engine="prosemirror"}}
</div>
</section>
</div>
</form>