Rework des fiches creature/PJ et Tinji/Loksyu

This commit is contained in:
2026-03-30 17:37:38 +02:00
parent 40c8c523b7
commit 637ea883dd
48 changed files with 3119 additions and 292 deletions

View File

@@ -12,7 +12,7 @@ Vous pouvez retrouver le nom de leurs auteurs respectifs sur ce site.
version 1.2 ou toute version ultérieure publiée par la Free Software Foundation, version 1.2 ou toute version ultérieure publiée par la Free Software Foundation,
https://commons.wikimedia.org/wiki/File:Hong_Kong_18_Districts_Blank_Map.svg https://commons.wikimedia.org/wiki/File:Hong_Kong_18_Districts_Blank_Map.svg
- 'loksyu_roue_d_initiative.jpg' est une création originale de 'Darkwin'. - 'loksyu_roue_d_initiative.jpg' est une création originale de 'Darkwin'.
- L'organisation des images provient du système produit par MysteryMan - L'organisation du reste des images provient du système produit par MysteryMan (merci à lui)
Code Author : Code Author :
- Developed by LeRatierBretonnien - Developed by LeRatierBretonnien

2450
dist/system.js vendored Normal file

File diff suppressed because it is too large Load Diff

7
dist/system.js.map vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export const SYSTEM_ID = "fvtt-chroniques-de-l-etrange" export const SYSTEM_ID = "fvtt-chroniques-de-l-etrange"
export const ACTOR_TYPES = { export const ACTOR_TYPES = {
@@ -91,6 +104,49 @@ export const MAGICS = {
}, },
} }
/** Map aspect name → i18n label key */
export const ASPECT_LABELS = {
metal: "CDE.Metal",
water: "CDE.Water",
earth: "CDE.Earth",
fire: "CDE.Fire",
wood: "CDE.Wood",
}
/** Map aspect name → image path */
export const ASPECT_ICONS = {
metal: "systems/fvtt-chroniques-de-l-etrange/images/cde_metal.webp",
water: "systems/fvtt-chroniques-de-l-etrange/images/cde_eau.webp",
earth: "systems/fvtt-chroniques-de-l-etrange/images/cde_terre.webp",
fire: "systems/fvtt-chroniques-de-l-etrange/images/cde_feu.webp",
wood: "systems/fvtt-chroniques-de-l-etrange/images/cde_bois.webp",
}
/** Map aspect name → die face pair [yin, yang] (face=10 stored as 0) */
export const ASPECT_FACES = {
metal: [3, 8],
water: [1, 6],
earth: [0, 5], // 0 = face "10"
fire: [2, 7],
wood: [4, 9],
}
/** Ordered aspect names by index (metal=0, water=1, earth=2, fire=3, wood=4) */
export const ASPECT_NAMES = ["metal", "water", "earth", "fire", "wood"]
/**
* Wu Xing generating/overcoming cycle.
* For each active aspect, the five result categories in order:
* [successes, auspicious, noxious, loksyu, tinji]
*/
export const WU_XING_CYCLE = {
wood: ["wood", "fire", "water", "earth", "metal"],
fire: ["fire", "earth", "wood", "metal", "water"],
earth: ["earth", "metal", "fire", "water", "wood"],
metal: ["metal", "water", "earth", "wood", "fire"],
water: ["water", "wood", "metal", "fire", "earth"],
}
export const TEMPLATE_PARTIALS = [ export const TEMPLATE_PARTIALS = [
"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-skills.html", "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-skills.html",
"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-magics.html", "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-magics.html",

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { MAGICS, SUBTYPES } from "./constants.js" import { MAGICS, SUBTYPES } from "./constants.js"
export function preLocalizeConfig() { export function preLocalizeConfig() {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export function configureRuntime() { export function configureRuntime() {
CONFIG.Actor.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/actor-banner.webp" CONFIG.Actor.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/actor-banner.webp"
CONFIG.Adventure.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/adventure-banner.webp" CONFIG.Adventure.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/adventure-banner.webp"

48
src/config/settings.js Normal file
View File

@@ -0,0 +1,48 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { SYSTEM_ID } from "./constants.js"
/**
* Register all world/client settings for the system.
* Called during the "init" hook before sheets and data-models are set up.
*/
export function registerSettings() {
game.settings.register(SYSTEM_ID, "loksyuData", {
scope: "world",
config: false,
type: Object,
default: {
wood: { yin: 0, yang: 0 },
fire: { yin: 0, yang: 0 },
earth: { yin: 0, yang: 0 },
metal: { yin: 0, yang: 0 },
water: { yin: 0, yang: 0 },
},
})
game.settings.register(SYSTEM_ID, "tinjiData", {
scope: "world",
config: false,
type: Number,
default: 0,
})
}
/**
* Run any pending data migrations on the "ready" hook.
* Reserved for future schema migrations.
*/
export async function migrateIfNeeded() {
// No migrations required yet.
}

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class CharacterDataModel extends foundry.abstract.TypeDataModel { export default class CharacterDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,2 +1,15 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export { default as CharacterDataModel } from "./character.js" export { default as CharacterDataModel } from "./character.js"
export { default as NpcDataModel } from "./npc.js" export { default as NpcDataModel } from "./npc.js"

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class NpcDataModel extends foundry.abstract.TypeDataModel { export default class NpcDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class ArmorDataModel extends foundry.abstract.TypeDataModel { export default class ArmorDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export { default as EquipmentDataModel } from "./item.js" export { default as EquipmentDataModel } from "./item.js"
export { default as KungfuDataModel } from "./kungfu.js" export { default as KungfuDataModel } from "./kungfu.js"
export { default as SpellDataModel } from "./spell.js" export { default as SpellDataModel } from "./spell.js"

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class IngredientDataModel extends foundry.abstract.TypeDataModel { export default class IngredientDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class EquipmentDataModel extends foundry.abstract.TypeDataModel { export default class EquipmentDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class KungfuDataModel extends foundry.abstract.TypeDataModel { export default class KungfuDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class SanheiDataModel extends foundry.abstract.TypeDataModel { export default class SanheiDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class SpellDataModel extends foundry.abstract.TypeDataModel { export default class SpellDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class SupernaturalDataModel extends foundry.abstract.TypeDataModel { export default class SupernaturalDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export default class WeaponDataModel extends foundry.abstract.TypeDataModel { export default class WeaponDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const { fields } = foundry.data const { fields } = foundry.data

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { ACTOR_TYPES } from "../config/constants.js" import { ACTOR_TYPES } from "../config/constants.js"
export class CDEActor extends Actor { export class CDEActor extends Actor {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export class CDEMessage extends ChatMessage { export class CDEMessage extends ChatMessage {
async renderHTML({ canDelete, canClose = false, ...rest } = {}) { async renderHTML({ canDelete, canClose = false, ...rest } = {}) {
const html = await super.renderHTML({ canDelete, canClose, ...rest }) const html = await super.renderHTML({ canDelete, canClose, ...rest })

View File

@@ -1,17 +1,15 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export class CDEItem extends Item { export class CDEItem extends Item {
get isWeapon() {
return this.system.subtype === "weapon"
}
get isArmor() {
return this.system.subtype === "armor"
}
get isSanhei() {
return this.system.subtype === "sanhei"
}
get isOther() {
return this.system.subtype === "other"
}
} }

View File

@@ -1,146 +0,0 @@
import { SYSTEM_ID } from "./config/constants.js"
const MIGRATION_VERSION = "3.0.0"
export function registerSettings() {
game.settings.register(SYSTEM_ID, "migrationVersion", {
name: "Migration version",
scope: "world",
config: false,
type: String,
default: "0.0.0",
})
game.settings.register(SYSTEM_ID, "loksyuData", {
name: "Loksyu Data",
scope: "world",
config: false,
type: Object,
default: { wood: {yin:0,yang:0}, fire: {yin:0,yang:0}, earth: {yin:0,yang:0}, metal: {yin:0,yang:0}, water: {yin:0,yang:0} },
})
game.settings.register(SYSTEM_ID, "tinjiData", {
name: "TinJi Data",
scope: "world",
config: false,
type: Number,
default: 0,
})
}
export async function migrateIfNeeded() {
const current = MIGRATION_VERSION
const stored = game.settings.get(SYSTEM_ID, "migrationVersion") ?? "0.0.0"
if (!foundry.utils.isNewerVersion(current, stored)) return
ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} en cours...`, { permanent: true })
await migrateActors()
await migrateItems()
await migrateCompendiumActors()
await migrateCompendiumItems()
await game.settings.set(SYSTEM_ID, "migrationVersion", current)
ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} terminée.`)
}
async function migrateActors() {
const updates = []
for (const actor of game.actors.contents) {
const updateData = migrateActorData(actor)
if (Object.keys(updateData).length > 0) {
updates.push(actor.update(updateData))
}
}
await Promise.all(updates)
}
async function migrateCompendiumActors() {
const packs = game.packs.filter((p) => p.documentName === "Actor" && p.metadata.system === SYSTEM_ID)
for (const pack of packs) {
const content = await pack.getDocuments()
for (const actor of content) {
const updateData = migrateActorData(actor)
if (Object.keys(updateData).length > 0) {
await actor.update(updateData, { pack: pack.collection })
}
}
}
}
async function migrateItems() {
const updates = []
for (const item of game.items.contents) {
const updateData = migrateItemData(item)
if (Object.keys(updateData).length > 0) {
updates.push(item.update(updateData))
}
}
await Promise.all(updates)
}
async function migrateCompendiumItems() {
const packs = game.packs.filter((p) => p.documentName === "Item" && p.metadata.system === SYSTEM_ID)
for (const pack of packs) {
const content = await pack.getDocuments()
for (const item of content) {
const updateData = migrateItemData(item)
if (Object.keys(updateData).length > 0) {
await item.update(updateData, { pack: pack.collection })
}
}
}
}
function migrateActorData(actor) {
const updateData = {}
const system = actor.system ?? {}
const actorType = actor.type
// Fix legacy typo: masteryofthway -> masteryoftheway
const legacyMagic = system.magics?.masteryofthway
if (legacyMagic && !system.magics?.masteryoftheway) {
updateData["system.magics.masteryoftheway"] = legacyMagic
updateData["system.magics.-=masteryofthway"] = null
}
// Ensure prefs.typeofthrow exists on relevant actor types
if ((actorType === "character" || actorType === "npc") && !system.prefs?.typeofthrow) {
const defaultCheck = actorType === "character"
updateData["system.prefs.typeofthrow"] = { check: defaultCheck, choice: "0" }
}
// Migrate NPC field renames: levelofthreat → threat, powerofnuisance → nuisance
if (actorType === "npc") {
if (system.levelofthreat !== undefined && system.threat === undefined) {
updateData["system.threat"] = system.levelofthreat
updateData["system.-=levelofthreat"] = null
}
if (system.powerofnuisance !== undefined && system.nuisance === undefined) {
updateData["system.nuisance"] = system.powerofnuisance
updateData["system.-=powerofnuisance"] = null
}
}
// Migrate character guardian from string to number
if (actorType === "character" && typeof system.guardian === "string") {
const guardianNum = parseInt(system.guardian, 10)
if (!isNaN(guardianNum)) {
updateData["system.guardian"] = guardianNum
}
}
return updateData
}
function migrateItemData(item) {
const updateData = {}
const system = item.system ?? {}
// Normalize legacy French damageAspect values to English keys
if (item.type === "weapon") {
const ASPECT_FR_TO_EN = { eau: "water", terre: "earth", feu: "fire", bois: "wood" }
const normalized = ASPECT_FR_TO_EN[system.damageAspect]
if (normalized) {
updateData["system.damageAspect"] = normalized
}
}
return updateData
}

View File

@@ -1,4 +1,18 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { ACTOR_TYPES, ITEM_TYPES, MAGICS, SUBTYPES, SYSTEM_ID } from "./config/constants.js" import { ACTOR_TYPES, ITEM_TYPES, MAGICS, SUBTYPES, SYSTEM_ID } from "./config/constants.js"
import { registerSettings, migrateIfNeeded } from "./config/settings.js"
import { preLocalizeConfig } from "./config/localize.js" import { preLocalizeConfig } from "./config/localize.js"
import { configureRuntime } from "./config/runtime.js" import { configureRuntime } from "./config/runtime.js"
import { CharacterDataModel, NpcDataModel } from "./data/actors/index.js" import { CharacterDataModel, NpcDataModel } from "./data/actors/index.js"
@@ -13,7 +27,6 @@ import { CDECharacterSheet, CDENpcSheet } from "./ui/sheets/actors/index.js"
import { CDEItemSheet, CDEKungfuSheet, CDESpellSheet, CDESupernaturalSheet, CDEWeaponSheet, CDEArmorSheet, CDESanheiSheet, CDEIngredientSheet } from "./ui/sheets/items/index.js" import { CDEItemSheet, CDEKungfuSheet, CDESpellSheet, CDESupernaturalSheet, CDEWeaponSheet, CDEArmorSheet, CDESanheiSheet, CDEIngredientSheet } from "./ui/sheets/items/index.js"
import { CDELoksyuApp } from "./ui/apps/loksyu-app.js" import { CDELoksyuApp } from "./ui/apps/loksyu-app.js"
import { CDETinjiApp } from "./ui/apps/tinji-app.js" import { CDETinjiApp } from "./ui/apps/tinji-app.js"
import { migrateIfNeeded, registerSettings } from "./migration.js"
import { injectRollActions, refreshAllRollActions } from "./ui/roll-actions.js" import { injectRollActions, refreshAllRollActions } from "./ui/roll-actions.js"
Hooks.once("i18nInit", preLocalizeConfig) Hooks.once("i18nInit", preLocalizeConfig)
@@ -107,7 +120,6 @@ Hooks.once("init", async () => {
await preloadPartials() await preloadPartials()
registerHandlebarsHelpers() registerHandlebarsHelpers()
registerDice() registerDice()
Hooks.on("renderSettings", (_app, html) => injectCompendiumLink(html))
console.info(`CHRONIQUESDELETRANGE | Initialized`) console.info(`CHRONIQUESDELETRANGE | Initialized`)
}) })
@@ -138,7 +150,7 @@ Hooks.on("renderChatLog", (_app, html) => {
// Use event delegation to avoid being swallowed by Foundry's own handlers // Use event delegation to avoid being swallowed by Foundry's own handlers
wrapper.addEventListener("click", (ev) => { wrapper.addEventListener("click", (ev) => {
if (ev.target.closest(".cde-chat-btn--loksyu")) CDELoksyuApp.open() if (ev.target.closest(".cde-chat-btn--loksyu")) CDELoksyuApp.open()
if (ev.target.closest(".cde-chat-btn--tinji")) CDETinjiApp.open() if (ev.target.closest(".cde-chat-btn--tinji")) CDETinjiApp.open()
}) })
// Insert before the chat form — works on v12 and v13 // Insert before the chat form — works on v12 and v13
@@ -161,33 +173,3 @@ Hooks.on("updateSetting", setting => {
refreshAllRollActions() refreshAllRollActions()
} }
}) })
function injectCompendiumLink(html) {
const header = html[0]?.querySelector?.("h4.divider")
if (!header) return
const section = document.createElement("section")
section.classList.add("settings", "flexcol")
section.innerHTML = `
<section class="links flexcol">
<img class="logo-info" src="systems/fvtt-chroniques-de-l-etrange/images/logo_jeu.webp" />
<h4 class="divider">&nbsp;Lien utile&nbsp;<i class="fa-light fa-up-right-from-square"></i>&nbsp;</h4>
</section>
<section class="settings flexcol">
<button type="button" data-action="open-cde-link">
<i class="fa fa-download"></i>&nbsp;Compendium pour Les CdE&nbsp;<i class="fa-light fa-up-right-from-square"></i>
</button>
<details>
<summary><small>Guide d'installation</small></summary>
<small style="text-align: center;">
<p>Rendez-vous sur le site de l'éditeur, téléchargez les PDF contenant les liens vers les compendia, puis ajoutez leurs manifestes dans Foundry.</p>
</small>
</details>
</section>
`
section.querySelector("button[data-action='open-cde-link']")?.addEventListener("click", () => {
window.open("https://antre-monde.com/les-chroniques-de-letrange/", "_blank")
})
header.parentNode.insertBefore(section, header)
}

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export { CDELoksyuApp } from "./loksyu-app.js" export { CDELoksyuApp } from "./loksyu-app.js"
export { CDETinjiApp } from "./tinji-app.js" export { CDETinjiApp } from "./tinji-app.js"
export { getSingletonActor, updateLoksyuFromRoll, updateTinjiFromRoll } from "./singletons.js" export { updateLoksyuFromRoll, updateTinjiFromRoll } from "./singletons.js"

View File

@@ -1,6 +1,18 @@
import { getLoksyuData, setLoksyuData } from "./singletons.js" /**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
const SYSTEM_ID = "fvtt-chroniques-de-l-etrange" import { getLoksyuData, setLoksyuData } from "./singletons.js"
import { SYSTEM_ID } from "../../config/constants.js"
export class CDELoksyuApp extends foundry.applications.api.HandlebarsApplicationMixin( export class CDELoksyuApp extends foundry.applications.api.HandlebarsApplicationMixin(
foundry.applications.api.ApplicationV2 foundry.applications.api.ApplicationV2

View File

@@ -1,27 +1,23 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
/** /**
* Loksyu / TinJi settings-based helpers. * Loksyu / TinJi settings-based helpers.
* *
* Data is stored as world settings instead of singleton Actor documents. * Data is stored as world settings instead of singleton Actor documents.
*/ */
const SYSTEM_ID = "fvtt-chroniques-de-l-etrange" import { SYSTEM_ID, WU_XING_CYCLE, ASPECT_FACES } from "../../config/constants.js"
/** Wu Xing generating cycle — [successes, auspicious, noxious, loksyu, tinji] */
const WU_XING_CYCLE = {
wood: ["wood", "fire", "water", "earth", "metal"],
fire: ["fire", "earth", "wood", "metal", "water"],
earth: ["earth", "metal", "fire", "water", "wood"],
metal: ["metal", "water", "earth", "wood", "fire"],
water: ["water", "wood", "metal", "fire", "earth"],
}
const ASPECT_FACES = {
metal: [3, 8],
water: [1, 6],
earth: [0, 5],
fire: [2, 7],
wood: [4, 9],
}
/** Read the current loksyu data object from world settings */ /** Read the current loksyu data object from world settings */
export function getLoksyuData() { export function getLoksyuData() {

View File

@@ -1,6 +1,18 @@
import { getTinjiValue, setTinjiValue } from "./singletons.js" /**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
const SYSTEM_ID = "fvtt-chroniques-de-l-etrange" import { getTinjiValue, setTinjiValue } from "./singletons.js"
import { SYSTEM_ID } from "../../config/constants.js"
export class CDETinjiApp extends foundry.applications.api.HandlebarsApplicationMixin( export class CDETinjiApp extends foundry.applications.api.HandlebarsApplicationMixin(
foundry.applications.api.ApplicationV2 foundry.applications.api.ApplicationV2

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
const DIGIT_LABELS = [ const DIGIT_LABELS = [
"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-1.webp", "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-1.webp",
"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-2.webp", "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-2.webp",

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { MAGICS } from "../config/constants.js" import { MAGICS } from "../config/constants.js"
export function registerHandlebarsHelpers() { export function registerHandlebarsHelpers() {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
/** /**
* Initiative determination system for Chroniques de l'Étrange. * Initiative determination system for Chroniques de l'Étrange.
* *

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
/** /**
* Post-roll interactive action buttons injected into dice result chat messages. * Post-roll interactive action buttons injected into dice result chat messages.
* Allows players to pull dice from the Loksyu (as Successes or dés-fastes) * Allows players to pull dice from the Loksyu (as Successes or dés-fastes)
@@ -8,34 +21,10 @@
*/ */
import { getLoksyuData, setLoksyuData, getTinjiValue, setTinjiValue } from "./apps/singletons.js" import { getLoksyuData, setLoksyuData, getTinjiValue, setTinjiValue } from "./apps/singletons.js"
import { SYSTEM_ID, WU_XING_CYCLE, ASPECT_LABELS, ASPECT_ICONS } from "../config/constants.js"
const SYSTEM_ID = "fvtt-chroniques-de-l-etrange"
const RESULT_TEMPLATE = "systems/fvtt-chroniques-de-l-etrange/templates/form/cde-dice-result.html" const RESULT_TEMPLATE = "systems/fvtt-chroniques-de-l-etrange/templates/form/cde-dice-result.html"
const WU_XING_CYCLE = {
wood: ["wood", "fire", "water", "earth", "metal"],
fire: ["fire", "earth", "wood", "metal", "water"],
earth: ["earth", "metal", "fire", "water", "wood"],
metal: ["metal", "water", "earth", "wood", "fire"],
water: ["water", "wood", "metal", "fire", "earth"],
}
const ASPECT_LABELS = {
metal: "CDE.Metal",
water: "CDE.Water",
earth: "CDE.Earth",
fire: "CDE.Fire",
wood: "CDE.Wood",
}
const ASPECT_ICONS = {
metal: "systems/fvtt-chroniques-de-l-etrange/images/cde_metal.webp",
water: "systems/fvtt-chroniques-de-l-etrange/images/cde_eau.webp",
earth: "systems/fvtt-chroniques-de-l-etrange/images/cde_terre.webp",
fire: "systems/fvtt-chroniques-de-l-etrange/images/cde_feu.webp",
wood: "systems/fvtt-chroniques-de-l-etrange/images/cde_bois.webp",
}
/** /**
* Inject or refresh post-roll action buttons in the given chat message HTML element. * Inject or refresh post-roll action buttons in the given chat message HTML element.
* Called from renderChatMessageHTML hook. * Called from renderChatMessageHTML hook.

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
/** /**
* Wu Xing rolling system for Chroniques de l'Étrange. * Wu Xing rolling system for Chroniques de l'Étrange.
* *
@@ -13,7 +26,7 @@
* Each category is associated with one of the five aspects in Wu Xing cycle order. * Each category is associated with one of the five aspects in Wu Xing cycle order.
*/ */
import { MAGICS } from "../config/constants.js" import { MAGICS, ASPECT_LABELS, ASPECT_ICONS, ASPECT_FACES, ASPECT_NAMES, WU_XING_CYCLE } from "../config/constants.js"
import { updateLoksyuFromRoll, updateTinjiFromRoll } from "./apps/singletons.js" import { updateLoksyuFromRoll, updateTinjiFromRoll } from "./apps/singletons.js"
const RESULT_TEMPLATE = "systems/fvtt-chroniques-de-l-etrange/templates/form/cde-dice-result.html" const RESULT_TEMPLATE = "systems/fvtt-chroniques-de-l-etrange/templates/form/cde-dice-result.html"
@@ -31,50 +44,6 @@ const LABELELEMENT_TO_ASPECT = {
"CDE.Wood": "wood", "CDE.Wood": "wood",
} }
/** Map aspect index → string name used in result template */
const ASPECT_NAMES = ["metal", "water", "earth", "fire", "wood"]
/** Map aspect name → i18n label key */
const ASPECT_LABELS = {
metal: "CDE.Metal",
water: "CDE.Water",
earth: "CDE.Earth",
fire: "CDE.Fire",
wood: "CDE.Wood",
}
/** Map aspect name → image path */
const ASPECT_ICONS = {
metal: "systems/fvtt-chroniques-de-l-etrange/images/cde_metal.webp",
water: "systems/fvtt-chroniques-de-l-etrange/images/cde_eau.webp",
earth: "systems/fvtt-chroniques-de-l-etrange/images/cde_terre.webp",
fire: "systems/fvtt-chroniques-de-l-etrange/images/cde_feu.webp",
wood: "systems/fvtt-chroniques-de-l-etrange/images/cde_bois.webp",
}
/** Map aspect index → die face pair [yin, yang] (face=10 stored as 0) */
const ASPECT_FACES = {
metal: [3, 8],
water: [1, 6],
earth: [0, 5], // 0 = face "10"
fire: [2, 7],
wood: [4, 9],
}
/**
* Wu Xing generating/overcoming cycle:
* wood → fire → earth → metal → water → wood (generating)
* For each active aspect, the five categories in order:
* [successes, auspicious, noxious, loksyu, tinji]
*/
const WU_XING_CYCLE = {
wood: ["wood", "fire", "water", "earth", "metal"],
fire: ["fire", "earth", "wood", "metal", "water"],
earth: ["earth", "metal", "fire", "water", "wood"],
metal: ["metal", "water", "earth", "wood", "fire"],
water: ["water", "wood", "metal", "fire", "earth"],
}
/** Maps weapon range string → dice malus applied to the attack pool */ /** Maps weapon range string → dice malus applied to the attack pool */
const RANGE_MALUS = { const RANGE_MALUS = {
contact: 0, contact: 0,
@@ -171,7 +140,7 @@ async function showRollPrompt({ title, template, data, fields }) {
* @param {object} params - Initial values * @param {object} params - Initial values
* @returns {Promise<object|null>} * @returns {Promise<object|null>}
*/ */
export async function showSkillPrompt(params) { async function showSkillPrompt(params) {
return showRollPrompt({ return showRollPrompt({
title: params.title, title: params.title,
template: params.isSpecial ? SKILL_SPECIAL_PROMPT_TEMPLATE : SKILL_PROMPT_TEMPLATE, template: params.isSpecial ? SKILL_SPECIAL_PROMPT_TEMPLATE : SKILL_PROMPT_TEMPLATE,
@@ -190,7 +159,7 @@ export async function showSkillPrompt(params) {
/** /**
* Open the magic roll prompt and return the user-confirmed parameters. * Open the magic roll prompt and return the user-confirmed parameters.
*/ */
export async function showMagicPrompt(params) { async function showMagicPrompt(params) {
return showRollPrompt({ return showRollPrompt({
title: params.title, title: params.title,
template: MAGIC_PROMPT_TEMPLATE, template: MAGIC_PROMPT_TEMPLATE,
@@ -214,7 +183,7 @@ export async function showMagicPrompt(params) {
/** /**
* Open the weapon attack roll prompt and return user-confirmed parameters. * Open the weapon attack roll prompt and return user-confirmed parameters.
*/ */
export async function showWeaponPrompt(params) { async function showWeaponPrompt(params) {
return showRollPrompt({ return showRollPrompt({
title: params.title, title: params.title,
template: WEAPON_PROMPT_TEMPLATE, template: WEAPON_PROMPT_TEMPLATE,

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
const { HandlebarsApplicationMixin } = foundry.applications.api const { HandlebarsApplicationMixin } = foundry.applications.api
export class CDEBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) { export class CDEBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { MAGICS, SUBTYPES } from "../../../config/constants.js" import { MAGICS, SUBTYPES } from "../../../config/constants.js"
import { rollInitiativePC } from "../../initiative.js" import { rollInitiativePC } from "../../initiative.js"
import { rollForActor } from "../../rolling.js" import { rollForActor } from "../../rolling.js"

View File

@@ -1,2 +1,15 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export { CDECharacterSheet } from "./character.js" export { CDECharacterSheet } from "./character.js"
export { CDENpcSheet } from "./npc.js" export { CDENpcSheet } from "./npc.js"

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { rollInitiativeNPC } from "../../initiative.js" import { rollInitiativeNPC } from "../../initiative.js"
import { rollForActor } from "../../rolling.js" import { rollForActor } from "../../rolling.js"
import { CDEBaseActorSheet } from "./base.js" import { CDEBaseActorSheet } from "./base.js"

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDEArmorSheet extends CDEBaseItemSheet { export class CDEArmorSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
const { HandlebarsApplicationMixin } = foundry.applications.api const { HandlebarsApplicationMixin } = foundry.applications.api
export class CDEBaseItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) { export class CDEBaseItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {

View File

@@ -1,4 +1,16 @@
export { CDEBaseItemSheet } from "./base.js" /**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
export { CDEItemSheet } from "./item.js" export { CDEItemSheet } from "./item.js"
export { CDEKungfuSheet } from "./kungfu.js" export { CDEKungfuSheet } from "./kungfu.js"
export { CDESpellSheet } from "./spell.js" export { CDESpellSheet } from "./spell.js"

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDEIngredientSheet extends CDEBaseItemSheet { export class CDEIngredientSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDEItemSheet extends CDEBaseItemSheet { export class CDEItemSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDEKungfuSheet extends CDEBaseItemSheet { export class CDEKungfuSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDESanheiSheet extends CDEBaseItemSheet { export class CDESanheiSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDESpellSheet extends CDEBaseItemSheet { export class CDESpellSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDESupernaturalSheet extends CDEBaseItemSheet { export class CDESupernaturalSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { CDEBaseItemSheet } from "./base.js" import { CDEBaseItemSheet } from "./base.js"
export class CDEWeaponSheet extends CDEBaseItemSheet { export class CDEWeaponSheet extends CDEBaseItemSheet {

View File

@@ -1,3 +1,16 @@
/**
* Chroniques de l'Étrange — Système FoundryVTT
*
* Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
* Ce système FoundryVTT est une implémentation indépendante et n'est pas
* affilié à Antre-Monde Éditions,
* mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
*
* @author LeRatierBretonnien
* @copyright 20242026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { TEMPLATE_PARTIALS } from "../config/constants.js" import { TEMPLATE_PARTIALS } from "../config/constants.js"
export async function preloadPartials() { export async function preloadPartials() {