vagabond-rpg-foundryvtt/templates/actor/npc-stats.hbs
Cal Corum 694b11f423 Implement movement capability system with boolean toggles
Movement types (Climb, Cling, Fly, Phase, Swim) now use boolean
toggles instead of separate speed values, matching RAW where all
special movement uses base speed.

Changes:
- Update NPC and Character data models with movement schema
- Add movement section to NPC stats template (grid layout)
- Add movement section to character biography template
- Add localization strings with tooltip hints for each type
- Style movement grid to match senses section pattern
- Add rollable # Appearing label for NPC sheets
- Fix NPC sheet scrollbar visibility

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 00:16:44 -06:00

160 lines
5.2 KiB
Handlebars

{{!-- NPC Sheet Stats Section --}}
<section class="npc-stats">
<div class="stats-row">
{{!-- Zone --}}
<div class="stat-group zone">
<label>{{localize "VAGABOND.Zone"}}</label>
<select name="system.zone">
{{#each zoneOptions}}
<option value="{{@key}}" {{#if (eq @key ../zone)}}selected{{/if}}>
{{localize this}}
</option>
{{/each}}
</select>
<p class="zone-hint">{{zoneBehavior}}</p>
</div>
{{!-- Speed --}}
<div class="stat-group speed">
<label>{{localize "VAGABOND.Speed"}}</label>
<div class="speed-value">
<input type="number" name="system.speed.value" value="{{speed}}" min="0" />
<span class="unit">ft</span>
</div>
</div>
{{!-- Size & Type --}}
<div class="stat-group type">
<div class="type-field">
<label>{{localize "VAGABOND.Size"}}</label>
<select name="system.size">
{{#each sizeOptions}}
<option value="{{@key}}" {{#if (eq @key ../size)}}selected{{/if}}>
{{localize this}}
</option>
{{/each}}
</select>
</div>
<div class="type-field">
<label>{{localize "VAGABOND.BeingType"}}</label>
<select name="system.beingType">
{{#each beingTypeOptions}}
<option value="{{@key}}" {{#if (eq @key ../beingType)}}selected{{/if}}>
{{localize this}}
</option>
{{/each}}
</select>
</div>
</div>
{{!-- Appearing --}}
<div class="stat-group appearing">
<label class="rollable" data-action="rollAppearing" data-tooltip="{{localize 'VAGABOND.RollAppearing'}}">
<i class="fa-solid fa-dice"></i>
{{localize "VAGABOND.Appearing"}}
</label>
<input type="text" name="system.appearing" value="{{appearing}}" placeholder="1d6" />
</div>
</div>
{{!-- Movement Types --}}
<div class="biography-section movement">
<h2 class="section-header">{{localize "VAGABOND.Movement"}}</h2>
<div class="movement-grid">
<div class="movement-field">
<label data-tooltip="{{localize 'VAGABOND.MovementClimbHint'}}">
<input type="checkbox" name="system.movement.climb" {{#if movement.climb}}checked{{/if}} />
{{localize "VAGABOND.Climb"}}
</label>
</div>
<div class="movement-field">
<label data-tooltip="{{localize 'VAGABOND.MovementClingHint'}}">
<input type="checkbox" name="system.movement.cling" {{#if movement.cling}}checked{{/if}} />
{{localize "VAGABOND.Cling"}}
</label>
</div>
<div class="movement-field">
<label data-tooltip="{{localize 'VAGABOND.MovementFlyHint'}}">
<input type="checkbox" name="system.movement.fly" {{#if movement.fly}}checked{{/if}} />
{{localize "VAGABOND.Fly"}}
</label>
</div>
<div class="movement-field">
<label data-tooltip="{{localize 'VAGABOND.MovementPhaseHint'}}">
<input type="checkbox" name="system.movement.phase" {{#if movement.phase}}checked{{/if}} />
{{localize "VAGABOND.Phase"}}
</label>
</div>
<div class="movement-field">
<label data-tooltip="{{localize 'VAGABOND.MovementSwimHint'}}">
<input type="checkbox" name="system.movement.swim" {{#if movement.swim}}checked{{/if}} />
{{localize "VAGABOND.Swim"}}
</label>
</div>
</div>
</div>
{{!-- Senses --}}
{{#if hasSenses}}
<div class="senses-row">
<label>{{localize "VAGABOND.Senses"}}:</label>
{{#if senses.allsight}}
<span class="sense-tag">{{localize "VAGABOND.Allsight"}}</span>
{{/if}}
{{#if senses.blindsight}}
<span class="sense-tag">{{localize "VAGABOND.Blindsight"}}</span>
{{/if}}
{{#if senses.darkvision}}
<span class="sense-tag">{{localize "VAGABOND.Darkvision"}}</span>
{{/if}}
{{#if senses.echolocation}}
<span class="sense-tag">{{localize "VAGABOND.Echolocation"}}</span>
{{/if}}
{{#if senses.seismicsense}}
<span class="sense-tag">{{localize "VAGABOND.Seismicsense"}}</span>
{{/if}}
{{#if senses.telepathy}}
<span class="sense-tag">{{localize "VAGABOND.Telepathy"}}</span>
{{/if}}
</div>
{{/if}}
{{!-- Damage Modifiers --}}
{{#if hasDamageModifiers}}
<div class="damage-modifiers">
{{#if immunities.length}}
<div class="modifier-row immunities">
<label>{{localize "VAGABOND.Immunities"}}:</label>
<div class="modifier-tags">
{{#each immunities}}
<span class="modifier-tag immune">{{this}}</span>
{{/each}}
</div>
</div>
{{/if}}
{{#if resistances.length}}
<div class="modifier-row resistances">
<label>{{localize "VAGABOND.Resistances"}}:</label>
<div class="modifier-tags">
{{#each resistances}}
<span class="modifier-tag resist">{{this}}</span>
{{/each}}
</div>
</div>
{{/if}}
{{#if weaknesses.length}}
<div class="modifier-row weaknesses">
<label>{{localize "VAGABOND.Weaknesses"}}:</label>
<div class="modifier-tags">
{{#each weaknesses}}
<span class="modifier-tag weak">{{this}}</span>
{{/each}}
</div>
</div>
{{/if}}
</div>
{{/if}}
</section>