Initial commit — full system source + zero-engine-state.md reference

This commit is contained in:
2026-06-01 23:19:46 +01:00
commit 2ebd5803fc
213 changed files with 18559 additions and 0 deletions
@@ -0,0 +1,56 @@
<form class="{{cssClass}}{{#if actor.isBroken}} broken{{/if}}" autocomplete="off">
<div class="sheet-header">
<div class="container-header">
<div class="avatar">
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
</div>
<div class="actor-name">
<input type="text" name="name" value="{{actor.name}}"/>
</div>
<div class="nature boxed-property container">
<h3>{{localize "FLBR.Nature"}}</h3>
<select {{#unless isGM}} disabled{{/unless}}>
<option selected>{{localize "FLBR.NATURE.Human"}} ?</option>
</select>
</div>
<div class="capacities">
{{#if system.health}}
<div class="capacity-health boxed-property">
<h3>{{localize "FLBR.HEADER.Health"}}<span class="capacity-rating">?/?</span></h3>
<div class="capacity-boxes" style="color: var(--color-disabled);">
{{#times 4}}
{{{@root.config.Icons.boxes.empty}}}
{{/times}}
</div>
</div>
{{/if}}
{{#if system.resolve}}
<div class="capacity-resolve boxed-property">
<h3>{{localize "FLBR.HEADER.Resolve"}}<span class="capacity-rating">?/?</span></h3>
<div class="capacity-boxes" style="color: var(--color-disabled);">
{{#times 4}}
{{{@root.config.Icons.boxes.empty}}}
{{/times}}
</div>
</div>
{{/if}}
</div>
<div class="archetype">
<input type="text" value="???" disabled/>
</div>
</div>
</div>
<div class="sheet-body">
{{{editor system.description target="system.description" button=true editable=editable}}}
</div>
</form>
@@ -0,0 +1,137 @@
<form class="{{cssClass}}{{#if actor.isBroken}} broken{{/if}}" autocomplete="off">
{{!-- SHEET HEADER --}}
<div class="sheet-header">
<div class="container-header">
<div class="avatar">
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
</div>
<div class="actor-name">
<input type="text" name="name" value="{{actor.name}}"/>
</div>
<div class="nature boxed-property container">
<h3>{{localize "FLBR.Nature"}}</h3>
<select name="system.nature" data-tooltip="{{localize "FLBR.NatureHint"}}"{{#unless editNature}} disabled{{/unless}}>
{{selectOptions config.natures selected=system.nature localize=true}}
</select>
</div>
<div class="capacities">
{{#if system.health}}
<div class="capacity-health boxed-property{{#if (lte system.health.value 0)}} broken{{else if (lte system.health.ratio 0.5)}} half{{/if}}">
<h3>
{{localize "FLBR.HEADER.Health"}}
{{#if (lte system.health.value 0)}}
<b>({{toUpperCase (localize "FLBR.BrokenByDamage")}})</b>
{{/if}}
<span class="capacity-rating">{{system.health.value}}/{{system.health.max}}</span>
</h3>
{{boxes "system.health.value" value=system.health.value min=0 max=system.health.max loss=system.health.permanentLoss}}
</div>
{{/if}}
{{#if (and system.resolve isPC)}}
<div class="capacity-resolve boxed-property{{#if (lte system.resolve.value 0)}} broken{{else if (lte system.resolve.ratio 0.5)}} half{{/if}}">
<h3>
{{localize "FLBR.HEADER.Resolve"}}
{{#if (lte system.resolve.value 0)}}
<b>({{toUpperCase (localize "FLBR.BrokenByStress")}})</b>
{{/if}}
<span class="capacity-rating">{{system.resolve.value}}/{{system.resolve.max}}</span>
</h3>
{{boxes "system.resolve.value" value=system.resolve.value min=0 max=system.resolve.max loss=system.resolve.permanentLoss}}
</div>
{{/if}}
</div>
<div class="sla-character-info" style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-bottom: 10px;">
<div class="race boxed-property container">
<h3>Race/Species</h3>
<select name="system.race" multiple size="7" data-tooltip="Select one or more races (Ctrl/Cmd+Click for multiple)">
<option value="human" {{#if (contains system.race "human")}}selected{{/if}}>Human</option>
<option value="ebon" {{#if (contains system.race "ebon")}}selected{{/if}}>Ebon</option>
<option value="brainwaster" {{#if (contains system.race "brainwaster")}}selected{{/if}}>Brain Waster</option>
<option value="stormer" {{#if (contains system.race "stormer")}}selected{{/if}}>Stormer (313 Malice)</option>
<option value="shaktar" {{#if (contains system.race "shaktar")}}selected{{/if}}>Shaktar</option>
<option value="wraith" {{#if (contains system.race "wraith")}}selected{{/if}}>Wraith Raider</option>
<option value="frother" {{#if (contains system.race "frother")}}selected{{/if}}>Frother</option>
</select>
</div>
<div class="training boxed-property container">
<h3>Training Package</h3>
<select name="system.training" multiple size="7" data-tooltip="Select one or more training packages (Ctrl/Cmd+Click for multiple)">
<option value="scout" {{#if (contains system.training "scout")}}selected{{/if}}>Scout</option>
<option value="investigator" {{#if (contains system.training "investigator")}}selected{{/if}}>Investigator</option>
<option value="frother-pkg" {{#if (contains system.training "frother-pkg")}}selected{{/if}}>Frother</option>
<option value="corporate" {{#if (contains system.training "corporate")}}selected{{/if}}>Corporate</option>
<option value="medic" {{#if (contains system.training "medic")}}selected{{/if}}>Medic / Field Surgeon</option>
<option value="ebon-investigator" {{#if (contains system.training "ebon-investigator")}}selected{{/if}}>Ebon - Investigator</option>
<option value="brainwaster-operative" {{#if (contains system.training "brainwaster-operative")}}selected{{/if}}>Brain Waster - Operative</option>
</select>
</div>
<div class="archetype boxed-property container">
<h3>Archetype</h3>
<input list="list-of-archetypes" type="text" name="system.archetype" value="{{system.archetype}}"/>
<datalist id="list-of-archetypes">
{{selectOptions config.archetypes localize=true}}
</datalist>
</div>
</div>
</div>
</div>
{{!-- SHEET TABS --}}
<div class="sheet-tabs" data-group="primary">
<a class="sheet-tab" data-tab="stats">{{{config.Icons.tabs.stats}}}&nbsp;{{localize "FLBR.TAB.Stats"}}</a>
<a class="sheet-tab" data-tab="mods">{{{config.Icons.tabs.mods}}}&nbsp;{{localize "FLBR.TAB.Mods"}}</a>
<a class="sheet-tab" data-tab="combat">{{{config.Icons.tabs.combat}}}&nbsp;{{localize "FLBR.TAB.Combat"}}</a>
<a class="sheet-tab" data-tab="inventory">{{{config.Icons.tabs.inventory}}}&nbsp;{{localize "FLBR.TAB.Inventory"}}</a>
<a class="sheet-tab" data-tab="bio">
{{{config.Icons.tabs.bio}}}&nbsp;
{{#if isPC}}
{{localize "FLBR.TAB.Bio"}}
{{else if isNPC}}
{{localize "FLBR.HEADER.Notes"}}
{{/if}}
</a>
</div>
{{!-- SHEET BODY --}}
<div class="sheet-body">
<div class="tab" data-group="primary" data-tab="stats">
{{> systems/zero-engine/templates/actor/character/sheet-tabs/stats-tab.hbs}}
</div>
<div class="tab" data-group="primary" data-tab="mods">
{{> systems/blade-runner/templates/actor/character/sheet-tabs/mods-tab.hbs}}
</div>
<div class="tab" data-group="primary" data-tab="combat">
{{> systems/blade-runner/templates/actor/character/sheet-tabs/combat-tab.hbs}}
</div>
<div class="tab" data-group="primary" data-tab="inventory">
{{> systems/blade-runner/templates/actor/character/sheet-tabs/inventory-tab.hbs}}
</div>
<div class="tab" data-group="primary" data-tab="bio">
{{#if isPC}}
{{> systems/zero-engine/templates/actor/character/sheet-tabs/bio-tab.hbs}}
{{else if isNPC}}
<div class="boxed-property npc-notes">
{{{editor system.description target="system.description" button=true editable=editable}}}
</div>
{{/if}}
</div>
</div>
{{!-- SHEET FOOTER --}}
{{!-- <div class="sheet-footer"></div> --}}
</form>
@@ -0,0 +1,38 @@
<div class="bio-tab container">
<div class="boxed-property bio-notes">
<h3>{{localize "FLBR.HEADER.Notes"}}</h3>
<div class="bio-editor">
{{{editor system.description target="system.description" button=true editable=editable}}}
</div>
</div>
{{#if system.bio}}
<div class="boxed-property years-on-the-force">
<h3>{{localize "FLBR.HEADER.YearsOnTheForce"}}</h3>
<input type="text" name="system.bio.yearsOnTheForce" value="{{system.bio.yearsOnTheForce}}" data-dtype="Number"/>
</div>
<div class="boxed-property">
<h3>{{localize "FLBR.HEADER.Appearance"}}</h3>
<div class="bio-editor">
{{{editor system.bio.appearance target="system.bio.appearance" button=true editable=editable}}}
</div>
</div>
<div class="boxed-property">
<h3>{{localize "FLBR.HEADER.Home"}}</h3>
<div class="bio-editor">
{{{editor system.bio.home target="system.bio.home" button=true editable=editable}}}
</div>
</div>
<div class="boxed-property">
<h3>{{localize "FLBR.HEADER.KeyMemory"}}</h3>
<div class="bio-editor">
{{{editor system.bio.keyMemory target="system.bio.keyMemory" button=true editable=editable}}}
</div>
</div>
<div class="boxed-property">
<h3>{{localize "FLBR.HEADER.KeyRelationship"}}</h3>
<div class="bio-editor">
{{{editor system.bio.keyRelationship target="system.bio.keyRelationship" button=true editable=editable}}}
</div>
</div>
{{/if}}
</div>
@@ -0,0 +1,21 @@
<div class="combat-tab container">
<div class="weapons boxed-property">
<h3>{{localize "FLBR.HEADER.Weapons"}}{{createNewItemButton "weapon"}}</h3>
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.weapon}}
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.explosive}}
</div>
<div class="armors boxed-property">
<h3>{{localize "FLBR.HEADER.Armor"}}{{createNewItemButton "armor"}}</h3>
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.armor}}
</div>
<div class="injuries boxed-property">
<h3>{{localize "FLBR.HEADER.Injuries"}}{{createNewItemButton "injury"}}</h3>
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.injury}}
</div>
<div class="actions boxed-property">
<h4>{{localize "FLBR.HEADER.Actions"}}</h4>
{{#each actions}}
<a class="action-roll" data-action="{{id}}" data-tooltip="{{localize hint}}">{{{@root.config.Icons.buttons.action}}}{{localize label}}</a>
{{/each}}
</div>
</div>
@@ -0,0 +1,47 @@
<div class="inventory-tab">
{{#if isPC}}
<div class="special-gear">
{{!-- <div class="favored-gear boxed-property">
<h3>{{localize "FLBR.HEADER.FavoredGear"}}</h3>
<input type="text" name="system.favoredGear" value="{{system.favoredGear}}"/>
</div> --}}
<div class="signature-item boxed-property">
<h3>{{localize "FLBR.HEADER.SignatureItem"}}</h3>
<div class="flex row">
<input type="text" name="system.signatureItem.name" value="{{system.signatureItem.name}}" class="flex-1"/>
<input type="checkbox" name="system.signatureItem.used" data-tooltip="{{localize "FLBR.SignatureItemUsedCheckboxHint"}}" {{checked system.signatureItem.used}}/>
</label>
</div>
</div>
</div>
{{/if}}
<div class="inventory boxed-property">
<h3>{{localize "FLBR.HEADER.Inventory"}}{{createNewItemButton "generic"}}</h3>
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.generic wrap=true}}
</div>
{{#each config.customItemTypesTemplates as | template |}}
<div class="inventory boxed-property">
<h3>{{localize (concat "TYPES.Item." @key)}}{{createNewItemButton @key}}</h3>
{{> (template) items=(lookup ../actor.itemTypes @key)}}
</div>
{{/each}}
{{#if isPC}}
<div class="meta-currencies flex row space-between">
<div class="meta-currency-promotion boxed-property">
<h4>{{localize "FLBR.HEADER.PromotionPoints"}}<span style="float: right;">{{system.metaCurrencies.promotion}}</span></h4>
{{boxes "system.metaCurrencies.promotion" value=system.metaCurrencies.promotion min=0 max=config.maxPromotionPoints}}
</div>
<div class="meta-currency-humanity boxed-property">
<h4>{{localize "FLBR.HEADER.HumanityPoints"}}<span style="float: right;">{{system.metaCurrencies.humanity}}</span></h4>
{{boxes "system.metaCurrencies.humanity" value=system.metaCurrencies.humanity min=0 max=config.maxHumanityPoints}}
</div>
<div class="meta-currency-chinyen boxed-property">
<h4>{{localize "FLBR.HEADER.ChinyenPoints"}}<span style="float: right;">{{system.metaCurrencies.chinyen}}</span></h4>
{{boxes "system.metaCurrencies.chinyen" value=system.metaCurrencies.chinyen min=0 max=config.maxChinyenPoints}}
</div>
</div>
{{/if}}
</div>
@@ -0,0 +1,21 @@
<div class="mods-tab">
<div class="specialties boxed-property">
<h3>{{localize "FLBR.HEADER.Specialties"}}{{createNewItemButton "specialty"}}</h3>
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.specialty}}
</div>
<div class="augments boxed-property">
<h3>{{localize "FLBR.HEADER.Augments"}}{{createNewItemButton "upgrade"}}</h3>
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.upgrade}}
</div>
{{#if showEffects}}
<div class="active-effects boxed-property">
<h4>
{{localize "DOCUMENT.ActiveEffects"}}
<a class="btn add-active-effect" data-tooltip="{{localize "FLBR.ACTIVE_EFFECT.Add"}}">
{{{@root.config.Icons.buttons.plus}}}
</a>
</h4>
{{> systems/blade-runner/templates/item/active-effects-partial.hbs}}
</div>
{{/if}}
</div>
@@ -0,0 +1,75 @@
<div class="ze-stats">
{{#each system.attributes as | attribute attrKey |}}
{{#unless (eq attrKey "mvr")}}
<div class="ze-attribute-block">
<div class="ze-attribute-header">
<button class="ze-attr-roll-btn stat-roll" data-attribute="{{attrKey}}" type="button">
<span class="ze-attr-name">{{localize (concat "FLBR.ATTRIBUTE." (toUpperCase attrKey))}}</span>
<i class="fas fa-dice-d6"></i>
</button>
<div class="ze-attr-score">
{{scoreSelector (concat "system.attributes." attrKey ".value") selected=attribute.value}}
</div>
<div class="ze-attr-die boxed-value stat-roll rollable" data-attribute="{{attrKey}}">
{{#if (lte attribute.value 0)}}—{{else}}{{localize "FLBR.D"}}{{attribute.value}}{{/if}}
</div>
</div>
<div class="ze-skills-list">
{{#each @root.system.skills as | skill skillKey |}}
{{#if (eq attrKey (lookup @root.config.skillMap skillKey))}}
<div class="ze-skill-row">
<a class="ze-skill-name stat-roll" data-skill="{{skillKey}}" data-attribute="{{attrKey}}">
{{localize (concat "FLBR.SKILL." (capitalize skillKey))}}
</a>
<div class="ze-skill-score">
{{scoreSelector (concat "system.skills." skillKey ".value") selected=skill.value}}
</div>
<div class="ze-skill-die boxed-value stat-roll rollable" data-skill="{{skillKey}}" data-attribute="{{attrKey}}">
{{#if (lte skill.value 0)}}—{{else}}{{localize "FLBR.D"}}{{skill.value}}{{/if}}
</div>
</div>
{{/if}}
{{/each}}
</div>
</div>
{{/unless}}
{{/each}}
</div>
{{!-- Specialties Section --}}
<div class="specialties-section">
<h2 class="section-header">
<i class="fas fa-star"></i> Specialties
<span class="specialty-count">({{actor.items.size}})</span>
</h2>
<div class="specialties-container">
<div class="specialty-drop-zone" data-tooltip="Drag and drop specialty items here">
{{#if (gt actor.items.size 0)}}
<ul class="specialty-list">
{{#each actor.items as |item|}}
{{#if (eq item.type "specialty")}}
<li class="specialty-item" data-item-id="{{item._id}}">
<div class="specialty-header">
<img class="specialty-icon" src="{{item.img}}" alt="{{item.name}}"/>
<h4 class="specialty-name">{{item.name}}</h4>
<div class="specialty-controls">
<a class="item-edit" data-tooltip="Edit Specialty"><i class="fas fa-edit"></i></a>
<a class="item-delete" data-tooltip="Delete Specialty"><i class="fas fa-trash"></i></a>
</div>
</div>
<div class="specialty-description">
{{item.system.description}}
</div>
</li>
{{/if}}
{{/each}}
</ul>
{{else}}
<div class="empty-specialties">
<i class="fas fa-star-half-alt"></i>
<p>No specialties yet. Drag and drop specialty items here.</p>
</div>
{{/if}}
</div>
</div>
</div>