Files
Ringworld/templates/actor/creature-sheet.hbs
T
tevansandClaude Fable 5 6b63a95dc2 Ringworld 0.5.0: v13/v14 compatibility, Ringworld '84 theme, combat automation
- 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>
2026-07-14 23:41:33 +01:00

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 &amp; 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>