Initial commit
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
{{!-- Actor-level Active Effects section — included by character and NPC sheets. --}}
|
||||
<fieldset class="hbm-effects actor-effects">
|
||||
<legend>{{localize 'HBM.activeEffect.title'}}</legend>
|
||||
<button type="button" class="hbm-effect-add" data-action="actorEffectCreate">+ {{localize 'HBM.activeEffect.addEffect'}}</button>
|
||||
{{#if actorEffects.length}}
|
||||
<ul class="effect-list">
|
||||
{{#each actorEffects as |e|}}
|
||||
<li class="effect-row {{#if e.disabled}}disabled{{/if}} {{#if e.isTransferred}}transferred{{/if}}">
|
||||
<img src="{{e.icon}}" width="20" height="20"/>
|
||||
<span class="effect-name">{{e.name}}</span>
|
||||
<span class="effect-meta">
|
||||
{{#if e.isTransferred}}<span class="badge" title="{{localize 'HBM.activeEffect.fromItem'}}">← {{e.originName}}</span>{{/if}}
|
||||
<span class="badge">{{e.changes.length}} {{localize 'HBM.activeEffect.changes'}}</span>
|
||||
</span>
|
||||
<button type="button" data-action="actorEffectToggle" data-effect-id="{{e.id}}" title="{{localize 'HBM.activeEffect.toggle'}}">{{#if e.disabled}}○{{else}}●{{/if}}</button>
|
||||
<button type="button" data-action="actorEffectEdit" data-effect-id="{{e.id}}" title="{{localize 'HBM.activeEffect.edit'}}">✎</button>
|
||||
{{#unless e.isTransferred}}<button type="button" data-action="actorEffectDelete" data-effect-id="{{e.id}}" title="{{localize 'HBM.activeEffect.deleteEffect'}}">✕</button>{{/unless}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<p class="hbm-hint">{{localize 'HBM.activeEffect.emptyActor'}}</p>
|
||||
{{/if}}
|
||||
</fieldset>
|
||||
@@ -0,0 +1,656 @@
|
||||
<div class="sheet-wrapper">
|
||||
<!-- ═══ STICKY HEADER ═══════════════════════════════════════════════════ -->
|
||||
<header class="sheet-header">
|
||||
<input class="charname" type="text" name="name" value="{{document.name}}" placeholder="{{localize 'HBM.ui.name'}}" />
|
||||
<div class="meta-row">
|
||||
<label>{{localize 'HBM.details.race'}}
|
||||
<select name="system.details.race">
|
||||
<option value="">--</option>
|
||||
{{#each races as |r|}}
|
||||
<option value="{{r.key}}" {{#if (eq ../system.details.race r.key)}}selected{{/if}}>{{r.label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
<label>{{localize 'HBM.details.year'}}
|
||||
<input type="number" name="system.details.year" value="{{system.details.year}}" min="1" max="4" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.details.startingYear'}}
|
||||
<input type="number" name="system.details.startingYear" value="{{system.details.startingYear}}" min="1900" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.details.currentYear'}}
|
||||
<input type="number" name="system.details.currentYear" value="{{system.details.currentYear}}" min="1900" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.details.discipline'}}
|
||||
<select name="system.details.discipline">
|
||||
<option value="">--</option>
|
||||
{{#each disciplines as |d|}}
|
||||
<option value="{{d.key}}" {{#if (eq ../system.details.discipline d.key)}}selected{{/if}}>{{d.label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<!-- Tab navigation -->
|
||||
<nav class="tabs" data-group="primary">
|
||||
{{#each tabs as |tab|}}
|
||||
<button type="button" class="tab-item {{tab.cssClass}}" data-tab="{{tab.id}}">
|
||||
{{localize tab.label}}
|
||||
</button>
|
||||
{{/each}}
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- ═══ SCROLLABLE BODY ══════════════════════════════════════════════════ -->
|
||||
<div class="sheet-body">
|
||||
|
||||
<!-- ── STATS ──────────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'stats')}}active{{/if}}" data-tab="stats">
|
||||
|
||||
<div class="attributes-grid">
|
||||
{{#each attributes as |attr|}}
|
||||
<div class="attribute" data-attr="{{attr.key}}">
|
||||
<label>{{attr.label}}</label>
|
||||
{{#if (eq attr.key 'magic')}}
|
||||
<select name="system.attributes.magic.value">
|
||||
<option value="0" {{#if (eq attr.value 0)}}selected{{/if}}>0</option>
|
||||
<option value="1" {{#if (eq attr.value 1)}}selected{{/if}}>I</option>
|
||||
<option value="2" {{#if (eq attr.value 2)}}selected{{/if}}>II</option>
|
||||
<option value="3" {{#if (eq attr.value 3)}}selected{{/if}}>III</option>
|
||||
<option value="4" {{#if (eq attr.value 4)}}selected{{/if}}>IV</option>
|
||||
<option value="5" {{#if (eq attr.value 5)}}selected{{/if}}>V</option>
|
||||
<option value="6" {{#if (eq attr.value 6)}}selected{{/if}}>VI</option>
|
||||
<option value="7" {{#if (eq attr.value 7)}}selected{{/if}}>VII</option>
|
||||
<option value="8" {{#if (eq attr.value 8)}}selected{{/if}}>VIII</option>
|
||||
<option value="9" {{#if (eq attr.value 9)}}selected{{/if}}>IX</option>
|
||||
<option value="10" {{#if (eq attr.value 10)}}selected{{/if}}>X</option>
|
||||
</select>
|
||||
<span class="actual-magic-badge" title="{{localize 'HBM.attributes.actualMagicHint'}}" style="font-size: 0.75rem; margin-top: 0.15rem; color: #a03030; font-weight: bold;">
|
||||
({{localize 'HBM.attributes.actual'}}: {{attr.actualLabel}})
|
||||
</span>
|
||||
{{else}}
|
||||
<input type="number" name="system.attributes.{{attr.key}}.value" value="{{attr.value}}"
|
||||
min="1" max="8" />
|
||||
{{/if}}
|
||||
<button type="button" class="roll-btn" data-action="rollAttribute" data-attribute="{{attr.key}}"
|
||||
title="{{localize 'HBM.roll.roll'}}">⚂</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
<div class="resources-grid">
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.health'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.health.value" value="{{system.attributes.health.value}}" min="0" />
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.health.max" value="{{system.attributes.health.max}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.physicalArmor'}}</label>
|
||||
<span class="resource-value">
|
||||
<span class="static-value" title="{{localize 'HBM.resources.physicalArmor'}}">{{system.attributes.physicalArmor.value}}</span>
|
||||
</span>
|
||||
<small>{{localize 'HBM.resources.max'}}: {{system.attributes.physicalArmor.max}}</small>
|
||||
<div style="display:flex; align-items:center; gap:0.3rem; margin-top:0.15rem;">
|
||||
<small style="white-space:nowrap;">{{localize 'HBM.ui.physicalArmorBonus'}}:</small>
|
||||
<input type="number" name="system.attributes.physicalArmor.bonus"
|
||||
value="{{system.attributes.physicalArmor.bonus}}" min="0"
|
||||
style="width:2.5rem; text-align:center; font-size:0.8rem; border:none; border-bottom:1px solid var(--hbm-border); background:transparent;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.magicalShield'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.magicalShield.value"
|
||||
value="{{system.attributes.magicalShield.value}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.magicalArmor'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.magicalArmor.value"
|
||||
value="{{system.attributes.magicalArmor.value}}" min="0" />
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.magicalArmor.max" value="{{system.attributes.magicalArmor.max}}"
|
||||
min="0" />
|
||||
</span>
|
||||
<small>{{localize 'HBM.resources.runicCounter'}}: {{system.attributes.magicalArmor.runicCounter}}/5</small>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.mana'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.mana.value" value="{{system.attributes.mana.value}}" min="0" />
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.mana.max" value="{{system.attributes.mana.max}}" min="0" />
|
||||
</span>
|
||||
<small>{{localize 'HBM.resources.maxManaPerSpell'}}: {{system.attributes.mana.maxPerSpell}}</small>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.zeal'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.zeal.value" value="{{system.attributes.zeal.value}}" min="0" />
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.zeal.max" value="{{system.attributes.zeal.max}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
{{#if hasBloodMagic}}
|
||||
<div class="resource blood-pool">
|
||||
<label>{{localize 'HBM.resources.blood'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.blood.value" value="{{system.attributes.blood.value}}" min="0" />
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.blood.max" value="{{system.attributes.blood.max}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.elixirTolerance'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.elixirTolerance" value="{{system.attributes.elixirTolerance}}" min="0" />
|
||||
</span>
|
||||
<small>cap: {{elixirCap}}</small>
|
||||
</div>
|
||||
{{#if (gt system.attributes.insanity 0)}}
|
||||
<div class="resource warn">
|
||||
<label>{{localize 'HBM.resources.insanity'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.insanity" value="{{system.attributes.insanity}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.initiative'}}</label>
|
||||
<span class="static-value">{{system.attributes.initiative}}</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.experience'}}</label>
|
||||
<input type="number" name="system.details.experience" value="{{system.details.experience}}" min="0" />
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.ui.attributePoints'}}</label>
|
||||
<span class="resource-value">
|
||||
<span class="static-value" title="{{localize 'HBM.ui.pointsAvailable'}}">{{system.advancement.attributePointsAvailable}}</span>
|
||||
<span class="sep" title="Modyfikator MG">+</span>
|
||||
<input type="number" name="system.advancement.bonusAttributePoints" value="{{system.advancement.bonusAttributePoints}}" min="0" style="width: 2.2rem; text-align: center; border: none; border-bottom: 1px solid var(--hbm-border); background: transparent;" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.ui.skillPoints'}}</label>
|
||||
<span class="resource-value">
|
||||
<span class="static-value" title="{{localize 'HBM.ui.pointsAvailable'}}">{{system.advancement.skillPointsAvailable}}</span>
|
||||
<span class="sep" title="Modyfikator MG">+</span>
|
||||
<input type="number" name="system.advancement.bonusSkillPoints" value="{{system.advancement.bonusSkillPoints}}" min="0" style="width: 2.2rem; text-align: center; border: none; border-bottom: 1px solid var(--hbm-border); background: transparent;" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.ui.freeTalents'}}</label>
|
||||
<span class="resource-value">
|
||||
<span class="static-value" title="{{localize 'HBM.ui.pointsAvailable'}}">{{system.advancement.freeTalentsAvailable}}</span>
|
||||
<span class="sep" title="Modyfikator MG">+</span>
|
||||
<input type="number" name="system.advancement.bonusFreeTalents" value="{{system.advancement.bonusFreeTalents}}" min="0" style="width: 2.2rem; text-align: center; border: none; border-bottom: 1px solid var(--hbm-border); background: transparent;" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ── ACTIONS ────────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'actions')}}active{{/if}}" data-tab="actions">
|
||||
<div class="actions-panel">
|
||||
<h3>{{localize 'HBM.ui.actionsTitle'}}</h3>
|
||||
<div class="actions-buttons-grid">
|
||||
<button type="button" class="action-btn" data-action="rollInitiative">
|
||||
<span class="icon">⚡</span>
|
||||
<span class="label">{{localize 'HBM.resources.initiative'}}</span>
|
||||
</button>
|
||||
<button type="button" class="action-btn" data-action="applyDamage">
|
||||
<span class="icon">⚔</span>
|
||||
<span class="label">{{localize 'HBM.damage.apply'}}</span>
|
||||
</button>
|
||||
<button type="button" class="action-btn" data-action="takeBreather">
|
||||
<span class="icon">🌬️</span>
|
||||
<span class="label">{{localize 'HBM.rest.takeBreather'}}</span>
|
||||
</button>
|
||||
<button type="button" class="action-btn" data-action="shortRest">
|
||||
<span class="icon">☕</span>
|
||||
<span class="label">{{localize 'HBM.rest.shortRest'}}</span>
|
||||
</button>
|
||||
<button type="button" class="action-btn" data-action="longRest">
|
||||
<span class="icon">🌙</span>
|
||||
<span class="label">{{localize 'HBM.rest.longRest'}}</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ── SKILLS ─────────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'skills')}}active{{/if}}" data-tab="skills">
|
||||
<div class="skills-grid">
|
||||
{{#each skills as |sk|}}
|
||||
<div class="skill">
|
||||
<span class="skill-name">{{sk.label}}</span>
|
||||
<input type="number" name="system.skills.{{sk.key}}.value" value="{{sk.value}}" min="0" max="8" />
|
||||
<button type="button" class="roll-btn" data-action="rollSkill" data-skill="{{sk.key}}"
|
||||
title="{{localize 'HBM.roll.roll'}}">⚂</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ── SPELLS ─────────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'spells')}}active{{/if}}" data-tab="spells">
|
||||
{{#if spells.length}}
|
||||
{{#each spellSchoolGroups as |group|}}
|
||||
<details class="spell-school-group" open>
|
||||
<summary><strong>{{group.label}}</strong> <span class="count">({{group.items.length}})</span></summary>
|
||||
<ul class="item-list spell-list">
|
||||
{{#each group.items as |spell|}}
|
||||
<li class="item-row spell-row" data-school="{{spell.system.school}}">
|
||||
<span class="item-name">{{spell.name}}
|
||||
{{#if spell.system.isSuperspell}}<span class="badge super" title="Superczar">★</span>{{/if}}
|
||||
{{#if spell.system.requiresGroupCast}}<span class="badge group" title="Czar grupowy">⛧</span>{{/if}}
|
||||
{{#if spell.system.nonCombatOnly}}<span class="badge noncombat" title="Tylko poza walką">☮</span>{{/if}}
|
||||
{{#if spell.system.requirements.race.length}}<span class="badge race-lock" title="Wymagana rasa">🔒</span>{{/if}}
|
||||
</span>
|
||||
<span class="item-meta">
|
||||
K{{spell.system.circle}}
|
||||
· {{localize (concat 'HBM.spell.castingMode.' spell.system.castingMode)}}
|
||||
· {{localize 'HBM.resources.mana'}}: {{spell.system.manaCost}}
|
||||
{{#if (eq spell.system.castingMode 'sacred')}}{{#if spell.system.deity}} · {{spell.system.deity}}{{/if}}{{/if}}
|
||||
{{#if (eq spell.system.castingMode 'blood')}} · krew: {{spell.system.bloodCost}}{{/if}}
|
||||
{{#if spell.system.sourceBook}} · <span class="source-pip">{{spell.system.sourceBook}}</span>{{/if}}
|
||||
</span>
|
||||
<div class="item-controls">
|
||||
<button type="button" class="cast-btn" data-action="castSpell" data-item-id="{{spell.id}}"
|
||||
title="{{localize 'HBM.spell.cast'}}">✦</button>
|
||||
<button type="button" class="edit-btn" data-action="editItem" data-item-id="{{spell.id}}"
|
||||
title="{{localize 'HBM.ui.edit'}}">✎</button>
|
||||
<button type="button" class="delete-btn" data-action="deleteItem" data-item-id="{{spell.id}}"
|
||||
title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</details>
|
||||
{{/each}}
|
||||
{{else}}
|
||||
<p class="empty-drop">{{localize 'HBM.ui.dropItems'}}</p>
|
||||
{{/if}}
|
||||
</section>
|
||||
|
||||
<!-- ── TALENTS ────────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'talents')}}active{{/if}}" data-tab="talents">
|
||||
<p class="empty-drop" style="font-size:0.8rem; color:#888; margin-bottom:10px;">{{localize 'HBM.ui.dropTalentsHint'}}</p>
|
||||
{{#if talents.length}}
|
||||
<ul class="item-list">
|
||||
{{#each talents as |item|}}
|
||||
<li class="item-row">
|
||||
<span class="item-name">{{item.name}}</span>
|
||||
<span class="item-meta">{{{item.system.description}}}</span>
|
||||
<div class="item-controls">
|
||||
<button type="button" class="edit-btn" data-action="editItem" data-item-id="{{item.id}}"
|
||||
title="{{localize 'HBM.ui.edit'}}">✎</button>
|
||||
<button type="button" class="delete-btn" data-action="deleteItem" data-item-id="{{item.id}}"
|
||||
title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<p class="empty-drop">{{localize 'HBM.ui.dropItems'}}</p>
|
||||
{{/if}}
|
||||
</section>
|
||||
|
||||
<!-- ── INVENTORY ──────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'inventory')}}active{{/if}}" data-tab="inventory">
|
||||
<div class="money-panel" style="display: flex; gap: 15px; align-items: center; background: var(--hbm-card-bg); border: 1px solid var(--hbm-border); border-radius: var(--hbm-radius); padding: 0.75rem; margin-bottom: 15px;">
|
||||
<div style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||||
<span class="icon" style="font-size: 1.5rem;">🪙</span>
|
||||
<strong>{{localize 'HBM.ui.money'}}:</strong>
|
||||
<input type="number" name="system.details.money" value="{{system.details.money}}" min="0" style="width: 8rem; font-size: 1.1rem; text-align: center; border: none; border-bottom: 1px solid var(--hbm-border); background: transparent; color: var(--hbm-fg);" />
|
||||
<span>PLN</span>
|
||||
</div>
|
||||
<button type="button" data-action="recalculateMoney" style="padding: 4px 10px; font-weight: bold; background: var(--hbm-accent); color: #fff; border: none; border-radius: var(--hbm-radius); cursor: pointer;">
|
||||
{{localize 'HBM.ui.recalculate'}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{#if weapons.length}}
|
||||
<div class="inventory-section">
|
||||
<h3>{{localize 'HBM.gear.weapon'}}</h3>
|
||||
<table class="inventory-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left;">{{localize 'HBM.ui.name'}}</th>
|
||||
<th>{{localize 'HBM.gear.damage'}}</th>
|
||||
<th>{{localize 'HBM.gear.weight'}}</th>
|
||||
<th>{{localize 'HBM.gear.quantity'}}</th>
|
||||
<th>{{localize 'HBM.gear.equipped'}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each weapons as |item|}}
|
||||
<tr class="item-tr" data-item-id="{{item.id}}">
|
||||
<td><strong>{{item.name}}</strong></td>
|
||||
<td style="text-align: center;">{{item.system.weapon.damage}} ({{localize (concat 'HBM.damageType.' item.system.weapon.damageType)}})</td>
|
||||
<td style="text-align: center;">{{item.system.weight}}</td>
|
||||
<td style="text-align: center;">{{item.system.quantity}}</td>
|
||||
<td style="text-align: center;">
|
||||
<input type="checkbox" data-action="toggleEquipped" data-item-id="{{item.id}}" {{#if item.system.equipped}}checked{{/if}} style="cursor: pointer;" />
|
||||
</td>
|
||||
<td style="text-align: right; white-space: nowrap;">
|
||||
<button type="button" class="edit-btn" data-action="editItem" data-item-id="{{item.id}}" title="{{localize 'HBM.ui.edit'}}">✎</button>
|
||||
<button type="button" class="delete-btn" data-action="deleteItem" data-item-id="{{item.id}}" title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if armors.length}}
|
||||
<div class="inventory-section" style="margin-top: 15px;">
|
||||
<h3>{{localize 'HBM.gear.armor'}}</h3>
|
||||
<table class="inventory-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left;">{{localize 'HBM.ui.name'}}</th>
|
||||
<th>{{localize 'HBM.gear.damageReduction'}}</th>
|
||||
<th>{{localize 'HBM.gear.condition'}}</th>
|
||||
<th>{{localize 'HBM.gear.weight'}}</th>
|
||||
<th>{{localize 'HBM.gear.quantity'}}</th>
|
||||
<th>{{localize 'HBM.gear.equipped'}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each armors as |item|}}
|
||||
<tr class="item-tr" data-item-id="{{item.id}}">
|
||||
<td><strong>{{item.name}}</strong></td>
|
||||
<td style="text-align: center;">{{item.system.armor.damageReduction}} DR</td>
|
||||
<td style="text-align: center;">{{item.system.armor.condition}} / {{item.system.armor.conditionMax}}</td>
|
||||
<td style="text-align: center;">{{item.system.weight}}</td>
|
||||
<td style="text-align: center;">{{item.system.quantity}}</td>
|
||||
<td style="text-align: center;">
|
||||
<input type="checkbox" data-action="toggleEquipped" data-item-id="{{item.id}}" {{#if item.system.equipped}}checked{{/if}} style="cursor: pointer;" />
|
||||
</td>
|
||||
<td style="text-align: right; white-space: nowrap;">
|
||||
<button type="button" class="edit-btn" data-action="editItem" data-item-id="{{item.id}}" title="{{localize 'HBM.ui.edit'}}">✎</button>
|
||||
<button type="button" class="delete-btn" data-action="deleteItem" data-item-id="{{item.id}}" title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if equipment.length}}
|
||||
<div class="inventory-section" style="margin-top: 15px;">
|
||||
<h3>{{localize 'HBM.gear.equipment'}}</h3>
|
||||
<table class="inventory-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left;">{{localize 'HBM.ui.name'}}</th>
|
||||
<th>{{localize 'HBM.gear.weight'}}</th>
|
||||
<th>{{localize 'HBM.gear.quantity'}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each equipment as |item|}}
|
||||
<tr class="item-tr" data-item-id="{{item.id}}">
|
||||
<td>{{item.name}}</td>
|
||||
<td style="text-align: center;">{{item.system.weight}}</td>
|
||||
<td style="text-align: center;">{{item.system.quantity}}</td>
|
||||
<td style="text-align: right; white-space: nowrap;">
|
||||
<button type="button" class="edit-btn" data-action="editItem" data-item-id="{{item.id}}" title="{{localize 'HBM.ui.edit'}}">✎</button>
|
||||
<button type="button" class="delete-btn" data-action="deleteItem" data-item-id="{{item.id}}" title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq gear.length 0)}}
|
||||
<p class="empty-drop">{{localize 'HBM.ui.dropItems'}}</p>
|
||||
{{/if}}
|
||||
|
||||
<!-- Custom equipment rows -->
|
||||
<div class="custom-equipment-section" style="margin-top: 20px;">
|
||||
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:8px;">
|
||||
<strong>{{localize 'HBM.ui.customEquipment'}}</strong>
|
||||
<button type="button" data-action="addArrayEntry"
|
||||
data-path="system.details.customItems"
|
||||
data-template="{"name":"","qty":1,"note":""}"
|
||||
style="padding:2px 8px; font-size:0.8rem; background:var(--hbm-success); color:#fff; border:none; border-radius:var(--hbm-radius); cursor:pointer;">
|
||||
+ {{localize 'HBM.ui.add'}}
|
||||
</button>
|
||||
</div>
|
||||
{{#if system.details.customItems.length}}
|
||||
<table class="inventory-table" style="font-size:0.85rem;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align:left;">{{localize 'HBM.ui.name'}}</th>
|
||||
<th style="width:3rem;">{{localize 'HBM.gear.quantity'}}</th>
|
||||
<th>{{localize 'HBM.ui.notes'}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each system.details.customItems as |row i|}}
|
||||
<tr>
|
||||
<td><input type="text" name="system.details.customItems.{{i}}.name" value="{{row.name}}"
|
||||
style="width:100%; border:none; border-bottom:1px solid var(--hbm-border); background:transparent; color:var(--hbm-fg); font-size:0.85rem;" /></td>
|
||||
<td><input type="number" name="system.details.customItems.{{i}}.qty" value="{{row.qty}}" min="0"
|
||||
style="width:3rem; text-align:center; border:none; border-bottom:1px solid var(--hbm-border); background:transparent; color:var(--hbm-fg); font-size:0.85rem;" /></td>
|
||||
<td><input type="text" name="system.details.customItems.{{i}}.note" value="{{row.note}}"
|
||||
style="width:100%; border:none; border-bottom:1px solid var(--hbm-border); background:transparent; color:var(--hbm-fg); font-size:0.8rem; color:#777;" /></td>
|
||||
<td style="text-align:right;">
|
||||
<button type="button" class="delete-btn" data-action="removeArrayEntry"
|
||||
data-path="system.details.customItems" data-index="{{i}}"
|
||||
title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
<p style="font-size:0.8rem; color:#888; font-style:italic;">{{localize 'HBM.ui.dropItems'}}</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ── EFFECTS ────────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'effects')}}active{{/if}}" data-tab="effects">
|
||||
{{> 'systems/hbm-rpg-v3/templates/actor/_actor-effects.hbs'}}
|
||||
</section>
|
||||
|
||||
<!-- ── BIOGRAPHY ──────────────────────────────────────────────────────── -->
|
||||
<section class="tab-panel {{#if (eq tabGroups.primary 'biography')}}active{{/if}}" data-tab="biography">
|
||||
<div class="bio-grid" style="display: flex; gap: 20px; flex-direction: column;">
|
||||
<div style="display: flex; gap: 20px;">
|
||||
<div class="bio-image-container" style="display: flex; flex-direction: column; align-items: center; gap: 10px; flex-shrink: 0;">
|
||||
<img class="profile-img" src="{{document.img}}" data-action="editImage" title="{{document.name}}" height="150" width="150" style="border: 2px solid #555; border-radius: 4px; cursor: pointer; background: #222;" />
|
||||
<small style="color: #777;">{{localize 'HBM.ui.changeImageHint'}}</small>
|
||||
</div>
|
||||
<div class="bio-section" style="flex: 1; display: flex; flex-direction: column; gap: 10px;">
|
||||
<div style="overflow-x: auto; margin-top: 5px;">
|
||||
<table class="schedule-table">
|
||||
<thead>
|
||||
<tr style="background: rgba(0, 0, 0, 0.15); border-bottom: 2px solid var(--hbm-border);">
|
||||
<th style="width: 3%;">#</th>
|
||||
<th style="width: 12%;">{{localize 'HBM.schedule.hours'}}</th>
|
||||
<th style="width: 14%;">{{localize 'HBM.schedule.monday'}}</th>
|
||||
<th style="width: 14%;">{{localize 'HBM.schedule.tuesday'}}</th>
|
||||
<th style="width: 14%;">{{localize 'HBM.schedule.wednesday'}}</th>
|
||||
<th style="width: 14%;">{{localize 'HBM.schedule.thursday'}}</th>
|
||||
<th style="width: 14%;">{{localize 'HBM.schedule.friday'}}</th>
|
||||
<th style="width: 13%;">{{localize 'HBM.schedule.saturday'}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- Row 1 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">1</td>
|
||||
<td><input type="text" name="system.details.schedule.row1.hours" value="{{system.details.schedule.row1.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row1.mon" value="{{system.details.schedule.row1.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row1.tue" value="{{system.details.schedule.row1.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row1.wed" value="{{system.details.schedule.row1.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row1.thu" value="{{system.details.schedule.row1.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row1.fri" value="{{system.details.schedule.row1.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row1.sat" value="{{system.details.schedule.row1.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 2 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">2</td>
|
||||
<td><input type="text" name="system.details.schedule.row2.hours" value="{{system.details.schedule.row2.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row2.mon" value="{{system.details.schedule.row2.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row2.tue" value="{{system.details.schedule.row2.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row2.wed" value="{{system.details.schedule.row2.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row2.thu" value="{{system.details.schedule.row2.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row2.fri" value="{{system.details.schedule.row2.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row2.sat" value="{{system.details.schedule.row2.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 3 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">3</td>
|
||||
<td><input type="text" name="system.details.schedule.row3.hours" value="{{system.details.schedule.row3.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row3.mon" value="{{system.details.schedule.row3.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row3.tue" value="{{system.details.schedule.row3.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row3.wed" value="{{system.details.schedule.row3.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row3.thu" value="{{system.details.schedule.row3.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row3.fri" value="{{system.details.schedule.row3.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row3.sat" value="{{system.details.schedule.row3.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Break -->
|
||||
<tr style="background: rgba(0, 0, 0, 0.08); font-weight: bold;">
|
||||
<td colspan="8" style="padding: 5px; text-align: center; letter-spacing: 0.1em; text-transform: uppercase; font-size: 0.75rem;">{{localize 'HBM.schedule.lunchBreak'}}</td>
|
||||
</tr>
|
||||
<!-- Row 4 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">4</td>
|
||||
<td><input type="text" name="system.details.schedule.row4.hours" value="{{system.details.schedule.row4.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row4.mon" value="{{system.details.schedule.row4.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row4.tue" value="{{system.details.schedule.row4.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row4.wed" value="{{system.details.schedule.row4.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row4.thu" value="{{system.details.schedule.row4.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row4.fri" value="{{system.details.schedule.row4.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row4.sat" value="{{system.details.schedule.row4.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 5 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">5</td>
|
||||
<td><input type="text" name="system.details.schedule.row5.hours" value="{{system.details.schedule.row5.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row5.mon" value="{{system.details.schedule.row5.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row5.tue" value="{{system.details.schedule.row5.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row5.wed" value="{{system.details.schedule.row5.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row5.thu" value="{{system.details.schedule.row5.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row5.fri" value="{{system.details.schedule.row5.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row5.sat" value="{{system.details.schedule.row5.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 6 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">6</td>
|
||||
<td><input type="text" name="system.details.schedule.row6.hours" value="{{system.details.schedule.row6.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row6.mon" value="{{system.details.schedule.row6.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row6.tue" value="{{system.details.schedule.row6.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row6.wed" value="{{system.details.schedule.row6.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row6.thu" value="{{system.details.schedule.row6.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row6.fri" value="{{system.details.schedule.row6.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row6.sat" value="{{system.details.schedule.row6.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 7 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">7</td>
|
||||
<td><input type="text" name="system.details.schedule.row7.hours" value="{{system.details.schedule.row7.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row7.mon" value="{{system.details.schedule.row7.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row7.tue" value="{{system.details.schedule.row7.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row7.wed" value="{{system.details.schedule.row7.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row7.thu" value="{{system.details.schedule.row7.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row7.fri" value="{{system.details.schedule.row7.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row7.sat" value="{{system.details.schedule.row7.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Break -->
|
||||
<tr style="background: rgba(0, 0, 0, 0.08); font-weight: bold;">
|
||||
<td colspan="8" style="padding: 5px; text-align: center; letter-spacing: 0.1em; text-transform: uppercase; font-size: 0.75rem;">{{localize 'HBM.schedule.dinnerBreak'}}</td>
|
||||
</tr>
|
||||
<!-- Row 8 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">8</td>
|
||||
<td><input type="text" name="system.details.schedule.row8.hours" value="{{system.details.schedule.row8.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row8.mon" value="{{system.details.schedule.row8.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row8.tue" value="{{system.details.schedule.row8.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row8.wed" value="{{system.details.schedule.row8.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row8.thu" value="{{system.details.schedule.row8.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row8.fri" value="{{system.details.schedule.row8.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row8.sat" value="{{system.details.schedule.row8.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 9 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">9</td>
|
||||
<td><input type="text" name="system.details.schedule.row9.hours" value="{{system.details.schedule.row9.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row9.mon" value="{{system.details.schedule.row9.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row9.tue" value="{{system.details.schedule.row9.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row9.wed" value="{{system.details.schedule.row9.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row9.thu" value="{{system.details.schedule.row9.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row9.fri" value="{{system.details.schedule.row9.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row9.sat" value="{{system.details.schedule.row9.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Break -->
|
||||
<tr style="background: rgba(0, 0, 0, 0.08); font-weight: bold;">
|
||||
<td colspan="8" style="padding: 5px; text-align: center; letter-spacing: 0.1em; text-transform: uppercase; font-size: 0.75rem;">{{localize 'HBM.schedule.supperBreak'}}</td>
|
||||
</tr>
|
||||
<!-- Row 10 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">10</td>
|
||||
<td><input type="text" name="system.details.schedule.row10.hours" value="{{system.details.schedule.row10.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row10.mon" value="{{system.details.schedule.row10.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row10.tue" value="{{system.details.schedule.row10.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row10.wed" value="{{system.details.schedule.row10.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row10.thu" value="{{system.details.schedule.row10.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row10.fri" value="{{system.details.schedule.row10.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row10.sat" value="{{system.details.schedule.row10.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 11 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">11</td>
|
||||
<td><input type="text" name="system.details.schedule.row11.hours" value="{{system.details.schedule.row11.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row11.mon" value="{{system.details.schedule.row11.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row11.tue" value="{{system.details.schedule.row11.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row11.wed" value="{{system.details.schedule.row11.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row11.thu" value="{{system.details.schedule.row11.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row11.fri" value="{{system.details.schedule.row11.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row11.sat" value="{{system.details.schedule.row11.sat}}" /></td>
|
||||
</tr>
|
||||
<!-- Row 12 -->
|
||||
<tr>
|
||||
<td style="font-weight: bold;">12</td>
|
||||
<td><input type="text" name="system.details.schedule.row12.hours" value="{{system.details.schedule.row12.hours}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row12.mon" value="{{system.details.schedule.row12.mon}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row12.tue" value="{{system.details.schedule.row12.tue}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row12.wed" value="{{system.details.schedule.row12.wed}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row12.thu" value="{{system.details.schedule.row12.thu}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row12.fri" value="{{system.details.schedule.row12.fri}}" /></td>
|
||||
<td><input type="text" name="system.details.schedule.row12.sat" value="{{system.details.schedule.row12.sat}}" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<label><strong>{{localize 'HBM.details.personalDetails'}}</strong></label>
|
||||
<textarea name="system.details.personalDetails" rows="4" style="width: 100%; resize: vertical; border: 1px solid var(--hbm-border); border-radius: var(--hbm-radius); padding: 5px; background: var(--hbm-card-bg); color: var(--hbm-fg);">{{system.details.personalDetails}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bio-section">
|
||||
<label><strong>{{localize 'HBM.ui.biography'}}</strong></label>
|
||||
<textarea name="system.details.biography" rows="8" style="width: 100%; resize: vertical; border: 1px solid var(--hbm-border); border-radius: var(--hbm-radius); padding: 5px; background: var(--hbm-card-bg); color: var(--hbm-fg);">{{system.details.biography}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div><!-- .sheet-body -->
|
||||
</div>
|
||||
@@ -0,0 +1,197 @@
|
||||
<div class="sheet-wrapper">
|
||||
<header class="sheet-header" style="display: flex; gap: 15px; align-items: flex-start; padding-bottom: 10px;">
|
||||
<div class="bio-image-container" style="display: flex; flex-direction: column; align-items: center; gap: 5px;">
|
||||
<img class="profile-img" src="{{document.img}}" data-action="editImage" title="{{document.name}}" height="80" width="80" style="border: 2px solid #555; border-radius: 4px; cursor: pointer; background: #222;" />
|
||||
</div>
|
||||
<div style="flex: 1; display: flex; flex-direction: column; gap: 5px;">
|
||||
<input type="text" name="name" value="{{document.name}}" placeholder="{{localize 'HBM.ui.name'}}" style="font-size: 1.4rem; font-weight: bold; background: transparent; border: none; border-bottom: 1px solid rgba(255,255,255,0.25); color: #f0e6d0; width: 100%;" />
|
||||
<div class="meta" style="margin-top: 0px; margin-bottom: 0px; display: flex; flex-wrap: wrap; gap: 10px; align-items: center;">
|
||||
<label>{{localize 'HBM.npc.type'}}: <input type="text" name="system.details.type" value="{{system.details.type}}" style="width: 7rem;"/></label>
|
||||
<label>{{localize 'HBM.npc.size'}}: <input type="text" name="system.details.size" value="{{system.details.size}}" style="width: 5rem;"/></label>
|
||||
<label>{{localize 'HBM.npc.xp'}}: <input type="number" name="system.details.xp" value="{{system.details.xp}}" min="0" style="width: 4rem;"/></label>
|
||||
<label>{{localize 'HBM.details.startingYear'}}: <input type="number" name="system.details.startingYear" value="{{system.details.startingYear}}" min="1900" style="width: 4rem;"/></label>
|
||||
<label>{{localize 'HBM.details.currentYear'}}: <input type="number" name="system.details.currentYear" value="{{system.details.currentYear}}" min="1900" style="width: 4rem;"/></label>
|
||||
<button type="button" class="header-btn" data-action="rollInitiative" title="{{localize 'HBM.resources.initiative'}}" style="margin-left: auto;">⚡ {{localize 'HBM.resources.initiative'}}</button>
|
||||
<button type="button" class="header-btn" data-action="applyDamage" title="{{localize 'HBM.damage.title'}}" style="margin-left: 10px;">⚔ {{localize
|
||||
'HBM.damage.apply'}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="sheet-body">
|
||||
<section class="attributes-grid">
|
||||
{{#each attributes as |attr|}}
|
||||
<div class="attribute">
|
||||
<label>{{attr.label}}</label>
|
||||
{{#if (eq attr.key 'magic')}}
|
||||
<select name="system.attributes.magic.value" style="width: 4rem; text-align: center; border: none; border-bottom: 1px solid var(--hbm-border); background: transparent; color: var(--hbm-fg);">
|
||||
<option value="0" {{#if (eq attr.value 0)}}selected{{/if}}>0</option>
|
||||
<option value="1" {{#if (eq attr.value 1)}}selected{{/if}}>I</option>
|
||||
<option value="2" {{#if (eq attr.value 2)}}selected{{/if}}>II</option>
|
||||
<option value="3" {{#if (eq attr.value 3)}}selected{{/if}}>III</option>
|
||||
<option value="4" {{#if (eq attr.value 4)}}selected{{/if}}>IV</option>
|
||||
<option value="5" {{#if (eq attr.value 5)}}selected{{/if}}>V</option>
|
||||
<option value="6" {{#if (eq attr.value 6)}}selected{{/if}}>VI</option>
|
||||
<option value="7" {{#if (eq attr.value 7)}}selected{{/if}}>VII</option>
|
||||
<option value="8" {{#if (eq attr.value 8)}}selected{{/if}}>VIII</option>
|
||||
<option value="9" {{#if (eq attr.value 9)}}selected{{/if}}>IX</option>
|
||||
<option value="10" {{#if (eq attr.value 10)}}selected{{/if}}>X</option>
|
||||
</select>
|
||||
<span class="actual-magic-badge" title="{{localize 'HBM.attributes.actualMagicHint'}}" style="font-size: 0.75rem; margin-top: 0.15rem; color: #a03030; font-weight: bold;">
|
||||
({{localize 'HBM.attributes.actual'}}: {{attr.actualLabel}})
|
||||
</span>
|
||||
{{else}}
|
||||
<input type="number" name="system.attributes.{{attr.key}}.value" value="{{attr.value}}" min="0" max="20"/>
|
||||
{{/if}}
|
||||
<button type="button" class="roll-button" data-action="rollAttribute" data-attribute="{{attr.key}}"
|
||||
title="{{localize 'HBM.roll.roll'}}">⚂</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</section>
|
||||
|
||||
<section class="resources-grid">
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.health'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.health.value" value="{{system.attributes.health.value}}" min="0"/>
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.health.max" value="{{system.attributes.health.max}}" min="1"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.physicalArmor'}}</label>
|
||||
<input type="number" name="system.attributes.physicalArmor.value" value="{{system.attributes.physicalArmor.value}}"
|
||||
min="0" />
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.magicalShield'}}</label>
|
||||
<input type="number" name="system.attributes.magicalShield.value" value="{{system.attributes.magicalShield.value}}"
|
||||
min="0" />
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.magicalArmor'}}</label>
|
||||
<span class="resource-value">
|
||||
<input type="number" name="system.attributes.magicalArmor.value" value="{{system.attributes.magicalArmor.value}}"
|
||||
min="0" />
|
||||
<span class="sep">/</span>
|
||||
<input type="number" name="system.attributes.magicalArmor.max" value="{{system.attributes.magicalArmor.max}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.npc.speed'}}</label>
|
||||
<input type="text" name="system.attributes.speed" value="{{system.attributes.speed}}"/>
|
||||
</div>
|
||||
<div class="resource" style="display: flex; flex-direction: row; gap: 8px; align-items: center; justify-content: center;">
|
||||
<label style="font-size: 0.75rem; text-transform: uppercase;">{{localize 'HBM.ui.money'}}</label>
|
||||
<input type="number" name="system.details.money" value="{{system.details.money}}" min="0" style="width: 3.5rem; text-align: center; border: none; border-bottom: 1px solid var(--hbm-border); background: transparent; color: var(--hbm-fg);"/>
|
||||
<span>PLN</span>
|
||||
<button type="button" data-action="recalculateMoney" style="padding: 1px 5px; font-size: 0.75rem; background: var(--hbm-accent); color: #fff; border: none; border-radius: var(--hbm-radius); cursor: pointer;" title="{{localize 'HBM.ui.recalculate'}}">🪙</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="npc-meta-section">
|
||||
<label>{{localize 'HBM.npc.senses'}}: <input type="text" name="system.details.senses" value="{{system.details.senses}}"/></label>
|
||||
<label>{{localize 'HBM.npc.languages'}}: <input type="text" name="system.details.languages" value="{{system.details.languages}}"/></label>
|
||||
</section>
|
||||
|
||||
<section class="combat-lists">
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.npc.attacks'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.combat.attacks"
|
||||
data-template='{"name":"","description":"","damage":"","damageType":"physical","bonus":0}'
|
||||
title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.combat.attacks as |a idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.combat.attacks.{{idx}}.name" value="{{a.name}}"
|
||||
placeholder="{{localize 'HBM.ui.name'}}" />
|
||||
<input type="number" name="system.combat.attacks.{{idx}}.bonus" value="{{a.bonus}}" min="0"
|
||||
title="{{localize 'HBM.roll.pool'}}" />
|
||||
<input type="text" name="system.combat.attacks.{{idx}}.damage" value="{{a.damage}}"
|
||||
placeholder="{{localize 'HBM.gear.damage'}}" />
|
||||
<input type="text" name="system.combat.attacks.{{idx}}.description" value="{{a.description}}"
|
||||
placeholder="{{localize 'HBM.gear.description'}}" />
|
||||
<button type="button" data-action="rollNpcAttack" data-index="{{idx}}"
|
||||
title="{{localize 'HBM.roll.roll'}}">⚂</button>
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.combat.attacks" data-index="{{idx}}"
|
||||
title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.npc.specialAbilities'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.combat.specialAbilities"
|
||||
data-template='{"name":"","description":""}' title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.combat.specialAbilities as |a idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.combat.specialAbilities.{{idx}}.name" value="{{a.name}}" />
|
||||
<input type="text" name="system.combat.specialAbilities.{{idx}}.description" value="{{a.description}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.combat.specialAbilities"
|
||||
data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.npc.reactions'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.combat.reactions"
|
||||
data-template='{"name":"","description":""}' title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.combat.reactions as |a idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.combat.reactions.{{idx}}.name" value="{{a.name}}" />
|
||||
<input type="text" name="system.combat.reactions.{{idx}}.description" value="{{a.description}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.combat.reactions"
|
||||
data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.npc.legendaryActions'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.combat.legendaryActions"
|
||||
data-template='{"name":"","description":""}' title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.combat.legendaryActions as |a idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.combat.legendaryActions.{{idx}}.name" value="{{a.name}}" />
|
||||
<input type="text" name="system.combat.legendaryActions.{{idx}}.description" value="{{a.description}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.combat.legendaryActions"
|
||||
data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
</section>
|
||||
|
||||
<section class="lore">
|
||||
<label>{{localize 'HBM.gear.description'}}</label>
|
||||
<textarea name="system.lore.description" rows="6">{{system.lore.description}}</textarea>
|
||||
</section>
|
||||
{{#if spells.length}}
|
||||
<section class="spells-list">
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.ui.tabs.spells'}}</legend>
|
||||
{{#each spells as |sp|}}
|
||||
<div class="row spell-row">
|
||||
<span class="badge mode mode-{{sp.system.castingMode}}"
|
||||
title="{{localize (concat 'HBM.spell.castingMode.' sp.system.castingMode)}}">{{sp.system.castingMode}}</span>
|
||||
<span class="spell-name"><strong>{{sp.name}}</strong>{{#if sp.system.circle}}
|
||||
<small>K{{sp.system.circle}}</small>{{/if}}</span>
|
||||
<button type="button" data-action="castSpell" data-item-id="{{sp.id}}"
|
||||
title="{{localize 'HBM.spell.cast'}}">✦ {{localize 'HBM.spell.cast'}}</button>
|
||||
<button type="button" data-action="editItem" data-item-id="{{sp.id}}"
|
||||
title="{{localize 'HBM.ui.edit'}}">✎</button>
|
||||
<button type="button" data-action="deleteItem" data-item-id="{{sp.id}}"
|
||||
title="{{localize 'HBM.ui.delete'}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
</section>
|
||||
{{/if}}
|
||||
<section class="actor-effects-section">
|
||||
{{> 'systems/hbm-rpg-v3/templates/actor/_actor-effects.hbs'}}
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,88 @@
|
||||
<div class="hbm spell-cast-card" data-spell-name="{{spell.name}}">
|
||||
<header class="hbm-card-header">
|
||||
<h3>{{spell.name}}</h3>
|
||||
<div class="hbm-card-meta">
|
||||
{{#if mode}}<span class="badge mode mode-{{mode}}">{{localize (concat 'HBM.spell.castingMode.' mode)}}</span>{{/if}}
|
||||
{{#if school}}<span class="badge school">{{localize (concat 'HBM.spellSchool.' school)}}</span>{{/if}}
|
||||
{{#if circle}}<span class="badge circle">{{localize 'HBM.spell.circle'}} {{circle}}</span>{{/if}}
|
||||
{{#if outcome.success}}
|
||||
<span class="badge result success">✓ {{localize 'HBM.spellCast.success'}}</span>
|
||||
{{else}}
|
||||
<span class="badge result failure">✗ {{localize 'HBM.spellCast.failure'}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{#if costs.length}}
|
||||
<ul class="hbm-card-costs">
|
||||
{{#each costs as |c|}}
|
||||
<li>{{c.label}}: <strong>{{c.amount}}</strong></li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
{{#if outcome.success}}
|
||||
{{#if damage}}
|
||||
<section class="hbm-card-damage">
|
||||
<h4>{{localize 'HBM.spellCast.damage'}}</h4>
|
||||
<div class="damage-line">
|
||||
<strong>{{damage.total}}</strong>
|
||||
{{#if damage.type}}<span class="badge damage-type">{{localize (concat 'HBM.damageType.' damage.type)}}</span>{{/if}}
|
||||
{{#if damage.ignoresArmor}}<span class="badge ignores-armor">{{localize 'HBM.spell.ignoresArmor'}}</span>{{/if}}
|
||||
</div>
|
||||
<div class="damage-formula"><code>{{damage.formula}}</code></div>
|
||||
{{#if damage.targets}}
|
||||
<div class="hbm-card-targets">
|
||||
{{#each damage.targets as |t|}}
|
||||
<button type="button" class="hbm-action" data-action="hbm-apply-damage" data-target-uuid="{{t.uuid}}" data-amount="{{../damage.total}}" data-type="{{../damage.type}}" data-ignores-armor="{{../damage.ignoresArmor}}">
|
||||
⚔ {{t.name}}
|
||||
</button>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{else}}
|
||||
<p class="hbm-card-hint">{{localize 'HBM.spellCast.targetSomeone'}}</p>
|
||||
{{/if}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
{{#if save}}
|
||||
<section class="hbm-card-save">
|
||||
<strong>{{localize 'HBM.spellCast.saveTarget'}}:</strong>
|
||||
{{localize (concat 'HBM.attributes.' save.attribute)}}
|
||||
{{#if save.skill}}+ {{localize (concat 'HBM.skills.' save.skill)}}{{/if}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
{{#if statusEffects.length}}
|
||||
<section class="hbm-card-status">
|
||||
<h4>{{localize 'HBM.spellCast.statusEffects'}}</h4>
|
||||
<div class="status-buttons">
|
||||
{{#each statusEffects as |s|}}
|
||||
<button type="button" class="hbm-action" data-action="hbm-apply-status" data-effect-id="{{s.id}}">
|
||||
{{s.label}}
|
||||
</button>
|
||||
{{/each}}
|
||||
</div>
|
||||
<p class="hbm-card-hint">{{localize 'HBM.spellCast.applyToTargets'}}</p>
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
{{#if triggers.length}}
|
||||
<section class="hbm-card-triggers">
|
||||
<h4>{{localize 'HBM.spellCast.triggers'}}</h4>
|
||||
<ul>
|
||||
{{#each triggers as |t|}}
|
||||
<li><span class="badge trigger-event">{{localize (concat 'HBM.triggerEvent.' t.event)}}</span> — {{t.effect}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</section>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if description}}
|
||||
<details class="hbm-card-description">
|
||||
<summary>{{localize 'HBM.spell.description'}}</summary>
|
||||
<div>{{{description}}}</div>
|
||||
</details>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,21 @@
|
||||
<div class="hbm ts-roll">
|
||||
<div class="formula">{{formula}}</div>
|
||||
{{#if flavor}}<div class="flavor">{{flavor}}</div>{{/if}}
|
||||
<div class="dice">
|
||||
{{#each dice}}
|
||||
<span class="{{cls}}" title="{{face}}">{{face}}</span>
|
||||
{{/each}}
|
||||
</div>
|
||||
<div class="summary {{#if ts.isSuccess}}success{{else}}failure{{/if}}">
|
||||
{{localize "HBM.roll.successes"}}: <strong>{{ts.successes}}</strong>
|
||||
/ {{localize "HBM.roll.required"}}: {{ts.required}}
|
||||
({{localize "HBM.roll.threshold"}} {{ts.threshold}})
|
||||
— {{#if ts.isSuccess}}{{localize "HBM.roll.success"}}{{else}}{{localize "HBM.roll.failure"}}{{/if}}
|
||||
</div>
|
||||
{{#if ts.criticalSuccesses}}
|
||||
<div class="crit">{{localize "HBM.roll.criticalSuccess"}}: {{ts.criticalSuccesses}}</div>
|
||||
{{/if}}
|
||||
{{#if ts.criticalFailures}}
|
||||
<div class="crit">{{localize "HBM.roll.criticalFailure"}}: {{ts.criticalFailures}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,2 @@
|
||||
{{!-- Body dispatcher: includes the partial chosen by the sheet's _prepareContext. --}}
|
||||
{{> (lookup this 'bodyPartial') }}
|
||||
@@ -0,0 +1,26 @@
|
||||
{{!-- Active Effects partial — included by talent and gear sheets. --}}
|
||||
{{#if supportsEffects}}
|
||||
<fieldset class="hbm-effects">
|
||||
<legend>{{localize 'HBM.activeEffect.title'}}</legend>
|
||||
<button type="button" class="hbm-effect-add" data-action="effectCreate">+ {{localize 'HBM.activeEffect.addEffect'}}</button>
|
||||
{{#if effects.length}}
|
||||
<ul class="effect-list">
|
||||
{{#each effects as |e|}}
|
||||
<li class="effect-row {{#if e.disabled}}disabled{{/if}}">
|
||||
<img src="{{e.icon}}" width="20" height="20"/>
|
||||
<span class="effect-name">{{e.name}}</span>
|
||||
<span class="effect-meta">
|
||||
{{#if e.transfer}}<span class="badge">→ {{localize 'HBM.activeEffect.transferToActor'}}</span>{{/if}}
|
||||
<span class="badge">{{e.changes.length}} {{localize 'HBM.activeEffect.changes'}}</span>
|
||||
</span>
|
||||
<button type="button" data-action="effectToggle" data-effect-id="{{e.id}}" title="{{localize 'HBM.activeEffect.toggle'}}">{{#if e.disabled}}○{{else}}●{{/if}}</button>
|
||||
<button type="button" data-action="effectEdit" data-effect-id="{{e.id}}" title="{{localize 'HBM.activeEffect.edit'}}">✎</button>
|
||||
<button type="button" data-action="effectDelete" data-effect-id="{{e.id}}" title="{{localize 'HBM.activeEffect.deleteEffect'}}">✕</button>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<p class="hbm-hint">{{localize 'HBM.activeEffect.empty'}}</p>
|
||||
{{/if}}
|
||||
</fieldset>
|
||||
{{/if}}
|
||||
@@ -0,0 +1,4 @@
|
||||
<div class="hbm item-body unknown">
|
||||
<p><strong>{{document.name}}</strong></p>
|
||||
<p class="hint">{{localize 'HBM.ui.unknownItemType'}}: <code>{{itemType}}</code></p>
|
||||
</div>
|
||||
@@ -0,0 +1,18 @@
|
||||
<div class="hbm item-body ability">
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.ability.type'}}:
|
||||
<select name="system.type">
|
||||
<option value="passive" {{#if (eq system.type 'passive')}}selected{{/if}}>{{localize 'HBM.ability.passive'}}</option>
|
||||
<option value="active" {{#if (eq system.type 'active')}}selected{{/if}}>{{localize 'HBM.ability.active'}}</option>
|
||||
<option value="reaction" {{#if (eq system.type 'reaction')}}selected{{/if}}>{{localize 'HBM.ability.reaction'}}</option>
|
||||
<option value="freeAction" {{#if (eq system.type 'freeAction')}}selected{{/if}}>{{localize 'HBM.ability.freeAction'}}</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>{{localize 'HBM.ability.cost'}}: <input type="text" name="system.cost" value="{{system.cost}}"/></label>
|
||||
<label>{{localize 'HBM.spell.manaCost'}}: <input type="number" name="system.manaCost" value="{{system.manaCost}}" min="0"/></label>
|
||||
<label>{{localize 'HBM.resources.zeal'}}: <input type="number" name="system.zealCost" value="{{system.zealCost}}" min="0"/></label>
|
||||
</div>
|
||||
<label>{{localize 'HBM.ability.prerequisite'}}<input type="text" name="system.prerequisite" value="{{system.prerequisite}}"/></label>
|
||||
<label>{{localize 'HBM.ability.description'}}<textarea name="system.description" rows="6">{{system.description}}</textarea></label>
|
||||
<label>{{localize 'HBM.ability.mechanics'}}<textarea name="system.mechanics" rows="4">{{system.mechanics}}</textarea></label>
|
||||
</div>
|
||||
@@ -0,0 +1,51 @@
|
||||
<div class="hbm item-body class">
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.class.year'}}: <input type="number" name="system.year" value="{{system.year}}" min="1" max="4"/></label>
|
||||
<label>{{localize 'HBM.class.attributePoints'}}: <input type="number" name="system.attributePoints" value="{{system.attributePoints}}" min="0"/></label>
|
||||
<label>{{localize 'HBM.class.skillPoints'}}: <input type="number" name="system.skillPoints" value="{{system.skillPoints}}" min="0"/></label>
|
||||
</div>
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.class.talents'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.talents" data-template='""'
|
||||
title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.talents as |t idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.talents.{{idx}}" value="{{t}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.talents" data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.class.spells'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.spells" data-template='""'
|
||||
title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.spells as |s idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.spells.{{idx}}" value="{{s}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.spells" data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.class.features'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.features"
|
||||
data-template='{"name":"","description":""}' title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.features as |f idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.features.{{idx}}.name" value="{{f.name}}"
|
||||
placeholder="{{localize 'HBM.ui.name'}}" />
|
||||
<input type="text" name="system.features.{{idx}}.description" value="{{f.description}}"
|
||||
placeholder="{{localize 'HBM.gear.description'}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.features" data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<label>{{localize 'HBM.class.description'}}<textarea name="system.description"
|
||||
rows="6">{{system.description}}</textarea></label>
|
||||
</div>
|
||||
@@ -0,0 +1,29 @@
|
||||
<div class="hbm item-body discipline">
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.discipline.color'}}: <input type="text" name="system.color" value="{{system.color}}"/></label>
|
||||
<label>{{localize 'HBM.discipline.suggestedAttribute'}}:
|
||||
<select name="system.suggestedAttribute">
|
||||
<option value="body" {{#if (eq system.suggestedAttribute 'body')}}selected{{/if}}>{{localize 'HBM.attributes.body'}}</option>
|
||||
<option value="mind" {{#if (eq system.suggestedAttribute 'mind')}}selected{{/if}}>{{localize 'HBM.attributes.mind'}}</option>
|
||||
<option value="soul" {{#if (eq system.suggestedAttribute 'soul')}}selected{{/if}}>{{localize 'HBM.attributes.soul'}}</option>
|
||||
<option value="magic" {{#if (eq system.suggestedAttribute 'magic')}}selected{{/if}}>{{localize 'HBM.attributes.magic'}}</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<label>{{localize 'HBM.discipline.passiveAbility'}}<textarea name="system.passiveAbility" rows="3">{{system.passiveAbility}}</textarea></label>
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.discipline.signatureSpells'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.signatureSpells" data-template='""'
|
||||
title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.signatureSpells as |s idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.signatureSpells.{{idx}}" value="{{s}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.signatureSpells"
|
||||
data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<label>{{localize 'HBM.discipline.description'}}<textarea name="system.description" rows="6">{{system.description}}</textarea></label>
|
||||
</div>
|
||||
@@ -0,0 +1,60 @@
|
||||
<div class="hbm item-body gear">
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.gear.category'}}:
|
||||
<select name="system.category">
|
||||
<option value="weapon" {{#if (eq system.category 'weapon')}}selected{{/if}}>{{localize 'HBM.gear.weapon'}}</option>
|
||||
<option value="armor" {{#if (eq system.category 'armor')}}selected{{/if}}>{{localize 'HBM.gear.armor'}}</option>
|
||||
<option value="equipment" {{#if (eq system.category 'equipment')}}selected{{/if}}>{{localize 'HBM.gear.equipment'}}</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>{{localize 'HBM.gear.rarity'}}: <input type="text" name="system.rarity" value="{{system.rarity}}"/></label>
|
||||
<label>{{localize 'HBM.gear.quantity'}}: <input type="number" name="system.quantity" value="{{system.quantity}}" min="0"/></label>
|
||||
<label>{{localize 'HBM.gear.weight'}}: <input type="number" name="system.weight" value="{{system.weight}}" min="0"/></label>
|
||||
<label>{{localize 'HBM.gear.value'}}: <input type="number" name="system.value" value="{{system.value}}" min="0"/></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<label><input type="checkbox" name="system.equipped" {{#if system.equipped}}checked{{/if}} /> {{localize
|
||||
'HBM.gear.equipped'}}</label>
|
||||
<label title="{{localize 'HBM.gear.damageReductionBonusHint'}}">{{localize 'HBM.gear.damageReductionBonus'}}: <input
|
||||
type="number" name="system.damageReductionBonus" value="{{system.damageReductionBonus}}" min="0" /></label>
|
||||
</div>
|
||||
|
||||
{{#if (eq system.category 'weapon')}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.gear.weapon'}}</legend>
|
||||
<label>{{localize 'HBM.gear.damage'}}: <input type="text" name="system.weapon.damage" value="{{system.weapon.damage}}"/></label>
|
||||
<label>{{localize 'HBM.gear.damageType'}}:
|
||||
<select name="system.weapon.damageType">
|
||||
<option value="physical" {{#if (eq system.weapon.damageType 'physical')}}selected{{/if}}>{{localize 'HBM.gear.physical'}}</option>
|
||||
<option value="magical" {{#if (eq system.weapon.damageType 'magical')}}selected{{/if}}>{{localize 'HBM.gear.magical'}}</option>
|
||||
<option value="environmental" {{#if (eq system.weapon.damageType 'environmental')}}selected{{/if}}>{{localize 'HBM.gear.environmental'}}</option>
|
||||
</select>
|
||||
</label>
|
||||
</fieldset>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq system.category 'armor')}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.gear.armor'}}</legend>
|
||||
<label>{{localize 'HBM.gear.damageReduction'}}: <input type="number" name="system.armor.damageReduction"
|
||||
value="{{system.armor.damageReduction}}" min="0" /></label>
|
||||
<label>{{localize 'HBM.gear.condition'}}: <input type="number" name="system.armor.condition"
|
||||
value="{{system.armor.condition}}" min="0" /> / <input type="number" name="system.armor.conditionMax"
|
||||
value="{{system.armor.conditionMax}}" min="0" /></label>
|
||||
<label>{{localize 'HBM.gear.armorType'}}:
|
||||
<select name="system.armor.armorType">
|
||||
<option value="light" {{#if (eq system.armor.armorType 'light')}}selected{{/if}}>{{localize 'HBM.gear.light'}}</option>
|
||||
<option value="medium" {{#if (eq system.armor.armorType 'medium')}}selected{{/if}}>{{localize 'HBM.gear.medium'}}</option>
|
||||
<option value="heavy" {{#if (eq system.armor.armorType 'heavy')}}selected{{/if}}>{{localize 'HBM.gear.heavy'}}</option>
|
||||
<option value="shield" {{#if (eq system.armor.armorType 'shield')}}selected{{/if}}>{{localize 'HBM.gear.shield'}}</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>{{localize 'HBM.gear.strengthRequirement'}}: <input type="number" name="system.armor.strengthRequirement" value="{{system.armor.strengthRequirement}}" min="0"/></label>
|
||||
<label><input type="checkbox" name="system.armor.stealthDisadvantage" {{#if system.armor.stealthDisadvantage}}checked{{/if}}/> {{localize 'HBM.gear.stealthDisadvantage'}}</label>
|
||||
</fieldset>
|
||||
{{/if}}
|
||||
|
||||
<label>{{localize 'HBM.gear.description'}}<textarea name="system.description" rows="6">{{system.description}}</textarea></label>
|
||||
{{> 'systems/hbm-rpg-v3/templates/item/_effects.hbs'}}
|
||||
</div>
|
||||
@@ -0,0 +1,4 @@
|
||||
<header class="hbm item-header">
|
||||
<input type="text" name="name" value="{{document.name}}" placeholder="{{localize 'HBM.ui.name'}}"/>
|
||||
<span class="item-type">{{localize (concat 'HBM.item.' itemType)}}</span>
|
||||
</header>
|
||||
@@ -0,0 +1,25 @@
|
||||
<div class="hbm item-body race">
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.race.attributePoints'}}: <input type="number" name="system.attributePoints" value="{{system.attributePoints}}" min="0"/></label>
|
||||
<label>{{localize 'HBM.race.skillPoints'}}: <input type="number" name="system.skillPoints" value="{{system.skillPoints}}" min="0"/></label>
|
||||
</div>
|
||||
<label>{{localize 'HBM.race.physicalDescription'}}<input type="text" name="system.physicalDescription" value="{{system.physicalDescription}}"/></label>
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.race.traits'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.traits"
|
||||
data-template='{"name":"","description":""}' title="{{localize 'HBM.ui.add'}}">+</button>
|
||||
</legend>
|
||||
{{#each system.traits as |t idx|}}
|
||||
<div class="row">
|
||||
<input type="text" name="system.traits.{{idx}}.name" value="{{t.name}}"
|
||||
placeholder="{{localize 'HBM.ui.name'}}" />
|
||||
<input type="text" name="system.traits.{{idx}}.description" value="{{t.description}}"
|
||||
placeholder="{{localize 'HBM.gear.description'}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.traits" data-index="{{idx}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
|
||||
<label>{{localize 'HBM.race.description'}}<textarea name="system.description"
|
||||
rows="6">{{system.description}}</textarea></label>
|
||||
</div>
|
||||
@@ -0,0 +1,252 @@
|
||||
<div class="hbm item-body spell">
|
||||
|
||||
{{!-- ── Identification ──────────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.label'}}</legend>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.circle'}}:
|
||||
<input type="number" name="system.circle" value="{{system.circle}}" min="0" max="9" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.school'}}:
|
||||
<select name="system.school">
|
||||
{{#each @root.choices.schools as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.school key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.discipline'}}:
|
||||
<input type="text" name="system.discipline" value="{{system.discipline}}" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.castingMode.label'}}:
|
||||
<select name="system.castingMode">
|
||||
<option value="standard" {{#if (eq system.castingMode 'standard')}}selected{{/if}}>{{localize 'HBM.spell.castingMode.standard'}}</option>
|
||||
<option value="sacred" {{#if (eq system.castingMode 'sacred')}}selected{{/if}}>{{localize 'HBM.spell.castingMode.sacred'}}</option>
|
||||
<option value="witch" {{#if (eq system.castingMode 'witch')}}selected{{/if}}>{{localize 'HBM.spell.castingMode.witch'}}</option>
|
||||
<option value="blood" {{#if (eq system.castingMode 'blood')}}selected{{/if}}>{{localize 'HBM.spell.castingMode.blood'}}</option>
|
||||
</select>
|
||||
</label>
|
||||
{{#if (eq system.castingMode 'sacred')}}
|
||||
<label>{{localize 'HBM.spell.deity'}}:
|
||||
<select name="system.deity">
|
||||
<option value="">—</option>
|
||||
{{#each @root.choices.deities as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.deity key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
{{/if}}
|
||||
<label>{{localize 'HBM.spell.sourceBook'}}:
|
||||
<select name="system.sourceBook">
|
||||
<option value="">—</option>
|
||||
{{#each @root.choices.sourceBooks as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.sourceBook key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row flags">
|
||||
<label><input type="checkbox" name="system.isSuperspell" {{#if system.isSuperspell}}checked{{/if}}/> {{localize 'HBM.spell.isSuperspell'}}</label>
|
||||
<label><input type="checkbox" name="system.requiresGroupCast"{{#if system.requiresGroupCast}}checked{{/if}}/> {{localize 'HBM.spell.requiresGroupCast'}}</label>
|
||||
<label><input type="checkbox" name="system.nonCombatOnly" {{#if system.nonCombatOnly}}checked{{/if}}/> {{localize 'HBM.spell.nonCombatOnly'}}</label>
|
||||
{{#if system.requiresGroupCast}}
|
||||
<label>{{localize 'HBM.spell.minCasters'}}:
|
||||
<input type="number" name="system.minCasters" value="{{system.minCasters}}" min="1" max="10" />
|
||||
</label>
|
||||
{{/if}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Cost & Difficulty ───────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.cost'}}</legend>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.difficultyThreshold'}}:
|
||||
<input type="number" name="system.difficulty.threshold" value="{{system.difficulty.threshold}}" min="2" max="6" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.difficultySuccesses'}}:
|
||||
<input type="number" name="system.difficulty.successes" value="{{system.difficulty.successes}}" min="1" max="10" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.manaCost'}}:
|
||||
<input type="number" name="system.manaCost" value="{{system.manaCost}}" min="0" />
|
||||
</label>
|
||||
{{#if (eq system.castingMode 'blood')}}
|
||||
<label>{{localize 'HBM.spell.bloodCost'}}:
|
||||
<input type="number" name="system.bloodCost" value="{{system.bloodCost}}" min="0" />
|
||||
</label>
|
||||
{{/if}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Timing & Geometry ──────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.timing'}}</legend>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.castingTime'}}:
|
||||
<input type="text" name="system.castingTime" value="{{system.castingTime}}" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.castingTimeRounds'}}:
|
||||
<input type="number" name="system.castingTimeRounds" value="{{system.castingTimeRounds}}" min="0" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.castingTimeMinutes'}}:
|
||||
<input type="number" name="system.castingTimeMinutes" value="{{system.castingTimeMinutes}}" min="0" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.range'}}:
|
||||
<input type="text" name="system.range" value="{{system.range}}" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.targets'}}:
|
||||
<input type="text" name="system.targets" value="{{system.targets}}" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.duration'}}:
|
||||
<input type="text" name="system.duration" value="{{system.duration}}" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.aoeShape'}}:
|
||||
<select name="system.areaOfEffect.shape">
|
||||
{{#each @root.choices.aoeShapes as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.areaOfEffect.shape key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
<label>X: <input type="number" name="system.areaOfEffect.x" value="{{system.areaOfEffect.x}}" min="0" /></label>
|
||||
<label>Y: <input type="number" name="system.areaOfEffect.y" value="{{system.areaOfEffect.y}}" min="0" /></label>
|
||||
<label>{{localize 'HBM.spell.aoeUnit'}}:
|
||||
<input type="text" name="system.areaOfEffect.unit" value="{{system.areaOfEffect.unit}}" />
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Components ─────────────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.components'}}</legend>
|
||||
<div class="row">
|
||||
<label><input type="checkbox" name="system.components.verbal" {{#if system.components.verbal}}checked{{/if}}/> {{localize 'HBM.spell.verbal'}}</label>
|
||||
<label><input type="checkbox" name="system.components.somatic" {{#if system.components.somatic}}checked{{/if}}/> {{localize 'HBM.spell.somatic'}}</label>
|
||||
<label>{{localize 'HBM.spell.material'}}:
|
||||
<input type="text" name="system.components.material" value="{{system.components.material}}" />
|
||||
</label>
|
||||
</div>
|
||||
{{#if (or (eq system.castingMode 'witch') (eq system.castingMode 'sacred'))}}
|
||||
<div class="array-list">
|
||||
<strong>{{localize 'HBM.spell.symbols'}}</strong>
|
||||
{{#each system.components.symbols as |sym i|}}
|
||||
<div class="array-row">
|
||||
<input type="text" name="system.components.symbols.{{i}}" value="{{sym}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.components.symbols" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.components.symbols" data-template="""">+ {{localize 'HBM.ui.add'}}</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Damage & Status ────────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.damage'}}</legend>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.damageBase'}}:
|
||||
<input type="text" name="system.damageBase" value="{{system.damageBase}}" placeholder="np. 1d6+magicalAbilities" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.damageType'}}:
|
||||
<select name="system.damageType">
|
||||
{{#each @root.choices.damageTypes as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.damageType key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</label>
|
||||
<label><input type="checkbox" name="system.ignoresArmor" {{#if system.ignoresArmor}}checked{{/if}}/> {{localize 'HBM.spell.ignoresArmor'}}</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.spell.saveAttribute'}}:
|
||||
<input type="text" name="system.saveAttribute" value="{{system.saveAttribute}}" />
|
||||
</label>
|
||||
<label>{{localize 'HBM.spell.saveSkill'}}:
|
||||
<input type="text" name="system.saveSkill" value="{{system.saveSkill}}" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="array-list">
|
||||
<strong>{{localize 'HBM.spell.statusEffects'}}</strong>
|
||||
{{#each system.statusEffects as |eff i|}}
|
||||
<div class="array-row">
|
||||
<input type="text" name="system.statusEffects.{{i}}" value="{{eff}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.statusEffects" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.statusEffects" data-template="""">+ {{localize 'HBM.ui.add'}}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Requirements ───────────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.requirements'}}</legend>
|
||||
<div class="array-list">
|
||||
<strong>{{localize 'HBM.spell.requirementRace'}}</strong>
|
||||
{{#each system.requirements.race as |x i|}}
|
||||
<div class="array-row">
|
||||
<input type="text" name="system.requirements.race.{{i}}" value="{{x}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.requirements.race" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.requirements.race" data-template="""">+</button>
|
||||
</div>
|
||||
<div class="array-list">
|
||||
<strong>{{localize 'HBM.spell.requirementTalent'}}</strong>
|
||||
{{#each system.requirements.talent as |x i|}}
|
||||
<div class="array-row">
|
||||
<input type="text" name="system.requirements.talent.{{i}}" value="{{x}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.requirements.talent" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.requirements.talent" data-template="""">+</button>
|
||||
</div>
|
||||
<div class="array-list">
|
||||
<strong>{{localize 'HBM.spell.requirementDiscipline'}}</strong>
|
||||
{{#each system.requirements.discipline as |x i|}}
|
||||
<div class="array-row">
|
||||
<input type="text" name="system.requirements.discipline.{{i}}" value="{{x}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.requirements.discipline" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.requirements.discipline" data-template="""">+</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Overcast & Triggers ────────────────────────────────────── --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.overcastOptions'}}</legend>
|
||||
{{#each system.overcastOptions as |opt i|}}
|
||||
<div class="array-row overcast-row">
|
||||
<input type="text" name="system.overcastOptions.{{i}}.description" value="{{opt.description}}" placeholder="{{localize 'HBM.spell.overcastDesc'}}" />
|
||||
<input type="number" name="system.overcastOptions.{{i}}.manaPerStep" value="{{opt.manaPerStep}}" min="0" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.overcastOptions" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.overcastOptions"
|
||||
data-template='{"description":"","manaPerStep":1}'>+ {{localize 'HBM.ui.add'}}</button>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.spell.triggers'}}</legend>
|
||||
{{#each system.triggers as |t i|}}
|
||||
<div class="array-row trigger-row">
|
||||
<select name="system.triggers.{{i}}.event">
|
||||
{{#each @root.choices.triggerEvents as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../t.event key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
<input type="text" name="system.triggers.{{i}}.effect" value="{{t.effect}}" placeholder="{{localize 'HBM.spell.triggerEffect'}}" />
|
||||
<button type="button" data-action="removeArrayEntry" data-path="system.triggers" data-index="{{i}}">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.triggers"
|
||||
data-template='{"event":"killWithWeapon","effect":""}'>+ {{localize 'HBM.ui.add'}}</button>
|
||||
</fieldset>
|
||||
|
||||
{{!-- ── Description ─────────────────────────────────────────────── --}}
|
||||
<label>{{localize 'HBM.spell.description'}}<textarea name="system.description" rows="6">{{system.description}}</textarea></label>
|
||||
<label>{{localize 'HBM.spell.higherCircles'}}<textarea name="system.higherCircles" rows="3">{{system.higherCircles}}</textarea></label>
|
||||
</div>
|
||||
@@ -0,0 +1,36 @@
|
||||
<div class="hbm item-body talent">
|
||||
|
||||
{{!-- Top row: flags + cost + DR bonus --}}
|
||||
<div class="row">
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" name="system.multiSelect" {{#if system.multiSelect}}checked{{/if}}/>
|
||||
{{localize 'HBM.talent.multiSelect'}}
|
||||
</label>
|
||||
<label>{{localize 'HBM.talent.cost'}}: <input type="text" name="system.cost" value="{{system.cost}}"/></label>
|
||||
<label title="{{localize 'HBM.gear.damageReductionBonusHint'}}">
|
||||
{{localize 'HBM.gear.damageReductionBonus'}}:
|
||||
<input type="number" name="system.damageReductionBonus" value="{{system.damageReductionBonus}}" min="0" style="width:4rem;"/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
{{!-- Requirements fieldset --}}
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.talent.requirements'}}</legend>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.talent.requirementRace'}}: <input type="text" name="system.requirements.race" value="{{system.requirements.race}}"/></label>
|
||||
<label>{{localize 'HBM.talent.requirementAttribute'}}: <input type="text" name="system.requirements.attribute" value="{{system.requirements.attribute}}"/></label>
|
||||
<label>{{localize 'HBM.talent.requirementSkill'}}: <input type="text" name="system.requirements.skill" value="{{system.requirements.skill}}"/></label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label>{{localize 'HBM.talent.requirementTalent'}}: <input type="text" name="system.requirements.talent" value="{{system.requirements.talent}}"/></label>
|
||||
<label>{{localize 'HBM.talent.requirementTitle'}}: <input type="text" name="system.requirements.title" value="{{system.requirements.title}}"/></label>
|
||||
<label>{{localize 'HBM.talent.requirementDiscipline'}}: <input type="text" name="system.requirements.discipline" value="{{system.requirements.discipline}}"/></label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{!-- Description & effect textareas --}}
|
||||
<label>{{localize 'HBM.talent.description'}}<textarea name="system.description" rows="5">{{system.description}}</textarea></label>
|
||||
<label>{{localize 'HBM.talent.effect'}}<textarea name="system.effect" rows="3">{{system.effect}}</textarea></label>
|
||||
|
||||
{{> 'systems/hbm-rpg-v3/templates/item/_effects.hbs'}}
|
||||
</div>
|
||||
Reference in New Issue
Block a user