The goods yard fight made the case: three agents inside the same pool of light shot at -50% while the fourth, four metres away, shot at -10%. A lamp now has a reach, per item rather than global, because a weapon lamp and a vehicle searchlight are not the same offer — 4 m for cold light strips, 6 m for a weapon lamp, 10 m for the issue field lamp, 30 m for a roof searchlight. Anyone inside it is in the light and the card names whose lamp it is, so both halves of the rule travel together: the pool is one position and the whole group is standing in it. Measured from the tokens. The shot that started this — no lamp of her own, four metres from somebody else's, in pitch dark — goes from 20% to 60%, while an agent twenty-five metres out still eats the full -50%. An UNKNOWN distance is explicitly not lit: Number(null) is 0, so an unmeasured distance would otherwise have read as standing on top of the lamp and lit any scene with no tokens placed. The dialog carries a tick instead, pre-set when the canvas could measure it and the GM's answer when it could not. Note: template.json is read when Foundry loads the system, so a deployed server needs a restart and not just a pull before the migration can stamp the new field. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
63 lines
2.3 KiB
Handlebars
63 lines
2.3 KiB
Handlebars
<form class="rb-dialog">
|
|
|
|
{{#if fire.options.length}}
|
|
<div class="form-group rb-fire-group">
|
|
<label>{{localize "RINGBRP.Dialog.Fire"}}</label>
|
|
<select name="fire">
|
|
{{#each fire.options as |f|}}
|
|
<option value="{{f.value}}" {{#if f.selected}}selected{{/if}}>{{f.label}}{{#if f.mod}} ({{rbSign f.mod}}%){{/if}}{{#if f.effect}} — {{f.effect}}{{/if}}</option>
|
|
{{/each}}
|
|
</select>
|
|
<p class="notes">{{fire.note}}</p>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if bandOptions.length}}
|
|
<div class="form-group">
|
|
<label>{{localize "RINGBRP.Dialog.Range"}}</label>
|
|
<select name="distance">
|
|
{{#each bandOptions as |b|}}
|
|
<option value="{{b.value}}">{{b.label}} — {{b.span}}{{#unless (rbEq b.mod null)}} ({{rbSign b.mod}}%){{else}} ({{localize "RINGBRP.Range.Impossible"}}){{/unless}}</option>
|
|
{{/each}}
|
|
</select>
|
|
</div>
|
|
{{/if}}
|
|
<div class="form-group">
|
|
<label>{{localize "RINGBRP.Dialog.Cover"}}</label>
|
|
<select name="cover">
|
|
{{#each RINGBRP.cover as |c key|}}
|
|
<option value="{{key}}">{{localize c.label}} ({{rbSign c.mod}}%)</option>
|
|
{{/each}}
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>{{localize "RINGBRP.Dialog.Lighting"}}</label>
|
|
<select name="lighting">
|
|
{{#each RINGBRP.lighting as |l key|}}
|
|
<option value="{{key}}">{{localize l.label}} ({{rbSign l.mod}}%)</option>
|
|
{{/each}}
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="rb-check"><input type="checkbox" name="inlight" {{#if inLight}}checked{{/if}}/> {{localize "RINGBRP.Dialog.InLight"}}</label>
|
|
<p class="notes">{{localize "RINGBRP.Dialog.InLightHint"}}</p>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="rb-check"><input type="checkbox" name="moved"/> {{localize "RINGBRP.Dialog.Moved"}}</label>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="rb-check"><input type="checkbox" name="aiming"/> {{localize "RINGBRP.Dialog.Aiming"}}</label>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>{{localize "RINGBRP.Dialog.Situational"}}</label>
|
|
<input type="number" name="situational" value="0" step="5"/>
|
|
</div>
|
|
|
|
{{#if kit.length}}
|
|
<div class="rb-dialog-kit">
|
|
<span class="rb-kit-head">{{localize "RINGBRP.Dialog.Fitted"}}</span>
|
|
<ul>{{#each kit as |k|}}<li><b>{{k.name}}</b> {{k.effect}}</li>{{/each}}</ul>
|
|
</div>
|
|
{{/if}}
|
|
</form>
|