Compare commits

...

3 Commits

Author SHA1 Message Date
uberwald 6ae99aadb0 Fix v14 migration issues
Release Creation / build (release) Successful in 45s
2026-05-25 23:08:58 +02:00
uberwald c1a9bfbb04 Corrections CSS diverses 2026-05-10 18:37:58 +02:00
uberwald 0fec217528 Foundryv14 migration
Release Creation / build (release) Successful in 46s
2026-04-01 22:25:32 +02:00
50 changed files with 618 additions and 157 deletions
+125
View File
@@ -0,0 +1,125 @@
# Agents pour le système JDR Ecryme (FoundryVTT)
Ce fichier documente les commandes et workflows pour les agents (automatisations, scripts, outils externes) utilisés dans le développement et la maintenance du système Ecryme pour FoundryVTT.
## Commandes de développement
### Linting et validation
```bash
# Vérification du code TypeScript
npm run lint
# Vérification des types
npm run typecheck
# Construction du projet
npm run build
```
### Tests
```bash
# Exécution des tests unitaires
npm test
# Exécution des tests avec couverture
npm run test:coverage
```
### Déploiement
```bash
# Construction pour la production
npm run build:prod
# Génération du package pour FoundryVTT
npm run package
```
## Workflows recommandés
### Avant de soumettre une PR
1. Exécuter les tests unitaires
2. Vérifier le linting (`npm run lint`)
3. Vérifier les types (`npm run typecheck`)
4. Construire le projet (`npm run build`)
5. Tester manuellement dans FoundryVTT avec les scénarios de test fournis dans `/test-scenarios/`
### Pour ajouter une nouvelle fonctionnalité
1. Créer une branche `feature/<nom-de-la-fonctionnalité>`
2. Ajouter les tests dans `/tests/`
3. Implémenter la fonctionnalité
4. Mettre à jour la documentation dans `/docs/` si nécessaire
5. Soumettre une PR avec une description claire des changements
## Structure du projet
```
/
├── src/ # Code source principal
│ ├── module/ # Définition du module FoundryVTT
│ ├── systems/ # Systèmes de règles spécifiques à Ecryme
│ ├── actors/ # Logique des acteurs (PJs, PNJs, créatures)
│ ├── items/ # Logique des objets (armes, sorts, équipements)
│ └── utils/ # Utilitaires partagés
├── tests/ # Tests unitaires et d'intégration
├── docs/ # Documentation technique et utilisateur
├── templates/ # Templates Handlebar pour les feuilles de personnage
└── test-scenarios/ # Scénarios de test pour FoundryVTT
```
## Conventions de codage
- **TypeScript strict** : Toujours utiliser les types les plus précis possibles
- **Noms de fichiers** :
- PascalCase pour les classes (`CharacterSheet.ts`)
- kebab-case pour les templates (`character-sheet.hbs`)
- camelCase pour les utilitaires (`diceRoller.ts`)
- **Tests** :
- Un fichier de test par fichier source (`characterSheet.test.ts`)
- Couverture minimale de 80% requise pour les PR
## Outils spécifiques à FoundryVTT
### Génération des templates
```bash
# Recompiler les templates Handlebar après modification
npm run build:templates
```
### Validation des données
```bash
# Valider la structure des données contre le schéma
npm run validate:schema
```
### Déploiement pour test local
```bash
# Lier le module en développement à FoundryVTT (nécessite le module "Module Developer")
npx foundryvtt-link
```
## Dépannage
### Problèmes courants
1. **Les changements ne s'affichent pas dans Foundry** :
- Vérifier que le module est bien lié (`npm run link`)
- Redémarrer FoundryVTT
- Vider le cache du navigateur (Ctrl+F5)
2. **Erreurs de type dans les templates** :
- Exécuter `npm run validate:templates`
- Vérifier les annotations JSDoc dans les fichiers `.ts`
3. **Problèmes de performance** :
- Utiliser le profiler de Foundry (F12 > Performance)
- Vérifier les boucles dans les templates Handlebar
## Ressources utiles
- [Documentation FoundryVTT](https://foundryvtt.com/article/api/)
- [Guide des systèmes personnalisés](https://foundryvtt.com/article/system-development/)
- [Référence Handlebar](https://handlebarsjs.com/guide/)
- [TypeScript pour Foundry](https://github.com/League-of-Foundry-Developers/foundry-vtt-types)
## Contribution
Les contributions sont les bienvenues ! Veuillez :
1. Ouvrir une issue pour discuter des changements majeurs
2. Suivre les conventions de codage ci-dessus
3. Inclure des tests pour les nouvelles fonctionnalités
4. Mettre à jour la documentation si nécessaire
+4 -6
View File
@@ -28,6 +28,7 @@ import { EcrymeItem } from "./items/ecryme-item.js";
import { EcrymeHotbar } from "./app/ecryme-hotbar.js" import { EcrymeHotbar } from "./app/ecryme-hotbar.js"
import { EcrymeCharacterSummary } from "./app/ecryme-summary-app.js" import { EcrymeCharacterSummary } from "./app/ecryme-summary-app.js"
import { ECRYME_CONFIG } from "./common/ecryme-config.js" import { ECRYME_CONFIG } from "./common/ecryme-config.js"
import * as models from "./models/_module.js"
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
@@ -36,10 +37,7 @@ import { ECRYME_CONFIG } from "./common/ecryme-config.js"
/************************************************************************************/ /************************************************************************************/
Hooks.once("init", async function () { Hooks.once("init", async function () {
console.log(`Initializing Ecryme RPG`); console.log(`Initializing Ecryme RPG System`);
// Import DataModels dynamically to avoid timing issues
const models = await import("./models/_module.js");
/* -------------------------------------------- */ /* -------------------------------------------- */
// preload handlebars templates // preload handlebars templates
@@ -166,11 +164,11 @@ Hooks.once("ready", function () {
}) })
/* -------------------------------------------- */ /* -------------------------------------------- */
Hooks.once('babele.init', (babele) => { Hooks.once("babele.init", (babele) => {
console.log("Initializing Babele translations")
babele.setSystemTranslationsDir("translated"); babele.setSystemTranslationsDir("translated");
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
/* -------------------------------------------- */ /* -------------------------------------------- */
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000291 MANIFEST-000379
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/26-13:35:49.720275 7f821e7fc6c0 Recovering log #289 2026/05/25-23:08:24.585664 7fe4cbfff6c0 Recovering log #377
2026/02/26-13:35:49.730573 7f821e7fc6c0 Delete type=0 #289 2026/05/25-23:08:24.596183 7fe4cbfff6c0 Delete type=3 #375
2026/02/26-13:35:49.730637 7f821e7fc6c0 Delete type=3 #287 2026/05/25-23:08:24.596270 7fe4cbfff6c0 Delete type=0 #377
2026/02/26-13:45:04.206270 7f821d8d46c0 Level-0 table #294: started 2026/05/25-23:08:42.305844 7fe4c9ffb6c0 Level-0 table #382: started
2026/02/26-13:45:04.206300 7f821d8d46c0 Level-0 table #294: 0 bytes OK 2026/05/25-23:08:42.305858 7fe4c9ffb6c0 Level-0 table #382: 0 bytes OK
2026/02/26-13:45:04.212252 7f821d8d46c0 Delete type=0 #292 2026/05/25-23:08:42.311644 7fe4c9ffb6c0 Delete type=0 #380
2026/02/26-13:45:04.225396 7f821d8d46c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.324476 7fe4c9ffb6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/25-15:53:13.691886 7f821effd6c0 Recovering log #285 2026/05/25-23:06:37.876581 7fe4cbfff6c0 Recovering log #373
2026/02/25-15:53:13.751659 7f821effd6c0 Delete type=3 #283 2026/05/25-23:06:37.885990 7fe4cbfff6c0 Delete type=3 #371
2026/02/25-15:53:13.751724 7f821effd6c0 Delete type=0 #285 2026/05/25-23:06:37.886037 7fe4cbfff6c0 Delete type=0 #373
2026/02/25-15:53:35.823463 7f821d8d46c0 Level-0 table #290: started 2026/05/25-23:07:52.694183 7fe4c9ffb6c0 Level-0 table #378: started
2026/02/25-15:53:35.823484 7f821d8d46c0 Level-0 table #290: 0 bytes OK 2026/05/25-23:07:52.694213 7fe4c9ffb6c0 Level-0 table #378: 0 bytes OK
2026/02/25-15:53:35.829592 7f821d8d46c0 Delete type=0 #288 2026/05/25-23:07:52.700676 7fe4c9ffb6c0 Delete type=0 #376
2026/02/25-15:53:35.836554 7f821d8d46c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.700785 7fe4c9ffb6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000228 MANIFEST-000312
+8 -8
View File
@@ -1,8 +1,8 @@
2026/02/26-13:35:49.774903 7f821ffff6c0 Recovering log #226 2026/05/25-23:08:24.638383 7fe4cb7fe6c0 Recovering log #310
2026/02/26-13:35:49.785514 7f821ffff6c0 Delete type=0 #226 2026/05/25-23:08:24.648627 7fe4cb7fe6c0 Delete type=3 #308
2026/02/26-13:35:49.785596 7f821ffff6c0 Delete type=3 #224 2026/05/25-23:08:24.648688 7fe4cb7fe6c0 Delete type=0 #310
2026/02/26-13:45:04.243562 7f821d8d46c0 Level-0 table #231: started 2026/05/25-23:08:42.324943 7fe4c9ffb6c0 Level-0 table #315: started
2026/02/26-13:45:04.243597 7f821d8d46c0 Level-0 table #231: 0 bytes OK 2026/05/25-23:08:42.324976 7fe4c9ffb6c0 Level-0 table #315: 0 bytes OK
2026/02/26-13:45:04.249861 7f821d8d46c0 Delete type=0 #229 2026/05/25-23:08:42.331359 7fe4c9ffb6c0 Delete type=0 #313
2026/02/26-13:45:04.250001 7f821d8d46c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.359806 7fe4c9ffb6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2026/02/26-13:45:04.250031 7f821d8d46c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.380057 7fe4c9ffb6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/02/25-15:53:13.932310 7f821ffff6c0 Recovering log #222 2026/05/25-23:06:37.927773 7fe4cb7fe6c0 Recovering log #306
2026/02/25-15:53:13.985670 7f821ffff6c0 Delete type=3 #220 2026/05/25-23:06:37.937509 7fe4cb7fe6c0 Delete type=3 #304
2026/02/25-15:53:13.985727 7f821ffff6c0 Delete type=0 #222 2026/05/25-23:06:37.937560 7fe4cb7fe6c0 Delete type=0 #306
2026/02/25-15:53:35.850326 7f821d8d46c0 Level-0 table #227: started 2026/05/25-23:07:52.707381 7fe4c9ffb6c0 Level-0 table #311: started
2026/02/25-15:53:35.850379 7f821d8d46c0 Level-0 table #227: 0 bytes OK 2026/05/25-23:07:52.707409 7fe4c9ffb6c0 Level-0 table #311: 0 bytes OK
2026/02/25-15:53:35.856311 7f821d8d46c0 Delete type=0 #225 2026/05/25-23:07:52.713201 7fe4c9ffb6c0 Delete type=0 #309
2026/02/25-15:53:35.863092 7f821d8d46c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.733614 7fe4c9ffb6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2026/02/25-15:53:35.863120 7f821d8d46c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.733638 7fe4c9ffb6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000291 MANIFEST-000377
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/26-13:35:49.760218 7f821f7fe6c0 Recovering log #289 2026/05/25-23:08:24.625469 7fe4cbfff6c0 Recovering log #375
2026/02/26-13:35:49.771084 7f821f7fe6c0 Delete type=0 #289 2026/05/25-23:08:24.635881 7fe4cbfff6c0 Delete type=3 #373
2026/02/26-13:35:49.771134 7f821f7fe6c0 Delete type=3 #287 2026/05/25-23:08:24.635933 7fe4cbfff6c0 Delete type=0 #375
2026/02/26-13:45:04.225531 7f821d8d46c0 Level-0 table #294: started 2026/05/25-23:08:42.317961 7fe4c9ffb6c0 Level-0 table #380: started
2026/02/26-13:45:04.225558 7f821d8d46c0 Level-0 table #294: 0 bytes OK 2026/05/25-23:08:42.317972 7fe4c9ffb6c0 Level-0 table #380: 0 bytes OK
2026/02/26-13:45:04.231385 7f821d8d46c0 Delete type=0 #292 2026/05/25-23:08:42.324427 7fe4c9ffb6c0 Delete type=0 #378
2026/02/26-13:45:04.249963 7f821d8d46c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.324891 7fe4c9ffb6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/25-15:53:13.876847 7f821e7fc6c0 Recovering log #285 2026/05/25-23:06:37.915238 7fe4ca7fc6c0 Recovering log #371
2026/02/25-15:53:13.930449 7f821e7fc6c0 Delete type=3 #283 2026/05/25-23:06:37.925308 7fe4ca7fc6c0 Delete type=3 #369
2026/02/25-15:53:13.930523 7f821e7fc6c0 Delete type=0 #285 2026/05/25-23:06:37.925365 7fe4ca7fc6c0 Delete type=0 #371
2026/02/25-15:53:35.829708 7f821d8d46c0 Level-0 table #290: started 2026/05/25-23:07:52.700870 7fe4c9ffb6c0 Level-0 table #376: started
2026/02/25-15:53:35.829729 7f821d8d46c0 Level-0 table #290: 0 bytes OK 2026/05/25-23:07:52.701331 7fe4c9ffb6c0 Level-0 table #376: 0 bytes OK
2026/02/25-15:53:35.836306 7f821d8d46c0 Delete type=0 #288 2026/05/25-23:07:52.707294 7fe4c9ffb6c0 Delete type=0 #374
2026/02/25-15:53:35.836570 7f821d8d46c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.733595 7fe4c9ffb6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000177 MANIFEST-000264
+8 -8
View File
@@ -1,8 +1,8 @@
2026/02/26-13:35:49.748189 7f821e7fc6c0 Recovering log #175 2026/05/25-23:08:24.610750 7fe4ca7fc6c0 Recovering log #262
2026/02/26-13:35:49.757710 7f821e7fc6c0 Delete type=0 #175 2026/05/25-23:08:24.621300 7fe4ca7fc6c0 Delete type=3 #260
2026/02/26-13:35:49.757752 7f821e7fc6c0 Delete type=3 #173 2026/05/25-23:08:24.621336 7fe4ca7fc6c0 Delete type=0 #262
2026/02/26-13:45:04.218556 7f821d8d46c0 Level-0 table #180: started 2026/05/25-23:08:42.311679 7fe4c9ffb6c0 Level-0 table #267: started
2026/02/26-13:45:04.218583 7f821d8d46c0 Level-0 table #180: 0 bytes OK 2026/05/25-23:08:42.311691 7fe4c9ffb6c0 Level-0 table #267: 0 bytes OK
2026/02/26-13:45:04.225239 7f821d8d46c0 Delete type=0 #178 2026/05/25-23:08:42.317830 7fe4c9ffb6c0 Delete type=0 #265
2026/02/26-13:45:04.225420 7f821d8d46c0 Manual compaction at level-0 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.324483 7fe4c9ffb6c0 Manual compaction at level-0 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes.levels!zvY1RwBhTfwdZIBa.defaultLevel0000' @ 0 : 0; will stop at (end)
2026/02/26-13:45:04.225458 7f821d8d46c0 Manual compaction at level-1 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.324930 7fe4c9ffb6c0 Manual compaction at level-1 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes.levels!zvY1RwBhTfwdZIBa.defaultLevel0000' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/02/25-15:53:13.816260 7f821ffff6c0 Recovering log #171 2026/05/25-23:06:37.900889 7fe4caffd6c0 Recovering log #258
2026/02/25-15:53:13.873719 7f821ffff6c0 Delete type=3 #169 2026/05/25-23:06:37.911257 7fe4caffd6c0 Delete type=3 #256
2026/02/25-15:53:13.873802 7f821ffff6c0 Delete type=0 #171 2026/05/25-23:06:37.911321 7fe4caffd6c0 Delete type=0 #258
2026/02/25-15:53:35.810175 7f821d8d46c0 Level-0 table #176: started 2026/05/25-23:07:52.688262 7fe4c9ffb6c0 Level-0 table #263: started
2026/02/25-15:53:35.810225 7f821d8d46c0 Level-0 table #176: 0 bytes OK 2026/05/25-23:07:52.688293 7fe4c9ffb6c0 Level-0 table #263: 0 bytes OK
2026/02/25-15:53:35.817237 7f821d8d46c0 Delete type=0 #174 2026/05/25-23:07:52.694093 7fe4c9ffb6c0 Delete type=0 #261
2026/02/25-15:53:35.836504 7f821d8d46c0 Manual compaction at level-0 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.700777 7fe4c9ffb6c0 Manual compaction at level-0 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes.levels!zvY1RwBhTfwdZIBa.defaultLevel0000' @ 0 : 0; will stop at (end)
2026/02/25-15:53:35.836580 7f821d8d46c0 Manual compaction at level-1 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.700805 7fe4c9ffb6c0 Manual compaction at level-1 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes.levels!zvY1RwBhTfwdZIBa.defaultLevel0000' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000291 MANIFEST-000375
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/26-13:35:49.707150 7f821ffff6c0 Recovering log #289 2026/05/25-23:08:24.571661 7fe4cb7fe6c0 Recovering log #373
2026/02/26-13:35:49.716871 7f821ffff6c0 Delete type=0 #289 2026/05/25-23:08:24.583242 7fe4cb7fe6c0 Delete type=3 #371
2026/02/26-13:35:49.716971 7f821ffff6c0 Delete type=3 #287 2026/05/25-23:08:24.583309 7fe4cb7fe6c0 Delete type=0 #373
2026/02/26-13:45:04.212361 7f821d8d46c0 Level-0 table #294: started 2026/05/25-23:08:42.299898 7fe4c9ffb6c0 Level-0 table #378: started
2026/02/26-13:45:04.212394 7f821d8d46c0 Level-0 table #294: 0 bytes OK 2026/05/25-23:08:42.299954 7fe4c9ffb6c0 Level-0 table #378: 0 bytes OK
2026/02/26-13:45:04.218471 7f821d8d46c0 Delete type=0 #292 2026/05/25-23:08:42.305788 7fe4c9ffb6c0 Delete type=0 #376
2026/02/26-13:45:04.225409 7f821d8d46c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.324469 7fe4c9ffb6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/25-15:53:13.612255 7f821ffff6c0 Recovering log #285 2026/05/25-23:06:37.865486 7fe4cbfff6c0 Recovering log #369
2026/02/25-15:53:13.689314 7f821ffff6c0 Delete type=3 #283 2026/05/25-23:06:37.874724 7fe4cbfff6c0 Delete type=3 #367
2026/02/25-15:53:13.689394 7f821ffff6c0 Delete type=0 #285 2026/05/25-23:06:37.874744 7fe4cbfff6c0 Delete type=0 #369
2026/02/25-15:53:35.836645 7f821d8d46c0 Level-0 table #290: started 2026/05/25-23:07:52.682178 7fe4c9ffb6c0 Level-0 table #374: started
2026/02/25-15:53:35.836668 7f821d8d46c0 Level-0 table #290: 0 bytes OK 2026/05/25-23:07:52.682203 7fe4c9ffb6c0 Level-0 table #374: 0 bytes OK
2026/02/25-15:53:35.843158 7f821d8d46c0 Delete type=0 #288 2026/05/25-23:07:52.688174 7fe4c9ffb6c0 Delete type=0 #372
2026/02/25-15:53:35.863066 7f821d8d46c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.700766 7fe4c9ffb6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
+1
View File
@@ -0,0 +1 @@
MANIFEST-000002
View File
+1
View File
@@ -0,0 +1 @@
2026/05/06-14:41:23.043596 7f0aceffd6c0 Delete type=3 #1
Binary file not shown.
View File
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000291 MANIFEST-000379
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/26-13:35:49.734045 7f821f7fe6c0 Recovering log #289 2026/05/25-23:08:24.598700 7fe4caffd6c0 Recovering log #377
2026/02/26-13:35:49.744259 7f821f7fe6c0 Delete type=0 #289 2026/05/25-23:08:24.608566 7fe4caffd6c0 Delete type=3 #375
2026/02/26-13:35:49.744317 7f821f7fe6c0 Delete type=3 #287 2026/05/25-23:08:24.608604 7fe4caffd6c0 Delete type=0 #377
2026/02/26-13:45:04.200106 7f821d8d46c0 Level-0 table #294: started 2026/05/25-23:08:42.331497 7fe4c9ffb6c0 Level-0 table #382: started
2026/02/26-13:45:04.200155 7f821d8d46c0 Level-0 table #294: 0 bytes OK 2026/05/25-23:08:42.331525 7fe4c9ffb6c0 Level-0 table #382: 0 bytes OK
2026/02/26-13:45:04.206134 7f821d8d46c0 Delete type=0 #292 2026/05/25-23:08:42.338312 7fe4c9ffb6c0 Delete type=0 #380
2026/02/26-13:45:04.225380 7f821d8d46c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2026/05/25-23:08:42.359828 7fe4c9ffb6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/25-15:53:13.754329 7f821e7fc6c0 Recovering log #285 2026/05/25-23:06:37.888245 7fe4cb7fe6c0 Recovering log #373
2026/02/25-15:53:13.814025 7f821e7fc6c0 Delete type=3 #283 2026/05/25-23:06:37.898117 7fe4cb7fe6c0 Delete type=3 #371
2026/02/25-15:53:13.814092 7f821e7fc6c0 Delete type=0 #285 2026/05/25-23:06:37.898159 7fe4cb7fe6c0 Delete type=0 #373
2026/02/25-15:53:35.817353 7f821d8d46c0 Level-0 table #290: started 2026/05/25-23:07:52.675131 7fe4c9ffb6c0 Level-0 table #378: started
2026/02/25-15:53:35.817380 7f821d8d46c0 Level-0 table #290: 0 bytes OK 2026/05/25-23:07:52.675198 7fe4c9ffb6c0 Level-0 table #378: 0 bytes OK
2026/02/25-15:53:35.823347 7f821d8d46c0 Delete type=0 #288 2026/05/25-23:07:52.682088 7fe4c9ffb6c0 Delete type=0 #376
2026/02/25-15:53:35.836533 7f821d8d46c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2026/05/25-23:07:52.700749 7fe4c9ffb6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
View File
+1
View File
@@ -0,0 +1 @@
MANIFEST-000002
View File
+1
View File
@@ -0,0 +1 @@
2026/05/06-14:41:23.014318 7f0acffff6c0 Delete type=3 #1
Binary file not shown.
+1 -2
View File
@@ -73,8 +73,7 @@ button,
background: rgba(0, 0, 0, 0.75); background: rgba(0, 0, 0, 0.75);
} }
.window-app.sheet .window-content, .fvtt-ecryme .window-content {
.application.sheet .window-content {
margin: 0; margin: 0;
padding: 0; padding: 0;
overflow: hidden auto; overflow: hidden auto;
+15 -20
View File
@@ -1,15 +1,23 @@
// ============================================================ // ============================================================
// Sheet styles (actor + item, AppV1 + AppV2) // Sheet styles (actor + item, AppV1 + AppV2)
// Scoped to .fvtt-ecryme to avoid overriding core Foundry UI
// ============================================================ // ============================================================
// Sheet header background // Sheet window-content + header background
.window-app.sheet .window-content .sheet-header, .fvtt-ecryme .window-content,
.application.sheet .window-content .sheet-header { .fvtt-ecryme .window-content .sheet-body {
font-size: 0.8rem;
background: @background-image;
color: @color-text-dark;
}
.fvtt-ecryme .window-content .sheet-header {
color: @color-text-dark; color: @color-text-dark;
background: @background-image; background: @background-image;
} }
// Input / select base (light background) // Inputs & selects inside Ecryme sheets
.fvtt-ecryme .window-content {
input[type="text"], input[type="text"],
input[type="number"], input[type="number"],
select[type="text"] { select[type="text"] {
@@ -22,9 +30,6 @@ select {
color: @color-input-text; color: @color-input-text;
} }
// Sheet content inputs & selects — dark text
.window-app.sheet .window-content,
.application.sheet .window-content {
.sheet-header, .sheet-header,
.sheet-body { .sheet-body {
select[type="text"], select[type="text"],
@@ -53,16 +58,6 @@ select {
} }
} }
// Sheet body + window-content background
.window-app .window-content,
.window-app.sheet .window-content .sheet-body,
.application .window-content,
.application.sheet .window-content .sheet-body {
font-size: 0.8rem;
background: @background-image;
color: @color-text-dark;
}
section.sheet-body { section.sheet-body {
padding: 0.25rem 0.5rem; padding: 0.25rem 0.5rem;
@@ -73,7 +68,7 @@ section.sheet-body {
} }
} }
.sheet { .fvtt-ecryme {
header.sheet-header { header.sheet-header {
.profile-img { .profile-img {
object-fit: cover; object-fit: cover;
@@ -135,8 +130,8 @@ nav.sheet-tabs {
} }
} }
// Tooltip // Tooltip (scoped to Ecryme sheets)
.window-app.sheet .window-content { .fvtt-ecryme .window-content {
.tooltip:hover .tooltiptext { .tooltip:hover .tooltiptext {
top: 2rem; top: 2rem;
left: 2rem; left: 2rem;
+22 -2
View File
@@ -100,8 +100,22 @@
"license": "LICENSE.txt", "license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-ecryme/raw/branch/master/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-ecryme/raw/branch/master/system.json",
"compatibility": { "compatibility": {
"minimum": "11", "minimum": "13",
"verified": "13" "verified": "14"
},
"documentTypes": {
"Actor": {
"pc": {"htmlFields": ["description", "gmnotes"]},
"npc": {"htmlFields": ["description", "gmnotes"]},
"annency": {"htmlFields": ["description", "enhancements"]}
},
"Item": {
"equipment": {"htmlFields": ["description"]},
"trait": {"htmlFields": ["description"]},
"weapon": {"htmlFields": ["description"]},
"specialization": {"htmlFields": ["description"]},
"maneuver": {"htmlFields": ["description"]}
}
}, },
"id": "fvtt-ecryme", "id": "fvtt-ecryme",
"primaryTokenAttribute": "secondary.health", "primaryTokenAttribute": "secondary.health",
@@ -116,7 +130,13 @@
"id": "babele", "id": "babele",
"type": "module", "type": "module",
"compatibility": {} "compatibility": {}
},
{
"id": "lib-wrapper",
"type": "module",
"compatibility": {}
} }
] ]
}, },
"title": "Ecryme, le Jeu de Rôles", "title": "Ecryme, le Jeu de Rôles",
+331
View File
@@ -0,0 +1,331 @@
{
"_comment": "DEPRECATED - This template.json is kept for reference only. The system now uses DataModels (see modules/models/). Do not edit this file.",
"Actor": {
"types": [
"pc","annency", "npc"
],
"templates": {
"biodata": {
"biodata": {
"age": "",
"size": "",
"lieunaissance": "",
"nationalite": "",
"profession": "",
"residence": "",
"milieusocial": "",
"poids": "",
"cheveux": "",
"sexe": "",
"yeux": "",
"enfance": "",
"description": "",
"gmnotes": ""
}
},
"core": {
"subactors": [],
"equipmentfree": "",
"skills": {
"physical": {
"name": "ECRY.ui.physical",
"pnjvalue": 0,
"skilllist": {
"athletics": {
"key": "athletics",
"name": "ECRY.ui.athletics",
"max": 0,
"value": 0
},
"driving": {
"key": "driving",
"name": "ECRY.ui.driving",
"max": 0,
"value": 0
},
"fencing": {
"key": "fencing",
"name": "ECRY.ui.fencing",
"max": 0,
"value": 0
},
"brawling": {
"key": "brawling",
"name": "ECRY.ui.brawling",
"max": 0,
"value": 0
},
"shooting": {
"key": "shooting",
"name": "ECRY.ui.shooting",
"max": 0,
"value": 0
}
}
},
"mental": {
"name": "ECRY.ui.mental",
"pnjvalue": 0,
"skilllist": {
"anthropomecanology": {
"key": "anthropomecanology",
"name": "ECRY.ui.anthropomecanology",
"value": 0,
"max": 10
},
"ecrymology": {
"key": "ecrymology",
"name": "ECRY.ui.ecrymology",
"value": 0,
"max": 10
},
"traumatology": {
"key": "traumatology",
"name": "ECRY.ui.traumatology",
"value": 0,
"max": 10
},
"traversology": {
"key": "traversology",
"name": "ECRY.ui.traversology",
"value": 0,
"max": 10
},
"urbatechnology": {
"key": "urbatechnology",
"name": "ECRY.ui.urbatechnology",
"value": 0,
"max": 10
}
}
},
"social": {
"name": "ECRY.ui.social",
"pnjvalue": 0,
"skilllist": {
"quibbling": {
"key": "quibbling",
"name": "ECRY.ui.quibbling",
"value": 0,
"max": 10
},
"creativity": {
"key": "creativity",
"name": "ECRY.ui.creativity",
"value": 0,
"max": 10
},
"loquacity": {
"key": "loquacity",
"name": "ECRY.ui.loquacity",
"value": 0,
"max": 10
},
"guile": {
"key": "guile",
"name": "ECRY.ui.guile",
"value": 0,
"max": 10
},
"performance": {
"key": "performance",
"name": "ECRY.ui.performance",
"value": 0,
"max": 10
}
}
}
},
"impacts": {
"physical": {
"superficial": 0,
"light": 0,
"serious": 0,
"major": 0
},
"mental": {
"superficial": 0,
"light": 0,
"serious": 0,
"major": 0
},
"social": {
"superficial": 0,
"light": 0,
"serious": 0,
"major": 0
}
},
"cephaly": {
"name": "ECRY.ui.cephaly",
"skilllist": {
"elegy": {
"name": "ECRY.ui.elegy",
"value": 0,
"max": 10
},
"entelechy": {
"name": "ECRY.ui.entelechy",
"value": 0,
"max": 10
},
"mekany": {
"name": "ECRY.ui.mekany",
"value": 0,
"max": 10
},
"psyche": {
"name": "ECRY.ui.psyche",
"value": 0,
"max": 10
},
"scoria": {
"name": "ECRY.ui.scoria",
"value": 0,
"max": 10
}
}
},
"internals": {
"confrontbonus": 0
}
},
"npccore": {
"npctype": "",
"description": ""
},
"annency": {
"base": {
"iscollective": false,
"ismultiple": false,
"characters": [],
"location": {"1": "", "2": "", "3":"", "4":"", "5":"" },
"description": "",
"enhancements": ""
},
"boheme": {
"name": "",
"ideals": "",
"politic": "",
"description": ""
}
}
},
"annency": {
"templates": [
"annency"
]
},
"npc": {
"templates": [
"biodata",
"core"
]
},
"pc": {
"templates": [
"biodata",
"core"
]
}
},
"Item": {
"types": [
"equipment",
"trait",
"weapon",
"specialization",
"maneuver"
],
"templates": {
"common": {
"description": ""
},
"equipement": {
"weight": 0,
"cost": 0,
"costunit": ""
}
},
"maneuver": {
"templates": [
"common"
]
},
"confrontation": {
"templates": [
"common"
],
"attackerId": "",
"defenserId": "",
"rolllist": [],
"bonusexecution": 0,
"bonuspreservation": 0
},
"equipment": {
"templates": [
"common",
"equipement"
],
"quantity": 1,
"weight": 0
},
"trait": {
"templates": [
"common"
],
"traitype": "normal",
"level": 1
},
"weapon": {
"templates": [
"common",
"equipement"
],
"weapontype": "melee",
"effect": 0
},
"specialization": {
"bonus": 2,
"templates": [
"common"
],
"skillkey": ""
},
"scar": {
"templates": [
"common"
],
"skillcategory": [
"physical",
"mental",
"social",
"cephalie"
],
"scarLevel": 1
},
"annency": {
"templates": [
"common"
],
"collective": false,
"multiple": false,
"improvements": ""
},
"boheme": {
"templates": [
"common"
],
"ideals": "",
"political": ""
},
"contact": {
"templates": [
"common"
],
"attitude": "neutral",
"organization": "",
"location": ""
}
}
}
+11 -22
View File
@@ -1,31 +1,19 @@
<div class="chat-message-header"> <div class="chat-message-header">
<img class="actor-icon" src="systems/fvtt-ecryme/images/icons/logo-ecryme.webp" alt="Écryme" /> <img
class="actor-icon"
src="systems/fvtt-ecryme/images/icons/logo-ecryme.webp"
alt="Écryme"
/>
<h4 class="chat-actor-name">Écryme RPG</h4> <h4 class="chat-actor-name">Écryme RPG</h4>
</div> </div>
<div class="ecryme-chat-body"> <div class="ecryme-chat-body">
<h3 class="welcome-message-h3">⚙ Bonjour à tous !</h3> <h3 class="welcome-message-h3">⚙ Bonjour à tous !</h3>
<div class="welcome-section">
👋 Juste un petit message pour vous informer que :
<br />
<strong>⚠️ Le nouveau financement participatif pour la prochaine extension
d'Écryme, LES SECRETS DE L'ÉCRYME ouvre le 21 octobre !</strong>
</div>
<div class="welcome-section">
⚠️ Suivez la page de pré-lancement ici pour être sûr de ne pas manquer le
lancement :<br />
<a href="https://shorturl.at/qDjg7">https://shorturl.at/qDjg7</a>
</div>
<hr />
<div class="welcome-section"> <div class="welcome-section">
Nous avons aussi un nouveau Discord pour ceux ou celles qui souhaiteraient Nous avons aussi un nouveau Discord pour ceux ou celles qui souhaiteraient
participer plus activement à la communauté des jeux d'Open Sesame Games, avec participer plus activement à la communauté des jeux d'Open Sesame Games,
un espace dédié aux écrymiens !<br /> avec un espace dédié aux écrymiens !<br />
Nouveaux joueurs comme vétérans sont les bienvenus, n'hésitez pas à passer Nouveaux joueurs comme vétérans sont les bienvenus, n'hésitez pas à passer
pour papoter, profiter de nos ressources, ou suivre les nouvelles d'OSG plus pour papoter, profiter de nos ressources, ou suivre les nouvelles d'OSG plus
directement.<br /> directement.<br />
@@ -35,13 +23,14 @@
<div class="welcome-section"> <div class="welcome-section">
Ce système vous est proposé par <strong>Open Sesame Games</strong>.<br /> Ce système vous est proposé par <strong>Open Sesame Games</strong>.<br />
Vous trouverez de l'aide dans Vous trouverez de l'aide dans
@UUID[Compendium.fvtt-ecryme.help.JournalEntry.wooTFYjEwh83FwgT]{Aide pour Écryme}<br /> @UUID[Compendium.fvtt-ecryme.help.JournalEntry.wooTFYjEwh83FwgT]{Aide pour
Écryme}<br />
ainsi que sur le Discord de Foundry FR :<br /> ainsi que sur le Discord de Foundry FR :<br />
<a href="https://discord.gg/pPSDNJk">Discord Foundry FR</a> <a href="https://discord.gg/pPSDNJk">Discord Foundry FR</a>
</div> </div>
<div class="welcome-footer"> <div class="welcome-footer">
⚙ Merci pour votre attention et à très bientôt ! — L'équipe Open Sesame Games ⚙ Merci pour votre attention et à très bientôt ! — L'équipe Open Sesame
Games
</div> </div>
</div> </div>