- Foundry v13/v14 compatibility (verified on 14.364) - Complete "Ringworld '84" retheme: CSS custom properties, warm space-black + bronze + ring-arc amber palette, uniform across sheets, dialogs, chat cards, hit-location picker, and impulse HUD - Fix HP damage evaporating on re-prepare: maximums always derived, current values source-authoritative, with a one-time world migration - Ammunition tracking: per-attack consumption, reload button, ammo badge; empty weapons block attacks - Energy weapons auto-link a carried power pack instead of failing - Special Success rolls damage dice twice; fumbles flag GM adjudication (both toggleable world settings) - Defender Dodge prompt before damage (special hits need special dodge) - Damage Mod and derived rolls always recompute; shown read-only - Creature sheet rebuilt to full parity: characteristics, derived rolls, body-schema hit grid with AP totals, weapons/armor/skills - Seeded "Ringworld GM Reference" journal (outcomes, impulses, attack workflow, wounds, 1984 quirks, quick start) - Shared characteristic-check dialog between explorer and creature Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
197 lines
10 KiB
Handlebars
197 lines
10 KiB
Handlebars
<form class="ringworld-sheet creature-sheet" autocomplete="off">
|
|
<header class="sheet-header rw-header">
|
|
<div class="rw-title-row">
|
|
<h1>Creature</h1>
|
|
</div>
|
|
<input name="name" type="text" value="{{actor.name}}" placeholder="Creature Name" />
|
|
</header>
|
|
|
|
<div class="rw-upper-grid">
|
|
<div class="rw-left-stack">
|
|
<section class="panel rw-profile">
|
|
<label>Species / Kind
|
|
<input type="text" name="system.profile.species" value="{{system.profile.species}}" />
|
|
</label>
|
|
<label>Hit Model
|
|
<select name="system.hitLocationSchema">
|
|
{{#each hitSchemas as |schema|}}
|
|
<option value="{{schema.id}}" {{#if (eq ../system.hitLocationSchema schema.id)}}selected{{/if}}>{{schema.label}}</option>
|
|
{{/each}}
|
|
</select>
|
|
</label>
|
|
<label>Move
|
|
<input type="number" name="system.derived.move" value="{{system.derived.move}}" />
|
|
</label>
|
|
<label>Action Ranking
|
|
<input type="number" value="{{system.derived.actionRanking}}" readonly />
|
|
</label>
|
|
</section>
|
|
|
|
<section class="panel rw-attribute-board">
|
|
<div class="attr-row">
|
|
<div class="lhs"><button type="button" class="roll-characteristic stat-roll-btn" data-char="str" data-label="STR">STR</button><input type="number" name="system.characteristics.str" value="{{system.characteristics.str}}" /></div>
|
|
<div class="rhs"><span>Damage Mod</span><input type="text" value="{{system.combat.damageMod}}" readonly /></div>
|
|
</div>
|
|
<div class="attr-row">
|
|
<div class="lhs"><button type="button" class="roll-characteristic stat-roll-btn" data-char="mas" data-label="MAS">MAS</button><input type="number" name="system.characteristics.mas" value="{{system.characteristics.mas}}" /></div>
|
|
<div class="rhs">
|
|
<span>General Hit Points</span>
|
|
<span class="inline-pair">
|
|
<input type="number" name="system.generalHp.value" value="{{system.generalHp.value}}" />
|
|
<span>/ {{system.generalHp.max}}</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="attr-row">
|
|
<div class="lhs"><button type="button" class="roll-characteristic stat-roll-btn" data-char="con" data-label="CON">CON</button><input type="number" name="system.characteristics.con" value="{{system.characteristics.con}}" /></div>
|
|
<div class="rhs">
|
|
<span>Health Roll</span>
|
|
<span class="inline-pair">
|
|
<input type="number" value="{{system.derivedRolls.health}}" readonly />
|
|
<span>%</span>
|
|
<button type="button" class="roll-derived icon-btn" data-check="health" title="Roll Health" aria-label="Roll Health"><i class="fas fa-dice-d20"></i></button>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="attr-row">
|
|
<div class="lhs"><button type="button" class="roll-characteristic stat-roll-btn" data-char="int" data-label="INT">INT</button><input type="number" name="system.characteristics.int" value="{{system.characteristics.int}}" /></div>
|
|
<div class="rhs">
|
|
<span>Reasoning Roll</span>
|
|
<span class="inline-pair">
|
|
<input type="number" value="{{system.derivedRolls.reasoning}}" readonly />
|
|
<span>%</span>
|
|
<button type="button" class="roll-derived icon-btn" data-check="reasoning" title="Roll Reasoning" aria-label="Roll Reasoning"><i class="fas fa-dice-d20"></i></button>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="attr-row">
|
|
<div class="lhs"><button type="button" class="roll-characteristic stat-roll-btn" data-char="pow" data-label="POW">POW</button><input type="number" name="system.characteristics.pow" value="{{system.characteristics.pow}}" /></div>
|
|
<div class="rhs">
|
|
<span>Luck Roll</span>
|
|
<span class="inline-pair">
|
|
<input type="number" value="{{system.derivedRolls.luck}}" readonly />
|
|
<span>%</span>
|
|
<button type="button" class="roll-derived icon-btn" data-check="luck" title="Roll Luck" aria-label="Roll Luck"><i class="fas fa-dice-d20"></i></button>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="attr-row">
|
|
<div class="lhs"><button type="button" class="roll-characteristic stat-roll-btn" data-char="dex" data-label="DEX">DEX</button><input type="number" name="system.characteristics.dex" value="{{system.characteristics.dex}}" /></div>
|
|
<div class="rhs">
|
|
<span>Dodge Roll</span>
|
|
<span class="inline-pair">
|
|
<input type="number" value="{{system.derivedRolls.dodge}}" readonly />
|
|
<span>%</span>
|
|
<button type="button" class="roll-derived icon-btn" data-check="dodge" title="Roll Dodge" aria-label="Roll Dodge"><i class="fas fa-dice-d20"></i></button>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel rw-tools">
|
|
<label>Energy
|
|
<input type="number" name="system.resources.energy.value" value="{{system.resources.energy.value}}" />
|
|
</label>
|
|
<span>/</span>
|
|
<label>
|
|
<input type="number" name="system.resources.energy.max" value="{{system.resources.energy.max}}" />
|
|
</label>
|
|
<button type="button" class="reset-conditions">Reset Conditions</button>
|
|
</section>
|
|
|
|
<section class="panel rw-notes">
|
|
<h3>Notes</h3>
|
|
<textarea name="system.notes.defects" rows="3">{{system.notes.defects}}</textarea>
|
|
</section>
|
|
</div>
|
|
|
|
<div class="rw-right-stack">
|
|
<section class="panel rw-portrait-panel">
|
|
<img class="rw-portrait-img" src="{{actor.img}}" alt="{{actor.name}}" title="{{actor.name}}" />
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="rw-hit-toolbar">
|
|
<button type="button" class="roll-hit-location icon-btn" title="Roll Hit Location" aria-label="Roll Hit Location"><i class="fas fa-dice-d20"></i></button>
|
|
</div>
|
|
<div class="rw-hit-body schema-{{hitSchemaId}}">
|
|
{{#each hitLocations as |loc|}}
|
|
<div class="body-loc body-{{loc.slug}}">
|
|
<h4>{{loc.label}}</h4>
|
|
<span class="loc-roll">d20 {{loc.rollRange}}</span>
|
|
<label>AP <input type="number" name="system.hitLocations.{{loc.slug}}.armor" value="{{loc.armor}}" /></label>
|
|
<span class="loc-ap-total">AP Total: {{loc.apTotal}}</span>
|
|
<label>HP <input type="number" name="system.hitLocations.{{loc.slug}}.hp.value" value="{{loc.hp.value}}" /> / {{loc.hp.max}}</label>
|
|
</div>
|
|
{{/each}}
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
|
|
<section class="panel">
|
|
<div class="panel-header">
|
|
<h3>Weapons & Attacks</h3>
|
|
<button type="button" class="item-create" data-type="weapon">Add Weapon</button>
|
|
</div>
|
|
<ol class="item-list rw-weapon-list">
|
|
{{#each weapons as |item|}}
|
|
<li class="item" data-item-id="{{item.id}}">
|
|
<div class="item-title"><img class="item-icon" src="{{item.img}}" alt="" /><span>{{item.name}}</span></div>
|
|
<div>{{item.system.weight}}kg</div>
|
|
<div>{{item.system.linkedSkill}}</div>
|
|
<div>{{item.system.damageFormula}}{{#if item.system.ammo.max}} <span class="rw-ammo-badge">{{item.system.ammo.value}}/{{item.system.ammo.max}}</span>{{/if}}</div>
|
|
<div>{{item.system.range.close}} / {{item.system.range.medium}} / {{item.system.range.long}}</div>
|
|
<div class="actions">
|
|
<button type="button" class="item-use-weapon icon-btn" title="Use Weapon" aria-label="Use Weapon"><i class="fas fa-dice-d20"></i></button>
|
|
{{#if item.system.ammo.max}}<button type="button" class="item-reload-weapon icon-btn" title="Reload" aria-label="Reload"><i class="fas fa-rotate"></i></button>{{/if}}
|
|
<button type="button" class="item-edit icon-btn" title="Edit" aria-label="Edit"><i class="fas fa-pen"></i></button>
|
|
<button type="button" class="item-delete icon-btn" title="Delete" aria-label="Delete"><i class="fas fa-trash"></i></button>
|
|
</div>
|
|
</li>
|
|
{{/each}}
|
|
</ol>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="panel-header">
|
|
<h3>Armor</h3>
|
|
<button type="button" class="item-create" data-type="armor">Add Armor</button>
|
|
</div>
|
|
<ol class="item-list rw-armor-list">
|
|
{{#each armors as |item|}}
|
|
<li class="item" data-item-id="{{item.id}}">
|
|
<div class="item-title"><img class="item-icon" src="{{item.img}}" alt="" /><span>{{item.name}}</span></div>
|
|
<div>{{item.system.weight}}kg</div>
|
|
<div>Base AP {{item.system.value}}</div>
|
|
<div>{{#if item.system.equipped}}Equipped{{else}}Carried{{/if}}</div>
|
|
<div class="actions">
|
|
<button type="button" class="item-edit icon-btn" title="Edit" aria-label="Edit"><i class="fas fa-pen"></i></button>
|
|
<button type="button" class="item-delete icon-btn" title="Delete" aria-label="Delete"><i class="fas fa-trash"></i></button>
|
|
</div>
|
|
</li>
|
|
{{/each}}
|
|
</ol>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="panel-header">
|
|
<h3>Skills</h3>
|
|
<button type="button" class="item-create" data-type="skill">Add Skill</button>
|
|
</div>
|
|
<ol class="item-list rw-creature-skill-list">
|
|
{{#each skills as |item|}}
|
|
<li class="item" data-item-id="{{item.id}}">
|
|
<div class="item-title"><img class="item-icon" src="{{item.img}}" alt="" /><span>{{item.name}}</span></div>
|
|
<div>{{item.system.value}}%</div>
|
|
<div class="actions">
|
|
<button type="button" class="item-roll-skill icon-btn" title="Roll" aria-label="Roll"><i class="fas fa-dice-d20"></i></button>
|
|
<button type="button" class="item-edit icon-btn" title="Edit" aria-label="Edit"><i class="fas fa-pen"></i></button>
|
|
<button type="button" class="item-delete icon-btn" title="Delete" aria-label="Delete"><i class="fas fa-trash"></i></button>
|
|
</div>
|
|
</li>
|
|
{{/each}}
|
|
</ol>
|
|
</section>
|
|
</form>
|