Selectable fire, with the modifiers on the choice Every weapon has carried a fireMode since the packs were first built and nothing read it: a musket could rip a ten-round burst and "rapid" bought a weapon nothing. FIRE_MODE now gates the burst rules and carries its own attack modifier — slow +10% and then you work for the next one, fast a second shot at -20% to both, rapid bursts, beam +5% and it can be held on the target for damage instead of hits. The gate lives in burstAttack too, so no macro can route round it. `fast` was on five catalogue weapons and was not in the system's list of modes at all, so re-saving one of them silently blanked it; the list is derived from the rule now. burstAttack shipped complete and was reachable from nothing. It is the resolution path the selector chooses, and takes the dialog's whole stack rather than charging the player twice for the same burst. Sights and lamps that apply themselves A sight is graded by range band, so a telescopic sight is a -10% liability inside ten metres and worth +20% at extreme, and it only counts if it fits. The band is already known when the modifier is wanted, so nothing is selected and nothing is forgotten. The dark costs something now; a carried lamp buys it back to dim, never to daylight, and the card says it shows them exactly where you are. A migration fits gear that predates the fields, matched on the stamped key rather than by name. The damage card The last card still wearing Foundry's stock dice styling — it posted a bare Roll and let the core template dress it. It renders through the module's own card now, with the Roll still on the message so dice stay inspectable. A rail instead of a strip Eight tabs across an 820px sheet compressed to 11px type. They run down the side now, one line each, with counts as badges; the sheet is 152px wider to pay for it. Also fixed: any weapon with a Coherence cost could not be attacked with AT ALL — the handler re-read the weapon after an await, when currentTarget is already null, and the attack died on a TypeError with nothing shown. And the duplicate-rule guard failed an honest table because FIRE_MODE and speedBands share two key names; it wants a majority now, and prints partial overlaps rather than swallowing them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
555 lines
31 KiB
Handlebars
555 lines
31 KiB
Handlebars
<form class="ringbrp-sheet" autocomplete="off">
|
||
|
||
<header class="rb-header">
|
||
<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 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-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 armourUnworn.length}}<span class="rb-unworn-flag">{{localize "RINGBRP.Sheet.NotWorn"}}</span>{{/if}}
|
||
</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>
|
||
</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>
|
||
|
||
<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 rb-cohgroup rb-coh-{{coherence.band.id}}"
|
||
title="{{localize coherence.band.note}}">
|
||
<span class="rb-dl">{{localize "RINGBRP.Coh.Label"}}</span>
|
||
<span class="rb-dv"><a data-action="coherence-adjust" data-delta="-1" class="rb-cohbtn">−</a>{{sys.coherence.value}}<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-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 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>
|
||
<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">
|
||
|
||
<div class="rb-bodyblock">
|
||
<div class="rb-figure">
|
||
<svg viewBox="{{bodyMap.viewBox}}" class="rb-body-svg" role="img"
|
||
aria-label="{{speciesLabel}}">
|
||
{{#each bodyMap.parts as |p|}}
|
||
{{#if (rbEq p.shape.t "ellipse")}}
|
||
<ellipse class="rb-part rb-part-{{p.state}}" data-loc="{{p.id}}"
|
||
cx="{{p.shape.cx}}" cy="{{p.shape.cy}}" rx="{{p.shape.rx}}" ry="{{p.shape.ry}}"
|
||
data-tooltip="{{localize p.label}} — {{p.taken}}/{{p.max}}"></ellipse>
|
||
{{else if (rbEq p.shape.t "rect")}}
|
||
<rect class="rb-part rb-part-{{p.state}}" data-loc="{{p.id}}"
|
||
x="{{p.shape.x}}" y="{{p.shape.y}}" width="{{p.shape.w}}" height="{{p.shape.h}}"
|
||
rx="{{p.shape.rx}}" data-tooltip="{{localize p.label}} — {{p.taken}}/{{p.max}}"></rect>
|
||
{{else}}
|
||
<path class="rb-part rb-part-{{p.state}}" data-loc="{{p.id}}"
|
||
d="{{p.shape.d}}" data-tooltip="{{localize p.label}} — {{p.taken}}/{{p.max}}"></path>
|
||
{{/if}}
|
||
{{/each}}
|
||
</svg>
|
||
<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-num">{{l.armour}}</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 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>
|
||
<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}} ÷ {{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}} ÷ {{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}}) — {{localize "RINGBRP.React.ReadyIntFloor"}} {{reaction.work.intFloor}}
|
||
{{else}}
|
||
{{localize "RINGBRP.React.ReadyFromInt"}} ({{reaction.work.intFloor}}) — {{localize "RINGBRP.React.ReadyBestSkill"}} {{reaction.work.best}}
|
||
{{/if}}
|
||
</td></tr>
|
||
<tr><th>{{localize "RINGBRP.React.Lane"}}</th>
|
||
<td>{{localize "RINGBRP.React.BetterOf"}} × {{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 — {{reaction.work.overKg}} kg over</td>
|
||
<td class="rb-worknum">−{{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.Tab.Weapons"}}
|
||
<a class="rb-add" data-action="item-create" data-type="weapon"><i class="fas fa-plus"></i></a>
|
||
</h3>
|
||
<table class="rb-table">
|
||
<thead><tr>
|
||
<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}}">
|
||
<td class="rb-td-icon"><img class="rb-li-icon" src="{{w.img}}" alt=""/><a data-action="roll-attack" class="rb-strong">{{w.name}}</a></td>
|
||
<td><a 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}}</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}}">
|
||
<a class="rb-equip {{#if a.system.equipped}}on{{/if}}" data-action="toggle-equipped"><i class="fas fa-shield-halved"></i></a>
|
||
<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>
|
||
<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>
|
||
|
||
<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'}}">−{{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>
|
||
<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-num">{{l.armour}}</td>
|
||
</tr>
|
||
{{/each}}
|
||
</tbody>
|
||
</table>
|
||
<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>
|