vagabond-rpg-foundryvtt/templates/actor/character-abilities.hbs
Cal Corum 07426484bd Fix backpack slot bonus, class features display, and skills layout
- Fix itemSlots.bonus being overwritten by prepareDerivedData (now adds
  to AE value instead of replacing)
- Add _prepareClassFeatures() to extract and display class features from
  class items on the abilities tab
- Change skills grid to vertical column flow (grid-auto-flow: column)
- Fix backpack.json effect _key to reference correct item ID

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:41:52 -06:00

138 lines
5.3 KiB
Handlebars

{{!-- Character Sheet Abilities Tab --}}
<section class="sheet-body tab-content abilities-tab">
{{!-- Ancestry Section --}}
{{#if ancestry}}
<div class="abilities-section ancestry">
<h2 class="section-header">{{localize "VAGABOND.Ancestry"}}</h2>
<div class="ancestry-block" data-item-id="{{ancestry.id}}">
<div class="ancestry-header">
<img class="ancestry-img" src="{{ancestry.img}}" alt="{{ancestry.name}}" />
<div class="ancestry-info">
<span class="ancestry-name" data-action="itemEdit">{{ancestry.name}}</span>
<span class="ancestry-being-type">{{ancestry.system.beingType}}</span>
<span class="ancestry-size">{{ancestry.system.size}}</span>
</div>
</div>
{{#if ancestry.system.traits.length}}
<div class="ancestry-traits">
{{#each ancestry.system.traits}}
<div class="trait">
<strong>{{this.name}}:</strong> {{{this.description}}}
</div>
{{/each}}
</div>
{{/if}}
</div>
</div>
{{/if}}
{{!-- Class Features Section --}}
<div class="abilities-section features">
<h2 class="section-header">{{localize "VAGABOND.Features"}}</h2>
<ul class="ability-list">
{{!-- Display class features extracted from class items --}}
{{#each classFeatures}}
<li class="ability-item class-feature">
<img class="ability-img" src="{{this.img}}" alt="{{this.name}}" />
<div class="ability-info">
<span class="ability-name">{{this.name}}</span>
<span class="ability-source">{{this.sourceClass}} Lv{{this.level}}</span>
</div>
<div class="ability-description">{{{this.description}}}</div>
</li>
{{/each}}
{{!-- Display standalone feature items --}}
{{#each items.features}}
<li class="ability-item" data-item-id="{{this.id}}">
<img class="ability-img" src="{{this.img}}" alt="{{this.name}}" />
<div class="ability-info">
<span class="ability-name" data-action="itemEdit">{{this.name}}</span>
{{#if this.system.sourceClass}}
<span class="ability-source">{{this.system.sourceClass}} Lv{{this.system.levelGained}}</span>
{{/if}}
</div>
<div class="ability-description">{{{this.system.description}}}</div>
<button type="button" class="item-delete" data-action="itemDelete"
data-tooltip="{{localize 'VAGABOND.DeleteItem'}}">
<i class="fa-solid fa-trash"></i>
</button>
</li>
{{/each}}
{{!-- Show empty message only if both are empty --}}
{{#unless classFeatures.length}}
{{#unless items.features.length}}
<li class="ability-item empty">{{localize "VAGABOND.NoFeatures"}}</li>
{{/unless}}
{{/unless}}
</ul>
</div>
{{!-- Perks Section --}}
<div class="abilities-section perks">
<div class="section-header-row">
<h2 class="section-header">{{localize "VAGABOND.Perks"}}</h2>
<button type="button" class="item-create" data-action="itemCreate" data-type="perk"
data-tooltip="{{localize 'VAGABOND.CreatePerk'}}">
<i class="fa-solid fa-plus"></i>
</button>
</div>
<ul class="ability-list">
{{#each items.perks}}
<li class="ability-item" data-item-id="{{this.id}}">
<img class="ability-img" src="{{this.img}}" alt="{{this.name}}" />
<div class="ability-info">
<span class="ability-name" data-action="itemEdit">{{this.name}}</span>
{{#if this.prerequisiteString}}
<span class="ability-prereqs">{{this.prerequisiteString}}</span>
{{/if}}
</div>
<div class="ability-description">{{{this.system.description}}}</div>
<button type="button" class="item-delete" data-action="itemDelete"
data-tooltip="{{localize 'VAGABOND.DeleteItem'}}">
<i class="fa-solid fa-trash"></i>
</button>
</li>
{{else}}
<li class="ability-item empty">{{localize "VAGABOND.NoPerks"}}</li>
{{/each}}
</ul>
</div>
{{!-- Active Effects Section --}}
<div class="abilities-section effects">
<h2 class="section-header">{{localize "VAGABOND.ActiveEffects"}}</h2>
{{#if effects.temporary.length}}
<div class="effects-group temporary">
<h3 class="subsection-header">{{localize "VAGABOND.TemporaryEffects"}}</h3>
<ul class="effect-list">
{{#each effects.temporary}}
<li class="effect-item">
<img class="effect-icon" src="{{this.icon}}" alt="{{this.name}}" />
<span class="effect-name">{{this.name}}</span>
{{#if this.duration.remaining}}
<span class="effect-duration">{{this.duration.remaining}} rounds</span>
{{/if}}
</li>
{{/each}}
</ul>
</div>
{{/if}}
{{#if effects.passive.length}}
<div class="effects-group passive">
<h3 class="subsection-header">{{localize "VAGABOND.PassiveEffects"}}</h3>
<ul class="effect-list">
{{#each effects.passive}}
<li class="effect-item">
<img class="effect-icon" src="{{this.icon}}" alt="{{this.name}}" />
<span class="effect-name">{{this.name}}</span>
<span class="effect-source">{{this.parent.name}}</span>
</li>
{{/each}}
</ul>
</div>
{{/if}}
</div>
</section>