DataModels + Appv2 migration : OK

This commit is contained in:
2026-03-01 01:12:00 +01:00
parent 1ffb8b08fc
commit 6c70dc147c
130 changed files with 2998 additions and 741 deletions

View File

@@ -5,7 +5,7 @@
{{!-- Sidebar --}}
<div class="sidebar flex0 bol-actor-sidebar">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" height="100" width="100"
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"
style="border:1px outset lightgray; box-shadow: 5px 5px 5px gray" />
</div>
@@ -15,8 +15,7 @@
<header class="sheet-header">
<div class="header-field flex1">
<div class="header-field-group flexrow">
<label class="header-field-label flex2">{{localize "BOL.ui.name"}}</label><br />
<input class="charname flex6" name="name" type="text" value="{{name}}" placeholder="Name" />
<input class="charname flex1" name="name" type="text" value="{{actor.name}}" placeholder="Name"/>
</div>
</div>
</header>
@@ -34,24 +33,25 @@
<li class="item flexrow item-header">
<div class="item-name flex4 left">{{localize "BOL.ui.details"}}</div>
<div class="item-field flex1 right"></div>
</li>
</li>
</ol>
<div class="header-field-group flexrow">
<label class="item-name flex2">{{localize "BOL.ui.hordeSize"}} : </label><br />
<input class="field-value" name="system.hordesize" type="text" value="{{system.hordesize}}"
<div class="header-field-group flexrow horde-stat-row">
<label class="horde-stat-label flex2">{{localize "BOL.ui.hordeSize"}}</label>
<input class="header-field-value resources-value flex1" name="system.hordesize" type="text" value="{{system.hordesize}}"
data-type="Number" />
</div>
<div class="header-field-group flexrow">
<label class="item-name flex2">{{localize "BOL.ui.hordeHP"}} : </label><br />
<input class="field-value" name="system.hordebasehp" type="text" value="{{system.hordebasehp}}"
<div class="header-field-group flexrow horde-stat-row">
<label class="horde-stat-label flex2">{{localize "BOL.ui.hordeHP"}}</label>
<input class="header-field-value resources-value flex1" name="system.hordebasehp" type="text" value="{{system.hordebasehp}}"
data-type="Number" />
</div>
<div class="header-field-group flexrow">
<label class="item-name flex2">{{localize "BOL.ui.hordehp"}} : </label><br />
<input class="field-value" name="system.resources.hp.value" type="text" value="{{system.resources.hp.value}}"
data-type="Number" disabled/>&nbsp;/ &nbsp;
<input class="field-value" name="system.resources.hp.max" type="text" value="{{system.resources.hp.max}}"
<div class="header-field-group flexrow horde-stat-row">
<label class="horde-stat-label flex2">{{localize "BOL.ui.hordehp"}}</label>
<input class="header-field-value resources-value flex1" name="system.resources.hp.value" type="text" value="{{system.resources.hp.value}}"
data-type="Number" disabled/>
<span class="horde-stat-sep">/</span>
<input class="header-field-value resources-value flex1" name="system.resources.hp.max" type="text" value="{{system.resources.hp.max}}"
data-type="Number" disabled/>
</div>

View File

