4 Commits

Author SHA1 Message Date
uberwald 552731bc3b Divers petits fixs
Release Creation / build (release) Successful in 3m58s
2026-05-04 20:39:43 +02:00
uberwald 0187daa1e5 - 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
2026-05-04 13:17:07 +02:00
uberwald a008543f61 Nettoyage des templates de travail 2026-05-04 09:48:54 +02:00
uberwald 3534bdf181 - Profils raciaux appliqués automatiquement - DsN opératonnel - Gestion plus fine des fils/orbes 2026-05-04 08:09:27 +02:00
99 changed files with 868 additions and 4829 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

+83 -1
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;
@@ -233,6 +270,9 @@
.fvtt-les-oublies .sheet-grid-2 { .fvtt-les-oublies .sheet-grid-2 {
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
} }
.fvtt-les-oublies .sheet-grid-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.fvtt-les-oublies .sheet-card { .fvtt-les-oublies .sheet-card {
background: linear-gradient(180deg, var(--lo-panel), var(--lo-panel-heavy)), linear-gradient(135deg, rgba(255, 255, 255, 0.24), transparent); background: linear-gradient(180deg, var(--lo-panel), var(--lo-panel-heavy)), linear-gradient(135deg, rgba(255, 255, 255, 0.24), transparent);
border: 1px solid rgba(133, 99, 74, 0.5); border: 1px solid rgba(133, 99, 74, 0.5);
@@ -362,6 +402,46 @@
.fvtt-les-oublies .group-block + .group-block { .fvtt-les-oublies .group-block + .group-block {
margin-top: var(--lo-space-lg); margin-top: var(--lo-space-lg);
} }
.fvtt-les-oublies .reserve-card .reserve-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--lo-space-sm);
margin-bottom: var(--lo-space-sm);
}
.fvtt-les-oublies .reserve-panel {
min-width: 0;
padding: 0.55rem 0.65rem;
border-radius: var(--lo-radius-lg);
background: linear-gradient(180deg, rgba(255, 250, 243, 0.7), rgba(230, 214, 185, 0.6));
border: 1px solid rgba(130, 98, 71, 0.2);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
}
.fvtt-les-oublies .reserve-panel h3 {
margin-bottom: 0.45rem;
}
.fvtt-les-oublies .transfer-list {
display: flex;
flex-direction: column;
gap: 0.35rem;
margin-top: 0.45rem;
}
.fvtt-les-oublies .transfer-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto;
gap: 0.4rem;
align-items: center;
}
.fvtt-les-oublies .transfer-row strong {
min-width: 0;
font-size: var(--lo-font-body);
}
.fvtt-les-oublies .transfer-row input[type="number"] {
width: 3.6rem;
min-width: 3.6rem;
}
.fvtt-les-oublies .transfer-row .item-controls {
justify-content: flex-end;
}
.fvtt-les-oublies .group-header { .fvtt-les-oublies .group-header {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -723,8 +803,10 @@
} }
@media (max-width: 900px) { @media (max-width: 900px) {
.fvtt-les-oublies .sheet-grid-2, .fvtt-les-oublies .sheet-grid-2,
.fvtt-les-oublies .sheet-grid-3,
.fvtt-les-oublies .profile-grid, .fvtt-les-oublies .profile-grid,
.fvtt-les-oublies .creation-slots { .fvtt-les-oublies .creation-slots,
.fvtt-les-oublies .reserve-card .reserve-grid {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.fvtt-les-oublies .hero-banner { .fvtt-les-oublies .hero-banner {
File diff suppressed because one or more lines are too long
+8
View File
@@ -169,6 +169,14 @@
"creditCauchemar": "Crédits Cauchemar", "creditCauchemar": "Crédits Cauchemar",
"pointsSonges": "Points de Songes", "pointsSonges": "Points de Songes",
"pointsCauchemar": "Points de Cauchemar", "pointsCauchemar": "Points de Cauchemar",
"threadReserves": "Fils et globes",
"personalReserve": "Réserve personnelle",
"companyReserve": "Réserve de compagnie",
"threadSonges": "Fils de Songes",
"threadCauchemar": "Fils de Cauchemar",
"emptyGlobes": "Globes vides",
"toCompany": "→ Compagnie",
"toActor": "← Perso",
"degats": "Dégâts", "degats": "Dégâts",
"sortilegesSonges": "Sortilèges de Songes", "sortilegesSonges": "Sortilèges de Songes",
"sortilegesCauchemar": "Sortilèges de Cauchemar", "sortilegesCauchemar": "Sortilèges de Cauchemar",
+99 -1
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;
@@ -214,6 +258,10 @@
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
} }
.sheet-grid-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.sheet-card { .sheet-card {
background: background:
linear-gradient(180deg, var(--lo-panel), var(--lo-panel-heavy)), linear-gradient(180deg, var(--lo-panel), var(--lo-panel-heavy)),
@@ -379,6 +427,54 @@
margin-top: var(--lo-space-lg); margin-top: var(--lo-space-lg);
} }
.reserve-card .reserve-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--lo-space-sm);
margin-bottom: var(--lo-space-sm);
}
.reserve-panel {
min-width: 0;
padding: 0.55rem 0.65rem;
border-radius: var(--lo-radius-lg);
background: linear-gradient(180deg, rgba(255, 250, 243, 0.7), rgba(230, 214, 185, 0.6));
border: 1px solid rgba(130, 98, 71, 0.2);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
}
.reserve-panel h3 {
margin-bottom: 0.45rem;
}
.transfer-list {
display: flex;
flex-direction: column;
gap: 0.35rem;
margin-top: 0.45rem;
}
.transfer-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto;
gap: 0.4rem;
align-items: center;
}
.transfer-row strong {
min-width: 0;
font-size: var(--lo-font-body);
}
.transfer-row input[type="number"] {
width: 3.6rem;
min-width: 3.6rem;
}
.transfer-row .item-controls {
justify-content: flex-end;
}
.group-header { .group-header {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -833,8 +929,10 @@
@media (max-width: 900px) { @media (max-width: 900px) {
.sheet-grid-2, .sheet-grid-2,
.sheet-grid-3,
.profile-grid, .profile-grid,
.creation-slots { .creation-slots,
.reserve-card .reserve-grid {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
@@ -37,6 +37,7 @@ export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(fou
openCombatPreset: LesOubliesActorSheet.#onOpenCombatPreset, openCombatPreset: LesOubliesActorSheet.#onOpenCombatPreset,
openThreadHarvest: LesOubliesActorSheet.#onOpenThreadHarvest, openThreadHarvest: LesOubliesActorSheet.#onOpenThreadHarvest,
openLinkedActor: LesOubliesActorSheet.#onOpenLinkedActor, openLinkedActor: LesOubliesActorSheet.#onOpenLinkedActor,
transferThread: LesOubliesActorSheet.#onTransferThread,
}, },
} }
@@ -76,10 +77,27 @@ export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(fou
} }
} }
_prepareWeaponEntries(items = []) {
return items.map((item) => ({
...item.toObject(),
id: item.id,
displayDamage: LesOubliesUtility.formatWeaponDamage(this.document, item),
}))
}
_onRender(context, options) { _onRender(context, options) {
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
} }
@@ -217,4 +235,26 @@ export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(fou
const actor = game.actors.get(actorId) const actor = game.actors.get(actorId)
if (actor) actor.sheet.render(true) if (actor) actor.sheet.render(true)
} }
static async #onTransferThread(event, target) {
const resourceKey = target.dataset.resourceKey
const direction = target.dataset.direction || "toCompany"
if (!resourceKey || !this.document?.transferThreadReserve) return
const row = target.closest("[data-transfer-row]")
const amountField = row?.querySelector?.("[data-transfer-amount]")
const amount = Math.max(Math.trunc(Number(amountField?.value ?? 1)), 0)
if (amount < 1) {
ui.notifications.warn("Indiquez une quantité à transférer.")
return
}
const success = await this.document.transferThreadReserve(resourceKey, amount, direction)
if (!success) {
ui.notifications.warn("Transfert impossible avec les réserves actuelles.")
return
}
this.render()
}
} }
@@ -105,6 +105,9 @@ export default class LesOubliesItemSheet extends HandlebarsApplicationMixin(foun
choiceSets, choiceSets,
enriched, enriched,
enrichedDescription: foundry.utils.getProperty(enriched, "description") ?? "", enrichedDescription: foundry.utils.getProperty(enriched, "description") ?? "",
weaponDamagePreview: this.document.type === "arme"
? LesOubliesUtility.formatWeaponDamage(this.document.parent instanceof Actor ? this.document.parent : null, this.document)
: "",
} }
} }
@@ -17,7 +17,7 @@ export default class LesOubliesCompagnieSheet extends LesOubliesActorSheet {
static PARTS = { static PARTS = {
sheet: { sheet: {
template: "systems/fvtt-les-oublies/templates/actor-compagnie-sheet-v4.hbs", template: "systems/fvtt-les-oublies/templates/actor-compagnie-sheet-v5.hbs",
}, },
} }
@@ -3,7 +3,7 @@ import LesOubliesItemSheet from "./base-item-sheet.mjs"
export default class LesOubliesCompetenceSheet extends LesOubliesItemSheet { export default class LesOubliesCompetenceSheet extends LesOubliesItemSheet {
static PARTS = { static PARTS = {
sheet: { sheet: {
template: "systems/fvtt-les-oublies/templates/item-competence-sheet.hbs", template: "systems/fvtt-les-oublies/templates/item-competence-sheet-v2.hbs",
}, },
} }
} }
@@ -44,7 +44,7 @@ export default class LesOubliesCreatureSheet extends LesOubliesActorSheet {
context.derived = this.document.getDerivedOverview() context.derived = this.document.getDerivedOverview()
context.skillGroups = this.document.getGroupedCompetences() context.skillGroups = this.document.getGroupedCompetences()
context.spells = this.document.getEmbeddedItems("sortilege") context.spells = this.document.getEmbeddedItems("sortilege")
context.weapons = this.document.getEmbeddedItems("arme") context.weapons = this._prepareWeaponEntries(this.document.getEmbeddedItems("arme"))
context.armors = this.document.getEmbeddedItems("armure") context.armors = this.document.getEmbeddedItems("armure")
context.equipment = this.document.getEmbeddedItems("equipement") context.equipment = this.document.getEmbeddedItems("equipement")
return context return context
@@ -20,7 +20,7 @@ export default class LesOubliesPersonnageSheet extends LesOubliesActorSheet {
static PARTS = { static PARTS = {
sheet: { sheet: {
template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet-v14.hbs", template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet-v18.hbs",
}, },
} }
@@ -64,7 +64,7 @@ export default class LesOubliesPersonnageSheet extends LesOubliesActorSheet {
context.skillGroups.slice(splitIndex), context.skillGroups.slice(splitIndex),
] ]
context.spells = this.document.getEmbeddedItems("sortilege") context.spells = this.document.getEmbeddedItems("sortilege")
context.weapons = this.document.getEmbeddedItems("arme") context.weapons = this._prepareWeaponEntries(this.document.getEmbeddedItems("arme"))
context.equippedWeapons = context.weapons.filter((item) => item.system.equipped) context.equippedWeapons = context.weapons.filter((item) => item.system.equipped)
context.armors = this.document.getEmbeddedItems("armure") context.armors = this.document.getEmbeddedItems("armure")
context.equipment = this.document.getEmbeddedItems("equipement") context.equipment = this.document.getEmbeddedItems("equipement")
+117 -2
View File
@@ -4,6 +4,7 @@ import { LesOubliesRolls } from "./les-oublies-rolls.js"
export class LesOubliesActor extends Actor { export class LesOubliesActor extends Actor {
static CREATION_ITEM_TYPES = new Set(["race", "tribu", "metier"]) static CREATION_ITEM_TYPES = new Set(["race", "tribu", "metier"])
static THREAD_RESOURCE_KEYS = new Set(["songesThreads", "cauchemarThreads", "emptyGlobes"])
prepareDerivedData() { prepareDerivedData() {
super.prepareDerivedData() super.prepareDerivedData()
@@ -22,14 +23,27 @@ export class LesOubliesActor extends Actor {
system.cauchemar.max = totals.cauchemarPoints system.cauchemar.max = totals.cauchemarPoints
system.songes.points = Math.clamp(Number(system.songes.points ?? totals.songesPoints), 0, totals.songesPoints) system.songes.points = Math.clamp(Number(system.songes.points ?? totals.songesPoints), 0, totals.songesPoints)
system.cauchemar.points = Math.clamp(Number(system.cauchemar.points ?? totals.cauchemarPoints), 0, totals.cauchemarPoints) system.cauchemar.points = Math.clamp(Number(system.cauchemar.points ?? totals.cauchemarPoints), 0, totals.cauchemarPoints)
system.reserves.songesThreads = Math.max(Number(system.reserves?.songesThreads ?? 0), 0)
system.reserves.cauchemarThreads = Math.max(Number(system.reserves?.cauchemarThreads ?? 0), 0)
system.reserves.emptyGlobes = Math.max(Number(system.reserves?.emptyGlobes ?? 0), 0)
return
}
if (this.type === "compagnie") {
const system = this.system
system.power.sharedDreamPoints = Math.max(Number(system.power?.sharedDreamPoints ?? 0), 0)
system.reserves.songesThreads = Math.max(Number(system.reserves?.songesThreads ?? 0), 0)
system.reserves.cauchemarThreads = Math.max(Number(system.reserves?.cauchemarThreads ?? 0), 0)
system.reserves.emptyGlobes = Math.max(Number(system.reserves?.emptyGlobes ?? 0), 0)
return return
} }
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)
@@ -62,6 +76,7 @@ export class LesOubliesActor extends Actor {
async assignCreationItem(sourceItem) { async assignCreationItem(sourceItem) {
if (!sourceItem || !LesOubliesActor.CREATION_ITEM_TYPES.has(sourceItem.type)) return null if (!sourceItem || !LesOubliesActor.CREATION_ITEM_TYPES.has(sourceItem.type)) return null
const previousItem = this.getCreationItem(sourceItem.type)
const itemData = sourceItem.toObject() const itemData = sourceItem.toObject()
delete itemData._id delete itemData._id
@@ -77,12 +92,19 @@ export class LesOubliesActor extends Actor {
[`system.references.${sourceItem.type}Id`]: createdItem.id, [`system.references.${sourceItem.type}Id`]: createdItem.id,
}) })
if (sourceItem.type === "race") {
await this.syncRaceProfiles({ currentRace: createdItem })
await this.syncRaceDomains({ currentRace: createdItem, previousRace: previousItem })
}
return createdItem return createdItem
} }
async clearCreationItem(type) { async clearCreationItem(type) {
if (!LesOubliesActor.CREATION_ITEM_TYPES.has(type)) return if (!LesOubliesActor.CREATION_ITEM_TYPES.has(type)) return
const previousItem = this.getCreationItem(type)
const existingIds = this.getEmbeddedItems(type).map((item) => item.id) const existingIds = this.getEmbeddedItems(type).map((item) => item.id)
if (existingIds.length) { if (existingIds.length) {
await this.deleteEmbeddedDocuments("Item", existingIds, { renderSheet: false }) await this.deleteEmbeddedDocuments("Item", existingIds, { renderSheet: false })
@@ -91,6 +113,11 @@ export class LesOubliesActor extends Actor {
await this.update({ await this.update({
[`system.references.${type}Id`]: "", [`system.references.${type}Id`]: "",
}) })
if (type === "race") {
await this.syncRaceProfiles({ currentRace: null })
await this.syncRaceDomains({ currentRace: null, previousRace: previousItem })
}
} }
getCompagnie() { getCompagnie() {
@@ -98,10 +125,94 @@ export class LesOubliesActor extends Actor {
return compagnieId ? game.actors.get(compagnieId) ?? null : null return compagnieId ? game.actors.get(compagnieId) ?? null : null
} }
getThreadReserveOwner(source = "actor") {
if (source === "company" || source === "compagnie") return this.getCompagnie()
return this
}
getThreadReserves(source = "actor") {
const owner = this.getThreadReserveOwner(source)
return {
owner,
songesThreads: Math.max(Number(owner?.system?.reserves?.songesThreads ?? 0), 0),
cauchemarThreads: Math.max(Number(owner?.system?.reserves?.cauchemarThreads ?? 0), 0),
emptyGlobes: Math.max(Number(owner?.system?.reserves?.emptyGlobes ?? 0), 0),
}
}
async transferThreadReserve(resourceKey, amount, direction = "toCompany") {
if (!LesOubliesActor.THREAD_RESOURCE_KEYS.has(resourceKey)) return false
const company = this.getCompagnie()
if (!company) return false
const transferAmount = Math.max(Math.trunc(Number(amount ?? 0)), 0)
if (transferAmount < 1) return false
const fromActor = direction === "toCompany" ? this : company
const toActor = direction === "toCompany" ? company : this
const current = Math.max(Number(fromActor.system?.reserves?.[resourceKey] ?? 0), 0)
if (current < transferAmount) return false
const path = `system.reserves.${resourceKey}`
const targetCurrent = Math.max(Number(toActor.system?.reserves?.[resourceKey] ?? 0), 0)
await fromActor.update({ [path]: current - transferAmount })
await toActor.update({ [path]: targetCurrent + transferAmount })
return true
}
getCompetenceByKey(skillKey) { getCompetenceByKey(skillKey) {
return this.getEmbeddedItems("competence").find((item) => item.system.key === skillKey) ?? null return this.getEmbeddedItems("competence").find((item) => item.system.key === skillKey) ?? null
} }
getRaceLanguageDomains(race = this.getCreationItem("race")) {
return LesOubliesUtility.uniqueStrings(race?.system?.languageDomains ?? [])
}
getRaceProfiles(race = this.getCreationItem("race")) {
const profiles = LesOubliesUtility.createEmptyProfiles()
for (const key of Object.keys(profiles)) {
profiles[key] = Math.trunc(Number(race?.system?.profiles?.[key] ?? 0))
}
return profiles
}
async syncRaceProfiles({ currentRace = this.getCreationItem("race") } = {}) {
if (this.type !== "personnage") return false
const profiles = this.getRaceProfiles(currentRace)
const updateData = Object.fromEntries(
Object.entries(profiles).map(([key, value]) => [`system.profils.${key}`, value]),
)
await this.update(updateData)
if (currentRace) {
ui.notifications.info(`Profils raciaux appliqués depuis ${currentRace.name}.`)
}
return true
}
async syncRaceDomains({ currentRace = this.getCreationItem("race"), previousRace = null } = {}) {
if (this.type !== "personnage") return false
const competence = this.getCompetenceByKey("langues")
if (!competence) return false
const currentAutoDomains = LesOubliesUtility.uniqueStrings(competence.system.fixedDomains ?? [])
const previousRaceDomains = previousRace
? this.getRaceLanguageDomains(previousRace)
: currentAutoDomains
const autoDomainsToReplace = currentAutoDomains.length ? currentAutoDomains : previousRaceDomains
const nextAutoDomains = this.getRaceLanguageDomains(currentRace)
const manualDomains = LesOubliesUtility.uniqueStrings(
(competence.system.domains ?? []).filter((domain) => !autoDomainsToReplace.includes(domain)),
)
await competence.update({
"system.fixedDomains": nextAutoDomains,
"system.domains": LesOubliesUtility.uniqueStrings([...manualDomains, ...nextAutoDomains]),
})
return true
}
getSkillScoreByKey(skillKey) { getSkillScoreByKey(skillKey) {
const competence = this.getCompetenceByKey(skillKey) const competence = this.getCompetenceByKey(skillKey)
return competence ? this.computeSkillValue(competence) : 0 return competence ? this.computeSkillValue(competence) : 0
@@ -119,6 +230,8 @@ export class LesOubliesActor extends Actor {
item, item,
finalValue: this.computeSkillValue(item), finalValue: this.computeSkillValue(item),
profileLabel: LESOUBLIES_CONFIG.profileLabels[item.system.profileKey] ?? item.system.profileKey, profileLabel: LESOUBLIES_CONFIG.profileLabels[item.system.profileKey] ?? item.system.profileKey,
domains: LesOubliesUtility.uniqueStrings(item.system.domains ?? []),
fixedDomains: LesOubliesUtility.uniqueStrings(item.system.fixedDomains ?? []),
})) }))
} }
@@ -146,6 +259,8 @@ export class LesOubliesActor extends Actor {
cauchemarMax: this.system.cauchemar?.max ?? this.system.cauchemar?.points ?? 0, cauchemarMax: this.system.cauchemar?.max ?? this.system.cauchemar?.points ?? 0,
songesPoints: this.system.songes?.points ?? 0, songesPoints: this.system.songes?.points ?? 0,
cauchemarPoints: this.system.cauchemar?.points ?? 0, cauchemarPoints: this.system.cauchemar?.points ?? 0,
reserves: this.getThreadReserves(),
companyReserves: this.getThreadReserves("company"),
race: this.getCreationItem("race"), race: this.getCreationItem("race"),
tribu: this.getCreationItem("tribu"), tribu: this.getCreationItem("tribu"),
metier: this.getCreationItem("metier"), metier: this.getCreationItem("metier"),
+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",
} }
+22
View File
@@ -6,6 +6,8 @@ import { LesOubliesRolls } from "./les-oublies-rolls.js"
import * as models from "./models/index.mjs" import * as models from "./models/index.mjs"
import * as sheets from "./applications/sheets/_module.mjs" import * as sheets from "./applications/sheets/_module.mjs"
const DEFAULT_PERSONNAGE_TOKEN_TEXTURE = "systems/fvtt-les-oublies/assets/tokens/border_token_oublies.webp"
function ensureSystemStyles() { function ensureSystemStyles() {
const href = `systems/${game.system.id}/css/les-oublies.css` const href = `systems/${game.system.id}/css/les-oublies.css`
const existingLink = document.querySelector(`link[href$="${href}"]`) const existingLink = document.querySelector(`link[href$="${href}"]`)
@@ -19,6 +21,13 @@ function ensureSystemStyles() {
document.head.append(link) document.head.append(link)
} }
function usesFoundryDefaultTokenTexture(actor, data) {
const tokenTexture = foundry.utils.getProperty(data, "prototypeToken.texture.src")
?? foundry.utils.getProperty(actor, "prototypeToken.texture.src")
?? ""
return !tokenTexture || tokenTexture === CONST.DEFAULT_TOKEN || tokenTexture === "icons/svg/mystery-man.svg"
}
Hooks.once("init", function () { Hooks.once("init", function () {
console.info("Les Oubliés | Initialisation du système") console.info("Les Oubliés | Initialisation du système")
ensureSystemStyles() ensureSystemStyles()
@@ -67,3 +76,16 @@ Hooks.once("init", function () {
LesOubliesUtility.registerHandlebarsHelpers() LesOubliesUtility.registerHandlebarsHelpers()
}) })
Hooks.on("preCreateActor", function (actor, data) {
if (actor.type !== "personnage") return
if (!usesFoundryDefaultTokenTexture(actor, data)) return
actor.updateSource({
prototypeToken: {
texture: {
src: DEFAULT_PERSONNAGE_TOKEN_TEXTURE,
},
},
})
})
+294 -47
View File
@@ -289,10 +289,13 @@ export class LesOubliesRolls {
const result = await this.resolveTest(actor, data) const result = await this.resolveTest(actor, data)
if (!result) return null if (!result) return null
const initiativeScore = Math.min(Math.max(Math.ceil(result.final / 2), 0), 12)
await this.#syncInitiativeToCombat(actor, initiativeScore)
return this.#createChatMessage(actor, { return this.#createChatMessage(actor, {
...result, ...result,
mode: "initiative", mode: "initiative",
initiativeScore: Math.min(Math.max(Math.ceil(result.final / 2), 0), 12), initiativeScore,
successLabel: null, successLabel: null,
}) })
} }
@@ -439,7 +442,12 @@ export class LesOubliesRolls {
const data = await this.#promptSpellOptions(actor, spell) const data = await this.#promptSpellOptions(actor, spell)
if (!data) return null if (!data) return null
const activation = await this.#withActorLock(`spell:${actor.id}`, async () => { const paymentMode = String(data.paymentMode || "points")
const paymentSource = this.#normalizeThreadReserveSource(data.paymentSource)
const paymentOwner = paymentMode === "fils"
? this.#getThreadReserveOwner(actor, paymentSource)
: actor
const activation = await this.#withActorLock(`spell:${paymentOwner?.id ?? actor.id}:${paymentMode}`, async () => {
const skill = actor.getCompetenceByKey?.(spell.system.skillKey) ?? null const skill = actor.getCompetenceByKey?.(spell.system.skillKey) ?? null
const skillBase = Number(skill?.system?.base ?? 0) const skillBase = Number(skill?.system?.base ?? 0)
if (skillBase < 1) { if (skillBase < 1) {
@@ -450,7 +458,6 @@ export class LesOubliesRolls {
const métierMatch = this.#actorMatchesSpellGrant(actor, spell) const métierMatch = this.#actorMatchesSpellGrant(actor, spell)
const surcharge = !métierMatch const surcharge = !métierMatch
const effectiveCost = Number(data.actualCost ?? 0) * (surcharge ? 2 : 1) const effectiveCost = Number(data.actualCost ?? 0) * (surcharge ? 2 : 1)
const paymentMode = String(data.paymentMode || "points")
if (paymentMode === "points") { if (paymentMode === "points") {
const resource = spell.system.polarity || "songes" const resource = spell.system.polarity || "songes"
const available = Number(actor.system?.[resource]?.points ?? 0) const available = Number(actor.system?.[resource]?.points ?? 0)
@@ -468,9 +475,43 @@ export class LesOubliesRolls {
[`system.${resource}.points`]: Math.max(available - effectiveCost, 0), [`system.${resource}.points`]: Math.max(available - effectiveCost, 0),
}) })
} }
} else {
const reserve = this.#getThreadReserveState(actor, paymentSource)
if (!reserve.owner) {
ui.notifications.warn("Aucune réserve de compagnie n'est liée à ce personnage.")
return null
} }
return { métierMatch, surcharge, effectiveCost, paymentMode } const resourceKey = this.#getThreadResourceKey(spell.system.polarity)
const available = Number(reserve[resourceKey] ?? 0)
if (available < effectiveCost) {
ui.notifications.warn(game.i18n.format("LESOUBLIES.rolls.notEnoughResourceDetailed", {
resource: `${effectiveCost > 1 ? "fils" : "fil"} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`,
actor: reserve.label,
required: effectiveCost,
available,
}))
return null
}
if (effectiveCost > 0) {
await reserve.owner.update({
[`system.reserves.${resourceKey}`]: Math.max(available - effectiveCost, 0),
"system.reserves.emptyGlobes": Number(reserve.emptyGlobes ?? 0) + effectiveCost,
})
}
}
return {
métierMatch,
surcharge,
effectiveCost,
paymentMode,
paymentSource,
paymentSourceLabel: paymentMode === "fils"
? this.#getThreadReserveLabel(actor, paymentSource)
: actor.name,
}
}) })
if (!activation) return null if (!activation) return null
@@ -487,6 +528,7 @@ export class LesOubliesRolls {
costLabel: activation.paymentMode === "points" costLabel: activation.paymentMode === "points"
? `${activation.effectiveCost} point${activation.effectiveCost > 1 ? "s" : ""} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}` ? `${activation.effectiveCost} point${activation.effectiveCost > 1 ? "s" : ""} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`
: `${activation.effectiveCost} fil${activation.effectiveCost > 1 ? "s" : ""} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`, : `${activation.effectiveCost} fil${activation.effectiveCost > 1 ? "s" : ""} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`,
paymentSourceLabel: activation.paymentSourceLabel,
métierMatch: activation.métierMatch, métierMatch: activation.métierMatch,
surcharge: activation.surcharge, surcharge: activation.surcharge,
notes: data.notes?.trim() || "", notes: data.notes?.trim() || "",
@@ -578,6 +620,17 @@ export class LesOubliesRolls {
if (!data) return null if (!data) return null
const threadCount = Math.max(Number(data.threadCount ?? 1), 1) const threadCount = Math.max(Number(data.threadCount ?? 1), 1)
const destinationSource = this.#normalizeThreadReserveSource(data.destinationSource)
const destinationReserve = this.#getThreadReserveState(actor, destinationSource)
if (!destinationReserve.owner) {
ui.notifications.warn("Aucune réserve de compagnie n'est liée à ce personnage.")
return null
}
if (Number(destinationReserve.emptyGlobes ?? 0) < threadCount) {
ui.notifications.warn(`${destinationReserve.label} ne dispose pas de suffisamment de globes vides pour stocker cette récolte.`)
return null
}
const damageTaken = threadCount const damageTaken = threadCount
const difficulty = -3 * (threadCount - 1) const difficulty = -3 * (threadCount - 1)
const result = await this.resolveTest(actor, { const result = await this.resolveTest(actor, {
@@ -599,8 +652,11 @@ export class LesOubliesRolls {
if (!result) return null if (!result) return null
await this.#applyDamageToActor(actor, damageTaken) await this.#applyDamageToActor(actor, damageTaken)
const durationRoll = await (new Roll("1d12")).evaluate() if (result.success) {
const effectRoll = await (new Roll("1d12")).evaluate() await this.#storeHarvestedThreads(actor, destinationSource, data.threadType, threadCount)
}
const durationRoll = await this.#evaluateDisplayedRoll("1d12")
const effectRoll = await this.#evaluateDisplayedRoll("1d12")
const effectIndex = Number(effectRoll.total ?? 1) const effectIndex = Number(effectRoll.total ?? 1)
result.metadata.action.harvest = { result.metadata.action.harvest = {
threadType: data.threadType, threadType: data.threadType,
@@ -611,6 +667,8 @@ export class LesOubliesRolls {
sideEffectRoll: effectIndex, sideEffectRoll: effectIndex,
sideEffectText: HARVEST_SIDE_EFFECTS[effectIndex], sideEffectText: HARVEST_SIDE_EFFECTS[effectIndex],
sleeperLabel: data.sleeperLabel?.trim() || "Dormeur non précisé", sleeperLabel: data.sleeperLabel?.trim() || "Dormeur non précisé",
destinationLabel: destinationReserve.label,
stored: result.success,
} }
return this.#createChatMessage(actor, result) return this.#createChatMessage(actor, result)
@@ -661,14 +719,7 @@ export class LesOubliesRolls {
} }
const pool = this.#buildPool(options.rollMode, options.extraDie) const pool = this.#buildPool(options.rollMode, options.extraDie)
const dice = [] const dice = await this.#rollExplodingPool(pool)
for (let index = 0; index < pool.length; index += 1) {
const spec = pool[index]
dice.push(await this.#rollExplodingDie({
...spec,
index,
}))
}
const selectedIndex = this.#needsSelection(dice) const selectedIndex = this.#needsSelection(dice)
? await this.#promptDieSelection(actor, options.label, dice) ? await this.#promptDieSelection(actor, options.label, dice)
@@ -737,6 +788,23 @@ export class LesOubliesRolls {
}) })
} }
static async #syncInitiativeToCombat(actor, initiativeScore) {
if (!game.combat || !actor?.id) return false
const combatants = game.combat.combatants.filter((combatant) => combatant.actorId === actor.id)
if (!combatants.length) {
ui.notifications.warn(`${actor.name} n'est pas présent dans le combat actif.`)
return false
}
await game.combat.updateEmbeddedDocuments("Combatant", combatants.map((combatant) => ({
_id: combatant.id,
initiative: initiativeScore,
})))
return true
}
static async #createConfrontationMessage(actor, data, actionData = null) { static async #createConfrontationMessage(actor, data, actionData = null) {
const attacker = await this.resolveTest(actor, { const attacker = await this.resolveTest(actor, {
label: data.attackerLabel, label: data.attackerLabel,
@@ -1129,17 +1197,20 @@ export class LesOubliesRolls {
const polarityLabel = spell.system.polarity === "cauchemar" const polarityLabel = spell.system.polarity === "cauchemar"
? game.i18n.localize("LESOUBLIES.ui.cauchemar") ? game.i18n.localize("LESOUBLIES.ui.cauchemar")
: game.i18n.localize("LESOUBLIES.ui.songes") : game.i18n.localize("LESOUBLIES.ui.songes")
const threadReserves = this.#getThreadDialogState(actor)
const content = await foundry.applications.handlebars.renderTemplate( const content = await foundry.applications.handlebars.renderTemplate(
"systems/fvtt-les-oublies/templates/dialog-spell-activation.hbs", "systems/fvtt-les-oublies/templates/dialog-spell-activation-v2.hbs",
{ {
actor, actor,
spell, spell,
resources: this.#getDialogResources(actor), resources: this.#getDialogResources(actor),
threadReserves,
isMetierMatch, isMetierMatch,
effectiveCostLabel: `${effectiveCost} point${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`, effectiveCostLabel: `${effectiveCost} point${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`,
values: { values: {
actualCost: Number(spell.system.cost ?? 0), actualCost: Number(spell.system.cost ?? 0),
paymentMode: "points", paymentMode: "points",
paymentSource: "actor",
targetLabel: "", targetLabel: "",
notes: "", notes: "",
}, },
@@ -1151,6 +1222,9 @@ export class LesOubliesRolls {
title: `Activer ${spell.name}`, title: `Activer ${spell.name}`,
}, },
content, content,
render: (_event, dialog) => {
this.#bindSpellPaymentSelection(dialog, { actor, spell, effectiveCost })
},
buttons: [ buttons: [
{ {
action: "activate", action: "activate",
@@ -1161,8 +1235,9 @@ export class LesOubliesRolls {
if (!form) return null if (!form) return null
const data = this.#formToObject(form) const data = this.#formToObject(form)
return { return {
actualCost: Number(data.actualCost ?? spell.system.cost ?? 0), actualCost: Math.max(Number(data.actualCost ?? spell.system.cost ?? 0), 0),
paymentMode: String(data.paymentMode || "points"), paymentMode: String(data.paymentMode || "points"),
paymentSource: String(data.paymentSource || "actor"),
targetLabel: String(data.targetLabel || ""), targetLabel: String(data.targetLabel || ""),
notes: String(data.notes || ""), notes: String(data.notes || ""),
} }
@@ -1338,16 +1413,19 @@ export class LesOubliesRolls {
} }
static async #promptThreadHarvestOptions(actor) { static async #promptThreadHarvestOptions(actor) {
const threadReserves = this.#getThreadDialogState(actor)
const content = await foundry.applications.handlebars.renderTemplate( const content = await foundry.applications.handlebars.renderTemplate(
"systems/fvtt-les-oublies/templates/dialog-thread-harvest.hbs", "systems/fvtt-les-oublies/templates/dialog-thread-harvest-v2.hbs",
{ {
actor, actor,
rollModes: this.getRollModes(), rollModes: this.getRollModes(),
extraDieModes: this.getExtraDieModes(), extraDieModes: this.getExtraDieModes(),
resources: this.#getDialogResources(actor), resources: this.#getDialogResources(actor),
threadReserves,
values: { values: {
threadType: "songes", threadType: "songes",
threadCount: 1, threadCount: 1,
destinationSource: "actor",
rollMode: this.getDefaultRollMode(actor), rollMode: this.getDefaultRollMode(actor),
extraDie: "", extraDie: "",
sleeperLabel: "", sleeperLabel: "",
@@ -1373,6 +1451,7 @@ export class LesOubliesRolls {
return { return {
threadType: String(data.threadType || "songes"), threadType: String(data.threadType || "songes"),
threadCount: Number(data.threadCount ?? 1), threadCount: Number(data.threadCount ?? 1),
destinationSource: String(data.destinationSource || "actor"),
rollMode: String(data.rollMode || this.getDefaultRollMode(actor)), rollMode: String(data.rollMode || this.getDefaultRollMode(actor)),
extraDie: String(data.extraDie || ""), extraDie: String(data.extraDie || ""),
sleeperLabel: String(data.sleeperLabel || ""), sleeperLabel: String(data.sleeperLabel || ""),
@@ -1441,31 +1520,111 @@ export class LesOubliesRolls {
return dice return dice
} }
static async #rollExplodingDie({ type, index, source = "base" }) { static async #rollExplodingPool(pool) {
const faces = [] const dice = pool.map(({ type, source = "base" }, index) => ({
let total = 0
let lastFace = 12
while (lastFace === 12) {
const roll = await (new Roll("1d12")).evaluate()
lastFace = Number(roll.total ?? 0)
faces.push(lastFace)
total += lastFace
}
const typeLabel = game.i18n.localize(`LESOUBLIES.rolls.dice.${type}`)
return {
index, index,
type, type,
typeLabel, typeLabel: game.i18n.localize(`LESOUBLIES.rolls.dice.${type}`),
source, source,
sourceLabel: source === "extra" ? game.i18n.localize("LESOUBLIES.rolls.extraDie") : null, sourceLabel: source === "extra" ? game.i18n.localize("LESOUBLIES.rolls.extraDie") : null,
faces, faces: [],
firstFace: faces[0] ?? 0, rolls: [],
total, total: 0,
exploded: faces.length > 1, }))
breakdown: faces.join(" + "),
let pendingDice = [...dice]
while (pendingDice.length) {
const roll = await this.#evaluateDisplayedRoll(
Array.from({ length: pendingDice.length }, () => "1d12").join(" + "),
(pendingRoll) => this.#applyDieAppearances(pendingRoll, pendingDice),
)
const dieTerms = roll.terms.filter((term) => Number(term.faces ?? 0) === 12)
const nextPendingDice = []
pendingDice.forEach((die, index) => {
const face = Number(dieTerms[index]?.results?.[0]?.result ?? 0)
die.rolls.push(roll)
die.faces.push(face)
die.total += face
if (face === 12) nextPendingDice.push(die)
})
pendingDice = nextPendingDice
} }
return dice.map((die) => ({
...die,
firstFace: die.faces[0] ?? 0,
exploded: die.faces.length > 1,
breakdown: die.faces.join(" + "),
}))
}
static #applyDieAppearances(roll, dice) {
const dieTerms = roll.terms.filter((term) => Number(term.faces ?? 0) === 12)
dieTerms.forEach((term, index) => {
term.options ??= {}
term.options.appearance = this.#getDieAppearance(dice[index]?.type)
})
}
static #getDieAppearance(type) {
switch (type) {
case "songes":
return {
foreground: "#111111",
background: "#f3efe4",
outline: "#b8aa87",
}
case "cauchemar":
return {
foreground: "#f4f0e8",
background: "#111111",
outline: "#5d5d5d",
}
default:
return {
foreground: "#201813",
background: "#ddd0b0",
outline: "#8d5c3b",
}
}
}
static async #evaluateDisplayedRoll(formula, configureRoll = null) {
const roll = typeof formula === "string" ? new Roll(formula) : formula
if (configureRoll) configureRoll(roll)
await roll.evaluate()
await this.#showDiceSoNice(roll)
return roll
}
static async #showDiceSoNice(roll) {
if (!game.modules.get("dice-so-nice")?.active) return
if (!game.dice3d?.showForRoll) return
const coreRollMode = game.settings.get("core", "rollMode")
let whisper = null
let blind = false
switch (coreRollMode) {
case "blindroll":
blind = true
case "gmroll":
whisper = ChatMessage.getWhisperRecipients("GM").map((user) => user.id)
break
case "selfroll":
whisper = [game.user.id]
break
case "publicroll":
case "roll":
default:
whisper = null
break
}
await game.dice3d.showForRoll(roll, game.user, true, whisper, blind)
} }
static #needsSelection(dice) { static #needsSelection(dice) {
@@ -1571,9 +1730,106 @@ export class LesOubliesRolls {
songesPoints: Number(context.system.songes?.points ?? 0), songesPoints: Number(context.system.songes?.points ?? 0),
cauchemarValue: Number(context.system.cauchemar?.value ?? 0), cauchemarValue: Number(context.system.cauchemar?.value ?? 0),
cauchemarPoints: Number(context.system.cauchemar?.points ?? 0), cauchemarPoints: Number(context.system.cauchemar?.points ?? 0),
songesThreads: Number(context.system.reserves?.songesThreads ?? 0),
cauchemarThreads: Number(context.system.reserves?.cauchemarThreads ?? 0),
emptyGlobes: Number(context.system.reserves?.emptyGlobes ?? 0),
} }
} }
static #normalizeThreadReserveSource(source) {
return ["company", "compagnie"].includes(String(source || "").toLowerCase()) ? "company" : "actor"
}
static #getThreadReserveOwner(actor, source = "actor") {
return this.#normalizeThreadReserveSource(source) === "company"
? actor?.getCompagnie?.() ?? null
: actor
}
static #getThreadReserveLabel(actor, source = "actor") {
const normalized = this.#normalizeThreadReserveSource(source)
if (normalized === "actor") return "Réserve personnelle"
const company = this.#getThreadReserveOwner(actor, normalized)
return company ? `Réserve de compagnie — ${company.name}` : "Réserve de compagnie"
}
static #getThreadResourceKey(polarity) {
return polarity === "cauchemar" ? "cauchemarThreads" : "songesThreads"
}
static #getThreadReserveState(actor, source = "actor") {
const owner = this.#getThreadReserveOwner(actor, source)
return {
owner,
source: this.#normalizeThreadReserveSource(source),
label: this.#getThreadReserveLabel(actor, source),
songesThreads: Math.max(Number(owner?.system?.reserves?.songesThreads ?? 0), 0),
cauchemarThreads: Math.max(Number(owner?.system?.reserves?.cauchemarThreads ?? 0), 0),
emptyGlobes: Math.max(Number(owner?.system?.reserves?.emptyGlobes ?? 0), 0),
}
}
static #getThreadDialogState(actor) {
const actorReserve = this.#getThreadReserveState(actor, "actor")
const companyReserve = this.#getThreadReserveState(actor, "company")
const options = [
{ value: "actor", label: actorReserve.label },
]
if (companyReserve.owner) options.push({ value: "company", label: companyReserve.label })
return {
actor: actorReserve,
company: companyReserve,
options,
hasCompany: Boolean(companyReserve.owner),
}
}
static async #storeHarvestedThreads(actor, destinationSource, threadType, threadCount) {
const reserve = this.#getThreadReserveState(actor, destinationSource)
if (!reserve.owner || threadCount < 1) return false
const resourceKey = this.#getThreadResourceKey(threadType)
await reserve.owner.update({
[`system.reserves.${resourceKey}`]: Number(reserve[resourceKey] ?? 0) + threadCount,
"system.reserves.emptyGlobes": Math.max(Number(reserve.emptyGlobes ?? 0) - threadCount, 0),
})
return true
}
static #bindSpellPaymentSelection(dialog, { actor, spell, effectiveCost }) {
const root = this.#getDialogElement(dialog)
const form = root?.querySelector("form")
if (!form) return
const modeField = form.elements.namedItem("paymentMode")
const sourceField = form.elements.namedItem("paymentSource")
const effectiveCostField = root.querySelector("[data-effective-cost]")
const sourceWrapper = root.querySelector("[data-payment-source]")
const sourceHint = root.querySelector("[data-payment-source-hint]")
const update = () => {
const paymentMode = modeField instanceof HTMLSelectElement ? String(modeField.value || "points") : "points"
const paymentSource = sourceField instanceof HTMLSelectElement ? String(sourceField.value || "actor") : "actor"
const polarityLabel = spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"
if (effectiveCostField instanceof HTMLInputElement) {
effectiveCostField.value = paymentMode === "points"
? `${effectiveCost} point${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`
: `${effectiveCost} fil${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`
}
if (sourceWrapper instanceof HTMLElement) {
sourceWrapper.hidden = paymentMode !== "fils"
}
if (sourceHint instanceof HTMLElement) {
sourceHint.textContent = paymentMode === "fils"
? `${this.#getThreadReserveLabel(actor, paymentSource)} utilisée. Les globes vidés y retournent automatiquement.`
: "La dépense se fait dans les points de Songes ou de Cauchemar du personnage."
}
}
if (modeField instanceof HTMLSelectElement) modeField.addEventListener("change", update)
if (sourceField instanceof HTMLSelectElement) sourceField.addEventListener("change", update)
update()
}
static #createSpentResource(extraDie) { static #createSpentResource(extraDie) {
if (!extraDie) return null if (!extraDie) return null
return { return {
@@ -1860,16 +2116,7 @@ export class LesOubliesRolls {
} }
static #getWeaponBaseDamage(actor, weapon) { static #getWeaponBaseDamage(actor, weapon) {
const damageText = String(weapon?.system?.damage || "") return LesOubliesUtility.getWeaponBaseDamage(actor, weapon)
const parsed = this.#extractFirstInteger(damageText)
if (parsed !== null) return parsed
const explicitValue = Number(weapon?.system?.sizeValue ?? 0)
if (explicitValue > 0) return explicitValue
const actorSize = Number(actor?.system?.size?.value ?? 0)
const sizeModifier = Number(weapon?.system?.sizeModifier ?? 0)
return Math.max(actorSize + sizeModifier, 0)
} }
static #extractFirstInteger(text) { static #extractFirstInteger(text) {
+32
View File
@@ -97,6 +97,38 @@ export class LesOubliesUtility {
return [...documents].sort((left, right) => left.name.localeCompare(right.name, "fr")) return [...documents].sort((left, right) => left.name.localeCompare(right.name, "fr"))
} }
static getWeaponBaseDamage(actor, weapon) {
const sizeMode = String(weapon?.system?.sizeMode || "").toLowerCase()
if (sizeMode === "variable") {
const actorSize = Number(actor?.system?.size?.value ?? 0)
const sizeModifier = Number(weapon?.system?.sizeModifier ?? 0)
return Math.max(actorSize + sizeModifier, 0)
}
const explicitValue = Number(weapon?.system?.sizeValue ?? 0)
if (explicitValue > 0) return explicitValue
const damageText = String(weapon?.system?.damage || "")
const match = damageText.match(/-?\d+/)
return match ? Number(match[0]) : 0
}
static formatWeaponDamage(actor, weapon) {
const baseLabel = String(weapon?.system?.damage || "").trim()
const baseDamage = this.getWeaponBaseDamage(actor, weapon)
const sizeMode = String(weapon?.system?.sizeMode || "").toLowerCase()
if (sizeMode === "variable" || /taille/i.test(baseLabel)) {
return baseLabel ? `${baseLabel} (${baseDamage})` : String(baseDamage)
}
return baseLabel || String(baseDamage)
}
static uniqueStrings(values = []) {
return [...new Set((Array.isArray(values) ? values : [])
.map((value) => String(value ?? "").trim())
.filter(Boolean))]
}
static async prepareEnrichedHtml(documentName, type, systemData) { static async prepareEnrichedHtml(documentName, type, systemData) {
const htmlFields = game.system.documentTypes?.[documentName]?.[type]?.htmlFields ?? [] const htmlFields = game.system.documentTypes?.[documentName]?.[type]?.htmlFields ?? []
const enriched = {} const enriched = {}
+5
View File
@@ -21,6 +21,11 @@ export default class CompagnieDataModel extends foundry.abstract.TypeDataModel {
label: new fields.StringField({ initial: "" }), label: new fields.StringField({ initial: "" }),
details: new fields.StringField({ initial: "" }), details: new fields.StringField({ initial: "" }),
}), { initial: [] }), }), { initial: [] }),
reserves: new fields.SchemaField({
songesThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
cauchemarThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
emptyGlobes: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
}),
} }
} }
} }
+5
View File
@@ -56,6 +56,11 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
money: new fields.SchemaField({ money: new fields.SchemaField({
ecorces: new fields.NumberField({ initial: 0, integer: true, min: 0 }), ecorces: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
}), }),
reserves: new fields.SchemaField({
songesThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
cauchemarThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
emptyGlobes: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
}),
flagsNarratifs: new fields.SchemaField({ flagsNarratifs: new fields.SchemaField({
ombreDuTourment: new fields.BooleanField({ initial: false }), ombreDuTourment: new fields.BooleanField({ initial: false }),
isCaptain: new fields.BooleanField({ initial: false }), isCaptain: new fields.BooleanField({ initial: false }),
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.428719 7f25c15fe6c0 Delete type=3 #1 2026/05/04-20:19:31.964617 7f037d7ed6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.445629 7f2577fff6c0 Delete type=3 #1 2026/05/04-20:19:32.040110 7f037cfec6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.492466 7f25c15fe6c0 Delete type=3 #1 2026/05/04-20:19:32.300821 7f037d7ed6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.461618 7f25c1dff6c0 Delete type=3 #1 2026/05/04-20:19:32.128147 7f037e7ef6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.538848 7f25c0dfd6c0 Delete type=3 #1 2026/05/04-20:19:32.576403 7f037dfee6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.476671 7f25c0dfd6c0 Delete type=3 #1 2026/05/04-20:19:32.214437 7f037dfee6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.509155 7f2577fff6c0 Delete type=3 #1 2026/05/04-20:19:32.413325 7f037cfec6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.554628 7f25c15fe6c0 Delete type=3 #1 2026/05/04-20:19:32.651585 7f037d7ed6c0 Delete type=3 #1
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
2026/05/03-20:13:00.523663 7f25c1dff6c0 Delete type=3 #1 2026/05/04-20:19:32.499232 7f037e7ef6c0 Delete type=3 #1
Binary file not shown.
+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",
-114
View File
@@ -1,114 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet compagnie-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom de compagnie" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Capitaine, pouvoir partagé et liens forgés dans l'Exil</p>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.power.cssClass}}" data-tab="power">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.labels.pouvoir"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.powerName"}}</label>
<input name="system.power.name" type="text" value="{{system.power.name}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.reserveSongesCompagnie"}}</label>
<input name="system.power.sharedDreamPoints" type="number" value="{{system.power.sharedDreamPoints}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.activation"}}</label>
<input name="system.power.activationCondition" type="text" value="{{system.power.activationCondition}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaineVisible"}}</label>
<input name="system.power.captainVisible" type="checkbox" {{checked system.power.captainVisible}} {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaineTemoin"}}</label>
<input name="system.power.captainNeedsWitness" type="checkbox" {{checked system.power.captainNeedsWitness}} {{#if isPlayMode}}disabled{{/if}} />
</div>
{{formInput systemFields.power.fields.description enriched=enriched.power.description value=system.power.description name="system.power.description" toggled=true}}
<div class="section-title-row">
<h3>Items de pouvoir</h3>
<button type="button" data-action="createItem" data-type="pouvoircompagnie">+ {{localize "TYPES.Item.pouvoircompagnie"}}</button>
</div>
<div class="item-list">
{{#each powers as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
{{#if primaryPower}}
<div class="help-text">{{primaryPower.name}}{{primaryPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
<section class="sheet-tab {{tabs.members.cssClass}}" data-tab="members">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.ui.membres"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<select name="system.captainId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.captainOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.captainId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<select name="system.ombreDuTourmentId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.shadowOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.ombreDuTourmentId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text">Sélectionnez le capitaine et l'ombre du tourment parmi les personnages du monde.</p>
{{#if captain}}<p><strong>Capitaine :</strong> {{captain.name}}</p>{{/if}}
{{#if shadow}}<p><strong>Ombre :</strong> {{shadow.name}}</p>{{/if}}
<ul class="reference-list">
{{#each members as |member|}}
<li>{{member.name}}</li>
{{/each}}
</ul>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.liensNarratifs"}}</h2>
<p class="help-text">{{localize "LESOUBLIES.ui.readOnlyCollection"}}</p>
<ul class="reference-list">
{{#each links as |link|}}
<li><strong>{{link.label}}</strong> — {{link.sourceLabel}} -> {{link.targetLabel}} {{link.details}}</li>
{{/each}}
</ul>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.description enriched=enriched.description value=system.description name="system.description" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.notes enriched=enriched.notes value=system.notes name="system.notes" toggled=true}}
</section>
</section>
</section>
-113
View File
@@ -1,113 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet compagnie-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom de compagnie" {{#if isPlayMode}}disabled{{/if}} /></h1>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.power.cssClass}}" data-tab="power">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.labels.pouvoir"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.powerName"}}</label>
<input name="system.power.name" type="text" value="{{system.power.name}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.reserveSongesCompagnie"}}</label>
<input name="system.power.sharedDreamPoints" type="number" value="{{system.power.sharedDreamPoints}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.activation"}}</label>
<input name="system.power.activationCondition" type="text" value="{{system.power.activationCondition}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaineVisible"}}</label>
<input name="system.power.captainVisible" type="checkbox" {{checked system.power.captainVisible}} {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaineTemoin"}}</label>
<input name="system.power.captainNeedsWitness" type="checkbox" {{checked system.power.captainNeedsWitness}} {{#if isPlayMode}}disabled{{/if}} />
</div>
{{formInput systemFields.power.fields.description enriched=enriched.power.description value=system.power.description name="system.power.description" toggled=true}}
<div class="section-title-row">
<h3>Items de pouvoir</h3>
<button type="button" data-action="createItem" data-type="pouvoircompagnie">+ {{localize "TYPES.Item.pouvoircompagnie"}}</button>
</div>
<div class="item-list">
{{#each powers as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
{{#if primaryPower}}
<div class="help-text">{{primaryPower.name}}{{primaryPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
<section class="sheet-tab {{tabs.members.cssClass}}" data-tab="members">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.ui.membres"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<select name="system.captainId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.captainOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.captainId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<select name="system.ombreDuTourmentId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.shadowOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.ombreDuTourmentId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text">Sélectionnez le capitaine et l'ombre du tourment parmi les personnages du monde.</p>
{{#if captain}}<p><strong>Capitaine :</strong> {{captain.name}}</p>{{/if}}
{{#if shadow}}<p><strong>Ombre :</strong> {{shadow.name}}</p>{{/if}}
<ul class="reference-list">
{{#each members as |member|}}
<li>{{member.name}}</li>
{{/each}}
</ul>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.liensNarratifs"}}</h2>
<p class="help-text">{{localize "LESOUBLIES.ui.readOnlyCollection"}}</p>
<ul class="reference-list">
{{#each links as |link|}}
<li><strong>{{link.label}}</strong> — {{link.sourceLabel}} -> {{link.targetLabel}} {{link.details}}</li>
{{/each}}
</ul>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.description enriched=enriched.description value=system.description name="system.description" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.notes enriched=enriched.notes value=system.notes name="system.notes" toggled=true}}
</section>
</section>
</section>
@@ -29,6 +29,19 @@
<label>{{localize "LESOUBLIES.labels.reserveSongesCompagnie"}}</label> <label>{{localize "LESOUBLIES.labels.reserveSongesCompagnie"}}</label>
<input name="system.power.sharedDreamPoints" type="number" value="{{system.power.sharedDreamPoints}}" {{#if isPlayMode}}disabled{{/if}} /> <input name="system.power.sharedDreamPoints" type="number" value="{{system.power.sharedDreamPoints}}" {{#if isPlayMode}}disabled{{/if}} />
</div> </div>
<h3>{{localize "LESOUBLIES.labels.threadReserves"}}</h3>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.threadSonges"}}</label>
<input name="system.reserves.songesThreads" type="number" value="{{system.reserves.songesThreads}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.threadCauchemar"}}</label>
<input name="system.reserves.cauchemarThreads" type="number" value="{{system.reserves.cauchemarThreads}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.emptyGlobes"}}</label>
<input name="system.reserves.emptyGlobes" type="number" value="{{system.reserves.emptyGlobes}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row"> <div class="field-row">
<label>{{localize "LESOUBLIES.labels.activation"}}</label> <label>{{localize "LESOUBLIES.labels.activation"}}</label>
<input name="system.power.activationCondition" type="text" value="{{system.power.activationCondition}}" {{#if isPlayMode}}disabled{{/if}} /> <input name="system.power.activationCondition" type="text" value="{{system.power.activationCondition}}" {{#if isPlayMode}}disabled{{/if}} />
@@ -48,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>
-115
View File
@@ -1,115 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet compagnie-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<p class="sheet-kicker">Blason de la compagnie</p>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom de compagnie" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Capitaine, pouvoir partagé et liens forgés dans l'Exil</p>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.power.cssClass}}" data-tab="power">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.labels.pouvoir"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.powerName"}}</label>
<input name="system.power.name" type="text" value="{{system.power.name}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.reserveSongesCompagnie"}}</label>
<input name="system.power.sharedDreamPoints" type="number" value="{{system.power.sharedDreamPoints}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.activation"}}</label>
<input name="system.power.activationCondition" type="text" value="{{system.power.activationCondition}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaineVisible"}}</label>
<input name="system.power.captainVisible" type="checkbox" {{checked system.power.captainVisible}} {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaineTemoin"}}</label>
<input name="system.power.captainNeedsWitness" type="checkbox" {{checked system.power.captainNeedsWitness}} {{#if isPlayMode}}disabled{{/if}} />
</div>
{{formInput systemFields.power.fields.description enriched=enriched.power.description value=system.power.description name="system.power.description" toggled=true}}
<div class="section-title-row">
<h3>Items de pouvoir</h3>
<button type="button" data-action="createItem" data-type="pouvoircompagnie">+ {{localize "TYPES.Item.pouvoircompagnie"}}</button>
</div>
<div class="item-list">
{{#each powers as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
{{#if primaryPower}}
<div class="help-text">{{primaryPower.name}}{{primaryPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
<section class="sheet-tab {{tabs.members.cssClass}}" data-tab="members">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.ui.membres"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<select name="system.captainId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.captainOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.captainId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<select name="system.ombreDuTourmentId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.shadowOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.ombreDuTourmentId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text">Sélectionnez le capitaine et l'ombre du tourment parmi les personnages du monde.</p>
{{#if captain}}<p><strong>Capitaine :</strong> {{captain.name}}</p>{{/if}}
{{#if shadow}}<p><strong>Ombre :</strong> {{shadow.name}}</p>{{/if}}
<ul class="reference-list">
{{#each members as |member|}}
<li>{{member.name}}</li>
{{/each}}
</ul>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.liensNarratifs"}}</h2>
<p class="help-text">{{localize "LESOUBLIES.ui.readOnlyCollection"}}</p>
<ul class="reference-list">
{{#each links as |link|}}
<li><strong>{{link.label}}</strong> — {{link.sourceLabel}} -> {{link.targetLabel}} {{link.details}}</li>
{{/each}}
</ul>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.description enriched=enriched.description value=system.description name="system.description" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.notes enriched=enriched.notes value=system.notes name="system.notes" toggled=true}}
</section>
</section>
</section>
-160
View File
@@ -1,160 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet creature-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Créatures du Petit Peuple, du Cauchemar et des frontières</p>
<div class="sheet-actions">
<button type="button" data-action="openRoll">{{localize "LESOUBLIES.rolls.test"}}</button>
<button type="button" data-action="openConfrontation">{{localize "LESOUBLIES.rolls.confrontation"}}</button>
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.categorie"}}</label><input name="system.biodata.categorie" type="text" value="{{system.biodata.categorie}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.taille"}}</label><select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>{{#each choiceSets.creatureSizeOptions as |option|}}<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>{{/each}}</select><span>{{derived.sizeLabel}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.vie"}}</label><input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{derived.hpMax}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.hpAffichage"}}</label><input name="system.hp.display" type="text" value="{{system.hp.display}}" {{#if isPlayMode}}disabled{{/if}} /><span>{{derived.hpDisplay}}</span></div>
<div class="field-row"><label>Protection</label><input name="system.protection" type="number" value="{{system.protection}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.songes"}}</label><input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsSonges"}}</label><input name="system.songes.points" type="number" value="{{system.songes.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.songes.max}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.cauchemar"}}</label><input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsCauchemar"}}</label><input name="system.cauchemar.points" type="number" value="{{system.cauchemar.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.cauchemar.max}}</span></div>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.degats"}}</h2>
{{formInput systemFields.statblock.fields.damage enriched=enriched.statblock.damage value=system.statblock.damage name="system.statblock.damage" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.reglesSpeciales"}}</h2>
{{formInput systemFields.statblock.fields.special enriched=enriched.statblock.special value=system.statblock.special name="system.statblock.special" toggled=true}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.aptitudes.cssClass}}" data-tab="aptitudes">
<section class="sheet-card profiles-card">
<h2>{{localize "LESOUBLIES.labels.profilsOptionnels"}}</h2>
<div class="profile-grid">
{{#each system.profils as |value key|}}
<div class="profile-cell">
<button type="button" data-action="rollProfile" data-profile-key="{{key}}">{{profileLabel key}}</button>
<input name="system.profils.{{key}}" type="number" value="{{value}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</div>
{{/each}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
{{#if (count group.items)}}
<div class="group-block">
<h3>{{group.label}}</h3>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</div>
{{/if}}
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.combat.cssClass}}" data-tab="combat">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.sortilegesSonges"}}</h2>
{{formInput systemFields.statblock.fields.spellSonges enriched=enriched.statblock.spellSonges value=system.statblock.spellSonges name="system.statblock.spellSonges" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.sortilegesCauchemar"}}</h2>
{{formInput systemFields.statblock.fields.spellCauchemar enriched=enriched.statblock.spellCauchemar value=system.statblock.spellCauchemar name="system.statblock.spellCauchemar" toggled=true}}
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
</div>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each spells as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<h2>Habitat</h2>
{{formInput systemFields.biodata.fields.habitat enriched=enriched.biodata.habitat value=system.biodata.habitat name="system.biodata.habitat" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.gmnotes"}}</h2>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
</section>
</section>
</section>
-159
View File
@@ -1,159 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet creature-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openRoll">{{localize "LESOUBLIES.rolls.test"}}</button>
<button type="button" data-action="openConfrontation">{{localize "LESOUBLIES.rolls.confrontation"}}</button>
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.categorie"}}</label><input name="system.biodata.categorie" type="text" value="{{system.biodata.categorie}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.taille"}}</label><select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>{{#each choiceSets.creatureSizeOptions as |option|}}<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>{{/each}}</select><span>{{derived.sizeLabel}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.vie"}}</label><input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{derived.hpMax}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.hpAffichage"}}</label><input name="system.hp.display" type="text" value="{{system.hp.display}}" {{#if isPlayMode}}disabled{{/if}} /><span>{{derived.hpDisplay}}</span></div>
<div class="field-row"><label>Protection</label><input name="system.protection" type="number" value="{{system.protection}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.songes"}}</label><input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsSonges"}}</label><input name="system.songes.points" type="number" value="{{system.songes.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.songes.max}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.cauchemar"}}</label><input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsCauchemar"}}</label><input name="system.cauchemar.points" type="number" value="{{system.cauchemar.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.cauchemar.max}}</span></div>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.degats"}}</h2>
{{formInput systemFields.statblock.fields.damage enriched=enriched.statblock.damage value=system.statblock.damage name="system.statblock.damage" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.reglesSpeciales"}}</h2>
{{formInput systemFields.statblock.fields.special enriched=enriched.statblock.special value=system.statblock.special name="system.statblock.special" toggled=true}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.aptitudes.cssClass}}" data-tab="aptitudes">
<section class="sheet-card profiles-card">
<h2>{{localize "LESOUBLIES.labels.profilsOptionnels"}}</h2>
<div class="profile-grid">
{{#each system.profils as |value key|}}
<div class="profile-cell">
<button type="button" data-action="rollProfile" data-profile-key="{{key}}">{{profileLabel key}}</button>
<input name="system.profils.{{key}}" type="number" value="{{value}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</div>
{{/each}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
{{#if (count group.items)}}
<div class="group-block">
<h3>{{group.label}}</h3>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</div>
{{/if}}
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.combat.cssClass}}" data-tab="combat">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.sortilegesSonges"}}</h2>
{{formInput systemFields.statblock.fields.spellSonges enriched=enriched.statblock.spellSonges value=system.statblock.spellSonges name="system.statblock.spellSonges" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.sortilegesCauchemar"}}</h2>
{{formInput systemFields.statblock.fields.spellCauchemar enriched=enriched.statblock.spellCauchemar value=system.statblock.spellCauchemar name="system.statblock.spellCauchemar" toggled=true}}
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
</div>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each spells as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<h2>Habitat</h2>
{{formInput systemFields.biodata.fields.habitat enriched=enriched.biodata.habitat value=system.biodata.habitat name="system.biodata.habitat" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.gmnotes"}}</h2>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
</section>
</section>
</section>
-161
View File
@@ -1,161 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet creature-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openRoll">{{localize "LESOUBLIES.rolls.test"}}</button>
<button type="button" data-action="openConfrontation">{{localize "LESOUBLIES.rolls.confrontation"}}</button>
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.categorie"}}</label><input name="system.biodata.categorie" type="text" value="{{system.biodata.categorie}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.taille"}}</label><select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>{{#each choiceSets.creatureSizeOptions as |option|}}<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>{{/each}}</select><span>{{derived.sizeLabel}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.vie"}}</label><input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{derived.hpMax}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.hpAffichage"}}</label><input name="system.hp.display" type="text" value="{{system.hp.display}}" {{#if isPlayMode}}disabled{{/if}} /><span>{{derived.hpDisplay}}</span></div>
<div class="field-row"><label>Protection</label><input name="system.protection" type="number" value="{{system.protection}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.songes"}}</label><input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsSonges"}}</label><input name="system.songes.points" type="number" value="{{system.songes.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.songes.max}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.cauchemar"}}</label><input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsCauchemar"}}</label><input name="system.cauchemar.points" type="number" value="{{system.cauchemar.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.cauchemar.max}}</span></div>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.degats"}}</h2>
{{formInput systemFields.statblock.fields.damage enriched=enriched.statblock.damage value=system.statblock.damage name="system.statblock.damage" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.reglesSpeciales"}}</h2>
{{formInput systemFields.statblock.fields.special enriched=enriched.statblock.special value=system.statblock.special name="system.statblock.special" toggled=true}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.aptitudes.cssClass}}" data-tab="aptitudes">
<section class="sheet-card profiles-card">
<h2>{{localize "LESOUBLIES.labels.profilsOptionnels"}}</h2>
<div class="profile-grid">
{{#each system.profils as |value key|}}
<div class="profile-cell">
<button type="button" data-action="rollProfile" data-profile-key="{{key}}">{{profileLabel key}}</button>
<input name="system.profils.{{key}}" type="number" value="{{value}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</div>
{{/each}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
{{#if (count group.items)}}
<div class="group-block">
<h3>{{group.label}}</h3>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</div>
{{/if}}
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.combat.cssClass}}" data-tab="combat">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.sortilegesSonges"}}</h2>
{{formInput systemFields.statblock.fields.spellSonges enriched=enriched.statblock.spellSonges value=system.statblock.spellSonges name="system.statblock.spellSonges" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.sortilegesCauchemar"}}</h2>
{{formInput systemFields.statblock.fields.spellCauchemar enriched=enriched.statblock.spellCauchemar value=system.statblock.spellCauchemar name="system.statblock.spellCauchemar" toggled=true}}
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
</div>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each spells as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<h2>Habitat</h2>
{{formInput systemFields.biodata.fields.habitat enriched=enriched.biodata.habitat value=system.biodata.habitat name="system.biodata.habitat" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.gmnotes"}}</h2>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
</section>
</section>
</section>
+6 -6
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.displayDamage}}</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>
-161
View File
@@ -1,161 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet creature-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<p class="sheet-kicker">Bestiaire de la Terra</p>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Créatures du Petit Peuple, du Cauchemar et des frontières</p>
<div class="sheet-actions">
<button type="button" data-action="openRoll">{{localize "LESOUBLIES.rolls.test"}}</button>
<button type="button" data-action="openConfrontation">{{localize "LESOUBLIES.rolls.confrontation"}}</button>
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.categorie"}}</label><input name="system.biodata.categorie" type="text" value="{{system.biodata.categorie}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.taille"}}</label><select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>{{#each choiceSets.creatureSizeOptions as |option|}}<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>{{/each}}</select><span>{{derived.sizeLabel}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.vie"}}</label><input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{derived.hpMax}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.hpAffichage"}}</label><input name="system.hp.display" type="text" value="{{system.hp.display}}" {{#if isPlayMode}}disabled{{/if}} /><span>{{derived.hpDisplay}}</span></div>
<div class="field-row"><label>Protection</label><input name="system.protection" type="number" value="{{system.protection}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.songes"}}</label><input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsSonges"}}</label><input name="system.songes.points" type="number" value="{{system.songes.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.songes.max}}</span></div>
<div class="field-row"><label>{{localize "LESOUBLIES.ui.cauchemar"}}</label><input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.pointsCauchemar"}}</label><input name="system.cauchemar.points" type="number" value="{{system.cauchemar.points}}" {{#if isPlayMode}}disabled{{/if}} /><span>/ {{system.cauchemar.max}}</span></div>
</section>
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.degats"}}</h2>
{{formInput systemFields.statblock.fields.damage enriched=enriched.statblock.damage value=system.statblock.damage name="system.statblock.damage" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.reglesSpeciales"}}</h2>
{{formInput systemFields.statblock.fields.special enriched=enriched.statblock.special value=system.statblock.special name="system.statblock.special" toggled=true}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.aptitudes.cssClass}}" data-tab="aptitudes">
<section class="sheet-card profiles-card">
<h2>{{localize "LESOUBLIES.labels.profilsOptionnels"}}</h2>
<div class="profile-grid">
{{#each system.profils as |value key|}}
<div class="profile-cell">
<button type="button" data-action="rollProfile" data-profile-key="{{key}}">{{profileLabel key}}</button>
<input name="system.profils.{{key}}" type="number" value="{{value}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</div>
{{/each}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
{{#if (count group.items)}}
<div class="group-block">
<h3>{{group.label}}</h3>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</div>
{{/if}}
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.combat.cssClass}}" data-tab="combat">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card ledger-card">
<h2>{{localize "LESOUBLIES.labels.sortilegesSonges"}}</h2>
{{formInput systemFields.statblock.fields.spellSonges enriched=enriched.statblock.spellSonges value=system.statblock.spellSonges name="system.statblock.spellSonges" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.sortilegesCauchemar"}}</h2>
{{formInput systemFields.statblock.fields.spellCauchemar enriched=enriched.statblock.spellCauchemar value=system.statblock.spellCauchemar name="system.statblock.spellCauchemar" toggled=true}}
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
</div>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each spells as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<h2>Habitat</h2>
{{formInput systemFields.biodata.fields.habitat enriched=enriched.biodata.habitat value=system.biodata.habitat name="system.biodata.habitat" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.gmnotes"}}</h2>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
</section>
</section>
</section>
-279
View File
@@ -1,279 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
<div class="item-list">
{{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{else}}
<p class="help-text">Aucune arme équipée.</p>
{{/if}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card creation-card identity-card identity-card--compact">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="identity-grid">
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</div>
</section>
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-284
View File
@@ -1,284 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.compagnie"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
{{#if derived.compagnie}}
<div class="embed-buttons">
<button type="button" data-action="openLinkedActor" data-actor-id="{{derived.compagnie.id}}">Ouvrir la compagnie</button>
</div>
{{/if}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
<div class="item-list">
{{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{else}}
<p class="help-text">Aucune arme équipée.</p>
{{/if}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card creation-card identity-card identity-card--compact">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="identity-grid">
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</div>
</section>
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-283
View File
@@ -1,283 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.compagnie"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
{{#if activeCompanyPower}}
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}} :</strong> {{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</p>
{{/if}}
{{#if derived.compagnie}}
<div class="embed-buttons">
<button type="button" data-action="openLinkedActor" data-actor-id="{{derived.compagnie.id}}">Ouvrir la compagnie</button>
</div>
{{/if}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
<div class="item-list">
{{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{else}}
<p class="help-text">Aucune arme équipée.</p>
{{/if}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card creation-card identity-card identity-card--compact">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="identity-grid">
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</div>
</section>
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
</section>
</section>
</section>
-283
View File
@@ -1,283 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.compagnie"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
{{#if activeCompanyPower}}
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}} :</strong> {{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</p>
{{/if}}
{{#if derived.compagnie}}
<div class="embed-buttons">
<button type="button" data-action="openLinkedActor" data-actor-id="{{derived.compagnie.id}}">Ouvrir la compagnie</button>
</div>
{{/if}}
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card skills-ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block skills-group">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list skills-item-list">
{{#each group.items as |entry|}}
<article class="item-card skill-card">
<div class="skill-card-main">
<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>
</div>
<div class="item-controls skill-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>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
<div class="item-list">
{{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{else}}
<p class="help-text">Aucune arme équipée.</p>
{{/if}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card creation-card identity-card identity-card--compact">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="identity-grid">
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</div>
</section>
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
</section>
</section>
</section>
@@ -8,7 +8,6 @@
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1> <h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions"> <div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button> <button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div> </div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone> <div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}} {{#each creationSlots as |slot|}}
@@ -149,10 +148,13 @@
</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>
{{#if entry.domains.length}}
<span class="skill-summary">Domaines : {{join entry.domains ", "}}</span>
{{/if}}
</div> </div>
<div class="item-controls skill-controls"> <div class="item-controls skill-controls">
<button type="button" data-action="rollSkill" data-item-id="{{entry.item.id}}">{{localize "LESOUBLIES.ui.roll"}}</button> <button type="button" data-action="rollSkill" data-item-id="{{entry.item.id}}">{{localize "LESOUBLIES.ui.roll"}}</button>
@@ -185,8 +187,8 @@
<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.displayDamage}}</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>
{{/each}} {{/each}}
@@ -196,6 +198,78 @@
</div> </div>
</section> </section>
<section class="sheet-card ledger-card reserve-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.labels.threadReserves"}}</h2>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="reserve-grid">
<div class="reserve-panel">
<h3>{{localize "LESOUBLIES.labels.personalReserve"}}</h3>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.threadSonges"}}</label>
<input name="system.reserves.songesThreads" type="number" value="{{system.reserves.songesThreads}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.threadCauchemar"}}</label>
<input name="system.reserves.cauchemarThreads" type="number" value="{{system.reserves.cauchemarThreads}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.emptyGlobes"}}</label>
<input name="system.reserves.emptyGlobes" type="number" value="{{system.reserves.emptyGlobes}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
</div>
<div class="reserve-panel reserve-panel--company">
<h3>{{localize "LESOUBLIES.labels.companyReserve"}}</h3>
{{#if derived.compagnie}}
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.threadSonges"}}</label>
<span>{{derived.companyReserves.songesThreads}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.threadCauchemar"}}</label>
<span>{{derived.companyReserves.cauchemarThreads}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.emptyGlobes"}}</label>
<span>{{derived.companyReserves.emptyGlobes}}</span>
</div>
<div class="transfer-list">
<div class="transfer-row" data-transfer-row>
<strong>{{localize "LESOUBLIES.labels.threadSonges"}}</strong>
<input type="number" min="1" value="1" data-transfer-amount />
<div class="item-controls">
<button type="button" data-action="transferThread" data-direction="toCompany" data-resource-key="songesThreads">{{localize "LESOUBLIES.labels.toCompany"}}</button>
<button type="button" data-action="transferThread" data-direction="toActor" data-resource-key="songesThreads">{{localize "LESOUBLIES.labels.toActor"}}</button>
</div>
</div>
<div class="transfer-row" data-transfer-row>
<strong>{{localize "LESOUBLIES.labels.threadCauchemar"}}</strong>
<input type="number" min="1" value="1" data-transfer-amount />
<div class="item-controls">
<button type="button" data-action="transferThread" data-direction="toCompany" data-resource-key="cauchemarThreads">{{localize "LESOUBLIES.labels.toCompany"}}</button>
<button type="button" data-action="transferThread" data-direction="toActor" data-resource-key="cauchemarThreads">{{localize "LESOUBLIES.labels.toActor"}}</button>
</div>
</div>
<div class="transfer-row" data-transfer-row>
<strong>{{localize "LESOUBLIES.labels.emptyGlobes"}}</strong>
<input type="number" min="1" value="1" data-transfer-amount />
<div class="item-controls">
<button type="button" data-action="transferThread" data-direction="toCompany" data-resource-key="emptyGlobes">{{localize "LESOUBLIES.labels.toCompany"}}</button>
<button type="button" data-action="transferThread" data-direction="toActor" data-resource-key="emptyGlobes">{{localize "LESOUBLIES.labels.toActor"}}</button>
</div>
</div>
</div>
{{else}}
<p class="help-text">Liez une compagnie pour gérer une réserve commune de fils et de globes.</p>
{{/if}}
</div>
</div>
<p class="help-text">Les dépenses en fils rendent automatiquement autant de globes vides à la réserve utilisée.</p>
</section>
<section class="sheet-card ledger-card"> <section class="sheet-card ledger-card">
<div class="section-title-row"> <div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2> <h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
@@ -203,7 +277,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>
@@ -217,6 +291,7 @@
{{/each}} {{/each}}
</div> </div>
</section> </section>
</section> </section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment"> <section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
@@ -231,19 +306,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.displayDamage}}{{#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>
-274
View File
@@ -1,274 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<p class="sheet-kicker">Chronique d'un Oublié</p>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Petit Peuple, Songes, Cauchemar et destin de compagnie</p>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="creation-slots" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">—</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">{{localize "LESOUBLIES.ui.edit"}}</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">{{localize "LESOUBLIES.ui.delete"}}</button>
{{/unless}}
</div>
{{/if}}
</div>
<div class="creation-slot-body">
{{#if slot.item}}
<img class="creation-slot-image" src="{{slot.item.img}}" alt="{{slot.item.name}}" />
<p class="help-text">{{slot.filledHint}}</p>
{{else}}
<p class="help-text">{{slot.emptyHint}}</p>
{{/if}}
</div>
</article>
{{/each}}
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-274
View File
@@ -1,274 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<p class="sheet-kicker">Chronique d'un Oublié</p>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Petit Peuple, Songes, Cauchemar et destin de compagnie</p>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="creation-slots" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">—</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">{{localize "LESOUBLIES.ui.edit"}}</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">{{localize "LESOUBLIES.ui.delete"}}</button>
{{/unless}}
</div>
{{/if}}
</div>
<div class="creation-slot-body">
{{#if slot.item}}
<img class="creation-slot-image" src="{{slot.item.img}}" alt="{{slot.item.name}}" />
<p class="help-text">{{slot.filledHint}}</p>
{{else}}
<p class="help-text">{{slot.emptyHint}}</p>
{{/if}}
</div>
</article>
{{/each}}
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-273
View File
@@ -1,273 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Petit Peuple, Songes, Cauchemar et destin de compagnie</p>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="creation-slots" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">—</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">{{localize "LESOUBLIES.ui.edit"}}</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">{{localize "LESOUBLIES.ui.delete"}}</button>
{{/unless}}
</div>
{{/if}}
</div>
<div class="creation-slot-body">
{{#if slot.item}}
<img class="creation-slot-image" src="{{slot.item.img}}" alt="{{slot.item.name}}" />
<p class="help-text">{{slot.filledHint}}</p>
{{else}}
<p class="help-text">{{slot.emptyHint}}</p>
{{/if}}
</div>
</article>
{{/each}}
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-272
View File
@@ -1,272 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="creation-slots" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">—</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">{{localize "LESOUBLIES.ui.edit"}}</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">{{localize "LESOUBLIES.ui.delete"}}</button>
{{/unless}}
</div>
{{/if}}
</div>
<div class="creation-slot-body">
{{#if slot.item}}
<img class="creation-slot-image" src="{{slot.item.img}}" alt="{{slot.item.name}}" />
<p class="help-text">{{slot.filledHint}}</p>
{{else}}
<p class="help-text">{{slot.emptyHint}}</p>
{{/if}}
</div>
</article>
{{/each}}
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-264
View File
@@ -1,264 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-266
View File
@@ -1,266 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-278
View File
@@ -1,278 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
<div class="item-list">
{{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{else}}
<p class="help-text">Aucune arme équipée.</p>
{{/if}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-277
View File
@@ -1,277 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<button class="mode-button mode-button--icon" type="button" data-action="toggleSheet" title="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}" aria-label="{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}">
<i class="fa-solid {{#if isEditMode}}fa-eye{{else}}fa-pen-to-square{{/if}}"></i>
</button>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="sheet-actions">
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
</div>
<div class="creation-slots creation-slots--header" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot creation-slot--compact {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">Glisser ici</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls item-controls--compact">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">Mod.</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">X</button>
{{/unless}}
</div>
{{/if}}
</div>
</article>
{{/each}}
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<div class="group-header">
<h3>{{group.label}}</h3>
<label class="profile-badge">
<span>{{localize "LESOUBLIES.labels.profil"}}</span>
<input name="system.profils.{{group.id}}" type="number" value="{{group.profileValue}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</label>
</div>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} + {{group.label}} {{group.profileValue}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
<div class="item-list">
{{#if equippedWeapons.length}}
{{#each equippedWeapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{else}}
<p class="help-text">Aucune arme équipée.</p>
{{/if}}
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
-281
View File
@@ -1,281 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet personnage-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{actor.img}}" title="{{actor.name}}" />
<div class="header-fields hero-copy">
<p class="sheet-kicker">Chronique d'un Oublié</p>
<h1 class="sheet-title"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<p class="sheet-subtitle">Petit Peuple, Songes, Cauchemar et destin de compagnie</p>
<div class="sheet-actions">
<button type="button" data-action="openRoll">{{localize "LESOUBLIES.rolls.test"}}</button>
<button type="button" data-action="openConfrontation">{{localize "LESOUBLIES.rolls.confrontation"}}</button>
<button type="button" data-action="openInitiative">{{localize "LESOUBLIES.rolls.initiative"}}</button>
<button type="button" data-action="openThreadHarvest">Récolte de fils</button>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</div>
</header>
<nav class="sheet-tabs" aria-label="Navigation de la fiche">
{{#each tabs as |tab|}}
<button type="button" class="sheet-tab-button {{tab.cssClass}}" data-action="switchTab" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<span>{{tab.label}}</span>
</button>
{{/each}}
</nav>
<section class="sheet-tab {{tabs.overview.cssClass}}" data-tab="overview">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card summary-card">
<h2>{{localize "LESOUBLIES.ui.derivedOverview"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.taille"}}</label>
<select name="system.size.value" {{#if isPlayMode}}disabled{{/if}}>
{{#each choiceSets.personnageSizeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.size.value)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
<span>{{derived.sizeLabel}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.vie"}}</label>
<input name="system.hp.value" type="number" value="{{system.hp.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>/ {{derived.hpMax}}</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="system.songes.value" type="number" value="{{system.songes.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.songes.points}} / {{system.songes.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteSonges"}}</label>
<input name="system.songes.debt" type="number" value="{{system.songes.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditSonges"}}</label>
<input name="system.songes.xpCredit" type="number" value="{{system.songes.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="system.cauchemar.value" type="number" value="{{system.cauchemar.value}}" {{#if isPlayMode}}disabled{{/if}} />
<span>{{system.cauchemar.points}} / {{system.cauchemar.max}} pts</span>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.detteCauchemar"}}</label>
<input name="system.cauchemar.debt" type="number" value="{{system.cauchemar.debt}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.creditCauchemar"}}</label>
<input name="system.cauchemar.xpCredit" type="number" value="{{system.cauchemar.xpCredit}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.xp"}}</label>
<input name="system.experience.value" type="number" value="{{system.experience.value}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ecorces"}}</label>
<input name="system.money.ecorces" type="number" value="{{system.money.ecorces}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.ombreDuTourment"}}</label>
<input name="system.flagsNarratifs.ombreDuTourment" type="checkbox" {{checked system.flagsNarratifs.ombreDuTourment}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.labels.identite"}}</h2>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.age"}}</label>
<input name="system.biodata.age" type="number" value="{{system.biodata.age}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.sexe"}}</label>
<input name="system.biodata.sexe" type="text" value="{{system.biodata.sexe}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.motsCles"}}</label>
<input name="system.biodata.motscles" type="text" value="{{system.biodata.motscles}}" {{#if isPlayMode}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.capitaine"}}</label>
<input name="system.flagsNarratifs.isCaptain" type="checkbox" {{checked system.flagsNarratifs.isCaptain}} {{#if isPlayMode}}disabled{{/if}} />
</div>
</section>
<section class="sheet-card creation-card">
<h2>{{localize "LESOUBLIES.ui.creation"}}</h2>
<div class="creation-slots" data-creation-drop-zone>
{{#each creationSlots as |slot|}}
<article class="creation-slot {{#if slot.item}}is-filled{{else}}is-empty{{/if}}" data-drop-creation-type="{{slot.type}}">
<div class="creation-slot-header">
<div>
<p class="creation-slot-kicker">{{slot.label}}</p>
{{#if slot.item}}
<strong class="creation-slot-name">{{slot.item.name}}</strong>
{{else}}
<strong class="creation-slot-name">—</strong>
{{/if}}
</div>
{{#if slot.item}}
<div class="item-controls">
<button type="button" data-action="editItem" data-item-id="{{slot.item.id}}">{{localize "LESOUBLIES.ui.edit"}}</button>
{{#unless @root.isPlayMode}}
<button type="button" data-action="removeCreationItem" data-type="{{slot.type}}">{{localize "LESOUBLIES.ui.delete"}}</button>
{{/unless}}
</div>
{{/if}}
</div>
<div class="creation-slot-body">
{{#if slot.item}}
<img class="creation-slot-image" src="{{slot.item.img}}" alt="{{slot.item.name}}" />
<p class="help-text">{{slot.filledHint}}</p>
{{else}}
<p class="help-text">{{slot.emptyHint}}</p>
{{/if}}
</div>
</article>
{{/each}}
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.compagnie"}}</label>
<select name="system.references.compagnieId" {{#if isPlayMode}}disabled{{/if}}>
<option value="">—</option>
{{#each choiceSets.companyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.system.references.compagnieId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text"><strong>{{localize "LESOUBLIES.labels.compagnie"}} :</strong> {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}{{/if}}</p>
</section>
</div>
<section class="sheet-card profiles-card">
<h2>{{localize "LESOUBLIES.ui.profils"}}</h2>
<div class="profile-grid">
{{#each system.profils as |value key|}}
<div class="profile-cell">
<button type="button" data-action="rollProfile" data-profile-key="{{key}}">{{profileLabel key}}</button>
<input name="system.profils.{{key}}" type="number" value="{{value}}" {{#if @root.isPlayMode}}disabled{{/if}} />
</div>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.skills.cssClass}}" data-tab="skills">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.competences"}}</h2>
<button type="button" data-action="createItem" data-type="competence">+ {{localize "TYPES.Item.competence"}}</button>
</div>
{{#each skillGroups as |group|}}
<div class="group-block">
<h3>{{group.label}}</h3>
<div class="item-list">
{{#each group.items as |entry|}}
<article class="item-card">
<div>
<strong>{{entry.item.name}}</strong>
<div>Base {{entry.item.system.base}} - {{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>
</article>
{{/each}}
</div>
</div>
{{/each}}
</section>
</section>
<section class="sheet-tab {{tabs.actions.cssClass}}" data-tab="actions">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.combat"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="openCombatPreset" data-preset="encourager">Encourager</button>
<button type="button" data-action="openCombatPreset" data-preset="intimider">Intimider</button>
<button type="button" data-action="openCombatPreset" data-preset="evaluer">Évaluer</button>
<button type="button" data-action="openCombatPreset" data-preset="maitriser">Maîtriser</button>
<button type="button" data-action="openCombatPreset" data-preset="seDeplacer">Se déplacer</button>
</div>
</div>
</section>
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.magie"}}</h2>
<button type="button" data-action="createItem" data-type="sortilege">+ {{localize "TYPES.Item.sortilege"}}</button>
</div>
<div class="item-list">
{{#each spells as |item|}}
<article class="item-card">
<div>
<strong>{{item.name}}</strong>
<div>{{item.system.tradition}} / {{item.system.polarity}} / coût {{item.system.cost}}</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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.equipment.cssClass}}" data-tab="equipment">
<section class="sheet-card ledger-card">
<div class="section-title-row">
<h2>{{localize "LESOUBLIES.ui.equipement"}}</h2>
<div class="embed-buttons">
<button type="button" data-action="createItem" data-type="arme">+ {{localize "TYPES.Item.arme"}}</button>
<button type="button" data-action="createItem" data-type="armure">+ {{localize "TYPES.Item.armure"}}</button>
<button type="button" data-action="createItem" data-type="equipement">+ {{localize "TYPES.Item.equipement"}}</button>
</div>
</div>
<div class="item-list">
{{#each weapons as |item|}}
<article class="item-card">
<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="editItem" data-item-id="{{item.id}}">Edit</button><button type="button" data-action="deleteItem" data-item-id="{{item.id}}">Delete</button></div>
</article>
{{/each}}
{{#each armors as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
{{#each equipment as |item|}}
<article class="item-card">
<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>
</article>
{{/each}}
</div>
</section>
</section>
<section class="sheet-tab {{tabs.notes.cssClass}}" data-tab="notes">
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.ui.notes"}}</h2>
<label>{{localize "LESOUBLIES.labels.description"}}</label>
{{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
<label>{{localize "LESOUBLIES.labels.notes"}}</label>
{{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.gmnotes"}}</label>
{{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
<label>{{localize "LESOUBLIES.labels.liensNarratifs"}}</label>
{{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
{{#if activeCompanyPower}}
<label>{{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}}</label>
<div class="help-text">{{activeCompanyPower.name}}{{activeCompanyPower.system.activationCondition}}</div>
{{/if}}
</section>
</section>
</section>
+5
View File
@@ -97,6 +97,11 @@
<strong>{{action.harvest.threadCount}} fil{{#unless (eq action.harvest.threadCount 1)}}s{{/unless}} de {{action.harvest.threadType}}</strong> <strong>{{action.harvest.threadCount}} fil{{#unless (eq action.harvest.threadCount 1)}}s{{/unless}} de {{action.harvest.threadType}}</strong>
<em>{{action.harvest.sleeperLabel}}</em> <em>{{action.harvest.sleeperLabel}}</em>
</div> </div>
<div class="chat-callout">
<span>Stockage</span>
<strong>{{action.harvest.destinationLabel}}</strong>
<em>{{#if action.harvest.stored}}Réserve créditée{{else}}Aucun fil stocké{{/if}}</em>
</div>
<div class="chat-callout"> <div class="chat-callout">
<span>Dégâts subis</span> <span>Dégâts subis</span>
<strong>{{action.harvest.damageTaken}}</strong> <strong>{{action.harvest.damageTaken}}</strong>
-7
View File
@@ -1,7 +0,0 @@
<div class="les-oublies-chat">
<h3>{{label}}</h3>
<p><strong>{{actor.name}}</strong> lance les dés de Songes et de Cauchemar.</p>
<p>Songes : <strong>{{songesDie}}</strong> | Cauchemar : <strong>{{cauchemarDie}}</strong></p>
<p>Cible : <strong>{{target}}</strong> | Résultat retenu : <strong>{{selected}}</strong></p>
<p>{{#if success}}Succès{{else}}Échec{{/if}}</p>
</div>
+1
View File
@@ -25,6 +25,7 @@
<div class="chat-callout"> <div class="chat-callout">
<span>Ressource</span> <span>Ressource</span>
<strong>{{activation.costLabel}}</strong> <strong>{{activation.costLabel}}</strong>
<em>{{activation.paymentSourceLabel}}</em>
</div> </div>
<div class="chat-callout"> <div class="chat-callout">
<span>Métier</span> <span>Métier</span>
-141
View File
@@ -1,141 +0,0 @@
<div class="les-oublies-roll-dialog">
<div class="sheet-grid sheet-grid-2">
<section class="sheet-card">
<h2>{{attackTitle}}</h2>
<div class="field-row">
<label>Arme</label>
<input type="text" value="{{#if weapon}}{{weapon.name}}{{else}}Arme improvisée{{/if}}" disabled />
</div>
<div class="field-row">
<label>Compétence</label>
<select name="attackerSkill">
{{#each attackSkills as |skill|}}
<option value="{{skill.value}}" {{#if (eq skill.value @root.values.attackerSkill)}}selected{{/if}}>{{skill.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>Circonstance</label>
<select name="difficultyPreset">
<option value="0">Aucune (0)</option>
{{#each difficultyOptions as |entry|}}
<option value="{{entry.value}}">{{entry.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>Ajustement libre</label>
<input name="customDifficulty" type="number" value="{{values.customDifficulty}}" />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.rolls.rollMode"}}</label>
<select name="attackerRollMode">
{{#each rollModes as |mode|}}
<option value="{{mode.value}}" {{#if (eq mode.value @root.values.attackerRollMode)}}selected{{/if}}>{{mode.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.rolls.extraDie"}}</label>
<select name="attackerExtraDie">
{{#each extraDieModes as |mode|}}
<option value="{{mode.value}}" {{#if (eq mode.value @root.values.attackerExtraDie)}}selected{{/if}}>{{mode.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>Prime</label>
<select name="primeId">
{{#each primeOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.values.primeId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>Pénalité</label>
<select name="penaltyId">
{{#each penaltyOptions as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.values.penaltyId)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<p class="help-text">{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{attackerResources.songesPoints}} / {{attackerResources.songesValue}} · Cauchemar {{attackerResources.cauchemarPoints}} / {{attackerResources.cauchemarValue}}</p>
</section>
<section class="sheet-card">
<h2>{{localize "LESOUBLIES.rolls.defender"}}</h2>
<div class="field-row">
<label>Cible</label>
<input name="defenderLabel" type="text" value="{{values.defenderLabel}}" />
</div>
<div class="field-row">
<label>Réaction</label>
<select name="defenderSkill">
{{#each reactionSkills as |skill|}}
<option value="{{skill.value}}" {{#if (eq skill.value @root.values.defenderSkill)}}selected{{/if}}>{{skill.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>Score défense</label>
<input name="defenderScore" type="number" value="{{values.defenderScore}}" {{#if targetActor}}disabled{{/if}} />
</div>
<div class="field-row">
<label>Difficulté défense</label>
<input name="defenderDifficulty" type="number" value="{{values.defenderDifficulty}}" />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.rolls.rollMode"}}</label>
<select name="defenderRollMode">
{{#each rollModes as |mode|}}
<option value="{{mode.value}}" {{#if (eq mode.value @root.values.defenderRollMode)}}selected{{/if}}>{{mode.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.rolls.extraDie"}}</label>
<select name="defenderExtraDie">
{{#each extraDieModes as |mode|}}
<option value="{{mode.value}}" {{#if (eq mode.value @root.values.defenderExtraDie)}}selected{{/if}}>{{mode.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row">
<label>Protection</label>
<input name="targetProtection" type="number" value="{{values.targetProtection}}" />
</div>
<div class="field-row">
<label>Dégâts de base</label>
<input name="baseDamage" type="number" value="{{values.baseDamage}}" />
</div>
<div class="field-row">
<label>Libellé dégâts</label>
<input name="baseDamageLabel" type="text" value="{{values.baseDamageLabel}}" />
</div>
<div class="field-row">
<label>Appliquer à la cible</label>
<input name="applyToTarget" type="checkbox" {{checked values.applyToTarget}} {{#unless targetActor}}disabled{{/unless}} />
</div>
<div class="field-row">
<label>Notes</label>
<input name="notes" type="text" value="{{values.notes}}" />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.songes"}}</label>
<input name="defenderSongesValue" type="number" value="{{defenderResources.songesValue}}" {{#if targetActor}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.pointsSonges"}}</label>
<input name="defenderSongesPoints" type="number" value="{{defenderResources.songesPoints}}" {{#if targetActor}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.ui.cauchemar"}}</label>
<input name="defenderCauchemarValue" type="number" value="{{defenderResources.cauchemarValue}}" {{#if targetActor}}disabled{{/if}} />
</div>
<div class="field-row">
<label>{{localize "LESOUBLIES.labels.pointsCauchemar"}}</label>
<input name="defenderCauchemarPoints" type="number" value="{{defenderResources.cauchemarPoints}}" {{#if targetActor}}disabled{{/if}} />
</div>
</section>
</div>
</div>
@@ -26,9 +26,17 @@
<option value="fils" {{#if (eq values.paymentMode "fils")}}selected{{/if}}>Fils</option> <option value="fils" {{#if (eq values.paymentMode "fils")}}selected{{/if}}>Fils</option>
</select> </select>
</div> </div>
<div class="field-row" data-payment-source hidden>
<label>Réserve de fils</label>
<select name="paymentSource">
{{#each threadReserves.options as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.values.paymentSource)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row"> <div class="field-row">
<label>Coût effectif</label> <label>Coût effectif</label>
<input type="text" value="{{effectiveCostLabel}}" disabled /> <input type="text" value="{{effectiveCostLabel}}" data-effective-cost disabled />
</div> </div>
<div class="field-row"> <div class="field-row">
<label>Cible / scène</label> <label>Cible / scène</label>
@@ -39,6 +47,11 @@
<input name="notes" type="text" value="{{values.notes}}" /> <input name="notes" type="text" value="{{values.notes}}" />
</div> </div>
<p class="help-text">{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{resources.songesPoints}} / {{resources.songesValue}} · Cauchemar {{resources.cauchemarPoints}} / {{resources.cauchemarValue}}</p> <p class="help-text">{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{resources.songesPoints}} / {{resources.songesValue}} · Cauchemar {{resources.cauchemarPoints}} / {{resources.cauchemarValue}}</p>
<p class="help-text">Réserve perso : Songes {{threadReserves.actor.songesThreads}} · Cauchemar {{threadReserves.actor.cauchemarThreads}} · Globes vides {{threadReserves.actor.emptyGlobes}}</p>
{{#if threadReserves.hasCompany}}
<p class="help-text">{{threadReserves.company.label}} : Songes {{threadReserves.company.songesThreads}} · Cauchemar {{threadReserves.company.cauchemarThreads}} · Globes vides {{threadReserves.company.emptyGlobes}}</p>
{{/if}}
<p class="help-text" data-payment-source-hint>La dépense se fait dans les points de Songes ou de Cauchemar du personnage.</p>
</section> </section>
</div> </div>
</div> </div>
@@ -12,6 +12,14 @@
<label>Nombre de fils</label> <label>Nombre de fils</label>
<input name="threadCount" type="number" min="1" value="{{values.threadCount}}" /> <input name="threadCount" type="number" min="1" value="{{values.threadCount}}" />
</div> </div>
<div class="field-row">
<label>Réserve de destination</label>
<select name="destinationSource">
{{#each threadReserves.options as |option|}}
<option value="{{option.value}}" {{#if (eq option.value @root.values.destinationSource)}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</div>
<div class="field-row"> <div class="field-row">
<label>{{localize "LESOUBLIES.rolls.rollMode"}}</label> <label>{{localize "LESOUBLIES.rolls.rollMode"}}</label>
<select name="rollMode"> <select name="rollMode">
@@ -38,5 +46,9 @@
</div> </div>
<p class="help-text">Difficulté : -3 par fil supplémentaire. Dégâts subis : 1 par fil souhaité. En cas d'échec, plus aucune récolte possible sur ce dormeur cette nuit.</p> <p class="help-text">Difficulté : -3 par fil supplémentaire. Dégâts subis : 1 par fil souhaité. En cas d'échec, plus aucune récolte possible sur ce dormeur cette nuit.</p>
<p class="help-text">{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{resources.songesPoints}} / {{resources.songesValue}} · Cauchemar {{resources.cauchemarPoints}} / {{resources.cauchemarValue}}</p> <p class="help-text">{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{resources.songesPoints}} / {{resources.songesValue}} · Cauchemar {{resources.cauchemarPoints}} / {{resources.cauchemarValue}}</p>
<p class="help-text">Réserve perso : Songes {{threadReserves.actor.songesThreads}} · Cauchemar {{threadReserves.actor.cauchemarThreads}} · Globes vides {{threadReserves.actor.emptyGlobes}}</p>
{{#if threadReserves.hasCompany}}
<p class="help-text">{{threadReserves.company.label}} : Songes {{threadReserves.company.songesThreads}} · Cauchemar {{threadReserves.company.cauchemarThreads}} · Globes vides {{threadReserves.company.emptyGlobes}}</p>
{{/if}}
</section> </section>
</div> </div>
+3
View File
@@ -16,6 +16,9 @@
<div class="field-row"><label>{{localize "LESOUBLIES.labels.quantite"}}</label><input name="system.quantity" type="number" value="{{system.quantity}}" {{#if isPlayMode}}disabled{{/if}} /></div> <div class="field-row"><label>{{localize "LESOUBLIES.labels.quantite"}}</label><input name="system.quantity" type="number" value="{{system.quantity}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>Équipée</label><input name="system.equipped" type="checkbox" {{checked system.equipped}} {{#if isPlayMode}}disabled{{/if}} /></div> <div class="field-row"><label>Équipée</label><input name="system.equipped" type="checkbox" {{checked system.equipped}} {{#if isPlayMode}}disabled{{/if}} /></div>
<p><strong>Race restreinte :</strong> {{system.restrictedRace}}</p> <p><strong>Race restreinte :</strong> {{system.restrictedRace}}</p>
{{#if weaponDamagePreview}}
<p><strong>Dégâts calculés :</strong> {{weaponDamagePreview}}</p>
{{/if}}
</section> </section>
<section class="sheet-card notes-card"> <section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2> <h2>{{localize "LESOUBLIES.labels.description"}}</h2>
-26
View File
@@ -1,26 +0,0 @@
<section class="{{cssClass}} les-oublies-sheet item-sheet" autocomplete="off">
<header class="sheet-header hero-banner">
<img class="profile-img" data-edit="img" data-action="editImage" src="{{item.img}}" title="{{item.name}}" />
<div class="header-fields hero-copy">
<p class="sheet-kicker">Arsenal</p>
<h1 class="sheet-title"><input name="name" type="text" value="{{item.name}}" placeholder="Nom" {{#if isPlayMode}}disabled{{/if}} /></h1>
<button class="mode-button" type="button" data-action="toggleSheet">{{#if isEditMode}}{{localize "LESOUBLIES.ui.playMode"}}{{else}}{{localize "LESOUBLIES.ui.editMode"}}{{/if}}</button>
</div>
</header>
<section class="sheet-card summary-card">
<div class="field-row"><label>{{localize "LESOUBLIES.labels.categorie"}}</label><select name="system.category" {{#if isPlayMode}}disabled{{/if}}>{{#each choiceSets.weaponCategoryOptions as |option|}}<option value="{{option.value}}" {{#if (eq option.value @root.system.category)}}selected{{/if}}>{{option.label}}</option>{{/each}}</select></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.origine"}}</label><select name="system.origin" {{#if isPlayMode}}disabled{{/if}}>{{#each choiceSets.weaponOriginOptions as |option|}}<option value="{{option.value}}" {{#if (eq option.value @root.system.origin)}}selected{{/if}}>{{option.label}}</option>{{/each}}</select></div>
<div class="field-row"><label>Dégâts</label><input name="system.damage" type="text" value="{{system.damage}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.portee"}}</label><input name="system.range" type="text" value="{{system.range}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.prix"}}</label><input name="system.price" type="number" value="{{system.price}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.quantite"}}</label><input name="system.quantity" type="number" value="{{system.quantity}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.equipe"}}</label><input name="system.equipped" type="checkbox" {{checked system.equipped}} {{#if isPlayMode}}disabled{{/if}} /></div>
<p><strong>Race restreinte :</strong> {{system.restrictedRace}}</p>
</section>
<section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2>
{{formInput systemFields.description enriched=enriched.description value=system.description name="system.description" toggled=true}}
<h2>{{localize "LESOUBLIES.labels.notes"}}</h2>
{{formInput systemFields.notes enriched=enriched.notes value=system.notes name="system.notes" toggled=true}}
</section>
</section>
@@ -13,6 +13,8 @@
<div class="field-row"><label>{{localize "LESOUBLIES.labels.base"}}</label><input name="system.base" type="number" value="{{system.base}}" {{#if isPlayMode}}disabled{{/if}} /></div> <div class="field-row"><label>{{localize "LESOUBLIES.labels.base"}}</label><input name="system.base" type="number" value="{{system.base}}" {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>Fermée</label><input name="system.closed" type="checkbox" {{checked system.closed}} {{#if isPlayMode}}disabled{{/if}} /></div> <div class="field-row"><label>Fermée</label><input name="system.closed" type="checkbox" {{checked system.closed}} {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>À domaines</label><input name="system.domainSkill" type="checkbox" {{checked system.domainSkill}} {{#if isPlayMode}}disabled{{/if}} /></div> <div class="field-row"><label>À domaines</label><input name="system.domainSkill" type="checkbox" {{checked system.domainSkill}} {{#if isPlayMode}}disabled{{/if}} /></div>
<div class="field-row"><label>{{localize "LESOUBLIES.labels.domaines"}}</label><input type="text" value="{{join system.domains ", "}}" disabled /></div>
<div class="field-row"><label>Domaines fixes</label><input type="text" value="{{join system.fixedDomains ", "}}" disabled /></div>
</section> </section>
<section class="sheet-card notes-card"> <section class="sheet-card notes-card">
<h2>{{localize "LESOUBLIES.labels.description"}}</h2> <h2>{{localize "LESOUBLIES.labels.description"}}</h2>