feat: implement core Foundry VTT system framework, including actor/item data models, spellcasting logic, dice mechanics, and automation scripts
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
{{!-- Actor-level Active Effects section — included by character and NPC sheets. --}}
|
||||
{{!-- 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>
|
||||
|
||||
+742
-616
File diff suppressed because it is too large
Load Diff
@@ -77,6 +77,19 @@
|
||||
<input type="number" name="system.attributes.magicalArmor.max" value="{{system.attributes.magicalArmor.max}}" min="0" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="resource">
|
||||
<label>{{localize 'HBM.resources.initiative'}}</label>
|
||||
<span class="resource-value">
|
||||
<span class="static-value"
|
||||
title="{{localize 'HBM.resources.initiative'}}">{{system.attributes.initiative.value}}</span>
|
||||
</span>
|
||||
<div style="display:flex; align-items:center; gap:0.3rem; margin-top:0.15rem;">
|
||||
<small style="white-space:nowrap;">{{localize 'HBM.ui.initiativeBonus'}}:</small>
|
||||
<input type="number" name="system.attributes.initiative.bonus"
|
||||
value="{{system.attributes.initiative.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.npc.speed'}}</label>
|
||||
<input type="text" name="system.attributes.speed" value="{{system.attributes.speed}}"/>
|
||||
@@ -93,6 +106,22 @@
|
||||
<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="npc-skills-section">
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.ui.tabs.skills'}}</legend>
|
||||
<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>
|
||||
</fieldset>
|
||||
</section>
|
||||
|
||||
<section class="combat-lists">
|
||||
<fieldset>
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
{{#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 (or (eq mode "sacred") (eq mode "prayer"))}}
|
||||
<span class="badge warning">{{localize 'HBM.spellCast.cannotBeUnraveled'}}</span>
|
||||
{{/if}}
|
||||
{{#if outcome.success}}
|
||||
<span class="badge result success">✓ {{localize 'HBM.spellCast.success'}}</span>
|
||||
{{else}}
|
||||
@@ -72,7 +75,7 @@
|
||||
<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>
|
||||
<li><span class="badge trigger-event">{{localize (concat 'HBM.triggerEvent.' t.event)}}</span> - {{t.effect}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{{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}}
|
||||
- {{#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>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{{!-- Active Effects partial — included by talent and gear sheets. --}}
|
||||
{{!-- Active Effects partial - included by talent and gear sheets. --}}
|
||||
{{#if supportsEffects}}
|
||||
<fieldset class="hbm-effects">
|
||||
<legend>{{localize 'HBM.activeEffect.title'}}</legend>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<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>
|
||||
<label>{{localize 'HBM.race.physicalDescription'}}<textarea name="system.physicalDescription" rows="3">{{system.physicalDescription}}</textarea></label>
|
||||
<fieldset>
|
||||
<legend>{{localize 'HBM.race.traits'}}
|
||||
<button type="button" data-action="addArrayEntry" data-path="system.traits"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
{{#if (eq system.castingMode 'sacred')}}
|
||||
<label>{{localize 'HBM.spell.deity'}}:
|
||||
<select name="system.deity">
|
||||
<option value="">—</option>
|
||||
<option value="">-</option>
|
||||
{{#each @root.choices.deities as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.deity key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
@@ -39,7 +39,7 @@
|
||||
{{/if}}
|
||||
<label>{{localize 'HBM.spell.sourceBook'}}:
|
||||
<select name="system.sourceBook">
|
||||
<option value="">—</option>
|
||||
<option value="">-</option>
|
||||
{{#each @root.choices.sourceBooks as |label key|}}
|
||||
<option value="{{key}}" {{#if (eq ../system.sourceBook key)}}selected{{/if}}>{{label}}</option>
|
||||
{{/each}}
|
||||
|
||||
Reference in New Issue
Block a user