@@ -20,7 +20,7 @@
{{else}}
<div class="header-field-group flexrow">
<label class="header-field-label flex2">Type : </label><br/>
<select class="field-value" name="system.chartype" data-dtype="String">
<select class="header-field-value" name="system.chartype" data-dtype="String">
{{#select charType}}
<option value="creature">{{localize "BOL.ui.creature"}}</option>
<option value="daemon">{{localize "BOL.ui.daemon"}}</option>

View File

@@ -5,7 +5,7 @@
{{localize "BOL.ui.biosize"}}
</div>
<div class='form-fields center'>
<select class='field-value size' name='system.details.size' data-dtype='String'>
<select class='header-field-value size' name='system.details.size' data-dtype='String'>
{{#select details.size}}
{{#each config.creatureSize as |sizeData id|}}
<option value="{{id}}">

View File

@@ -66,8 +66,7 @@
{{/if}}
{{/each}}
<div class="flexrow">
<button class="create-natural-weapon">{{localize "BOL.ui.createNaturalWeapon"}}</button>
&nbsp;&nbsp;&nbsp;&nbsp;
<button class="create-natural-protection">{{localize "BOL.ui.createNaturalProtection"}}</button>
</div>
<footer class="form-footer">
<button class="create-natural-weapon"><i class="fas fa-sword"></i> {{localize "BOL.ui.createNaturalWeapon"}}</button>
<button class="create-natural-protection"><i class="fas fa-shield-alt"></i> {{localize "BOL.ui.createNaturalProtection"}}</button>
</footer>

View File

@@ -4,8 +4,8 @@
<div class="attribute stat flex1 flex-group-center {{key}}">
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value"
data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br />
<input class="stat-value rounded" type="text" name="system.attributes.{{key}}.value"
value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number" /><br />
<input class="stat-value rounded" type="number" name="system.attributes.{{key}}.value"
value="{{numberFormat value decimals=0 sign=false}}" /><br />
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value"
data-adv="0" data-key="{{key}}">
<i class="darkgreen fas fa-dice"></i>
@@ -24,8 +24,8 @@
</a>
</label>
<br />
<input class="stat-value rounded-border" type="text" name="system.aptitudes.def.value"
value="{{numberFormat aptitudes.3.value decimals=0 sign=true}}" data-dtype="Number" /><br />
<input class="stat-value rounded-border" type="number" name="system.aptitudes.def.value"
value="{{numberFormat aptitudes.3.value decimals=0 sign=false}}" /><br />
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value"
data-adv="0" data-key="def">
<i class="darkgreen fas fa-dice"></i>
@@ -34,17 +34,17 @@
</div>
<div class="resource stat flex1 flex-group-center">
<label class="stat-label">{{localize "BOL.resources.hp"}}</label><br />
<input class="stat-value" type="text" name="system.resources.hp.value"
value="{{numberFormat resources.hp.value decimals=0 sign=false}}" data-dtype="Number" />
<input class="stat-max" type="text" name="system.resources.hp.max"
value="{{numberFormat resources.hp.max decimals=0 sign=false}}" data-dtype="Number" />
<input class="stat-value resources-value" type="number" name="system.resources.hp.value"
value="{{system.resources.hp.value}}" />
<input class="resources-value" type="number" name="system.resources.hp.max"
value="{{system.resources.hp.max}}" />
</div>
<div class="resource stat flex1 flex-group-center">
<label class="stat-label">{{localize "BOL.resources.villainy"}}</label><br />
<input class="stat-value" type="text" name="system.resources.hero.value"
value="{{numberFormat resources.hero.value decimals=0 sign=false}}" data-dtype="Number" />
<input class="stat-max" type="text" name="system.resources.hero.max"
value="{{numberFormat resources.hero.max decimals=0 sign=false}}" data-dtype="Number" />
<input class="stat-value resources-value" type="number" name="system.resources.hero.value"
value="{{system.resources.hero.value}}" />
<input class="resources-value" type="number" name="system.resources.hero.max"
value="{{system.resources.hero.max}}" />
</div>
</div>
<hr />

View File

@@ -5,6 +5,7 @@
</li>
</ol>
{{editor description target="system.description" button=true owner=owner
editable=editable}}
<prose-mirror name="system.details.biography" toggled>
{{{description}}}
</prose-mirror>

View File

@@ -5,6 +5,7 @@
</li>
</ol>
{{editor description target="system.description" button=true owner=owner
editable=editable}}
<prose-mirror name="system.description" toggled>
{{{description}}}
</prose-mirror>

View File

@@ -4,20 +4,20 @@
{{#each system.attributes as |attr key|}}
<div class="resource stat flex1 flex-group-center">
<label class="stat-label">{{localize attr.label}}</label><br />
<input class="stat-value resources-value" type="text" name="system.attributes.{{key}}.value"
value="{{numberFormat attr.value decimals=0 sign=false}}" data-dtype="Number" />
<input class="resources-value" type="text" name="system.attributes.{{key}}.max"
value="{{numberFormat attr.max decimals=0 sign=false}}" data-dtype="Number" />
<input class="stat-value resources-value" type="number" name="system.attributes.{{key}}.value"
value="{{attr.value}}" />
<input class="resources-value" type="number" name="system.attributes.{{key}}.max"
value="{{attr.max}}" />
</div>
{{/each}}
{{#if (eq system.vehicletype "boat")}}
<div class="resource stat flex1 flex-group-center">
<label class="stat-label">{{localize system.row.label}}</label><br />
<input class="stat-value resources-value" type="text" name="system.row.value"
value="{{numberFormat system.row.value decimals=0 sign=false}}" data-dtype="Number" />
<input class="resources-value" type="text" name="system.row.max"
value="{{numberFormat system.row.max decimals=0 sign=false}}" data-dtype="Number" />
<input class="stat-value resources-value" type="number" name="system.row.value"
value="{{system.row.value}}" />
<input class="resources-value" type="number" name="system.row.max"
value="{{system.row.max}}" />
</div>
{{/if}}

View File

@@ -1,11 +1,10 @@
<div class="item-name flex4 left">{{localize "BOL.ui.vehicleWeapons"}}</div>
<ol class="items-list">
<li class="item flexrow item-header">
<div class="item-name flex4 left">{{localize "BOL.ui.weapons"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.hullDamage"}}</div>
<div class="item-field flex1 center">{{localize "BOL.ui.crewDamage"}}</div>
<div class="item-field flex1 center">{{localize "BOL.ui.fireDamage"}}</div>
<div class="item-field flex1 right"></div>
<div class="item-field flex1 right"><a class="vehicle-weapon-add" title="Ajouter"><i class="fas fa-plus-square"></i></a></div>
</li>
{{#each weapons as |item id|}}
<li class="item flexrow" data-item-id="{{item._id}}">

View File

@@ -5,7 +5,7 @@
{{!-- Sidebar --}}
<div class="sidebar flex0 bol-actor-sidebar">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" height="100" width="100"
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"
style="border:1px outset lightgray; box-shadow: 5px 5px 5px gray" />
</div>
@@ -15,12 +15,11 @@
<header class="sheet-header">
<div class="header-field flex1">
<div class="header-field-group flexrow">
<label class="header-field-label flex2">{{localize "BOL.ui.name"}}</label><br/>
<input class="charname flex6" name="name" type="text" value="{{name}}" placeholder="Name"/>
<input class="charname flex1" name="name" type="text" value="{{actor.name}}" placeholder="Name"/>
</div>
<div class="header-field-group flexrow">
<label class="header-field-label flex2">Type : </label><br/>
<select class="field-value" name="system.vehicletype" data-dtype="String">
<label class="header-field-label flex2">Type : </label>
<select class="header-field-value flex4" name="system.vehicletype">
{{#select system.vehicletype}}
<option value="boat">Navire</option>
<option value="flyingboat">Nef Volante</option>

View File

@@ -1,109 +1,138 @@
<form class="{{cssClass}} flexcol character-summary-container" autocomplete="off">
<ol class="items-list">
<ol class="items-list cs-table">
<li class="item flexrow item-header">
<div class="item-field item-name item-name-fixed-medium">{{localize "BOL.ui.pcname"}}</div>
{{!-- PJs section --}}
<li class="item flexrow cs-section-header">
<div class="cs-portrait-col"></div>
<div class="item-field item-name cs-name-col">{{localize "BOL.ui.pcname"}}</div>
<div class="item-field cs-group-header cs-group-attrs" style="flex: {{mul 2 (countKeys config.attackAttributes)}}">{{localize "BOL.ui.colGroupAttributes"}}</div>
<div class="item-field cs-group-header cs-group-apts" style="flex: {{mul 2 (countKeys config.aptitudes)}}">{{localize "BOL.ui.colGroupAptitudes"}}</div>
<div class="item-field cs-group-header cs-group-res" style="flex: {{mul 2 (countKeys config.resources)}}">{{localize "BOL.ui.colGroupResources"}}</div>
<div class="item-field flex1 right"></div>
</li>
<li class="item flexrow cs-col-row">
<div class="cs-portrait-col"></div>
<div class="item-field item-name cs-name-col"></div>
{{#each config.attackAttributes as |attr key|}}
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize attr)}}</div>
<div class="item-field flex2 item-field-fixed-short cs-col-header">{{abbrev3 (localize attr)}}</div>
{{/each}}
{{#each config.aptitudes as |apt key|}}
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize apt)}}</div>
<div class="item-field flex2 item-field-fixed-short cs-col-header {{#if @first}}cs-group-sep{{/if}}">{{abbrev3 (localize apt)}}</div>
{{/each}}
{{#each config.resources as |res key|}}
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize res)}}</div>
<div class="item-field flex2 item-field-fixed-short cs-col-header {{#if @first}}cs-group-sep{{/if}}">{{abbrev3 (localize res)}}</div>
{{/each}}
<div class="item-field flex1 right">
</div>
<div class="item-field flex1 right"></div>
</li>
{{#each pcs as |pc key|}}
<li class="item flexrow" data-actor-id="{{pc.id}}">
<div class="item-field item-name item-name-fixed-medium">
<a class="actor-open character-summary-rollable">{{pc.name}}</a>
</div>
{{#each pc.system.attributes as |attr key|}}
<div class="item-field flex2 item-field-fixed-short">
<a class="summary-roll character-summary-rollable" data-type="attribute" data-key="{{key}}">{{attr.value}}</a>
</div>
{{/each}}
{{#each pc.system.aptitudes as |apt key|}}
<div class="item-field flex item-field-fixed-short">
<a class="summary-roll character-summary-rollable" data-type="aptitude" data-key="{{key}}">{{apt.value}}</a>
</div>
{{/each}}
{{#each pc.system.resources as |res key|}}
<div class="item-field flex2 item-field-fixed-short">{{res.value}}/{{res.max}}</div>
{{/each}}
<div class="item-field flex1 right">
</div>
</li>
{{/each}}
<li class="item flexrow item-header">
<div class="item-field item-name item-name-fixed-medium">{{localize "BOL.ui.npcname"}}</div>
{{#each config.attackAttributes as |attr key|}}
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize attr)}}</div>
{{/each}}
{{#each config.aptitudes as |apt key|}}
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize apt)}}</div>
{{/each}}
{{#each config.resources as |res key|}}
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize res)}}</div>
{{/each}}
<div class="item-field flex1 right">
<li class="item flexrow cs-actor-row" data-actor-id="{{pc.id}}">
<div class="cs-portrait-col">
<img class="cs-portrait" src="{{pc.img}}" title="{{pc.name}}" />
</div>
</li>
{{#each npcs as |pc key|}}
<li class="item flexrow" data-actor-id="{{pc.id}}">
<div class="item-field item-name item-name-fixed-medium">
<a class="actor-open character-summary-rollable">{{pc.name}}</a>
</div>
{{#each pc.system.attributes as |attr key|}}
<div class="item-field flex2 item-field-fixed-short">
<a class="summary-roll character-summary-rollable" data-type="attribute" data-key="{{key}}">{{attr.value}}</a>
</div>
{{/each}}
{{#each pc.system.aptitudes as |apt key|}}
<div class="item-field flex item-field-fixed-short">
<a class="summary-roll character-summary-rollable" data-type="aptitude" data-key="{{key}}">{{apt.value}}</a>
</div>
{{/each}}
{{#each pc.system.resources as |res key|}}
<div class="item-field flex2 item-field-fixed-short">{{res.value}}/{{res.max}}</div>
{{/each}}
<div class="item-field flex1 right">
<a class="item-control actor-delete" title="{{localize "BOL.ui.delete"}}"><i class="fas fa-trash"></i></a>
</div>
<div class="item-field item-name cs-name-col">
<a class="actor-open cs-actor-name">{{pc.name}}</a>
</div>
{{#each pc.attributes as |attr|}}
<div class="item-field flex2 item-field-fixed-short cs-stat">
<a class="summary-roll cs-rollable" data-type="attribute" data-key="{{attr.key}}">{{attr.value}}</a>
</div>
{{/each}}
{{#each pc.aptitudes as |apt|}}
<div class="item-field flex2 item-field-fixed-short cs-stat {{#if @first}}cs-group-sep{{/if}}">
<a class="summary-roll cs-rollable" data-type="aptitude" data-key="{{apt.key}}">{{apt.value}}</a>
</div>
{{/each}}
{{#each pc.resources as |res|}}
<div class="item-field flex2 item-field-fixed-short cs-resource {{#if @first}}cs-group-sep{{/if}}">
<span class="cs-res-val">{{res.value}}</span><span class="cs-res-sep">/</span><span class="cs-res-max">{{res.max}}</span>
</div>
{{/each}}
<div class="item-field flex1 right"></div>
</li>
{{/each}}
{{!-- NPCs section --}}
<li class="item flexrow cs-section-header">
<div class="cs-portrait-col"></div>
<div class="item-field item-name cs-name-col">{{localize "BOL.ui.npcname"}}</div>
<div class="item-field cs-group-header cs-group-attrs" style="flex: {{mul 2 (countKeys config.attackAttributes)}}">{{localize "BOL.ui.colGroupAttributes"}}</div>
<div class="item-field cs-group-header cs-group-apts" style="flex: {{mul 2 (countKeys config.aptitudes)}}">{{localize "BOL.ui.colGroupAptitudes"}}</div>
<div class="item-field cs-group-header cs-group-res" style="flex: {{mul 2 (countKeys config.resources)}}">{{localize "BOL.ui.colGroupResources"}}</div>
<div class="item-field flex1 right"></div>
</li>
<li class="item flexrow cs-col-row">
<div class="cs-portrait-col"></div>
<div class="item-field item-name cs-name-col"></div>
{{#each config.attackAttributes as |attr key|}}
<div class="item-field flex2 item-field-fixed-short cs-col-header">{{abbrev3 (localize attr)}}</div>
{{/each}}
{{#each config.aptitudes as |apt key|}}
<div class="item-field flex2 item-field-fixed-short cs-col-header {{#if @first}}cs-group-sep{{/if}}">{{abbrev3 (localize apt)}}</div>
{{/each}}
{{#each config.resources as |res key|}}
<div class="item-field flex2 item-field-fixed-short cs-col-header {{#if @first}}cs-group-sep{{/if}}">{{abbrev3 (localize res)}}</div>
{{/each}}
<div class="item-field flex1 right"></div>
</li>
{{#each npcs as |pc key|}}
<li class="item flexrow cs-actor-row" data-actor-id="{{pc.id}}">
<div class="cs-portrait-col">
<img class="cs-portrait" src="{{pc.img}}" title="{{pc.name}}" />
</div>
<div class="item-field item-name cs-name-col">
<a class="actor-open cs-actor-name">{{pc.name}}</a>
</div>
{{#each pc.attributes as |attr|}}
<div class="item-field flex2 item-field-fixed-short cs-stat">
<a class="summary-roll cs-rollable" data-type="attribute" data-key="{{attr.key}}">{{attr.value}}</a>
</div>
{{/each}}
{{#each pc.aptitudes as |apt|}}
<div class="item-field flex2 item-field-fixed-short cs-stat {{#if @first}}cs-group-sep{{/if}}">
<a class="summary-roll cs-rollable" data-type="aptitude" data-key="{{apt.key}}">{{apt.value}}</a>
</div>
{{/each}}
{{#each pc.resources as |res|}}
<div class="item-field flex2 item-field-fixed-short cs-resource {{#if @first}}cs-group-sep{{/if}}">
<span class="cs-res-val">{{res.value}}</span><span class="cs-res-sep">/</span><span class="cs-res-max">{{res.max}}</span>
</div>
{{/each}}
<div class="item-field flex1 right">
<a class="item-control actor-delete" title="{{localize "BOL.ui.delete"}}"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
{{!-- Horoscope group section --}}
{{#if (countKeys horoscopeGroupList)}}
<li class="item flexrow item-header">
<li class="item flexrow cs-section-header">
<div class="cs-portrait-col"></div>
<div class="item-name flex4 left">{{localize "BOL.ui.horoscopeGroup"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.type"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.horoscopeDiceRemaining"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.horoscopeDiceMax"}}</div>
<div class="item-field flex2 center cs-col-header">{{localize "BOL.ui.type"}}</div>
<div class="item-field flex2 center cs-col-header">{{localize "BOL.ui.horoscopeDiceRemaining"}}</div>
<div class="item-field flex2 center cs-col-header">{{localize "BOL.ui.horoscopeDiceMax"}}</div>
<div class="item-field flex1 right"></div>
</li>
{{#each horoscopeGroupList as |horo id|}}
<li class="item flexrow" data-item-id="{{horo.id}}">
<h4 class="item-name flex4 left">
<div class="item-image"><img src="icons/magic/perception/eye-ringed-glow-angry-large-red.webp" /></div>{{horo.name}}
</h4>
<div class="item-field flex2 center">
<span class="item-field">{{upperFirst horo.type}}</span>
</div>
<div class="item-field flex2 center">
<input class="field-value" type="text" id="horoscope-group-edit-available" value="{{horo.availableDice}}" data-horo-id="{{id}}" data-type="Number">
</div>
<div class="item-field flex2 center">
<input class="field-value" type="text" id="horoscope-group-edit-max" value="{{horo.maxDice}}" data-horo-id="{{id}}" data-type="Number">
</div>
<div class="item-field flex1 right"></div>
</li>
{{#each horoscopeGroupList as |horo id|}}
<li class="item flexrow cs-actor-row" data-item-id="{{horo.id}}">
<div class="cs-portrait-col">
<img class="cs-portrait" src="icons/magic/perception/eye-ringed-glow-angry-large-red.webp" />
</div>
<h4 class="item-name flex4 left cs-actor-name">{{horo.name}}</h4>
<div class="item-field flex2 center">
<span class="item-field">{{upperFirst horo.type}}</span>
</div>
<div class="item-field flex2 center">
<input class="cs-input" type="number" id="horoscope-group-edit-available" value="{{horo.availableDice}}" data-horo-id="{{id}}" />
</div>
<div class="item-field flex2 center">
<input class="cs-input" type="number" id="horoscope-group-edit-max" value="{{horo.maxDice}}" data-horo-id="{{id}}" />
</div>
<div class="item-field flex1 right"></div>
</li>
{{/each}}
{{/if}}

View File

@@ -1,28 +1,40 @@
<div>
<img class="chat-icon" src="{{img}}" alt="{{name}}"/>
<h2 class="bad"><strong>{{name}}</strong></h2>
</div>
<div class="bol-vitality-card">
<div class="vitality-card-header">
<img class="damage-weapon-img" src="{{img}}" alt="{{name}}"/>
<div class="damage-card-title">
{{#if isHeroAdversary}}
{{#if (eq hp 0)}}
<div class="damage-card-label">💀 {{localize "BOL.chat.vitalityzero" name="" hp=""}}</div>
<div class="damage-weapon-name">{{name}}</div>
<div class="damage-total-badge">{{hp}} PV</div>
{{else}}
<div class="damage-card-label">🩸 {{localize "BOL.chat.vitalitydying" name="" hp=""}}</div>
<div class="damage-weapon-name">{{name}}</div>
<div class="damage-total-badge">{{hp}} PV</div>
{{/if}}
{{else}}
<div class="damage-card-label">☠ {{localize "BOL.chat.isdead" name=""}}</div>
<div class="damage-weapon-name">{{name}}</div>
<div class="damage-total-badge damage-total-badge--hit">{{hp}} PV</div>
{{/if}}
</div>
</div>
<div class="flexrow">
{{#if isHeroAdversary}}
{{#if (eq hp 0)}}
{{localize "BOL.chat.vitalityzero" name=name hp=hp}}
<br>{{localize "BOL.chat.vitalityheroism"}}
<br>{{localize "BOL.chat.vitalityheroismhint"}}
<div class="vitality-card-body">
{{#if isHeroAdversary}}
{{#if (eq hp 0)}}
<div class="vitality-detail">{{localize "BOL.chat.vitalityheroism"}}</div>
<div class="vitality-hint">{{localize "BOL.chat.vitalityheroismhint"}}</div>
{{else}}
<div class="vitality-detail">{{localize "BOL.chat.vitalitydyingheroism"}}</div>
{{/if}}
{{#if (lt hp -5)}}
<div class="vitality-dead">☠ {{localize "BOL.chat.isdead" name=name}}</div>
<div class="vitality-epitaph">{{localize "BOL.chat.epitaph"}}</div>
{{/if}}
{{else}}
{{localize "BOL.chat.vitalitydying" name=name hp=hp}}
<br>{{localize "BOL.chat.vitalitydyingheroism"}}
<div class="vitality-dead">{{localize "BOL.chat.epitaph"}}</div>
{{/if}}
{{#if (lt hp -5)}}
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
<br>{{localize "BOL.chat.epitaph"}}
{{/if}}
{{else}}
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
<br>{{localize "BOL.chat.epitaph"}}
{{/if}}
</div>
</div>

View File

@@ -0,0 +1,20 @@
<div class="bol-welcome-card">
<div class="welcome-header">
<img class="welcome-logo" src="/systems/bol/ui/logo2.webp" alt="Barbarians of Lemuria"/>
<div class="welcome-title">
<div class="damage-card-label">⚔ Barbarians of Lemuria</div>
<div class="damage-weapon-name">{{localize "BOL.chat.welcome1"}}</div>
</div>
</div>
<div class="welcome-body">
<p>{{{localize "BOL.chat.welcome2"}}}</p>
<p>{{{localize "BOL.chat.welcome3"}}}</p>
<p>{{{localize "BOL.chat.welcome4"}}}</p>
<p>{{{localize "BOL.chat.welcome5"}}}</p>
<div class="welcome-footer">🗡 {{{localize "BOL.chat.welcome6"}}}</div>
{{#if noRulebook}}
<p class="welcome-warning">{{{localize "BOL.chat.bolRulebookMessage"}}}</p>
{{/if}}
</div>
</div>

View File

@@ -1,8 +1,16 @@
<h4><strong>{{localize "BOL.chat.alchemytitle" name=alchemy.name}}</strong></h4>
<h4><strong>{{localize "BOL.chat.alchemypoints" pcCostCurrent=pcCostCurrent}}</strong></h4>
{{#if isSuccess}}
{{localize "BOL.chat.alchemysuccess"}}
{{else}}
{{localize "BOL.chat.alchemyfailure"}}
{{/if}}
<div class="bol-alchemy-card">
<div class="alchemy-card-header">
<img class="alchemy-img" src="{{alchemy.img}}" alt="{{alchemy.name}}"/>
<div class="alchemy-card-title">
<span class="alchemy-name">{{alchemy.name}}</span>
<span class="alchemy-stat-badge"><i class="fas fa-flask"></i> {{localize "BOL.chat.alchemypoints" pcCostCurrent=pcCostCurrent}}</span>
</div>
</div>
<div class="alchemy-result {{#if isSuccess}}success{{else}}failure{{/if}}">
{{#if isSuccess}}
<i class="fas fa-check-circle"></i> {{{localize "BOL.chat.alchemysuccess"}}}
{{else}}
<i class="fas fa-times-circle"></i> {{{localize "BOL.chat.alchemyfailure"}}}
{{/if}}
</div>
</div>

View File

@@ -1,20 +1,25 @@
<img class="chat-icon" src="{{weapon.img}}" alt="{{weapon.name}}"/>
<h3><strong>{{localize "BOL.chat.damageresult" name=weapon.name total=damageRoll.total}}</strong></h3>
{{#if defender}}
<h3><strong>{{localize "BOL.chat.damagetarget" target=defender.name}}</strong></h3>
{{/if}}
{{#if weapon.system.properties.damageReroll1}}
<div>
<label>{{localize "BOL.chat.weaponreroll1"}}</label>
<div class="bol-damage-card">
<div class="damage-card-header">
<img class="damage-weapon-img" src="{{weapon.img}}" alt="{{weapon.name}}"/>
<div class="damage-card-title">
<div class="damage-card-label">⚔ {{localize "BOL.ui.damages"}}</div>
<div class="damage-weapon-name">{{weapon.name}}</div>
<div class="damage-formula">{{damageFormula}}</div>
<div class="damage-total-badge">{{damageRoll.total}}</div>
</div>
</div>
{{/if}}
<div class="actions-section">
{{#if targetId}}
<div id="{{applyId}}">
<button class="chat-damage-apply" data-attack-id="{{id}}">{{localize "BOL.chat.applydamagetotarget"}}</button>
</div>
<br>
{{#if defender}}
<div class="damage-target">{{localize "BOL.chat.damagetarget" target=defender.name}}</div>
{{/if}}
</div>
{{#if weapon.system.properties.damageReroll1}}
<div class="damage-note">{{localize "BOL.chat.weaponreroll1"}}</div>
{{/if}}
{{#if targetId}}
<div class="actions-section" id="{{applyId}}">
<button class="chat-damage-apply" data-attack-id="{{id}}">{{localize "BOL.chat.applydamagetotarget"}}</button>
</div>
{{/if}}
</div>

View File

@@ -1,27 +1,30 @@
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}" />
{{localize "BOL.chat.hurttitle" name=defender.name damageTotal=damageTotal}}
<div class="bol-defense-card">
<div class="defense-card-header">
<img class="damage-weapon-img" src="{{defender.img}}" alt="{{defender.name}}"/>
<div class="damage-card-title">
<div class="damage-weapon-name">{{defender.name}}</div>
<div class="damage-total-badge damage-total-badge--hit">{{damageTotal}}</div>
</div>
</div>
{{#if damagesIgnoresArmor}}
<br>{{localize "BOL.chat.armordefault"}}
{{/if}}
{{#if damagesIgnoresArmor}}
<div class="damage-note damage-note--warn">⚠ {{localize "BOL.chat.armordefault"}}</div>
{{/if}}
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize
"BOL.chat.witharmor"}}</button>
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">{{localize
"BOL.chat.withoutarmor"}}</button>
<div class="actions-section defense-actions">
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
{{#if (gt defenderHeroPoints 0)}}
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize
"BOL.chat.shakeoff"}}</button>
{{#if (gt defenderHeroPoints 0)}}
<div class="defense-hero-separator">— {{localize "BOL.ui.heropoints"}} —</div>
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
{{#each defenderWeapons as |weapon idx|}}
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
{{/each}}
{{/if}}
{{#each defenderWeapons as |weapon idx|}}
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}"
data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
{{/each}}
{{/if}}
<button class="damage-handling" data-defense-mode="damage-not-applied" data-attack-id="{{attackId}}">{{localize "BOL.chat.nodamage"}}</button>
</div>
<button class="damage-handling" data-defense-mode="damage-not-applied" data-attack-id="{{attackId}}">{{localize
"BOL.chat.nodamage"}}</button>
<br>
{{localize "BOL.chat.defenseReduceDamage2"}}
<div class="defense-footer-note">{{localize "BOL.chat.defenseReduceDamage2"}}</div>
</div>

View File

@@ -1,22 +1,33 @@
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}"/>
<h3>{{localize "BOL.chat.damagesummary" name=name}}</h3>
<ul>
<li>
{{#if (eq defenseMode "damage-with-armor")}}
{{localize "BOL.chat.protectvalue"}} : {{armorProtect}}.
{{/if}}
{{#if (eq defenseMode "damage-without-armor")}}
{{localize "BOL.chat.noprotectvalue"}}
{{/if}}
{{#if (eq defenseMode "hero-reduce-damage")}}
{{localize "BOL.chat.protectvalue"}} : {{armorProtect}}.
{{localize "BOL.chat.heroreducedamage" total=rollHero.total}}
{{/if}}
{{#if (eq defenseMode "hero-in-extremis")}}
{{localize "BOL.chat.herosplintered" name=weaponHero.name}}
{{/if}}
</li>
<li>
{{localize "BOL.chat.finaldamage" finalDamage=finalDamage}}
</li>
</ul>
<div class="bol-defense-summary-card">
<div class="defense-summary-header">
<img class="damage-weapon-img" src="{{defender.img}}" alt="{{defender.name}}"/>
<div class="damage-card-title">
<div class="damage-card-label">🛡 {{localize "BOL.chat.damagesummary" name=""}}</div>
<div class="damage-weapon-name">{{name}}</div>
{{#if (eq finalDamage 0)}}
<div class="damage-total-badge damage-total-badge--none">0</div>
{{else}}
<div class="damage-total-badge">{{finalDamage}}</div>
{{/if}}
</div>
</div>
<div class="defense-summary-details">
{{#if (eq defenseMode "damage-with-armor")}}
<div class="defense-detail">🔰 {{localize "BOL.chat.protectvalue"}} : <strong>{{armorProtect}}</strong></div>
{{/if}}
{{#if (eq defenseMode "damage-without-armor")}}
<div class="defense-detail warning">⚠ {{localize "BOL.chat.noprotectvalue"}}</div>
{{/if}}
{{#if (eq defenseMode "hero-reduce-damage")}}
<div class="defense-detail">🔰 {{localize "BOL.chat.protectvalue"}} : <strong>{{armorProtect}}</strong></div>
<div class="defense-detail">✨ {{localize "BOL.chat.heroreducedamage" total=rollHero.total}}</div>
{{/if}}
{{#if (eq defenseMode "hero-in-extremis")}}
<div class="defense-detail">⚔ {{localize "BOL.chat.herosplintered" name=weaponHero.name}}</div>
{{/if}}
<div class="defense-final {{#if (eq finalDamage 0)}}defense-final--safe{{/if}}">
{{localize "BOL.chat.finaldamage" finalDamage=finalDamage}}
</div>
</div>
</div>

View File

@@ -1,11 +1,21 @@
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}"/>
<h3>{{localize "BOL.chat.damagesummary" name=name}}</h3>
<ul>
<li>
{{#if (eq finalDamage 0)}}
{{localize "BOL.chat.nodamagesummary"}}
{{else}}
{{localize "BOL.chat.damageresume" name=name}}
{{/if}}
</li>
</ul>
<div class="bol-defense-summary-card">
<div class="defense-summary-header">
<img class="damage-weapon-img" src="{{defender.img}}" alt="{{defender.name}}"/>
<div class="damage-card-title">
<div class="damage-card-label">🛡 {{localize "BOL.chat.damagesummary" name=""}}</div>
<div class="damage-weapon-name">{{name}}</div>
{{#if (eq finalDamage 0)}}
<div class="damage-total-badge damage-total-badge--none">0</div>
{{else}}
<div class="damage-total-badge">{{finalDamage}}</div>
{{/if}}
</div>
</div>
<div class="defense-summary-details">
{{#if (eq finalDamage 0)}}
<div class="defense-final defense-final--safe">{{localize "BOL.chat.nodamagesummary"}}</div>
{{else}}
<div class="defense-final">{{localize "BOL.chat.damageresume" name=name}}</div>
{{/if}}
</div>
</div>

View File

@@ -1,26 +1,35 @@
<h4><strong>{{localize "BOL.chat.horoscope"}} {{localize horoscopeTypeLabel}}</strong></h4>
<h4><strong>{{localize "BOL.chat.horoscopepoints" points=astrologyPointsCost}}</strong></h4>
<div class="bol-horoscope-card">
<div class="horoscope-card-header">
<i class="fas fa-star horoscope-icon"></i>
<div class="horoscope-card-title">
<span class="horoscope-type">{{localize "BOL.chat.horoscope"}}{{localize horoscopeTypeLabel}}</span>
<span class="horoscope-stat-badge"><i class="fas fa-coins"></i> {{localize "BOL.chat.horoscopepoints" points=astrologyPointsCost}}</span>
</div>
</div>
{{#if (eq horoscopeType "minor")}}
{{#if isSuccess}}
{{localize "BOL.chat.horoscopeminorsuccess"}}
{{else}}
{{localize "BOL.chat.horoscopeminorfailure"}}
{{/if}}
{{/if}}
<div class="horoscope-result">
{{#if (eq horoscopeType "minor")}}
{{#if isSuccess}}
<span class="horoscope-text success">{{{localize "BOL.chat.horoscopeminorsuccess"}}}</span>
{{else}}
<span class="horoscope-text failure">{{{localize "BOL.chat.horoscopeminorfailure"}}}</span>
{{/if}}
{{/if}}
{{#if (eq horoscopeType "major")}}
{{#if isSuccess}}
{{localize "BOL.chat.horoscopemajorsuccess" horoscopeName=horoscopeName}}
{{else}}
{{localize "BOL.chat.horoscopemajorfailure" horoscopeName=horoscopeName}}
{{/if}}
{{/if}}
{{#if (eq horoscopeType "major")}}
{{#if isSuccess}}
<span class="horoscope-text success">{{{localize "BOL.chat.horoscopemajorsuccess" horoscopeName=horoscopeName}}}</span>
{{else}}
<span class="horoscope-text failure">{{{localize "BOL.chat.horoscopemajorfailure" horoscopeName=horoscopeName}}}</span>
{{/if}}
{{/if}}
{{#if (eq horoscopeType "majorgroup")}}
{{#if isSuccess}}
{{localize "BOL.chat.horoscopemajorgroupsuccess" careerBonus=careerBonus}}
{{else}}
{{localize "BOL.chat.horoscopemajorgroupfailure" careerBonus=careerBonus}}
{{/if}}
{{/if}}
{{#if (eq horoscopeType "majorgroup")}}
{{#if isSuccess}}
<span class="horoscope-text success">{{{localize "BOL.chat.horoscopemajorgroupsuccess" careerBonus=careerBonus}}}</span>
{{else}}
<span class="horoscope-text failure">{{{localize "BOL.chat.horoscopemajorgroupfailure" careerBonus=careerBonus}}}</span>
{{/if}}
{{/if}}
</div>
</div>

View File

@@ -1,4 +1,13 @@
<h4><strong>{{localize "BOL.chat.spell"}} : {{spell.name}}</strong></h4>
<h4><strong>{{localize "BOL.chat.spellcost"}} : {{ppCost}}</strong></h4>
<h4><strong>{{localize "BOL.chat.spellremaining"}} : {{remainingPP}}</strong></h4>
<div class="bol-spell-card">
<div class="spell-card-header">
<img class="spell-img" src="{{spell.img}}" alt="{{spell.name}}"/>
<div class="spell-card-title">
<span class="spell-name">{{spell.name}}</span>
<div class="spell-stats">
<span class="spell-stat-badge cost"><i class="fas fa-bolt"></i> {{localize "BOL.chat.spellcost"}} : {{ppCost}}</span>
{{#if remainingPP}}<span class="spell-stat-badge remaining"><i class="fas fa-battery-half"></i> {{localize "BOL.chat.spellremaining"}} : {{remainingPP}}</span>{{/if}}
</div>
</div>
</div>
</div>

View File

@@ -2,12 +2,12 @@
<div class="flex1 center bg-darkred">
<label for="adv">{{localize 'BOL.ui.bonusmalus'}}</label>
</div>
<div class="flex1 center cell">
<input type="radio" class="bdice" name="adv" value="1" {{#if (eq adv "1B")}}checked{{/if}}/>+1dB<br />
<input type="radio" class="bdice" name="adv" value="2" {{#if (eq adv "2B")}}checked{{/if}}/>+2dB<br />
<input type="radio" class="bdice" name="adv" value="0" {{#if (eq adv "0")}}checked{{/if}}/>0<br />
<input type="radio" class="mdice" name="adv" value="1" {{#if (eq adv "1M")}}checked{{/if}}/>+1dM<br />
<input type="radio" class="mdice" name="adv" value="2" {{#if (eq adv "2M")}}checked{{/if}}/>+2dM<br />
<div class="flex1 center cell dice-options-cell">
<label class="dice-option bdice-label"><input type="radio" class="bdice" name="adv" value="2" {{#if (eq adv "2B")}}checked{{/if}}/>+2dB</label>
<label class="dice-option bdice-label"><input type="radio" class="bdice" name="adv" value="1" {{#if (eq adv "1B")}}checked{{/if}}/>+1dB</label>
<label class="dice-option neutral-label"><input type="radio" class="bdice" name="adv" value="0" {{#if (eq adv "0")}}checked{{/if}}/>0</label>
<label class="dice-option mdice-label"><input type="radio" class="mdice" name="adv" value="1" {{#if (eq adv "1M")}}checked{{/if}}/>+1dM</label>
<label class="dice-option mdice-label"><input type="radio" class="mdice" name="adv" value="2" {{#if (eq adv "2M")}}checked{{/if}}/>+2dM</label>
</div>
</div>

View File

@@ -34,8 +34,10 @@
<label for="mod">{{localize 'BOL.ui.modifiers'}}</label>
</div>
<div class="flex1 center cell">
<select name="mod" id="mod" value="{{mod}}">
{{selectOptions config.difficultyModifiers selected=mod localize=true}}
<select name="mod" id="mod">
{{#each config.difficultyModifiers}}
<option value="{{value}}" {{#if (equals ../mod value)}}selected{{/if}}>{{localize label}}</option>
{{/each}}
</select>
</div>
</div>

View File

@@ -3,32 +3,22 @@
<hr/>
<div class="form-group">
<label class="property-label">{{localize "BOL.itemProperty.vehicleDamageType"}}</label>
<div class="form-fields">
<div class="form-fields vehicle-checkboxes">
<label class="checkbox">
<input class="field-value" type="checkbox" name="system.properties.isfiredamage" {{checked item.system.properties.isfiredamage}}> {{localize "BOL.itemProperty.isfiredamage"}}
</label>
</div>
<div class="form-fields">
<label class="checkbox">
<input class="field-value" type="checkbox" name="system.properties.ishulldamage" {{checked item.system.properties.ishulldamage}}> {{localize "BOL.itemProperty.ishulldamage"}}
</label>
</div>
<div class="form-fields">
<label class="checkbox">
<input class="field-value" type="checkbox" name="system.properties.iscrewdamage" {{checked item.system.properties.iscrewdamage}}> {{localize "BOL.itemProperty.iscrewdamage"}}
</label>
</div>
<div class="form-fields">
<label class="checkbox">
<input class="field-value" type="checkbox" name="system.properties.isboarding" {{checked item.system.properties.isboarding}}> {{localize "BOL.itemProperty.isboarding"}}
</label>
</div>
<div class="form-fields">
<label class="checkbox">
<input class="field-value" type="checkbox" name="system.properties.isspur" {{checked item.system.properties.isspur}}> {{localize "BOL.itemProperty.isspur"}}
</label>
</div>
<div class="form-fields">
<label class="checkbox">
<input class="field-value" type="checkbox" name="system.properties.isbreakrow" {{checked item.system.properties.isbreakrow}}> {{localize "BOL.itemProperty.isbreakrow"}}
</label>