- ajoute les visuels système (bannière, pause, tokens)
Release Creation / build (release) Successful in 1m57s

- active le drag & drop inverse des objets depuis les fiches d’acteur
 - corrige le calcul des PV des créatures selon la taille
 - ajoute les options d’armes de créature manquantes
 - met à jour les styles et les packs générés
This commit is contained in:
2026-05-04 13:17:07 +02:00
parent a008543f61
commit 0187daa1e5
32 changed files with 119 additions and 25 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

+37
View File
@@ -87,6 +87,43 @@
--lo-control-height: 1.95rem; --lo-control-height: 1.95rem;
--lo-number-width: 4.75rem; --lo-number-width: 4.75rem;
} }
body.system-fvtt-les-oublies #pause {
font-size: 2rem;
}
body.system-fvtt-les-oublies #pause.paused {
gap: 0.5rem;
}
body.system-fvtt-les-oublies #pause > figcaption {
color: #d9d4ca;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.22);
}
body.system-fvtt-les-oublies #pause > img {
opacity: 0;
width: 0;
height: 0;
}
body.system-fvtt-les-oublies #pause::before {
content: "";
display: block;
width: 200px;
height: 200px;
margin-bottom: 0.75rem;
background: url("../assets/ui/pause_oublie.webp") center / contain no-repeat;
animation: lo-pause-logo 4.2s ease-in-out infinite;
transform-origin: 50% 50%;
filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.35));
}
@keyframes lo-pause-logo {
0%,
100% {
transform: scale(0.98) translateY(0);
filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.3));
}
50% {
transform: scale(1.03) translateY(-6px);
filter: drop-shadow(0 16px 26px rgba(0, 0, 0, 0.45));
}
}
.fvtt-les-oublies.sheet { .fvtt-les-oublies.sheet {
color: var(--lo-ink); color: var(--lo-ink);
font-family: "Cormorant Garamond", Georgia, serif; font-family: "Cormorant Garamond", Georgia, serif;
File diff suppressed because one or more lines are too long
+44
View File
@@ -34,6 +34,50 @@
--lo-number-width: 4.75rem; --lo-number-width: 4.75rem;
} }
body.system-fvtt-les-oublies #pause {
font-size: 2rem;
}
body.system-fvtt-les-oublies #pause.paused {
gap: 0.5rem;
}
body.system-fvtt-les-oublies #pause > figcaption {
color: #d9d4ca;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.22);
}
body.system-fvtt-les-oublies #pause > img {
opacity: 0;
width: 0;
height: 0;
}
body.system-fvtt-les-oublies #pause::before {
content: "";
display: block;
width: 200px;
height: 200px;
margin-bottom: 0.75rem;
background: url("../assets/ui/pause_oublie.webp") center/contain no-repeat;
animation: lo-pause-logo 4.2s ease-in-out infinite;
transform-origin: 50% 50%;
filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.35));
}
@keyframes lo-pause-logo {
0%,
100% {
transform: scale(0.98) translateY(0);
filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.3));
}
50% {
transform: scale(1.03) translateY(-6px);
filter: drop-shadow(0 16px 26px rgba(0, 0, 0, 0.45));
}
}
.fvtt-les-oublies.sheet { .fvtt-les-oublies.sheet {
color: var(--lo-ink); color: var(--lo-ink);
font-family: "Cormorant Garamond", Georgia, serif; font-family: "Cormorant Garamond", Georgia, serif;
@@ -81,6 +81,15 @@ export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(fou
super._onRender(context, options) super._onRender(context, options)
} }
_onDragStart(event) {
const itemElement = event.currentTarget?.closest?.("[data-item-id]") ?? event.target?.closest?.("[data-item-id]")
const itemId = itemElement?.dataset?.itemId
const item = itemId ? this.document.items.get(itemId) : null
if (!item || !event.dataTransfer) return
event.dataTransfer.setData("text/plain", JSON.stringify(item.toDragData()))
}
_canDragStart() { _canDragStart() {
return this.isEditable return this.isEditable
} }
+3 -2
View File
@@ -41,8 +41,9 @@ export class LesOubliesActor extends Actor {
if (this.type !== "creature") return if (this.type !== "creature") return
const system = this.system const system = this.system
const hpValue = Math.max(Number(system.hp?.value ?? 0), 0) const sizeValue = Math.clamp(Number(system.size?.value ?? 1), 1, 8)
const hpMax = Math.max(Number(system.hp?.max ?? hpValue), hpValue, 0) const hpMax = Math.max(sizeValue * 4, 0)
const hpValue = Math.max(Number(system.hp?.value ?? hpMax), 0)
system.hp.max = hpMax system.hp.max = hpMax
system.hp.value = Math.min(hpValue, hpMax) system.hp.value = Math.min(hpValue, hpMax)
const songesPoints = Math.max(Number(system.songes?.points ?? 0), 0) const songesPoints = Math.max(Number(system.songes?.points ?? 0), 0)
+2
View File
@@ -60,12 +60,14 @@ export const SIZE_LABELS = {
} }
export const WEAPON_CATEGORY_LABELS = { export const WEAPON_CATEGORY_LABELS = {
corpsacorps: "Corps à corps",
melee: "Mêlée", melee: "Mêlée",
tir: "Tir", tir: "Tir",
jet: "Jet", jet: "Jet",
} }
export const WEAPON_ORIGIN_LABELS = { export const WEAPON_ORIGIN_LABELS = {
animaux: "Animaux",
geant: "Géant", geant: "Géant",
petitPeuple: "Petit Peuple", petitPeuple: "Petit Peuple",
} }
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.090569 7fe6b57ed6c0 Delete type=3 #1 2026/05/04-10:50:49.098074 7f9b5cbfd6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.106804 7fe6b4fec6c0 Delete type=3 #1 2026/05/04-10:50:49.164577 7f9b4ffff6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.152550 7fe6b57ed6c0 Delete type=3 #1 2026/05/04-10:50:49.395797 7f9b5cbfd6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.122237 7fe6b67ef6c0 Delete type=3 #1 2026/05/04-10:50:49.240415 7f9b5dbff6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.198341 7fe6b5fee6c0 Delete type=3 #1 2026/05/04-10:50:49.609281 7f9b5d3fe6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.137148 7fe6b5fee6c0 Delete type=3 #1 2026/05/04-10:50:49.319307 7f9b5d3fe6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.166829 7fe6b4fec6c0 Delete type=3 #1 2026/05/04-10:50:49.459120 7f9b4ffff6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.214242 7fe6b57ed6c0 Delete type=3 #1 2026/05/04-10:50:49.677244 7f9b5cbfd6c0 Delete type=3 #1
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/04-09:46:56.182767 7fe6b67ef6c0 Delete type=3 #1 2026/05/04-10:50:49.540176 7f9b5dbff6c0 Delete type=3 #1
+2 -1
View File
@@ -5,7 +5,8 @@
"manifest": "https://www.uberwald.me/gitea/public/fvtt-les-oublies/raw/branch/main/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-les-oublies/raw/branch/main/system.json",
"download": "#{DOWNLOAD}#", "download": "#{DOWNLOAD}#",
"url": "https://www.uberwald.me/gitea/public/fvtt-les-oublies", "url": "https://www.uberwald.me/gitea/public/fvtt-les-oublies",
"version": "0.1.0", "background": "systems/fvtt-les-oublies/assets/ui/banniere_les_oublies.webp",
"version": "14.0.0",
"authors": [ "authors": [
{ {
"name": "Copilot", "name": "Copilot",
+1 -1
View File
@@ -61,7 +61,7 @@
</div> </div>
<div class="item-list"> <div class="item-list">
{{#each powers as |item|}} {{#each powers as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{item.system.activationCondition}}</div></div> <div><strong>{{item.name}}</strong><div>{{item.system.activationCondition}}</div></div>
<div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
+5 -5
View File
@@ -70,7 +70,7 @@
<h3>{{group.label}}</h3> <h3>{{group.label}}</h3>
<div class="item-list"> <div class="item-list">
{{#each group.items as |entry|}} {{#each group.items as |entry|}}
<article class="item-card"> <article class="item-card" data-item-id="{{entry.item.id}}" draggable="true">
<div><strong>{{entry.item.name}}</strong><div>{{localize "LESOUBLIES.labels.valeurFinale"}} {{entry.finalValue}}</div></div> <div><strong>{{entry.item.name}}</strong><div>{{localize "LESOUBLIES.labels.valeurFinale"}} {{entry.finalValue}}</div></div>
<div class="item-controls"><button type="button" data-action="rollSkill" data-item-id="{{entry.item.id}}">{{localize "LESOUBLIES.ui.roll"}}</button><button type="button" data-action="editItem" data-item-id="{{entry.item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{entry.item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="rollSkill" data-item-id="{{entry.item.id}}">{{localize "LESOUBLIES.ui.roll"}}</button><button type="button" data-action="editItem" data-item-id="{{entry.item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{entry.item.id}}">Delete</button></div>
</article> </article>
@@ -117,25 +117,25 @@
</div> </div>
<div class="item-list"> <div class="item-list">
{{#each weapons as |item|}} {{#each weapons as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{item.system.damage}}</div></div> <div><strong>{{item.name}}</strong><div>{{item.system.damage}}</div></div>
<div class="item-controls"><button type="button" data-action="useWeapon" data-item-id="{{item.id}}">Attaque</button><button type="button" data-action="resolveWeaponDamage" data-item-id="{{item.id}}">Dégâts</button><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="useWeapon" data-item-id="{{item.id}}">Attaque</button><button type="button" data-action="resolveWeaponDamage" data-item-id="{{item.id}}">Dégâts</button><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
{{/each}} {{/each}}
{{#each armors as |item|}} {{#each armors as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>Prot {{item.system.protection}}</div></div> <div><strong>{{item.name}}</strong><div>Prot {{item.system.protection}}</div></div>
<div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
{{/each}} {{/each}}
{{#each equipment as |item|}} {{#each equipment as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.equipement"}} - {{item.system.category}}</div></div> <div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.equipement"}} - {{item.system.category}}</div></div>
<div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
{{/each}} {{/each}}
{{#each spells as |item|}} {{#each spells as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{item.system.tradition}} / {{item.system.polarity}}</div></div> <div><strong>{{item.name}}</strong><div>{{item.system.tradition}} / {{item.system.polarity}}</div></div>
<div class="item-controls"><button type="button" data-action="useSpell" data-item-id="{{item.id}}">Activer</button><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="useSpell" data-item-id="{{item.id}}">Activer</button><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
+6 -6
View File
@@ -148,7 +148,7 @@
</div> </div>
<div class="item-list skills-item-list"> <div class="item-list skills-item-list">
{{#each group.items as |entry|}} {{#each group.items as |entry|}}
<article class="item-card skill-card"> <article class="item-card skill-card" data-item-id="{{entry.item.id}}" draggable="true">
<div class="skill-card-main"> <div class="skill-card-main">
<strong>{{entry.item.name}}</strong> <strong>{{entry.item.name}}</strong>
<span class="skill-summary">Base {{entry.item.system.base}} · {{group.label}} {{group.profileValue}} · {{localize "LESOUBLIES.labels.valeurFinale"}} {{entry.finalValue}}</span> <span class="skill-summary">Base {{entry.item.system.base}} · {{group.label}} {{group.profileValue}} · {{localize "LESOUBLIES.labels.valeurFinale"}} {{entry.finalValue}}</span>
@@ -187,7 +187,7 @@
<div class="item-list"> <div class="item-list">
{{#if equippedWeapons.length}} {{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}} {{#each equippedWeapons as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.arme"}} - {{item.system.damage}}</div></div> <div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.arme"}} - {{item.system.damage}}</div></div>
<div class="item-controls"><button type="button" data-action="useWeapon" data-item-id="{{item.id}}">Attaque</button><button type="button" data-action="resolveWeaponDamage" data-item-id="{{item.id}}">Dégâts</button><button type="button" data-action="toggleEquipped" data-item-id="{{item.id}}">Retirer</button></div> <div class="item-controls"><button type="button" data-action="useWeapon" data-item-id="{{item.id}}">Attaque</button><button type="button" data-action="resolveWeaponDamage" data-item-id="{{item.id}}">Dégâts</button><button type="button" data-action="toggleEquipped" data-item-id="{{item.id}}">Retirer</button></div>
</article> </article>
@@ -206,7 +206,7 @@
</div> </div>
<div class="item-list"> <div class="item-list">
{{#each spells as |item|}} {{#each spells as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div> <div>
<strong>{{item.name}}</strong> <strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</div> <div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</div>
@@ -307,19 +307,19 @@
</div> </div>
<div class="item-list"> <div class="item-list">
{{#each weapons as |item|}} {{#each weapons as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.arme"}} - {{item.system.damage}}{{#if item.system.equipped}} - Équipée{{/if}}</div></div> <div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.arme"}} - {{item.system.damage}}{{#if item.system.equipped}} - Équipée{{/if}}</div></div>
<div class="item-controls"><button type="button" data-action="toggleEquipped" data-item-id="{{item.id}}">{{#if item.system.equipped}}Retirer{{else}}Équiper{{/if}}</button><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="toggleEquipped" data-item-id="{{item.id}}">{{#if item.system.equipped}}Retirer{{else}}Équiper{{/if}}</button><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
{{/each}} {{/each}}
{{#each armors as |item|}} {{#each armors as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.armure"}} - Prot {{item.system.protection}}</div></div> <div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.armure"}} - Prot {{item.system.protection}}</div></div>
<div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>
{{/each}} {{/each}}
{{#each equipment as |item|}} {{#each equipment as |item|}}
<article class="item-card"> <article class="item-card" data-item-id="{{item.id}}" draggable="true">
<div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.equipement"}} - {{item.system.category}}</div></div> <div><strong>{{item.name}}</strong><div>{{localize "TYPES.Item.equipement"}} - {{item.system.category}}</div></div>
<div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div> <div class="item-controls"><button type="button" data-action="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article> </article>