Files
slazero2/templates/actor/character-sheet-simple.hbs
T
tevansandClaude Fable 5 9d0146caa8 v2.0.1 — evaluation cycle 1 fixes
- CRITICAL: dsnSafeShow() guard on all 7 Dice So Nice awaits — a stalled DSN
  animation froze the whole roll pipeline (attack charged Bullet Tax but never
  posted its card). Rolls now always complete within 3.5s of a DSN stall.
- RULES: racial Health/Resolve modifiers were silently dropped at runtime
  (RACE_DERIVED_MODS all zeros + three inconsistent race key sets). Canonical
  race keys via canonicalRaceKey(); Stormer +2 HP, Ebon/Wraith +1 RES,
  Shaktar/Frother +1 HP, Frother/Vevaphon -1 RES now actually apply.
- Sheet race dropdown matched 'wraith' but actors store 'wraithraider' —
  showed '-- SELECT --' for every Wraith Raider. Fixed across all sheets.
- Natural weapons (Wraith Teeth & Claw, Morphic Strike…) now appear in the
  Equipment tab's Melee Weapons list with a STRIKE button.
- PC wizard: unspent attribute/skill points now require a second click with
  an explicit '<N> points unspent — Next anyway?' prompt.
- First-run world setup: branded 'Mort — Downtown Grid' landing scene (user's
  SLA neon art) + 'START HERE' GM briefing journal on first GM login.
- Removed Blade Runner splash/banner art (wrong game, third-party trademark).
- CSS: push button no longer wraps mid-word; dice flow layout; GM toolbar
  chips unified into the v2 chrome; natural-weapon row accent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 15:47:35 +01:00

118 lines
4.6 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="{{cssClass}} slazero2 character-sheet" autocomplete="off">
{{!-- Sheet Header --}}
<header class="sheet-header">
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}"/>
<div class="header-fields">
<h1 class="charname">
<input name="name" type="text" value="{{actor.name}}" placeholder="Character Name"/>
</h1>
<div class="character-info">
<div class="info-row">
<div class="field">
<label>Race:</label>
<select name="system.race" multiple size="3">
<option value="human" {{#if (contains system.race "human")}}selected{{/if}}>Human</option>
<option value="ebon" {{#if (contains system.race "ebon")}}selected{{/if}}>Ebon</option>
<option value="brainwaster" {{#if (contains system.race "brainwaster")}}selected{{/if}}>Brain Waster</option>
<option value="stormer" {{#if (contains system.race "stormer")}}selected{{/if}}>Stormer</option>
<option value="shaktar" {{#if (contains system.race "shaktar")}}selected{{/if}}>Shaktar</option>
<option value="wraithraider" {{#if (contains system.race "wraith")}}selected{{/if}}>Wraith Raider</option>
<option value="frother" {{#if (contains system.race "frother")}}selected{{/if}}>Frother</option>
</select>
</div>
<div class="field">
<label>Training:</label>
<select name="system.training" multiple size="3">
<option value="scout" {{#if (contains system.training "scout")}}selected{{/if}}>Scout</option>
<option value="investigator" {{#if (contains system.training "investigator")}}selected{{/if}}>Investigator</option>
<option value="medic" {{#if (contains system.training "medic")}}selected{{/if}}>Medic</option>
<option value="corporate" {{#if (contains system.training "corporate")}}selected{{/if}}>Corporate</option>
</select>
</div>
<div class="field">
<label>Archetype:</label>
<input type="text" name="system.archetype" value="{{system.archetype}}" placeholder="Operative"/>
</div>
</div>
<div class="info-row">
<div class="field">
<label>SCL:</label>
<input type="number" name="system.details.scl" value="{{system.details.scl}}"/>
</div>
<div class="field">
<label>Credits:</label>
<input type="number" name="system.details.credits" value="{{system.details.credits}}"/>
</div>
</div>
</div>
</div>
</header>
{{!-- Attributes & Skills --}}
<section class="sheet-body">
<h2>Attributes & Skills</h2>
<div class="attributes-grid">
{{#each system.attributes as |attribute attrKey|}}
<div class="attribute-block">
<h3>{{capitalize attrKey}}</h3>
<div class="attribute-value">
<button type="button" class="decrement" data-path="system.attributes.{{attrKey}}.value">−</button>
<span class="value">{{attribute.value}}</span>
<button type="button" class="increment" data-path="system.attributes.{{attrKey}}.value">+</button>
<button type="button" class="roll-dice" data-attribute="{{attrKey}}">
<i class="fas fa-dice-d6"></i>
</button>
</div>
{{!-- Skills for this attribute --}}
<div class="skills-list">
{{#each @root.system.skills as |skill skillKey|}}
{{#if (eq skill.attribute attrKey)}}
<div class="skill-row">
<span class="skill-name">{{skill.label}}</span>
<button type="button" class="decrement" data-path="system.skills.{{skillKey}}.value">−</button>
<span class="value">{{skill.value}}</span>
<button type="button" class="increment" data-path="system.skills.{{skillKey}}.value">+</button>
<button type="button" class="roll-dice" data-skill="{{skillKey}}" data-attribute="{{attrKey}}">
<i class="fas fa-dice-d6"></i>
</button>
</div>
{{/if}}
{{/each}}
</div>
</div>
{{/each}}
</div>
{{!-- Health & Resolve --}}
<div class="resources">
<div class="resource">
<label>Health</label>
<input type="number" name="system.derivedStats.health.value" value="{{system.derivedStats.health.value}}" />
/
<input type="number" name="system.derivedStats.health.max" value="{{system.derivedStats.health.max}}" />
</div>
<div class="resource">
<label>Resolve</label>
<input type="number" name="system.derivedStats.resolve.value" value="{{system.derivedStats.resolve.value}}" />
/
<input type="number" name="system.derivedStats.resolve.max" value="{{system.derivedStats.resolve.max}}" />
</div>
<div class="resource">
<label>Stress</label>
<input type="number" name="system.derivedStats.stress" value="{{system.derivedStats.stress}}" />
</div>
</div>
</section>
</form>