Files
fvtt-oath-hammer/templates/actor/character-sheet.hbs
T
uberwald 0381e8e024
Release Creation / build (release) Successful in 1m25s
feat: luck bonus, inventory slots bonus, multi-enhancements, magic skill modifier
- Add luck.bonus field to character DataModel; included in prepareDerivedData
   (luck.max = fate.rank + bonus); shown as editable +bonus field next to
   luck max in edit mode (same UX as grit bonus)

 - Add inventory.slotsBonus field to character DataModel; Equipment tab now
   shows an editable "Bonus Slots" input that adds to the calculated max slots
   (10 + Might×2 + bonus)

 - Replace single Enhancement <select> in spell cast dialog with a checkbox
   list; multiple enhancements can now be selected simultaneously — stress
   costs, pool penalties, and boolean flags (redDice, noStress) are aggregated
   across all active enhancements

 - Include skills.magic.modifier in basePool for both spell and miracle dialogs
   and in baseDice in rollSpellCast / rollMiracleCast; modifier is shown in
   the dialog pool-info line and in the chat card when non-zero

 - Fix: pool-reduction indicator in rollSpellCast now compares against
   intRank + magicRank + magicMod (was missing magicMod)
2026-05-12 08:16:57 +02:00

106 lines
5.8 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.
<section class="character-main character-main-{{ifThen isPlayMode 'play' 'edit'}}">
<fieldset>
<legend>{{localize "OATHHAMMER.Label.Character"}}</legend>
<div class="character-pc character-pc-{{ifThen isPlayMode 'play' 'edit'}}">
{{!-- Portrait column --}}
<div class="character-portrait">
<img class="actor-img" src="{{actor.img}}" data-edit="img" data-action="editImage" data-tooltip="{{actor.name}}" />
</div>
{{!-- Right column: name + identity + stats band --}}
<div class="character-right">
{{!-- Row 1: Name + toggle --}}
<div class="character-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="OATHHAMMER.ToggleSheet" data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
{{!-- Row 2: Identity bar (lineage + class + level/xp) --}}
<div class="character-identity-bar">
<div class="identity-slot lineage-slot">
<i class="fa-solid fa-person slot-icon"></i>
{{formInput systemFields.lineage.fields.name value=system.lineage.name name="system.lineage.name" placeholder=(localize "OATHHAMMER.Label.Lineage") disabled=isPlayMode}}
</div>
<div class="identity-slot class-slot {{#unless characterClass}}empty{{/unless}}" data-drop-type="class">
{{#if characterClass}}
<img src="{{characterClass.img}}" class="identity-img" data-item-id="{{characterClass.id}}" data-item-uuid="{{characterClass.uuid}}" />
<a class="identity-name class-open-link" data-action="edit" data-item-id="{{characterClass.id}}" data-item-uuid="{{characterClass.uuid}}" data-tooltip="{{localize 'OATHHAMMER.Label.OpenClass'}}">{{characterClass.name}}</a>
{{#unless isPlayMode}}
<a data-action="delete" data-item-id="{{characterClass.id}}" data-item-uuid="{{characterClass.uuid}}"><i class="fa-solid fa-trash"></i></a>
{{/unless}}
{{else}}
<i class="fa-solid fa-shield-halved slot-icon"></i>
<span class="slot-placeholder">{{localize "OATHHAMMER.Label.DropClass"}}</span>
{{/if}}
</div>
<div class="identity-xp">
<span class="xp-label">{{localize "OATHHAMMER.Label.XP"}}</span>
{{formInput systemFields.experience.fields.current value=system.experience.current name="system.experience.current" disabled=isPlayMode}}
<span class="xp-sep">/</span>
{{formInput systemFields.experience.fields.total value=system.experience.total name="system.experience.total" disabled=isPlayMode}}
</div>
</div>
{{!-- Row 3: Unified stats band: resources | attributes --}}
<div class="character-stats-band">
<fieldset class="character-resources">
<div class="character-resource">
<span class="resource-label">{{localize "OATHHAMMER.Label.Grit"}}</span>
<div class="grit-stepper">
<a data-action="adjustGrit" data-delta="-1" class="grit-btn"></a>
{{formInput systemFields.grit.fields.value value=system.grit.value name="system.grit.value"}}
<a data-action="adjustGrit" data-delta="1" class="grit-btn">+</a>
</div>
<span class="res-sep">/</span>
<span class="grit-max-group">
{{formInput systemFields.grit.fields.max value=system.grit.max name="system.grit.max" disabled=true}}
{{#unless isPlayMode}}
<span class="res-bonus-label">+</span>
{{formInput systemFields.grit.fields.bonus value=system.grit.bonus name="system.grit.bonus" class="res-bonus-input"}}
{{/unless}}
</span>
</div>
<div class="character-resource character-resource--luck">
<span class="resource-label">{{localize "OATHHAMMER.Label.Luck"}}</span>
<div class="luck-stepper">
<a data-action="adjustLuck" data-delta="-1" class="luck-btn"></a>
{{formInput systemFields.luck.fields.value value=system.luck.value name="system.luck.value"}}
<a data-action="adjustLuck" data-delta="1" class="luck-btn">+</a>
</div>
<span class="res-sep">/</span>
<span class="luck-max-group">
{{formInput systemFields.luck.fields.max value=system.luck.max name="system.luck.max" disabled=true}}
{{#unless isPlayMode}}
<span class="res-bonus-label">+</span>
{{formInput systemFields.luck.fields.bonus value=system.luck.bonus name="system.luck.bonus" class="res-bonus-input"}}
{{/unless}}
</span>
</div>
<div class="character-resource">
<span class="resource-label">{{localize "OATHHAMMER.Label.Movement"}}</span>
{{formInput systemFields.movement.fields.base value=system.movement.base name="system.movement.base" disabled=isPlayMode}}
</div>
</fieldset>
<fieldset class="character-attributes character-attributes-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "OATHHAMMER.Label.Attributes"}}</legend>
<div class="attributes-grid">
{{#each system.attributes as |attr key|}}
<div class="attribute-box">
<label>{{localize (concat "OATHHAMMER.Attribute." (capitalize key))}}</label>
<input type="number" name="system.attributes.{{key}}.rank" value="{{attr.rank}}" min="1" max="4" {{#if ../isPlayMode}}disabled{{/if}}>
</div>
{{/each}}
</div>
</fieldset>
</div>
</div>
</div>
</fieldset>
</section>