vagabond-rpg-foundryvtt/templates/actor/npc-header.hbs
Cal Corum bf2cd92e93 Add Status item system and separate attack/damage rolls
Status System:
- Add StatusData model with mechanical modifiers (damageDealt, healingReceived)
- Add status item sheet with modifier configuration
- Add status-bar.hbs for displaying status chips on actor sheets
- Status chips show tooltip on hover, can be removed via click
- Add 17 status items to compendium (Blinded, Burning, Charmed, etc.)
- Frightened applies -2 damage dealt, Sickened applies -2 healing received

Attack Roll Changes:
- Separate attack and damage into two discrete rolls
- Attack hit now shows "Roll Damage" button instead of auto-rolling
- Button click rolls damage and updates the chat message in-place
- Store weapon/attack data in message flags for later damage rolling
- Fix favor/hinder and modifier preset buttons in attack dialog
- Show individual damage dice results in chat card breakdown

Mechanical Integration:
- Add _applyStatusModifiers() to VagabondActor for aggregating status effects
- Update getRollData() to include statusModifiers for roll formulas
- Update damageRoll() to automatically apply damageDealt modifier
- Update applyHealing() to respect healingReceived modifier

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 14:36:57 -06:00

67 lines
2.2 KiB
Handlebars

{{!-- NPC Sheet Header --}}
<div class="header-wrapper">
<header class="sheet-header npc-header">
<div class="header-portrait">
<img class="profile-img" src="{{actor.img}}" alt="{{actor.name}}"
data-edit="img" data-tooltip="VAGABOND.ChangePortrait" />
</div>
<div class="header-info">
<h1 class="actor-name">
<input type="text" name="name" value="{{actor.name}}" placeholder="{{localize 'VAGABOND.NPCName'}}" />
</h1>
<div class="header-stats">
<div class="stat-box hd">
<label>HD</label>
<input type="number" name="system.hd" value="{{hd}}" min="0" />
</div>
<div class="stat-box tl">
<label>TL</label>
<input type="number" name="system.tl" value="{{tl}}" min="0" step="0.1" />
</div>
<div class="stat-box armor">
<label>{{localize "VAGABOND.Armor"}}</label>
<input type="number" name="system.armor" value="{{armor}}" min="0" />
</div>
<div class="stat-box morale">
<label>{{localize "VAGABOND.Morale"}}</label>
<input type="number" name="system.morale" value="{{morale}}" min="2" max="12" />
<button type="button" class="morale-roll" data-action="rollMorale"
data-tooltip="{{localize 'VAGABOND.RollMorale'}}"
{{#if moraleStatus.broken}}disabled{{/if}}>
<i class="fa-solid fa-dice"></i>
</button>
</div>
</div>
</div>
<div class="header-hp">
<div class="hp-bar {{#if hp.isDead}}dead{{else if hp.isHalf}}half{{/if}}">
<label>HP</label>
<div class="bar-container">
<div class="bar-fill" style="width: {{hp.percent}}%"></div>
<div class="bar-values">
<input type="number" name="system.hp.value" value="{{hp.value}}" min="0" />
<span class="separator">/</span>
<input type="number" name="system.hp.max" value="{{hp.max}}" min="1" />
</div>
</div>
</div>
{{#if moraleStatus.broken}}
<div class="morale-broken">
<i class="fa-solid fa-flag"></i>
{{localize "VAGABOND.MoraleBroken"}}
</div>
{{/if}}
</div>
</header>
{{!-- Status Bar (below header) --}}
{{> "systems/vagabond/templates/actor/parts/status-bar.hbs"}}
</div>