Rework des fiches creature/PJ et Tinji/Loksyu
This commit is contained in:
@@ -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
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
7
dist/system.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -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 2024–2026 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",
|
||||||
|
|||||||
@@ -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 2024–2026 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() {
|
||||||
|
|||||||
@@ -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 2024–2026 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
48
src/config/settings.js
Normal 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 2024–2026 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.
|
||||||
|
}
|
||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 })
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
146
src/migration.js
146
src/migration.js
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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 2024–2026 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"> Lien utile <i class="fa-light fa-up-right-from-square"></i> </h4>
|
|
||||||
</section>
|
|
||||||
<section class="settings flexcol">
|
|
||||||
<button type="button" data-action="open-cde-link">
|
|
||||||
<i class="fa fa-download"></i> Compendium pour Les CdE <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)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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() {
|
||||||
|
|||||||
@@ -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 2024–2026 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
|
||||||
|
|||||||
@@ -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 2024–2026 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",
|
||||||
|
|||||||
@@ -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 2024–2026 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() {
|
||||||
|
|||||||
@@ -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 2024–2026 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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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 2024–2026 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.
|
||||||
|
|||||||
@@ -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 2024–2026 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,
|
||||||
|
|||||||
@@ -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 2024–2026 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) {
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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) {
|
||||||
|
|||||||
@@ -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 2024–2026 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"
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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 {
|
||||||
|
|||||||
@@ -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 2024–2026 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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user