diff --git a/css/cde-theme.css b/css/cde-theme.css index c5c03fd..cd0397b 100644 --- a/css/cde-theme.css +++ b/css/cde-theme.css @@ -4400,3 +4400,59 @@ ol.item-list li.item .item-controls a.item-control:hover { color: #7d94b8; text-align: center; } +.cde-welcome-message { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 12px 16px; + background: #101622; + border: 1px solid #263853; + border-radius: 8px; + text-align: center; +} +.cde-welcome-logo { + width: 120px; + height: auto; + object-fit: contain; + filter: drop-shadow(0 0 8px rgba(74, 158, 255, 0.4)); +} +.cde-welcome-title { + margin: 0; + font-size: 15px; + font-weight: 700; + color: #4a9eff; + text-shadow: 0 0 8px rgba(74, 158, 255, 0.5); +} +.cde-welcome-links { + margin: 0; + font-size: 12px; + color: #7d94b8; +} +.cde-welcome-links a { + color: #00d4d4; + text-decoration: none; + border-bottom: 1px solid rgba(0, 212, 212, 0.4); +} +.cde-welcome-links a:hover { + color: #fff; + border-bottom-color: #fff; +} +.cde-welcome-help-btn { + display: inline-flex; + align-items: center; + gap: 6px; + margin-top: 4px; + padding: 7px 18px; + background: #4a9eff; + border: none; + border-radius: 6px; + color: #fff; + font-size: 12px; + font-weight: 700; + cursor: pointer; + transition: filter 0.15s; +} +.cde-welcome-help-btn:hover { + filter: brightness(1.2); +} diff --git a/css/cde-theme.less b/css/cde-theme.less index fd285cb..8d528d3 100644 --- a/css/cde-theme.less +++ b/css/cde-theme.less @@ -4586,3 +4586,71 @@ ol.item-list { color: @cde-muted; text-align: center; } + +// ============================================================ +// Welcome message +// ============================================================ + +.cde-welcome-message { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 12px 16px; + background: @cde-surface; + border: 1px solid @cde-border-hi; + border-radius: 8px; + text-align: center; +} + +.cde-welcome-logo { + width: 120px; + height: auto; + object-fit: contain; + filter: drop-shadow(0 0 8px fade(@cde-spell, 40%)); +} + +.cde-welcome-title { + margin: 0; + font-size: 15px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); +} + +.cde-welcome-links { + margin: 0; + font-size: 12px; + color: @cde-muted; + + a { + color: @cde-item; + text-decoration: none; + border-bottom: 1px solid fade(@cde-item, 40%); + + &:hover { + color: #fff; + border-bottom-color: #fff; + } + } +} + +.cde-welcome-help-btn { + display: inline-flex; + align-items: center; + gap: 6px; + margin-top: 4px; + padding: 7px 18px; + background: @cde-spell; + border: none; + border-radius: 6px; + color: #fff; + font-size: 12px; + font-weight: 700; + cursor: pointer; + transition: filter 0.15s; + + &:hover { + filter: brightness(1.2); + } +} diff --git a/dist/system.js b/dist/system.js index 96dd095..45056f8 100644 --- a/dist/system.js +++ b/dist/system.js @@ -602,9 +602,36 @@ function registerSettings() { type: Number, default: 0 }); + game.settings.register(SYSTEM_ID, "welcomeSceneLoaded", { + scope: "world", + config: false, + type: Boolean, + default: false + }); } async function migrateIfNeeded() { } +async function loadWelcomeSceneIfNeeded() { + if (!game.user.isGM) return; + if (game.settings.get(SYSTEM_ID, "welcomeSceneLoaded")) return; + try { + const pack = game.packs.get(`${SYSTEM_ID}.cde-scenes`); + if (!pack) return; + const index = await pack.getIndex(); + const entry = index.find((e) => e.name === "Accueil"); + if (!entry) return; + const existing = game.scenes.find((s) => s.name === "Accueil"); + let scene = existing; + if (!scene) { + const doc = await pack.getDocument(entry._id); + [scene] = await Scene.createDocuments([doc.toObject()]); + } + await game.settings.set(SYSTEM_ID, "welcomeSceneLoaded", true); + await scene.activate(); + } catch (err) { + console.error("CHRONIQUESDELETRANGE | loadWelcomeSceneIfNeeded failed:", err); + } +} // src/config/localize.js function preLocalizeConfig() { @@ -3018,6 +3045,47 @@ function refreshAllRollActions() { }); } +// src/ui/apps/welcome.js +var HELP_JOURNAL_UUID = `Compendium.${SYSTEM_ID}.cde-help.JournalEntry.CDEGuideMain0001`; +async function showWelcomeMessage() { + const logo = `systems/${SYSTEM_ID}/images/logo_jeu.webp`; + const content = ` +
+ Un jeu de r\xF4le \xE9dit\xE9 par + Antre-Monde \xC9ditions +
+ Syst\xE8me FoundryVTT r\xE9alis\xE9 par + LeRatierBretonnien +
\n Un jeu de r\u00F4le \u00E9dit\u00E9 par\n Antre-Monde \u00C9ditions\n
\n Syst\u00E8me FoundryVTT r\u00E9alis\u00E9 par\n LeRatierBretonnien\n
Ce guide vous présente l'interface du système FoundryVTT pour Chroniques de l'Étrange (CDE), jeu de rôle d'enquête et d'action surnaturelle dans le Hong Kong contemporain, édité par Antre-Monde Éditions.
Naviguez dans ce journal via les onglets de page pour découvrir chaque aspect du système.
Le Wu Xing est le cœur du système de résolution. Cinq aspects — Métal (㊎), Eau (㊌), Terre (㊏), Feu (㊋) et Bois (㊍) — définissent les capacités d'un personnage.
Chaque aspect est associé à deux faces du d10. Lors d'un jet, vous déclarez l'aspect utilisé avant de lancer vos dés. Chaque dé donne un résultat :
La valeur d'un aspect (de 1 à 5) détermine le nombre de dés que vous lancez.
La fiche de personnage se décompose en sept onglets :
En haut de la fiche se trouvent le concept du personnage, son gardien céleste (aspect dominant) et la zone d'initiative avec les boutons ±.
Les Trois Trésors représentent les réserves d'énergie vitale du personnage :
Ce sont les deux jauges de vitalité. Le Hei-Yang représente l'énergie active, le Hei-Yin l'énergie passive. Ensemble, ils forment le token attribute visible sur la carte.
Les niveaux de dés (d4 → d6 → d8 → d10 → d12) reflètent la progression du personnage dans un aspect. Chaque niveau de dé confère un bonus ou un avantage supplémentaire.
Les blessures s'accumulent et imposent des malus croissants :
CDE dispose de cinq écoles de magie, chacune divisée en cinq spécialités :
Les sortilèges sont importés depuis le compendium Sortilèges et glissés sur la fiche.
Les arts martiaux représentent les techniques de combat du personnage. Chaque art martial possède :
Ouvrez le compendium Arts Martiaux et faites glisser une technique sur la fiche du personnage. Elle apparaît alors dans l'onglet Kung Fu.
L'onglet Équipement liste tout ce que porte le personnage. Les objets sont classés en plusieurs catégories :
Faites glisser un objet depuis un compendium (Armes, Protections, San Hei, Ingrédients, Équipements) ou créez-en un avec le bouton Créer correspondant.
Cliquez sur l'image d'un objet pour ouvrir sa fiche détaillée.
Les PNJ ont une fiche simplifiée par rapport aux personnages joueurs.
Les PNJ ont quatre aptitudes (Physique, Martiale, Mentale, Sociale) avec une spécialité optionnelle chacune.
Les PNJ peuvent avoir des capacités importées depuis le compendium Capacités Surnaturelles.
La roue est un cercle de 24 crans numérotés. L'initiative de chaque personnage est calculée comme suit :
Les crans sont colorés selon le cycle Wu Xing (4 crans par couleur, 6 couleurs). Un effet qui dure 6 crans court jusqu'au prochain cran de la même couleur.
Les personnages agissent du numéro le plus élevé au plus bas. Après chaque action, le jeton avance dans le sens horaire du coût de l'action :
Ouvrez la roue depuis la barre latérale du chat (icône roue) ou via la console : game.cde.CDEWheelApp.open().
game.cde.CDEWheelApp.open()
Ces deux compteurs sont partagés entre tous les joueurs et le MJ :
Accédez via la barre du chat ou : game.cde.CDELoksyuApp.open()
game.cde.CDELoksyuApp.open()
Si vous possédez des fiches de personnage créées dans l'ancien système CDE (non maintenu), l'outil de migration les convertit automatiquement :
Les personnages migrés apparaissent dans la liste des Acteurs.
+ Un jeu de rôle édité par + Antre-Monde Éditions +
+ Système FoundryVTT réalisé par + LeRatierBretonnien +