Various fixes and changes based on tester feedback

This commit is contained in:
2026-03-17 13:50:32 +01:00
parent 92ba9c3501
commit 000bf348a6
29 changed files with 1450 additions and 192 deletions

View File

@@ -1,21 +1,8 @@
<section data-tab="combat" data-group="{{tab.group}}" class="tab {{tab.cssClass}}">
<fieldset>
<legend>{{localize "OATHHAMMER.Label.Defense"}}</legend>
<div class="flexrow">
<div class="form-group">
<label>{{localize "OATHHAMMER.Label.DefenseValue"}}</label>
<input type="text" value="{{system.defense.value}}" disabled />
</div>
<div class="form-group">
<label>{{localize "OATHHAMMER.Label.ArmorRating"}}</label>
{{formInput systemFields.defense.fields.armorRating value=system.defense.armorRating name="system.defense.armorRating" disabled=isPlayMode}}
</div>
<div class="form-group">
<label>{{localize "OATHHAMMER.Label.DefenseBonus"}}</label>
{{formInput systemFields.defense.fields.bonus value=system.defense.bonus name="system.defense.bonus" disabled=isPlayMode}}
</div>
</div>
</fieldset>
<div class="slots-counter">
<span class="slots-label">{{localize "OATHHAMMER.Label.ItemSlots"}}</span>
<span class="slots-value {{#if slotsOver}}slots-over{{/if}}">{{slotsUsed}} / {{slotsMax}}</span>
</div>
<fieldset>
<legend>{{localize "OATHHAMMER.Label.Weapons"}}
{{#unless isPlayMode}}<a data-action="createWeapon" class="create-btn"><i class="fa-solid fa-plus"></i></a>{{/unless}}
@@ -41,10 +28,11 @@
<span class="item-detail">{{#if weapon.system.ap}}{{weapon.system.ap}}{{else}}{{/if}}</span>
<span class="item-magic">{{#if weapon._isMagic}}<i class="fa-solid fa-wand-sparkles"></i>{{/if}}</span>
<div class="item-equipped">
<input type="checkbox" class="item-equipped-cb" data-item-id="{{weapon.id}}" {{checked weapon.system.equipped}} {{#if ../isPlayMode}}disabled{{/if}}>
<input type="checkbox" class="item-equipped-cb" data-item-id="{{weapon.id}}" {{checked weapon.system.equipped}}>
</div>
<div class="item-actions">
<a data-action="attackWeapon" data-item-id="{{weapon.id}}" title="{{localize "OATHHAMMER.Dialog.Attack"}}"><i class="fa-solid fa-khanda"></i></a>
<a data-action="defendWeapon" data-item-id="{{weapon.id}}" title="{{localize "OATHHAMMER.Dialog.RollDefense"}}"><i class="fa-solid fa-shield-halved"></i></a>
<a data-action="damageWeapon" data-item-id="{{weapon.id}}" title="{{localize "OATHHAMMER.Dialog.Damage"}}"><i class="fa-solid fa-burst"></i></a>
<a data-action="edit" data-item-id="{{weapon.id}}" data-item-uuid="{{weapon.uuid}}"><i class="fa-solid fa-edit"></i></a>
<a data-action="delete" data-item-id="{{weapon.id}}" data-item-uuid="{{weapon.uuid}}"><i class="fa-solid fa-trash"></i></a>
@@ -80,9 +68,10 @@
<span class="item-detail">{{#if armor.system.penalty}}{{armor.system.penalty}}{{else}}{{/if}}</span>
<span class="item-magic">{{#if armor._isMagic}}<i class="fa-solid fa-wand-sparkles"></i>{{/if}}</span>
<div class="item-equipped">
<input type="checkbox" class="item-equipped-cb" data-item-id="{{armor.id}}" {{checked armor.system.equipped}} {{#if ../isPlayMode}}disabled{{/if}}>
<input type="checkbox" class="item-equipped-cb" data-item-id="{{armor.id}}" {{checked armor.system.equipped}}>
</div>
<div class="item-actions">
<a data-action="rollArmorSave" data-item-id="{{armor.id}}" title="{{localize 'OATHHAMMER.Dialog.RollArmor'}}"><i class="fa-solid fa-shield armor-roll-icon"></i></a>
<a data-action="edit" data-item-id="{{armor.id}}" data-item-uuid="{{armor.uuid}}"><i class="fa-solid fa-edit"></i></a>
<a data-action="delete" data-item-id="{{armor.id}}" data-item-uuid="{{armor.uuid}}"><i class="fa-solid fa-trash"></i></a>
</div>

View File

@@ -1,4 +1,8 @@
<section data-tab="equipment" data-group="{{tab.group}}" class="tab {{tab.cssClass}}">
<div class="slots-counter">
<span class="slots-label">{{localize "OATHHAMMER.Label.ItemSlots"}}</span>
<span class="slots-value {{#if slotsOver}}slots-over{{/if}}">{{slotsUsed}} / {{slotsMax}}</span>
</div>
<fieldset class="currency-bar">
<legend>{{localize "OATHHAMMER.Label.Currency"}}</legend>
<div class="flexrow">

View File

@@ -3,9 +3,11 @@
<legend>{{localize "OATHHAMMER.Label.Background"}}</legend>
{{formInput systemFields.background enriched=enrichedBackground value=system.background name="system.background" toggled=true}}
</fieldset>
{{#if traits.length}}
<fieldset>
<legend>{{localize "OATHHAMMER.Label.Traits"}}</legend>
<legend>{{localize "OATHHAMMER.Label.Traits"}}
{{#unless isPlayMode}}<a data-action="createTrait" class="create-btn"><i class="fa-solid fa-plus"></i></a>{{/unless}}
</legend>
{{#if traits.length}}
<ul class="item-list item-list--trait">
<li class="item-list-header">
<span></span>
@@ -15,7 +17,7 @@
<span></span>
</li>
{{#each traits as |trait|}}
<li class="item-entry" data-item-id="{{trait.id}}" data-item-uuid="{{trait.uuid}}">
<li class="item-entry" data-item-id="{{trait.id}}" data-item-uuid="{{trait.uuid}}" data-drag="true">
<img src="{{trait.img}}" class="item-img" />
<span class="item-name">{{trait.name}}</span>
<span class="item-type">{{trait._typeLabel}}</span>
@@ -27,8 +29,10 @@
</li>
{{/each}}
</ul>
{{else}}
<p class="no-items">{{localize "OATHHAMMER.Label.NoTraits"}}</p>
{{/if}}
</fieldset>
{{/if}}
{{#if oaths.length}}
<fieldset>
<legend>{{localize "OATHHAMMER.Label.Oaths"}}</legend>

View File

@@ -43,8 +43,15 @@
<legend>{{localize "OATHHAMMER.Label.Miracles"}}
{{#unless isPlayMode}}<a data-action="createMiracle" class="create-btn"><i class="fa-solid fa-plus"></i></a>{{/unless}}
</legend>
{{#if system.miracleBlocked}}
<div class="miracle-blocked-banner">
<i class="fa-solid fa-ban"></i>
<span>{{localize "OATHHAMMER.Label.MiracleBlocked"}}</span>
<a data-action="resetMiracleBlocked" title="{{localize 'OATHHAMMER.Action.ResetMiracleBlocked'}}"><i class="fa-solid fa-sun"></i> {{localize "OATHHAMMER.Action.NewDay"}}</a>
</div>
{{/if}}
{{#if miracles.length}}
<ul class="item-list item-list--miracle">
<ul class="item-list item-list--miracle {{#if system.miracleBlocked}}miracles-blocked{{/if}}">
<li class="item-list-header">
<span></span>
<span class="col-name">{{localize "OATHHAMMER.Label.Name"}}</span>

View File

@@ -0,0 +1,50 @@
<div class="oh-roll-dialog oh-armor-dialog">
{{!-- Armor header --------------------------------------------------------}}
<div class="spell-header">
<img src="{{armorImg}}" class="weapon-img-sm" alt="{{armorName}}" />
<div class="spell-header-info">
<span class="weapon-name-lg">{{armorName}}</span>
<div class="weapon-badges">
<span class="dv-badge">AV {{av}}</span>
{{#if isReinforced}}<span class="ritual-badge">{{localize "OATHHAMMER.ArmorTrait.Reinforced"}} 🔴</span>{{/if}}
</div>
</div>
</div>
<fieldset class="attack-options-block">
<legend>{{localize "OATHHAMMER.Dialog.ArmorRollOptions"}}</legend>
<div class="pool-info-line">
AV {{av}}
{{#if isReinforced}} · {{localize "OATHHAMMER.Dialog.ReinforcedHint"}}{{/if}}
</div>
{{!-- AP penalty from attacker's weapon ----------------------------------}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.APPenalty"}}</label>
<select name="ap">
{{#each apOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.APHint"}}</span>
</div>
{{!-- Manual bonus -------------------------------------------------------}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.Modifier"}}</label>
<select name="bonus">
{{#each bonusOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
</div>
</fieldset>
{{!-- Visibility -----------------------------------------------------------}}
<fieldset class="roll-visibility-block">
<legend>{{localize "OATHHAMMER.Dialog.Visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldset>
</div>

View File

@@ -0,0 +1,63 @@
<div class="oh-roll-dialog oh-defense-dialog">
{{!-- Pool preview -------------------------------------------------------}}
<div class="pool-info-line">
{{localize "OATHHAMMER.Skill.Defense"}} ({{localize "OATHHAMMER.Attribute.Agility"}} {{agiRank}})
+ {{localize "OATHHAMMER.Label.SkillRank"}} {{defRank}}
{{#if armorPenalty}} {{armorPenalty}} {{localize "OATHHAMMER.Dialog.ArmorPenalty"}}{{/if}}
</div>
{{!-- Trait summary -------------------------------------------------------}}
{{#if parryCount}}
<div class="oh-trait-info">
<i class="fa-solid fa-shield-halved"></i>
{{localize "OATHHAMMER.Dialog.ParryActive"}}{{#if (gte parryCount 2)}} (+1){{/if}}
</div>
{{/if}}
{{#if blockCount}}
<div class="oh-trait-info">
<i class="fa-solid fa-shield-halved"></i>
{{localize "OATHHAMMER.Dialog.BlockActive"}}
</div>
{{/if}}
<fieldset class="attack-options-block">
<legend>{{localize "OATHHAMMER.Dialog.DefenseOptions"}}</legend>
{{!-- Attack type --------------------------------------------------------}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.AttackType"}}</label>
<select name="attackType">
{{#each attackTypeOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
</div>
{{!-- Governing attribute (melee can use Might) --------------------------}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.GoverningAttr"}}</label>
<select name="attribute">
{{#each attrOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.MightMeleeHint"}}</span>
</div>
{{!-- Manual bonus -------------------------------------------------------}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.Modifier"}}</label>
<select name="bonus">
{{#each bonusOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.AttackModifierHint"}}</span>
</div>
</fieldset>
{{!-- Visibility -----------------------------------------------------------}}
<fieldset class="roll-visibility-block">
<legend>{{localize "OATHHAMMER.Dialog.Visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldset>
</div>

View File

@@ -12,7 +12,7 @@
<label class="proficiency-option">
<input type="checkbox" name="system.armorProficiency"
value="{{key}}"
{{#if (includes system.armorProficiency key)}}checked{{/if}}>
{{#if (includes ../system.armorProficiency key)}}checked{{/if}}>
{{localize label}}
</label>
{{/each}}
@@ -26,7 +26,7 @@
<label class="proficiency-option">
<input type="checkbox" name="system.weaponProficiency"
value="{{key}}"
{{#if (includes system.weaponProficiency key)}}checked{{/if}}>
{{#if (includes ../system.weaponProficiency key)}}checked{{/if}}>
{{localize label}}
</label>
{{/each}}

View File

@@ -61,6 +61,12 @@
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.SupportersHint"}}</span>
</div>
<div class="roll-option-row roll-option-check">
<label for="explodeOn5">{{localize "OATHHAMMER.Dialog.ExplodeOn5"}}</label>
<input type="checkbox" id="explodeOn5" name="explodeOn5" value="true" />
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.ExplodeOn5Hint"}}</span>
</div>
{{#if availableLuck}}
<div class="roll-option-row roll-option-luck">
<label>{{localize "OATHHAMMER.Dialog.LuckSpend"}} <i class="fa-solid fa-clover luck-icon"></i></label>

View File

@@ -0,0 +1,85 @@
<div class="oh-roll-dialog oh-weapon-dialog">
{{!-- Weapon header --}}
<div class="weapon-header">
<img src="{{weaponImg}}" class="weapon-img-sm" alt="{{weaponName}}" />
<div class="weapon-header-info">
<span class="weapon-name-lg">{{weaponName}}</span>
{{#if traits}}
<div class="weapon-traits-row">
{{#each traits}}<span class="trait-tag-sm">{{this}}</span>{{/each}}
</div>
{{/if}}
</div>
</div>
{{!-- Pool preview --}}
<div class="pool-info-line">
{{localize "OATHHAMMER.Skill.Defense"}} ({{localize "OATHHAMMER.Attribute.Agility"}} {{agiRank}})
+ {{localize "OATHHAMMER.Label.SkillRank"}} {{defRank}}
{{#if armorPenalty}} {{armorPenalty}} {{localize "OATHHAMMER.Dialog.ArmorPenalty"}}{{/if}}
</div>
{{!-- Active trait indicators --}}
{{#if hasParry}}
<div class="oh-trait-info">
<i class="fa-solid fa-shield-halved"></i>
{{localize "OATHHAMMER.Dialog.ParryActive"}}{{#if (gte parryCount 2)}} (+1){{/if}}
</div>
{{/if}}
{{#if hasBlock}}
<div class="oh-trait-info">
<i class="fa-solid fa-shield-halved"></i>
{{localize "OATHHAMMER.Dialog.BlockActive"}}
</div>
{{/if}}
<fieldset class="attack-options-block">
<legend>{{localize "OATHHAMMER.Dialog.DefenseOptions"}}</legend>
{{!-- Attack type --}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.AttackType"}}</label>
<select name="attackType">
{{#each attackTypeOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
</div>
{{!-- Governing attribute (melee can use Might) --}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.GoverningAttr"}}</label>
<select name="attribute">
{{#each attrOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.MightMeleeHint"}}</span>
</div>
{{!-- Diminishing defense penalty --}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.DiminishingDefense"}}</label>
<select name="diminish">
{{#each diminishOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.DiminishingDefenseHint"}}</span>
</div>
{{!-- Manual bonus/penalty --}}
<div class="roll-option-row">
<label>{{localize "OATHHAMMER.Dialog.Modifier"}}</label>
<select name="bonus">
{{#each bonusOptions}}<option value="{{value}}"{{#if selected}} selected{{/if}}>{{label}}</option>{{/each}}
</select>
<span class="roll-option-hint">{{localize "OATHHAMMER.Dialog.AttackModifierHint"}}</span>
</div>
</fieldset>
{{!-- Visibility --}}
<fieldset class="roll-visibility-block">
<legend>{{localize "OATHHAMMER.Dialog.Visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldset>
</div>