diff --git a/module.json b/module.json
index e79fc40..84c6673 100644
--- a/module.json
+++ b/module.json
@@ -7,7 +7,7 @@
"verified": "13",
"maximum": "14"
},
- "description": "Module de compendium et d'outils Mongoose Traveller 2e pour FoundryVTT écrit par JdR.Ninja.\nInclut les commandes /commerce, /pnj, /rencontre, /mission et /gennpc pour automatiser le commerce, les PNJ rapides, les rencontres, les contrats aléatoires et la génération de PNJ Traveller selon les règles du générateur officiel, en s'appuyant sur les compétences natives des fiches.",
+ "description": "Module de compendium et d'outils Mongoose Traveller 2e pour FoundryVTT écrit par JdR.Ninja.\nInclut les commandes /commerce, /pnj, /rencontre et /mission pour automatiser le commerce, les PNJ rapides, les rencontres et les contrats aléatoires. La fenêtre /pnj inclut un onglet 'PNJ Détaillé' pour la génération de PNJ Traveller selon les règles du générateur officiel, en s'appuyant sur les compétences natives des fiches.",
"esmodules": [
"scripts/commerce.js",
"scripts/npc.js",
diff --git a/packs/armes/000077.log b/packs/armes/000085.log
similarity index 100%
rename from packs/armes/000077.log
rename to packs/armes/000085.log
diff --git a/packs/armes/CURRENT b/packs/armes/CURRENT
index d2ea14c..bdbe58e 100644
--- a/packs/armes/CURRENT
+++ b/packs/armes/CURRENT
@@ -1 +1 @@
-MANIFEST-000075
+MANIFEST-000084
diff --git a/packs/armes/LOG b/packs/armes/LOG
index 23182f5..13f0316 100644
--- a/packs/armes/LOG
+++ b/packs/armes/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.659414 7fdf5b7fe6c0 Recovering log #73
-2026/05/24-16:50:54.670747 7fdf5b7fe6c0 Delete type=3 #71
-2026/05/24-16:50:54.670783 7fdf5b7fe6c0 Delete type=0 #73
-2026/05/24-17:30:55.121088 7fdf5affd6c0 Level-0 table #78: started
-2026/05/24-17:30:55.125303 7fdf5affd6c0 Level-0 table #78: 9864 bytes OK
-2026/05/24-17:30:55.131248 7fdf5affd6c0 Delete type=0 #76
-2026/05/24-17:30:55.131416 7fdf5affd6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.131452 7fdf5affd6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at '!items!yoIqL0RQEnzNVJB6' @ 161 : 1
-2026/05/24-17:30:55.131457 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.134712 7fdf5affd6c0 Generated table #79@1: 29 keys, 10438 bytes
-2026/05/24-17:30:55.134726 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 10438 bytes
-2026/05/24-17:30:55.141487 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.141544 7fdf5affd6c0 Delete type=2 #70
-2026/05/24-17:30:55.141639 7fdf5affd6c0 Delete type=2 #78
-2026/05/24-17:30:55.187693 7fdf5affd6c0 Manual compaction at level-1 from '!items!yoIqL0RQEnzNVJB6' @ 161 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.414164 7f3e6f7fe6c0 Recovering log #82
+2026/05/27-23:11:58.424222 7f3e6f7fe6c0 Delete type=3 #80
+2026/05/27-23:11:58.424274 7f3e6f7fe6c0 Delete type=0 #82
diff --git a/packs/armes/LOG.old b/packs/armes/LOG.old
index b585a2f..f6bb342 100644
--- a/packs/armes/LOG.old
+++ b/packs/armes/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.998100 7f5a46ffd6c0 Recovering log #68
-2026/05/18-20:28:00.055719 7f5a46ffd6c0 Delete type=3 #66
-2026/05/18-20:28:00.055824 7f5a46ffd6c0 Delete type=0 #68
-2026/05/18-20:29:47.499128 7f5a467fc6c0 Level-0 table #74: started
-2026/05/18-20:29:47.499199 7f5a467fc6c0 Level-0 table #74: 0 bytes OK
-2026/05/18-20:29:47.505640 7f5a467fc6c0 Delete type=0 #72
-2026/05/18-20:29:47.505916 7f5a467fc6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.505957 7f5a467fc6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.639035 7f3e6f7fe6c0 Recovering log #77
+2026/05/27-14:31:25.648169 7f3e6f7fe6c0 Delete type=3 #75
+2026/05/27-14:31:25.648196 7f3e6f7fe6c0 Delete type=0 #77
+2026/05/27-14:33:21.786747 7f3e6effd6c0 Level-0 table #83: started
+2026/05/27-14:33:21.786766 7f3e6effd6c0 Level-0 table #83: 0 bytes OK
+2026/05/27-14:33:21.793932 7f3e6effd6c0 Delete type=0 #81
+2026/05/27-14:33:21.800554 7f3e6effd6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.800579 7f3e6effd6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
diff --git a/packs/armes/MANIFEST-000075 b/packs/armes/MANIFEST-000075
deleted file mode 100644
index 14f5bf6..0000000
Binary files a/packs/armes/MANIFEST-000075 and /dev/null differ
diff --git a/packs/armes/MANIFEST-000084 b/packs/armes/MANIFEST-000084
new file mode 100644
index 0000000..8c74245
Binary files /dev/null and b/packs/armes/MANIFEST-000084 differ
diff --git a/packs/armures/000176.log b/packs/armures/000184.log
similarity index 100%
rename from packs/armures/000176.log
rename to packs/armures/000184.log
diff --git a/packs/armures/CURRENT b/packs/armures/CURRENT
index ff4f65a..0a6f13a 100644
--- a/packs/armures/CURRENT
+++ b/packs/armures/CURRENT
@@ -1 +1 @@
-MANIFEST-000174
+MANIFEST-000183
diff --git a/packs/armures/LOG b/packs/armures/LOG
index ebfd035..03db2df 100644
--- a/packs/armures/LOG
+++ b/packs/armures/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.546518 7fdf5b7fe6c0 Recovering log #172
-2026/05/24-16:50:54.556572 7fdf5b7fe6c0 Delete type=3 #170
-2026/05/24-16:50:54.556614 7fdf5b7fe6c0 Delete type=0 #172
-2026/05/24-17:30:54.977322 7fdf5affd6c0 Level-0 table #177: started
-2026/05/24-17:30:54.980526 7fdf5affd6c0 Level-0 table #177: 3210 bytes OK
-2026/05/24-17:30:54.986935 7fdf5affd6c0 Delete type=0 #175
-2026/05/24-17:30:55.016293 7fdf5affd6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.016335 7fdf5affd6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at '!items!wpBopoosZiWXjlKD' @ 78 : 1
-2026/05/24-17:30:55.016340 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.019483 7fdf5affd6c0 Generated table #178@1: 6 keys, 3210 bytes
-2026/05/24-17:30:55.019496 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 3210 bytes
-2026/05/24-17:30:55.026070 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.026126 7fdf5affd6c0 Delete type=2 #169
-2026/05/24-17:30:55.026250 7fdf5affd6c0 Delete type=2 #177
-2026/05/24-17:30:55.052180 7fdf5affd6c0 Manual compaction at level-1 from '!items!wpBopoosZiWXjlKD' @ 78 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.290859 7f3e6f7fe6c0 Recovering log #181
+2026/05/27-23:11:58.307573 7f3e6f7fe6c0 Delete type=3 #179
+2026/05/27-23:11:58.307626 7f3e6f7fe6c0 Delete type=0 #181
diff --git a/packs/armures/LOG.old b/packs/armures/LOG.old
index 45e0279..9f1055c 100644
--- a/packs/armures/LOG.old
+++ b/packs/armures/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.309876 7f5a477fe6c0 Recovering log #167
-2026/05/18-20:27:59.371762 7f5a477fe6c0 Delete type=3 #165
-2026/05/18-20:27:59.371874 7f5a477fe6c0 Delete type=0 #167
-2026/05/18-20:29:47.416279 7f5a467fc6c0 Level-0 table #173: started
-2026/05/18-20:29:47.416343 7f5a467fc6c0 Level-0 table #173: 0 bytes OK
-2026/05/18-20:29:47.425598 7f5a467fc6c0 Delete type=0 #171
-2026/05/18-20:29:47.425873 7f5a467fc6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.425920 7f5a467fc6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.531736 7f3ebd7ff6c0 Recovering log #176
+2026/05/27-14:31:25.541455 7f3ebd7ff6c0 Delete type=3 #174
+2026/05/27-14:31:25.541507 7f3ebd7ff6c0 Delete type=0 #176
+2026/05/27-14:33:21.722465 7f3e6effd6c0 Level-0 table #182: started
+2026/05/27-14:33:21.722495 7f3e6effd6c0 Level-0 table #182: 0 bytes OK
+2026/05/27-14:33:21.728923 7f3e6effd6c0 Delete type=0 #180
+2026/05/27-14:33:21.735721 7f3e6effd6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.735741 7f3e6effd6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
diff --git a/packs/armures/MANIFEST-000174 b/packs/armures/MANIFEST-000174
deleted file mode 100644
index ce23a4c..0000000
Binary files a/packs/armures/MANIFEST-000174 and /dev/null differ
diff --git a/packs/armures/MANIFEST-000183 b/packs/armures/MANIFEST-000183
new file mode 100644
index 0000000..b731573
Binary files /dev/null and b/packs/armures/MANIFEST-000183 differ
diff --git a/packs/carrieres/000060.log b/packs/carrieres/000068.log
similarity index 100%
rename from packs/carrieres/000060.log
rename to packs/carrieres/000068.log
diff --git a/packs/carrieres/CURRENT b/packs/carrieres/CURRENT
index 717cf9a..0094dac 100644
--- a/packs/carrieres/CURRENT
+++ b/packs/carrieres/CURRENT
@@ -1 +1 @@
-MANIFEST-000058
+MANIFEST-000067
diff --git a/packs/carrieres/LOG b/packs/carrieres/LOG
index 97dca7e..ea65c26 100644
--- a/packs/carrieres/LOG
+++ b/packs/carrieres/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.686699 7fdf5bfff6c0 Recovering log #56
-2026/05/24-16:50:54.695982 7fdf5bfff6c0 Delete type=3 #54
-2026/05/24-16:50:54.696016 7fdf5bfff6c0 Delete type=0 #56
-2026/05/24-17:30:55.150957 7fdf5affd6c0 Level-0 table #61: started
-2026/05/24-17:30:55.154345 7fdf5affd6c0 Level-0 table #61: 4273 bytes OK
-2026/05/24-17:30:55.160772 7fdf5affd6c0 Delete type=0 #59
-2026/05/24-17:30:55.187706 7fdf5affd6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.210353 7fdf5affd6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at '!items!vJInnoigCTJzuY2S' @ 126 : 1
-2026/05/24-17:30:55.210359 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.213753 7fdf5affd6c0 Generated table #62@1: 16 keys, 4273 bytes
-2026/05/24-17:30:55.213776 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 4273 bytes
-2026/05/24-17:30:55.220661 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.220738 7fdf5affd6c0 Delete type=2 #53
-2026/05/24-17:30:55.220857 7fdf5affd6c0 Delete type=2 #61
-2026/05/24-17:30:55.237555 7fdf5affd6c0 Manual compaction at level-1 from '!items!vJInnoigCTJzuY2S' @ 126 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.442577 7f3e6f7fe6c0 Recovering log #65
+2026/05/27-23:11:58.452097 7f3e6f7fe6c0 Delete type=3 #63
+2026/05/27-23:11:58.452144 7f3e6f7fe6c0 Delete type=0 #65
diff --git a/packs/carrieres/LOG.old b/packs/carrieres/LOG.old
index d7fff98..c5af229 100644
--- a/packs/carrieres/LOG.old
+++ b/packs/carrieres/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:28:00.170623 7f5a477fe6c0 Recovering log #51
-2026/05/18-20:28:00.231017 7f5a477fe6c0 Delete type=3 #49
-2026/05/18-20:28:00.231120 7f5a477fe6c0 Delete type=0 #51
-2026/05/18-20:29:47.515216 7f5a467fc6c0 Level-0 table #57: started
-2026/05/18-20:29:47.515280 7f5a467fc6c0 Level-0 table #57: 0 bytes OK
-2026/05/18-20:29:47.522604 7f5a467fc6c0 Delete type=0 #55
-2026/05/18-20:29:47.522854 7f5a467fc6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.522882 7f5a467fc6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.663213 7f3e6f7fe6c0 Recovering log #60
+2026/05/27-14:31:25.672282 7f3e6f7fe6c0 Delete type=3 #58
+2026/05/27-14:31:25.672315 7f3e6f7fe6c0 Delete type=0 #60
+2026/05/27-14:33:21.794049 7f3e6effd6c0 Level-0 table #66: started
+2026/05/27-14:33:21.794078 7f3e6effd6c0 Level-0 table #66: 0 bytes OK
+2026/05/27-14:33:21.800426 7f3e6effd6c0 Delete type=0 #64
+2026/05/27-14:33:21.808266 7f3e6effd6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.831733 7f3e6effd6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
diff --git a/packs/carrieres/MANIFEST-000058 b/packs/carrieres/MANIFEST-000058
deleted file mode 100644
index 7d3d4a6..0000000
Binary files a/packs/carrieres/MANIFEST-000058 and /dev/null differ
diff --git a/packs/carrieres/MANIFEST-000067 b/packs/carrieres/MANIFEST-000067
new file mode 100644
index 0000000..d0dbf56
Binary files /dev/null and b/packs/carrieres/MANIFEST-000067 differ
diff --git a/packs/competences/000179.log b/packs/competences/000187.log
similarity index 100%
rename from packs/competences/000179.log
rename to packs/competences/000187.log
diff --git a/packs/competences/CURRENT b/packs/competences/CURRENT
index 0e27482..627283a 100644
--- a/packs/competences/CURRENT
+++ b/packs/competences/CURRENT
@@ -1 +1 @@
-MANIFEST-000177
+MANIFEST-000186
diff --git a/packs/competences/LOG b/packs/competences/LOG
index f19b292..adb9b63 100644
--- a/packs/competences/LOG
+++ b/packs/competences/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.559278 7fdf5bfff6c0 Recovering log #175
-2026/05/24-16:50:54.569235 7fdf5bfff6c0 Delete type=3 #173
-2026/05/24-16:50:54.569273 7fdf5bfff6c0 Delete type=0 #175
-2026/05/24-17:30:54.996524 7fdf5affd6c0 Level-0 table #180: started
-2026/05/24-17:30:55.000122 7fdf5affd6c0 Level-0 table #180: 30255 bytes OK
-2026/05/24-17:30:55.006363 7fdf5affd6c0 Delete type=0 #178
-2026/05/24-17:30:55.016315 7fdf5affd6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.041863 7fdf5affd6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at '!items!yqjKyTCgpclCuHyK' @ 544 : 1
-2026/05/24-17:30:55.041874 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.045796 7fdf5affd6c0 Generated table #181@1: 39 keys, 30255 bytes
-2026/05/24-17:30:55.045823 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 30255 bytes
-2026/05/24-17:30:55.051904 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.051997 7fdf5affd6c0 Delete type=2 #172
-2026/05/24-17:30:55.052110 7fdf5affd6c0 Delete type=2 #180
-2026/05/24-17:30:55.062783 7fdf5affd6c0 Manual compaction at level-1 from '!items!yqjKyTCgpclCuHyK' @ 544 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.309946 7f3ebcffe6c0 Recovering log #184
+2026/05/27-23:11:58.320486 7f3ebcffe6c0 Delete type=3 #182
+2026/05/27-23:11:58.320525 7f3ebcffe6c0 Delete type=0 #184
diff --git a/packs/competences/LOG.old b/packs/competences/LOG.old
index 357f23a..1f714f4 100644
--- a/packs/competences/LOG.old
+++ b/packs/competences/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.380990 7f5a47fff6c0 Recovering log #170
-2026/05/18-20:27:59.439837 7f5a47fff6c0 Delete type=3 #168
-2026/05/18-20:27:59.439975 7f5a47fff6c0 Delete type=0 #170
-2026/05/18-20:29:47.426912 7f5a467fc6c0 Level-0 table #176: started
-2026/05/18-20:29:47.426974 7f5a467fc6c0 Level-0 table #176: 0 bytes OK
-2026/05/18-20:29:47.437378 7f5a467fc6c0 Delete type=0 #174
-2026/05/18-20:29:47.437633 7f5a467fc6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.437658 7f5a467fc6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.544106 7f3ebd7ff6c0 Recovering log #179
+2026/05/27-14:31:25.554048 7f3ebd7ff6c0 Delete type=3 #177
+2026/05/27-14:31:25.554071 7f3ebd7ff6c0 Delete type=0 #179
+2026/05/27-14:33:21.729016 7f3e6effd6c0 Level-0 table #185: started
+2026/05/27-14:33:21.729040 7f3e6effd6c0 Level-0 table #185: 0 bytes OK
+2026/05/27-14:33:21.735577 7f3e6effd6c0 Delete type=0 #183
+2026/05/27-14:33:21.735798 7f3e6effd6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.735816 7f3e6effd6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
diff --git a/packs/competences/MANIFEST-000177 b/packs/competences/MANIFEST-000177
deleted file mode 100644
index 4662457..0000000
Binary files a/packs/competences/MANIFEST-000177 and /dev/null differ
diff --git a/packs/competences/MANIFEST-000186 b/packs/competences/MANIFEST-000186
new file mode 100644
index 0000000..8cad168
Binary files /dev/null and b/packs/competences/MANIFEST-000186 differ
diff --git a/packs/equipement/000121.log b/packs/contenant-sac-coffre/000121.log
similarity index 100%
rename from packs/equipement/000121.log
rename to packs/contenant-sac-coffre/000121.log
diff --git a/packs/contenant-sac-coffre/CURRENT b/packs/contenant-sac-coffre/CURRENT
index b59a6ba..30eb131 100644
--- a/packs/contenant-sac-coffre/CURRENT
+++ b/packs/contenant-sac-coffre/CURRENT
@@ -1 +1 @@
-MANIFEST-000112
+MANIFEST-000120
diff --git a/packs/contenant-sac-coffre/LOG b/packs/contenant-sac-coffre/LOG
index f5b3a38..1da1813 100644
--- a/packs/contenant-sac-coffre/LOG
+++ b/packs/contenant-sac-coffre/LOG
@@ -1,7 +1,3 @@
-2026/05/24-16:50:54.623242 7fdf5bfff6c0 Recovering log #110
-2026/05/24-16:50:54.633193 7fdf5bfff6c0 Delete type=3 #108
-2026/05/24-16:50:54.633252 7fdf5bfff6c0 Delete type=0 #110
-2026/05/24-17:30:55.081463 7fdf5affd6c0 Level-0 table #115: started
-2026/05/24-17:30:55.081487 7fdf5affd6c0 Level-0 table #115: 0 bytes OK
-2026/05/24-17:30:55.087560 7fdf5affd6c0 Delete type=0 #113
-2026/05/24-17:30:55.097957 7fdf5affd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.375862 7f3e6ffff6c0 Recovering log #118
+2026/05/27-23:11:58.385912 7f3e6ffff6c0 Delete type=3 #116
+2026/05/27-23:11:58.385947 7f3e6ffff6c0 Delete type=0 #118
diff --git a/packs/contenant-sac-coffre/LOG.old b/packs/contenant-sac-coffre/LOG.old
index 20bdeef..c5db16c 100644
--- a/packs/contenant-sac-coffre/LOG.old
+++ b/packs/contenant-sac-coffre/LOG.old
@@ -1,7 +1,7 @@
-2026/05/18-20:27:59.766699 7f5a47fff6c0 Recovering log #106
-2026/05/18-20:27:59.824574 7f5a47fff6c0 Delete type=3 #104
-2026/05/18-20:27:59.824666 7f5a47fff6c0 Delete type=0 #106
-2026/05/18-20:29:47.472932 7f5a467fc6c0 Level-0 table #111: started
-2026/05/18-20:29:47.473002 7f5a467fc6c0 Level-0 table #111: 0 bytes OK
-2026/05/18-20:29:47.479740 7f5a467fc6c0 Delete type=0 #109
-2026/05/18-20:29:47.479998 7f5a467fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.604521 7f3ebd7ff6c0 Recovering log #114
+2026/05/27-14:31:25.613630 7f3ebd7ff6c0 Delete type=3 #112
+2026/05/27-14:31:25.613651 7f3ebd7ff6c0 Delete type=0 #114
+2026/05/27-14:33:21.767043 7f3e6effd6c0 Level-0 table #119: started
+2026/05/27-14:33:21.767067 7f3e6effd6c0 Level-0 table #119: 0 bytes OK
+2026/05/27-14:33:21.773608 7f3e6effd6c0 Delete type=0 #117
+2026/05/27-14:33:21.780095 7f3e6effd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
diff --git a/packs/contenant-sac-coffre/MANIFEST-000112 b/packs/contenant-sac-coffre/MANIFEST-000112
deleted file mode 100644
index 8d372eb..0000000
Binary files a/packs/contenant-sac-coffre/MANIFEST-000112 and /dev/null differ
diff --git a/packs/contenant-sac-coffre/MANIFEST-000120 b/packs/contenant-sac-coffre/MANIFEST-000120
new file mode 100644
index 0000000..10f7f45
Binary files /dev/null and b/packs/contenant-sac-coffre/MANIFEST-000120 differ
diff --git a/packs/contenant-sac-coffre/000114.log b/packs/equipement/000129.log
similarity index 100%
rename from packs/contenant-sac-coffre/000114.log
rename to packs/equipement/000129.log
diff --git a/packs/equipement/CURRENT b/packs/equipement/CURRENT
index 8880a30..a8d9908 100644
--- a/packs/equipement/CURRENT
+++ b/packs/equipement/CURRENT
@@ -1 +1 @@
-MANIFEST-000119
+MANIFEST-000128
diff --git a/packs/equipement/LOG b/packs/equipement/LOG
index abc03a7..ef3f7f1 100644
--- a/packs/equipement/LOG
+++ b/packs/equipement/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.597446 7fdf5b7fe6c0 Recovering log #117
-2026/05/24-16:50:54.607335 7fdf5b7fe6c0 Delete type=3 #115
-2026/05/24-16:50:54.607379 7fdf5b7fe6c0 Delete type=0 #117
-2026/05/24-17:30:55.052370 7fdf5affd6c0 Level-0 table #122: started
-2026/05/24-17:30:55.056355 7fdf5affd6c0 Level-0 table #122: 20248 bytes OK
-2026/05/24-17:30:55.062721 7fdf5affd6c0 Delete type=0 #120
-2026/05/24-17:30:55.081449 7fdf5affd6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.087647 7fdf5affd6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at '!items!zRJfxioYBRq4iSBR' @ 258 : 1
-2026/05/24-17:30:55.087653 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.091676 7fdf5affd6c0 Generated table #123@1: 42 keys, 19863 bytes
-2026/05/24-17:30:55.091690 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 19863 bytes
-2026/05/24-17:30:55.097740 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.097812 7fdf5affd6c0 Delete type=2 #114
-2026/05/24-17:30:55.097896 7fdf5affd6c0 Delete type=2 #122
-2026/05/24-17:30:55.104450 7fdf5affd6c0 Manual compaction at level-1 from '!items!zRJfxioYBRq4iSBR' @ 258 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.349736 7f3e6ffff6c0 Recovering log #126
+2026/05/27-23:11:58.359183 7f3e6ffff6c0 Delete type=3 #124
+2026/05/27-23:11:58.359211 7f3e6ffff6c0 Delete type=0 #126
diff --git a/packs/equipement/LOG.old b/packs/equipement/LOG.old
index cab4635..514f654 100644
--- a/packs/equipement/LOG.old
+++ b/packs/equipement/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.596317 7f5a47fff6c0 Recovering log #112
-2026/05/18-20:27:59.649784 7f5a47fff6c0 Delete type=3 #110
-2026/05/18-20:27:59.649914 7f5a47fff6c0 Delete type=0 #112
-2026/05/18-20:29:47.456954 7f5a467fc6c0 Level-0 table #118: started
-2026/05/18-20:29:47.457019 7f5a467fc6c0 Level-0 table #118: 0 bytes OK
-2026/05/18-20:29:47.463638 7f5a467fc6c0 Delete type=0 #116
-2026/05/18-20:29:47.463868 7f5a467fc6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.463950 7f5a467fc6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.580201 7f3ebd7ff6c0 Recovering log #121
+2026/05/27-14:31:25.589450 7f3ebd7ff6c0 Delete type=3 #119
+2026/05/27-14:31:25.589494 7f3ebd7ff6c0 Delete type=0 #121
+2026/05/27-14:33:21.747566 7f3e6effd6c0 Level-0 table #127: started
+2026/05/27-14:33:21.747585 7f3e6effd6c0 Level-0 table #127: 0 bytes OK
+2026/05/27-14:33:21.754474 7f3e6effd6c0 Delete type=0 #125
+2026/05/27-14:33:21.760899 7f3e6effd6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.760915 7f3e6effd6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
diff --git a/packs/equipement/MANIFEST-000119 b/packs/equipement/MANIFEST-000119
deleted file mode 100644
index 9ccc794..0000000
Binary files a/packs/equipement/MANIFEST-000119 and /dev/null differ
diff --git a/packs/equipement/MANIFEST-000128 b/packs/equipement/MANIFEST-000128
new file mode 100644
index 0000000..5ede438
Binary files /dev/null and b/packs/equipement/MANIFEST-000128 differ
diff --git a/packs/maladie-poison-and-blessure/000121.log b/packs/espece/000121.log
similarity index 100%
rename from packs/maladie-poison-and-blessure/000121.log
rename to packs/espece/000121.log
diff --git a/packs/espece/CURRENT b/packs/espece/CURRENT
index b59a6ba..30eb131 100644
--- a/packs/espece/CURRENT
+++ b/packs/espece/CURRENT
@@ -1 +1 @@
-MANIFEST-000112
+MANIFEST-000120
diff --git a/packs/espece/LOG b/packs/espece/LOG
index e6aaecd..06292b9 100644
--- a/packs/espece/LOG
+++ b/packs/espece/LOG
@@ -1,7 +1,3 @@
-2026/05/24-16:50:54.634756 7fdfa8dfe6c0 Recovering log #110
-2026/05/24-16:50:54.645375 7fdfa8dfe6c0 Delete type=3 #108
-2026/05/24-16:50:54.645440 7fdfa8dfe6c0 Delete type=0 #110
-2026/05/24-17:30:55.097965 7fdf5affd6c0 Level-0 table #115: started
-2026/05/24-17:30:55.097985 7fdf5affd6c0 Level-0 table #115: 0 bytes OK
-2026/05/24-17:30:55.104346 7fdf5affd6c0 Delete type=0 #113
-2026/05/24-17:30:55.131378 7fdf5affd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.388239 7f3e6f7fe6c0 Recovering log #118
+2026/05/27-23:11:58.398684 7f3e6f7fe6c0 Delete type=3 #116
+2026/05/27-23:11:58.398724 7f3e6f7fe6c0 Delete type=0 #118
diff --git a/packs/espece/LOG.old b/packs/espece/LOG.old
index edab07c..8a51162 100644
--- a/packs/espece/LOG.old
+++ b/packs/espece/LOG.old
@@ -1,7 +1,7 @@
-2026/05/18-20:27:59.838862 7f5a46ffd6c0 Recovering log #106
-2026/05/18-20:27:59.893943 7f5a46ffd6c0 Delete type=3 #104
-2026/05/18-20:27:59.894068 7f5a46ffd6c0 Delete type=0 #106
-2026/05/18-20:29:47.480953 7f5a467fc6c0 Level-0 table #111: started
-2026/05/18-20:29:47.481012 7f5a467fc6c0 Level-0 table #111: 0 bytes OK
-2026/05/18-20:29:47.487588 7f5a467fc6c0 Delete type=0 #109
-2026/05/18-20:29:47.487817 7f5a467fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.615623 7f3ebd7ff6c0 Recovering log #114
+2026/05/27-14:31:25.625348 7f3ebd7ff6c0 Delete type=3 #112
+2026/05/27-14:31:25.625369 7f3ebd7ff6c0 Delete type=0 #114
+2026/05/27-14:33:21.761003 7f3e6effd6c0 Level-0 table #119: started
+2026/05/27-14:33:21.761022 7f3e6effd6c0 Level-0 table #119: 0 bytes OK
+2026/05/27-14:33:21.766953 7f3e6effd6c0 Delete type=0 #117
+2026/05/27-14:33:21.780083 7f3e6effd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
diff --git a/packs/espece/MANIFEST-000112 b/packs/espece/MANIFEST-000112
deleted file mode 100644
index 8d372eb..0000000
Binary files a/packs/espece/MANIFEST-000112 and /dev/null differ
diff --git a/packs/espece/MANIFEST-000120 b/packs/espece/MANIFEST-000120
new file mode 100644
index 0000000..10f7f45
Binary files /dev/null and b/packs/espece/MANIFEST-000120 differ
diff --git a/packs/espece/000114.log b/packs/journal/000102.log
similarity index 100%
rename from packs/espece/000114.log
rename to packs/journal/000102.log
diff --git a/packs/journal/CURRENT b/packs/journal/CURRENT
index f60e23b..ed5ac88 100644
--- a/packs/journal/CURRENT
+++ b/packs/journal/CURRENT
@@ -1 +1 @@
-MANIFEST-000093
+MANIFEST-000101
diff --git a/packs/journal/LOG b/packs/journal/LOG
index e88840a..e8343dc 100644
--- a/packs/journal/LOG
+++ b/packs/journal/LOG
@@ -1,8 +1,3 @@
-2026/05/24-16:50:54.647193 7fdf5b7fe6c0 Recovering log #91
-2026/05/24-16:50:54.656827 7fdf5b7fe6c0 Delete type=3 #89
-2026/05/24-16:50:54.656870 7fdf5b7fe6c0 Delete type=0 #91
-2026/05/24-17:30:55.114778 7fdf5affd6c0 Level-0 table #96: started
-2026/05/24-17:30:55.114807 7fdf5affd6c0 Level-0 table #96: 0 bytes OK
-2026/05/24-17:30:55.121001 7fdf5affd6c0 Delete type=0 #94
-2026/05/24-17:30:55.131407 7fdf5affd6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.131437 7fdf5affd6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.400455 7f3ebd7ff6c0 Recovering log #99
+2026/05/27-23:11:58.410587 7f3ebd7ff6c0 Delete type=3 #97
+2026/05/27-23:11:58.410645 7f3ebd7ff6c0 Delete type=0 #99
diff --git a/packs/journal/LOG.old b/packs/journal/LOG.old
index e176ca6..ad24c69 100644
--- a/packs/journal/LOG.old
+++ b/packs/journal/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.909714 7f5a477fe6c0 Recovering log #87
-2026/05/18-20:27:59.963841 7f5a477fe6c0 Delete type=3 #85
-2026/05/18-20:27:59.963963 7f5a477fe6c0 Delete type=0 #87
-2026/05/18-20:29:47.488790 7f5a467fc6c0 Level-0 table #92: started
-2026/05/18-20:29:47.488852 7f5a467fc6c0 Level-0 table #92: 0 bytes OK
-2026/05/18-20:29:47.496720 7f5a467fc6c0 Delete type=0 #90
-2026/05/18-20:29:47.497943 7f5a467fc6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.498034 7f5a467fc6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.627132 7f3ebd7ff6c0 Recovering log #95
+2026/05/27-14:31:25.636967 7f3ebd7ff6c0 Delete type=3 #93
+2026/05/27-14:31:25.637002 7f3ebd7ff6c0 Delete type=0 #95
+2026/05/27-14:33:21.773684 7f3e6effd6c0 Level-0 table #100: started
+2026/05/27-14:33:21.773700 7f3e6effd6c0 Level-0 table #100: 0 bytes OK
+2026/05/27-14:33:21.779958 7f3e6effd6c0 Delete type=0 #98
+2026/05/27-14:33:21.786739 7f3e6effd6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.800533 7f3e6effd6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
diff --git a/packs/journal/MANIFEST-000093 b/packs/journal/MANIFEST-000101
similarity index 68%
rename from packs/journal/MANIFEST-000093
rename to packs/journal/MANIFEST-000101
index 35aca74..4eb9a1a 100644
Binary files a/packs/journal/MANIFEST-000093 and b/packs/journal/MANIFEST-000101 differ
diff --git a/packs/journal/000095.log b/packs/maladie-poison-and-blessure/000129.log
similarity index 100%
rename from packs/journal/000095.log
rename to packs/maladie-poison-and-blessure/000129.log
diff --git a/packs/maladie-poison-and-blessure/CURRENT b/packs/maladie-poison-and-blessure/CURRENT
index 8880a30..a8d9908 100644
--- a/packs/maladie-poison-and-blessure/CURRENT
+++ b/packs/maladie-poison-and-blessure/CURRENT
@@ -1 +1 @@
-MANIFEST-000119
+MANIFEST-000128
diff --git a/packs/maladie-poison-and-blessure/LOG b/packs/maladie-poison-and-blessure/LOG
index 9ce289d..193c3d0 100644
--- a/packs/maladie-poison-and-blessure/LOG
+++ b/packs/maladie-poison-and-blessure/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.573746 7fdf5bfff6c0 Recovering log #117
-2026/05/24-16:50:54.583876 7fdf5bfff6c0 Delete type=3 #115
-2026/05/24-16:50:54.583933 7fdf5bfff6c0 Delete type=0 #117
-2026/05/24-17:30:55.026316 7fdf5affd6c0 Level-0 table #122: started
-2026/05/24-17:30:55.029368 7fdf5affd6c0 Level-0 table #122: 1988 bytes OK
-2026/05/24-17:30:55.035351 7fdf5affd6c0 Delete type=0 #120
-2026/05/24-17:30:55.052192 7fdf5affd6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.062793 7fdf5affd6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at '!items!yleVHgRqGoYLvzxT' @ 56 : 1
-2026/05/24-17:30:55.062796 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.065855 7fdf5affd6c0 Generated table #123@1: 8 keys, 1988 bytes
-2026/05/24-17:30:55.065865 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 1988 bytes
-2026/05/24-17:30:55.071780 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.071820 7fdf5affd6c0 Delete type=2 #114
-2026/05/24-17:30:55.071877 7fdf5affd6c0 Delete type=2 #122
-2026/05/24-17:30:55.087630 7fdf5affd6c0 Manual compaction at level-1 from '!items!yleVHgRqGoYLvzxT' @ 56 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.323722 7f3e6f7fe6c0 Recovering log #126
+2026/05/27-23:11:58.334612 7f3e6f7fe6c0 Delete type=3 #124
+2026/05/27-23:11:58.334668 7f3e6f7fe6c0 Delete type=0 #126
diff --git a/packs/maladie-poison-and-blessure/LOG.old b/packs/maladie-poison-and-blessure/LOG.old
index 555523c..ecff47c 100644
--- a/packs/maladie-poison-and-blessure/LOG.old
+++ b/packs/maladie-poison-and-blessure/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.461881 7f5a46ffd6c0 Recovering log #112
-2026/05/18-20:27:59.517849 7f5a46ffd6c0 Delete type=3 #110
-2026/05/18-20:27:59.517983 7f5a46ffd6c0 Delete type=0 #112
-2026/05/18-20:29:47.438640 7f5a467fc6c0 Level-0 table #118: started
-2026/05/18-20:29:47.438693 7f5a467fc6c0 Level-0 table #118: 0 bytes OK
-2026/05/18-20:29:47.445247 7f5a467fc6c0 Delete type=0 #116
-2026/05/18-20:29:47.445955 7f5a467fc6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.446012 7f5a467fc6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.557570 7f3ebd7ff6c0 Recovering log #121
+2026/05/27-14:31:25.567130 7f3ebd7ff6c0 Delete type=3 #119
+2026/05/27-14:31:25.567150 7f3ebd7ff6c0 Delete type=0 #121
+2026/05/27-14:33:21.735841 7f3e6effd6c0 Level-0 table #127: started
+2026/05/27-14:33:21.735866 7f3e6effd6c0 Level-0 table #127: 0 bytes OK
+2026/05/27-14:33:21.741712 7f3e6effd6c0 Delete type=0 #125
+2026/05/27-14:33:21.760883 7f3e6effd6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.760906 7f3e6effd6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
diff --git a/packs/maladie-poison-and-blessure/MANIFEST-000119 b/packs/maladie-poison-and-blessure/MANIFEST-000119
deleted file mode 100644
index b255051..0000000
Binary files a/packs/maladie-poison-and-blessure/MANIFEST-000119 and /dev/null differ
diff --git a/packs/maladie-poison-and-blessure/MANIFEST-000128 b/packs/maladie-poison-and-blessure/MANIFEST-000128
new file mode 100644
index 0000000..0413e6e
Binary files /dev/null and b/packs/maladie-poison-and-blessure/MANIFEST-000128 differ
diff --git a/packs/ordinateur/000121.log b/packs/objet/000121.log
similarity index 100%
rename from packs/ordinateur/000121.log
rename to packs/objet/000121.log
diff --git a/packs/objet/CURRENT b/packs/objet/CURRENT
index b59a6ba..30eb131 100644
--- a/packs/objet/CURRENT
+++ b/packs/objet/CURRENT
@@ -1 +1 @@
-MANIFEST-000112
+MANIFEST-000120
diff --git a/packs/objet/LOG b/packs/objet/LOG
index 3466902..14dd789 100644
--- a/packs/objet/LOG
+++ b/packs/objet/LOG
@@ -1,7 +1,3 @@
-2026/05/24-16:50:54.586100 7fdfa8dfe6c0 Recovering log #110
-2026/05/24-16:50:54.595631 7fdfa8dfe6c0 Delete type=3 #108
-2026/05/24-16:50:54.595694 7fdfa8dfe6c0 Delete type=0 #110
-2026/05/24-17:30:55.035470 7fdf5affd6c0 Level-0 table #115: started
-2026/05/24-17:30:55.035483 7fdf5affd6c0 Level-0 table #115: 0 bytes OK
-2026/05/24-17:30:55.041734 7fdf5affd6c0 Delete type=0 #113
-2026/05/24-17:30:55.052200 7fdf5affd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.337311 7f3ebcffe6c0 Recovering log #118
+2026/05/27-23:11:58.347349 7f3ebcffe6c0 Delete type=3 #116
+2026/05/27-23:11:58.347392 7f3ebcffe6c0 Delete type=0 #118
diff --git a/packs/objet/LOG.old b/packs/objet/LOG.old
index 8f92e40..1a6ab91 100644
--- a/packs/objet/LOG.old
+++ b/packs/objet/LOG.old
@@ -1,7 +1,7 @@
-2026/05/18-20:27:59.526598 7f5a94bff6c0 Recovering log #106
-2026/05/18-20:27:59.589070 7f5a94bff6c0 Delete type=3 #104
-2026/05/18-20:27:59.589252 7f5a94bff6c0 Delete type=0 #106
-2026/05/18-20:29:47.448116 7f5a467fc6c0 Level-0 table #111: started
-2026/05/18-20:29:47.448187 7f5a467fc6c0 Level-0 table #111: 0 bytes OK
-2026/05/18-20:29:47.455433 7f5a467fc6c0 Delete type=0 #109
-2026/05/18-20:29:47.455684 7f5a467fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.569405 7f3ebd7ff6c0 Recovering log #114
+2026/05/27-14:31:25.578632 7f3ebd7ff6c0 Delete type=3 #112
+2026/05/27-14:31:25.578657 7f3ebd7ff6c0 Delete type=0 #114
+2026/05/27-14:33:21.741780 7f3e6effd6c0 Level-0 table #119: started
+2026/05/27-14:33:21.741799 7f3e6effd6c0 Level-0 table #119: 0 bytes OK
+2026/05/27-14:33:21.747507 7f3e6effd6c0 Delete type=0 #117
+2026/05/27-14:33:21.760892 7f3e6effd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
diff --git a/packs/objet/MANIFEST-000112 b/packs/objet/MANIFEST-000112
deleted file mode 100644
index 8d372eb..0000000
Binary files a/packs/objet/MANIFEST-000112 and /dev/null differ
diff --git a/packs/objet/MANIFEST-000120 b/packs/objet/MANIFEST-000120
new file mode 100644
index 0000000..10f7f45
Binary files /dev/null and b/packs/objet/MANIFEST-000120 differ
diff --git a/packs/objet/000114.log b/packs/ordinateur/000129.log
similarity index 100%
rename from packs/objet/000114.log
rename to packs/ordinateur/000129.log
diff --git a/packs/ordinateur/CURRENT b/packs/ordinateur/CURRENT
index 8880a30..a8d9908 100644
--- a/packs/ordinateur/CURRENT
+++ b/packs/ordinateur/CURRENT
@@ -1 +1 @@
-MANIFEST-000119
+MANIFEST-000128
diff --git a/packs/ordinateur/LOG b/packs/ordinateur/LOG
index 11a8a97..a8ac8f6 100644
--- a/packs/ordinateur/LOG
+++ b/packs/ordinateur/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.610807 7fdfa95ff6c0 Recovering log #117
-2026/05/24-16:50:54.620344 7fdfa95ff6c0 Delete type=3 #115
-2026/05/24-16:50:54.620394 7fdfa95ff6c0 Delete type=0 #117
-2026/05/24-17:30:55.071908 7fdf5affd6c0 Level-0 table #122: started
-2026/05/24-17:30:55.075519 7fdf5affd6c0 Level-0 table #122: 5396 bytes OK
-2026/05/24-17:30:55.081331 7fdf5affd6c0 Delete type=0 #120
-2026/05/24-17:30:55.097948 7fdf5affd6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.104470 7fdf5affd6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at '!items!yFvuDyV00NdojxGt' @ 93 : 1
-2026/05/24-17:30:55.104477 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.108502 7fdf5affd6c0 Generated table #123@1: 15 keys, 5574 bytes
-2026/05/24-17:30:55.108520 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 5574 bytes
-2026/05/24-17:30:55.114469 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.114575 7fdf5affd6c0 Delete type=2 #114
-2026/05/24-17:30:55.114702 7fdf5affd6c0 Delete type=2 #122
-2026/05/24-17:30:55.131396 7fdf5affd6c0 Manual compaction at level-1 from '!items!yFvuDyV00NdojxGt' @ 93 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.362926 7f3ebd7ff6c0 Recovering log #126
+2026/05/27-23:11:58.372894 7f3ebd7ff6c0 Delete type=3 #124
+2026/05/27-23:11:58.372934 7f3ebd7ff6c0 Delete type=0 #126
diff --git a/packs/ordinateur/LOG.old b/packs/ordinateur/LOG.old
index 0076a11..2d2cb83 100644
--- a/packs/ordinateur/LOG.old
+++ b/packs/ordinateur/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:27:59.682456 7f5a46ffd6c0 Recovering log #112
-2026/05/18-20:27:59.750017 7f5a46ffd6c0 Delete type=3 #110
-2026/05/18-20:27:59.750123 7f5a46ffd6c0 Delete type=0 #112
-2026/05/18-20:29:47.464929 7f5a467fc6c0 Level-0 table #118: started
-2026/05/18-20:29:47.465002 7f5a467fc6c0 Level-0 table #118: 0 bytes OK
-2026/05/18-20:29:47.471758 7f5a467fc6c0 Delete type=0 #116
-2026/05/18-20:29:47.472004 7f5a467fc6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.472035 7f5a467fc6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.591969 7f3ebd7ff6c0 Recovering log #121
+2026/05/27-14:31:25.601963 7f3ebd7ff6c0 Delete type=3 #119
+2026/05/27-14:31:25.601983 7f3ebd7ff6c0 Delete type=0 #121
+2026/05/27-14:33:21.754559 7f3e6effd6c0 Level-0 table #127: started
+2026/05/27-14:33:21.754583 7f3e6effd6c0 Level-0 table #127: 0 bytes OK
+2026/05/27-14:33:21.760810 7f3e6effd6c0 Delete type=0 #125
+2026/05/27-14:33:21.760994 7f3e6effd6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.773676 7f3e6effd6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
diff --git a/packs/ordinateur/MANIFEST-000119 b/packs/ordinateur/MANIFEST-000119
deleted file mode 100644
index 3976799..0000000
Binary files a/packs/ordinateur/MANIFEST-000119 and /dev/null differ
diff --git a/packs/ordinateur/MANIFEST-000128 b/packs/ordinateur/MANIFEST-000128
new file mode 100644
index 0000000..1fb47fa
Binary files /dev/null and b/packs/ordinateur/MANIFEST-000128 differ
diff --git a/packs/tables-pnj/000039.ldb b/packs/tables-pnj/000039.ldb
deleted file mode 100644
index 80e9a16..0000000
Binary files a/packs/tables-pnj/000039.ldb and /dev/null differ
diff --git a/packs/tables-pnj/000047.ldb b/packs/tables-pnj/000047.ldb
new file mode 100644
index 0000000..18de0d2
Binary files /dev/null and b/packs/tables-pnj/000047.ldb differ
diff --git a/packs/tables-pnj/000067.log b/packs/tables-pnj/000067.log
new file mode 100644
index 0000000..5416674
Binary files /dev/null and b/packs/tables-pnj/000067.log differ
diff --git a/packs/tables-pnj/000069.ldb b/packs/tables-pnj/000069.ldb
new file mode 100644
index 0000000..21617d7
Binary files /dev/null and b/packs/tables-pnj/000069.ldb differ
diff --git a/packs/tables-pnj/CURRENT b/packs/tables-pnj/CURRENT
index e60e154..a9ebced 100644
--- a/packs/tables-pnj/CURRENT
+++ b/packs/tables-pnj/CURRENT
@@ -1 +1 @@
-MANIFEST-000021
+MANIFEST-000048
diff --git a/packs/tables-pnj/LOG b/packs/tables-pnj/LOG
index f311138..0be51f9 100644
--- a/packs/tables-pnj/LOG
+++ b/packs/tables-pnj/LOG
@@ -1,50 +1,48 @@
-2026/05/24-16:50:54.697724 7fdfa8dfe6c0 Recovering log #18
-2026/05/24-16:50:54.707598 7fdfa8dfe6c0 Delete type=3 #16
-2026/05/24-16:50:54.707634 7fdfa8dfe6c0 Delete type=0 #18
-2026/05/24-17:00:32.390913 7fdf5affd6c0 Level-0 table #24: started
-2026/05/24-17:00:32.409568 7fdf5affd6c0 Level-0 table #24: 1225651 bytes OK
-2026/05/24-17:00:32.416341 7fdf5affd6c0 Delete type=0 #22
-2026/05/24-17:03:56.805332 7fdf5affd6c0 Level-0 table #26: started
-2026/05/24-17:03:56.824851 7fdf5affd6c0 Level-0 table #26: 1099794 bytes OK
-2026/05/24-17:03:56.831981 7fdf5affd6c0 Delete type=0 #23
-2026/05/24-17:12:00.516549 7fdf5affd6c0 Level-0 table #28: started
-2026/05/24-17:12:00.550743 7fdf5affd6c0 Level-0 table #28: 1268131 bytes OK
-2026/05/24-17:12:00.582730 7fdf5affd6c0 Delete type=0 #25
-2026/05/24-17:16:09.186372 7fdf5affd6c0 Level-0 table #30: started
-2026/05/24-17:16:09.219830 7fdf5affd6c0 Level-0 table #30: 1432074 bytes OK
-2026/05/24-17:16:09.258561 7fdf5affd6c0 Delete type=0 #27
-2026/05/24-17:18:30.349891 7fdf5affd6c0 Level-0 table #32: started
-2026/05/24-17:18:30.379065 7fdf5affd6c0 Level-0 table #32: 1608171 bytes OK
-2026/05/24-17:18:30.388404 7fdf5affd6c0 Delete type=0 #29
-2026/05/24-17:18:30.388776 7fdf5affd6c0 Compacting 4@0 + 1@1 files
-2026/05/24-17:18:30.411581 7fdf5affd6c0 Generated table #33@0: 6650 keys, 986248 bytes
-2026/05/24-17:18:30.411611 7fdf5affd6c0 Compacted 4@0 + 1@1 files => 986248 bytes
-2026/05/24-17:18:30.420963 7fdf5affd6c0 compacted to: files[ 0 1 1 0 0 0 0 ]
-2026/05/24-17:18:30.421191 7fdf5affd6c0 Delete type=2 #24
-2026/05/24-17:18:30.421480 7fdf5affd6c0 Delete type=2 #26
-2026/05/24-17:18:30.421601 7fdf5affd6c0 Delete type=2 #28
-2026/05/24-17:18:30.421786 7fdf5affd6c0 Delete type=2 #30
-2026/05/24-17:18:30.422133 7fdf5affd6c0 Delete type=2 #32
-2026/05/24-17:21:12.979159 7fdf5affd6c0 Level-0 table #35: started
-2026/05/24-17:21:13.003011 7fdf5affd6c0 Level-0 table #35: 1764850 bytes OK
-2026/05/24-17:21:13.009270 7fdf5affd6c0 Delete type=0 #31
-2026/05/24-17:30:55.160858 7fdf5affd6c0 Level-0 table #37: started
-2026/05/24-17:30:55.180790 7fdf5affd6c0 Level-0 table #37: 1929143 bytes OK
-2026/05/24-17:30:55.187168 7fdf5affd6c0 Delete type=0 #34
-2026/05/24-17:30:55.187713 7fdf5affd6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 70890 : 1
-2026/05/24-17:30:55.187715 7fdf5affd6c0 Compacting 2@0 + 1@1 files
-2026/05/24-17:30:55.203256 7fdf5affd6c0 Generated table #38@0: 7978 keys, 1186513 bytes
-2026/05/24-17:30:55.203267 7fdf5affd6c0 Compacted 2@0 + 1@1 files => 1186513 bytes
-2026/05/24-17:30:55.209485 7fdf5affd6c0 compacted to: files[ 0 1 1 0 0 0 0 ]
-2026/05/24-17:30:55.209584 7fdf5affd6c0 Delete type=2 #33
-2026/05/24-17:30:55.209874 7fdf5affd6c0 Delete type=2 #35
-2026/05/24-17:30:55.210245 7fdf5affd6c0 Delete type=2 #37
-2026/05/24-17:30:55.237542 7fdf5affd6c0 Manual compaction at level-0 from '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 70890 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.237576 7fdf5affd6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 92964 : 1
-2026/05/24-17:30:55.237582 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.258486 7fdf5affd6c0 Generated table #39@1: 7978 keys, 1186513 bytes
-2026/05/24-17:30:55.258511 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 1186513 bytes
-2026/05/24-17:30:55.264533 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.264684 7fdf5affd6c0 Delete type=2 #20
-2026/05/24-17:30:55.264949 7fdf5affd6c0 Delete type=2 #38
-2026/05/24-17:30:55.283063 7fdf5affd6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 92964 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.454344 7f3ebcffe6c0 Recovering log #44
+2026/05/27-23:11:58.463285 7f3ebcffe6c0 Delete type=3 #40
+2026/05/27-23:11:58.463300 7f3ebcffe6c0 Delete type=0 #44
+2026/05/27-23:37:44.587645 7f3e6effd6c0 Level-0 table #51: started
+2026/05/27-23:37:44.605872 7f3e6effd6c0 Level-0 table #51: 1343154 bytes OK
+2026/05/27-23:37:44.612030 7f3e6effd6c0 Delete type=0 #49
+2026/05/28-00:04:39.168329 7f3e6effd6c0 Level-0 table #53: started
+2026/05/28-00:04:39.185209 7f3e6effd6c0 Level-0 table #53: 1393674 bytes OK
+2026/05/28-00:04:39.191603 7f3e6effd6c0 Delete type=0 #50
+2026/05/28-00:18:55.273857 7f3e6effd6c0 Level-0 table #55: started
+2026/05/28-00:18:55.294346 7f3e6effd6c0 Level-0 table #55: 1451564 bytes OK
+2026/05/28-00:18:55.300308 7f3e6effd6c0 Delete type=0 #52
+2026/05/28-00:20:15.021651 7f3e6effd6c0 Level-0 table #57: started
+2026/05/28-00:20:15.040525 7f3e6effd6c0 Level-0 table #57: 1496314 bytes OK
+2026/05/28-00:20:15.046886 7f3e6effd6c0 Delete type=0 #54
+2026/05/28-00:20:43.720521 7f3e6effd6c0 Level-0 table #59: started
+2026/05/28-00:20:43.742455 7f3e6effd6c0 Level-0 table #59: 1546947 bytes OK
+2026/05/28-00:20:43.748835 7f3e6effd6c0 Delete type=0 #56
+2026/05/28-00:20:43.749387 7f3e6effd6c0 Compacting 4@0 + 1@1 files
+2026/05/28-00:20:43.771709 7f3e6effd6c0 Generated table #60@0: 10302 keys, 1546947 bytes
+2026/05/28-00:20:43.771721 7f3e6effd6c0 Compacted 4@0 + 1@1 files => 1546947 bytes
+2026/05/28-00:20:43.777946 7f3e6effd6c0 compacted to: files[ 0 1 1 0 0 0 0 ]
+2026/05/28-00:20:43.778171 7f3e6effd6c0 Delete type=2 #51
+2026/05/28-00:20:43.778444 7f3e6effd6c0 Delete type=2 #53
+2026/05/28-00:20:43.778777 7f3e6effd6c0 Delete type=2 #55
+2026/05/28-00:20:43.778977 7f3e6effd6c0 Delete type=2 #57
+2026/05/28-00:20:43.779160 7f3e6effd6c0 Delete type=2 #59
+2026/05/28-00:21:51.457842 7f3e6effd6c0 Level-0 table #62: started
+2026/05/28-00:21:51.479532 7f3e6effd6c0 Level-0 table #62: 1604425 bytes OK
+2026/05/28-00:21:51.485724 7f3e6effd6c0 Delete type=0 #58
+2026/05/28-00:30:27.802783 7f3e6effd6c0 Level-0 table #64: started
+2026/05/28-00:30:27.823947 7f3e6effd6c0 Level-0 table #64: 1651065 bytes OK
+2026/05/28-00:30:27.829721 7f3e6effd6c0 Delete type=0 #61
+2026/05/28-00:35:01.919877 7f3e6effd6c0 Level-0 table #66: started
+2026/05/28-00:35:01.987012 7f3e6effd6c0 Level-0 table #66: 1703060 bytes OK
+2026/05/28-00:35:02.043369 7f3e6effd6c0 Delete type=0 #63
+2026/05/28-00:37:26.052331 7f3e6effd6c0 Level-0 table #68: started
+2026/05/28-00:37:26.076959 7f3e6effd6c0 Level-0 table #68: 1753179 bytes OK
+2026/05/28-00:37:26.083119 7f3e6effd6c0 Delete type=0 #65
+2026/05/28-00:37:26.083369 7f3e6effd6c0 Compacting 4@0 + 1@1 files
+2026/05/28-00:37:26.103213 7f3e6effd6c0 Generated table #69@0: 11630 keys, 1753179 bytes
+2026/05/28-00:37:26.103227 7f3e6effd6c0 Compacted 4@0 + 1@1 files => 1753179 bytes
+2026/05/28-00:37:26.109075 7f3e6effd6c0 compacted to: files[ 0 1 1 0 0 0 0 ]
+2026/05/28-00:37:26.109152 7f3e6effd6c0 Delete type=2 #60
+2026/05/28-00:37:26.109336 7f3e6effd6c0 Delete type=2 #62
+2026/05/28-00:37:26.109453 7f3e6effd6c0 Delete type=2 #64
+2026/05/28-00:37:26.109722 7f3e6effd6c0 Delete type=2 #66
+2026/05/28-00:37:26.109828 7f3e6effd6c0 Delete type=2 #68
diff --git a/packs/tables-pnj/LOG.old b/packs/tables-pnj/LOG.old
index 71e2bed..64207cc 100644
--- a/packs/tables-pnj/LOG.old
+++ b/packs/tables-pnj/LOG.old
@@ -1,15 +1,25 @@
-2026/05/18-20:28:00.247967 7f5a94bff6c0 Recovering log #13
-2026/05/18-20:28:00.322431 7f5a94bff6c0 Delete type=3 #11
-2026/05/18-20:28:00.322531 7f5a94bff6c0 Delete type=0 #13
-2026/05/18-20:29:47.524056 7f5a467fc6c0 Level-0 table #19: started
-2026/05/18-20:29:47.536717 7f5a467fc6c0 Level-0 table #19: 417426 bytes OK
-2026/05/18-20:29:47.544323 7f5a467fc6c0 Delete type=0 #17
-2026/05/18-20:29:47.545004 7f5a467fc6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.545055 7f5a467fc6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 12474 : 1
-2026/05/18-20:29:47.545064 7f5a467fc6c0 Compacting 1@1 + 1@2 files
-2026/05/18-20:29:47.560513 7f5a467fc6c0 Generated table #20@1: 2998 keys, 417426 bytes
-2026/05/18-20:29:47.560554 7f5a467fc6c0 Compacted 1@1 + 1@2 files => 417426 bytes
-2026/05/18-20:29:47.567200 7f5a467fc6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/18-20:29:47.567433 7f5a467fc6c0 Delete type=2 #15
-2026/05/18-20:29:47.567841 7f5a467fc6c0 Delete type=2 #19
-2026/05/18-20:29:47.568160 7f5a467fc6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 12474 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.674162 7f3e6f7fe6c0 Recovering log #36
+2026/05/27-14:31:25.684284 7f3e6f7fe6c0 Delete type=3 #21
+2026/05/27-14:31:25.684327 7f3e6f7fe6c0 Delete type=0 #36
+2026/05/27-14:32:13.276652 7f3e6effd6c0 Level-0 table #43: started
+2026/05/27-14:32:13.292995 7f3e6effd6c0 Level-0 table #43: 1244894 bytes OK
+2026/05/27-14:32:13.298790 7f3e6effd6c0 Delete type=0 #41
+2026/05/27-14:33:21.808275 7f3e6effd6c0 Level-0 table #45: started
+2026/05/27-14:33:21.824612 7f3e6effd6c0 Level-0 table #45: 1294793 bytes OK
+2026/05/27-14:33:21.831380 7f3e6effd6c0 Delete type=0 #42
+2026/05/27-14:33:21.838976 7f3e6effd6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 109340 : 1
+2026/05/27-14:33:21.838980 7f3e6effd6c0 Compacting 1@0 + 1@1 files
+2026/05/27-14:33:21.852317 7f3e6effd6c0 Generated table #46@0: 8642 keys, 1294793 bytes
+2026/05/27-14:33:21.852331 7f3e6effd6c0 Compacted 1@0 + 1@1 files => 1294793 bytes
+2026/05/27-14:33:21.859689 7f3e6effd6c0 compacted to: files[ 0 1 1 0 0 0 0 ]
+2026/05/27-14:33:21.859935 7f3e6effd6c0 Delete type=2 #43
+2026/05/27-14:33:21.860058 7f3e6effd6c0 Delete type=2 #45
+2026/05/27-14:33:21.877111 7f3e6effd6c0 Manual compaction at level-0 from '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 109340 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.877144 7f3e6effd6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 109340 : 1
+2026/05/27-14:33:21.877150 7f3e6effd6c0 Compacting 1@1 + 1@2 files
+2026/05/27-14:33:21.895679 7f3e6effd6c0 Generated table #47@1: 8642 keys, 1294793 bytes
+2026/05/27-14:33:21.895699 7f3e6effd6c0 Compacted 1@1 + 1@2 files => 1294793 bytes
+2026/05/27-14:33:21.901922 7f3e6effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
+2026/05/27-14:33:21.902059 7f3e6effd6c0 Delete type=2 #39
+2026/05/27-14:33:21.902514 7f3e6effd6c0 Delete type=2 #46
+2026/05/27-14:33:21.908609 7f3e6effd6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 109340 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zyJ49IY9JAmeIucJ' @ 0 : 0; will stop at (end)
diff --git a/packs/tables-pnj/MANIFEST-000021 b/packs/tables-pnj/MANIFEST-000021
deleted file mode 100644
index 24d6d24..0000000
Binary files a/packs/tables-pnj/MANIFEST-000021 and /dev/null differ
diff --git a/packs/tables-pnj/MANIFEST-000048 b/packs/tables-pnj/MANIFEST-000048
new file mode 100644
index 0000000..3cc5bd3
Binary files /dev/null and b/packs/tables-pnj/MANIFEST-000048 differ
diff --git a/packs/talents-psioniques/000067.log b/packs/talents-psioniques/000067.log
deleted file mode 100644
index e69de29..0000000
diff --git a/packs/tables-pnj/000036.log b/packs/talents-psioniques/000075.log
similarity index 100%
rename from packs/tables-pnj/000036.log
rename to packs/talents-psioniques/000075.log
diff --git a/packs/talents-psioniques/CURRENT b/packs/talents-psioniques/CURRENT
index 625c880..f8d57cc 100644
--- a/packs/talents-psioniques/CURRENT
+++ b/packs/talents-psioniques/CURRENT
@@ -1 +1 @@
-MANIFEST-000065
+MANIFEST-000074
diff --git a/packs/talents-psioniques/LOG b/packs/talents-psioniques/LOG
index 6426d52..3918d31 100644
--- a/packs/talents-psioniques/LOG
+++ b/packs/talents-psioniques/LOG
@@ -1,15 +1,3 @@
-2026/05/24-16:50:54.673462 7fdfa95ff6c0 Recovering log #63
-2026/05/24-16:50:54.683865 7fdfa95ff6c0 Delete type=3 #61
-2026/05/24-16:50:54.683923 7fdfa95ff6c0 Delete type=0 #63
-2026/05/24-17:30:55.141699 7fdf5affd6c0 Level-0 table #68: started
-2026/05/24-17:30:55.144973 7fdf5affd6c0 Level-0 table #68: 18651 bytes OK
-2026/05/24-17:30:55.150867 7fdf5affd6c0 Delete type=0 #66
-2026/05/24-17:30:55.187701 7fdf5affd6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
-2026/05/24-17:30:55.227041 7fdf5affd6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at '!items!xFUyR7XECD8QJcIw' @ 231 : 1
-2026/05/24-17:30:55.227053 7fdf5affd6c0 Compacting 1@1 + 1@2 files
-2026/05/24-17:30:55.230678 7fdf5affd6c0 Generated table #69@1: 33 keys, 18651 bytes
-2026/05/24-17:30:55.230696 7fdf5affd6c0 Compacted 1@1 + 1@2 files => 18651 bytes
-2026/05/24-17:30:55.237297 7fdf5affd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/05/24-17:30:55.237359 7fdf5affd6c0 Delete type=2 #60
-2026/05/24-17:30:55.237471 7fdf5affd6c0 Delete type=2 #68
-2026/05/24-17:30:55.265203 7fdf5affd6c0 Manual compaction at level-1 from '!items!xFUyR7XECD8QJcIw' @ 231 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
+2026/05/27-23:11:58.427900 7f3ebd7ff6c0 Recovering log #72
+2026/05/27-23:11:58.438233 7f3ebd7ff6c0 Delete type=3 #70
+2026/05/27-23:11:58.438292 7f3ebd7ff6c0 Delete type=0 #72
diff --git a/packs/talents-psioniques/LOG.old b/packs/talents-psioniques/LOG.old
index 1c091e9..f104890 100644
--- a/packs/talents-psioniques/LOG.old
+++ b/packs/talents-psioniques/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-20:28:00.088714 7f5a94bff6c0 Recovering log #58
-2026/05/18-20:28:00.147839 7f5a94bff6c0 Delete type=3 #56
-2026/05/18-20:28:00.147945 7f5a94bff6c0 Delete type=0 #58
-2026/05/18-20:29:47.507007 7f5a467fc6c0 Level-0 table #64: started
-2026/05/18-20:29:47.507077 7f5a467fc6c0 Level-0 table #64: 0 bytes OK
-2026/05/18-20:29:47.513818 7f5a467fc6c0 Delete type=0 #62
-2026/05/18-20:29:47.514115 7f5a467fc6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
-2026/05/18-20:29:47.514158 7f5a467fc6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
+2026/05/27-14:31:25.650849 7f3e6f7fe6c0 Recovering log #67
+2026/05/27-14:31:25.660624 7f3e6f7fe6c0 Delete type=3 #65
+2026/05/27-14:31:25.660648 7f3e6f7fe6c0 Delete type=0 #67
+2026/05/27-14:33:21.780104 7f3e6effd6c0 Level-0 table #73: started
+2026/05/27-14:33:21.780129 7f3e6effd6c0 Level-0 table #73: 0 bytes OK
+2026/05/27-14:33:21.786659 7f3e6effd6c0 Delete type=0 #71
+2026/05/27-14:33:21.800546 7f3e6effd6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
+2026/05/27-14:33:21.808253 7f3e6effd6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
diff --git a/packs/talents-psioniques/MANIFEST-000065 b/packs/talents-psioniques/MANIFEST-000065
deleted file mode 100644
index 84ba9d2..0000000
Binary files a/packs/talents-psioniques/MANIFEST-000065 and /dev/null differ
diff --git a/packs/talents-psioniques/MANIFEST-000074 b/packs/talents-psioniques/MANIFEST-000074
new file mode 100644
index 0000000..96dab6e
Binary files /dev/null and b/packs/talents-psioniques/MANIFEST-000074 differ
diff --git a/scripts/NpcDialog.js b/scripts/NpcDialog.js
index 5bf169e..b467622 100644
--- a/scripts/NpcDialog.js
+++ b/scripts/NpcDialog.js
@@ -1,6 +1,19 @@
import { formatCredits } from './tradeHelper.js';
import { createNpcActor, generateClientMission, generateEncounter, generateQuickNpc } from './npcHelper.js';
import { NPC_RELATIONS } from './data/npcTables.js';
+import { generateAndCreateTravellerNpc } from './travellerNpcGenerator.js';
+import { generateRandomName } from './data/travellerNpcGenerator.js';
+import {
+ CITIZEN_CATEGORY_LIST,
+ EXPERIENCE_LEVEL_LIST,
+ ROLE_LIST,
+ GENDER_LIST,
+ DEFAULT_OPTIONS,
+ CITIZEN_CATEGORY_LABELS_FR,
+ EXPERIENCE_LEVEL_LABELS_FR,
+ ROLE_LABELS_FR,
+ GENDER_LABELS_FR
+} from './data/travellerNpcGenerator.js';
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
@@ -41,6 +54,19 @@ export class NpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
context: options.context ?? 'starport',
includeFollowUp: true,
},
+ mission: {},
+ traveller: {
+ citizenCategory: DEFAULT_OPTIONS.citizenCategory,
+ experience: DEFAULT_OPTIONS.experience,
+ role: DEFAULT_OPTIONS.role,
+ gender: DEFAULT_OPTIONS.gender,
+ firstName: '',
+ surname: '',
+ useRandomName: true,
+ createActor: DEFAULT_OPTIONS.createActor,
+ actorName: '',
+ openCreatedActor: DEFAULT_OPTIONS.openCreatedActor,
+ },
};
}
@@ -50,6 +76,25 @@ export class NpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
...this._formData,
activeTab: this._activeTab,
relations: Object.entries(NPC_RELATIONS).map(([key, value]) => ({ key, label: value.label })),
+ citizenCategories: CITIZEN_CATEGORY_LIST.map(c => ({
+ key: c.key,
+ label: CITIZEN_CATEGORY_LABELS_FR[c.key] || c.label,
+ description: c.description
+ })),
+ experienceLevels: EXPERIENCE_LEVEL_LIST.map(e => ({
+ key: e.key,
+ label: EXPERIENCE_LEVEL_LABELS_FR[e.key] || e.label,
+ description: e.description
+ })),
+ roles: ROLE_LIST.map(r => ({
+ key: r.key,
+ label: ROLE_LABELS_FR[r.key] || r.label,
+ description: r.description
+ })),
+ genders: GENDER_LIST.map(g => ({
+ key: g.key,
+ label: GENDER_LABELS_FR[g.key] || g.label
+ })),
};
}
@@ -84,6 +129,27 @@ export class NpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
this._readForm(html);
this._activateTab($(event.currentTarget).data('tab'));
});
+
+ // Gestion des événements pour l'onglet PNJ Détaillé (Traveller)
+ html.find('[data-action="generate-traveller-npc"]').on('click', async (event) => {
+ event.preventDefault();
+ this._readForm(html);
+ await this._handleTravellerNpc();
+ });
+
+ html.find('[data-action="randomize-name"]').on('click', (event) => {
+ event.preventDefault();
+ this._randomizeTravellerName(html);
+ });
+
+ html.find('[name="traveller.useRandomName"]').on('change', (event) => {
+ const useRandom = event.target.checked;
+ this._formData.traveller.useRandomName = useRandom;
+ html.find('.traveller-name-fields').toggleClass('hidden', useRandom);
+ });
+
+ // Initialiser l'affichage des champs de nom pour l'onglet Traveller
+ html.find('.traveller-name-fields').toggleClass('hidden', this._formData.traveller.useRandomName);
}
_getForm() {
@@ -137,6 +203,18 @@ export class NpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
this._formData.npc.openCreatedActor = html.find('[name="npc.openCreatedActor"]').is(':checked');
this._formData.encounter.context = html.find('[name="encounter.context"]').val();
this._formData.encounter.includeFollowUp = html.find('[name="encounter.includeFollowUp"]').is(':checked');
+
+ // Données pour l'onglet PNJ Détaillé (Traveller)
+ this._formData.traveller.citizenCategory = html.find('[name="traveller.citizenCategory"]').val();
+ this._formData.traveller.experience = html.find('[name="traveller.experience"]').val();
+ this._formData.traveller.role = html.find('[name="traveller.role"]').val();
+ this._formData.traveller.gender = html.find('[name="traveller.gender"]').val();
+ this._formData.traveller.firstName = html.find('[name="traveller.firstName"]').val();
+ this._formData.traveller.surname = html.find('[name="traveller.surname"]').val();
+ this._formData.traveller.useRandomName = html.find('[name="traveller.useRandomName"]').is(':checked');
+ this._formData.traveller.createActor = html.find('[name="traveller.createActor"]').is(':checked');
+ this._formData.traveller.actorName = html.find('[name="traveller.actorName"]').val();
+ this._formData.traveller.openCreatedActor = html.find('[name="traveller.openCreatedActor"]').is(':checked');
}
async _handleNpc() {
@@ -162,14 +240,75 @@ export class NpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
await this._postToChatResult(result);
}
+ async _handleTravellerNpc() {
+ const button = $(this.element).find('[data-action="generate-traveller-npc"]');
+ const originalLabel = button.html();
+
+ try {
+ button.prop('disabled', true).html(' Génération...');
+
+ const generateOptions = {
+ citizenCategory: this._formData.traveller.citizenCategory,
+ experience: this._formData.traveller.experience,
+ role: this._formData.traveller.role,
+ gender: this._formData.traveller.gender,
+ createActor: this._formData.traveller.createActor,
+ actorName: this._formData.traveller.actorName,
+ openCreatedActor: this._formData.traveller.openCreatedActor
+ };
+
+ if (!this._formData.traveller.useRandomName && this._formData.traveller.firstName && this._formData.traveller.surname) {
+ generateOptions.firstName = this._formData.traveller.firstName;
+ generateOptions.surname = this._formData.traveller.surname;
+ }
+
+ const result = await generateAndCreateTravellerNpc(generateOptions);
+
+ if (result.success) {
+ await this._postToChatResult(result);
+ if (result.createdActor) {
+ ui.notifications.info(`Fiche PNJ Traveller créée : ${result.createdActor.name}`);
+ }
+ } else {
+ ui.notifications.error('Erreur lors de la génération du PNJ Traveller');
+ }
+ } catch (error) {
+ console.error(`${MODULE_ID} | Erreur lors de la génération du PNJ Traveller:`, error);
+ ui.notifications.error(`Erreur: ${error.message}`);
+ } finally {
+ button.prop('disabled', false).html(originalLabel);
+ }
+ }
+
+ _randomizeTravellerName(html) {
+ const name = generateRandomName(this._formData.traveller.gender);
+ html.find('[name="traveller.firstName"]').val(name.firstName);
+ html.find('[name="traveller.surname"]').val(name.surname);
+ this._formData.traveller.firstName = name.firstName;
+ this._formData.traveller.surname = name.surname;
+ this._formData.traveller.useRandomName = false;
+ html.find('[name="traveller.useRandomName"]').prop('checked', false);
+ html.find('.traveller-name-fields').removeClass('hidden');
+ }
+
async _postToChatResult(data) {
registerHandlebarsHelpers();
- const html = await foundry.applications.handlebars.renderTemplate(`modules/${MODULE_ID}/templates/npc-result.hbs`, data);
+
+ // Déterminer quel template utiliser en fonction du type de données
+ let template = `modules/${MODULE_ID}/templates/npc-result.hbs`;
+ let resultType = 'npc-result';
+
+ if (data.type === 'traveller-npc' || data?.flags?.[MODULE_ID]?.type === 'traveller-npc-result') {
+ template = `modules/${MODULE_ID}/templates/traveller-npc-result.hbs`;
+ resultType = 'traveller-npc-result';
+ }
+
+ const html = await foundry.applications.handlebars.renderTemplate(template, data);
await ChatMessage.create({
content: html,
speaker: ChatMessage.getSpeaker(),
- flags: { [MODULE_ID]: { type: 'npc-result' } },
+ flags: { [MODULE_ID]: { type: resultType } },
});
}
}
@@ -180,8 +319,41 @@ function registerHandlebarsHelpers() {
if (helpersRegistered) return;
helpersRegistered = true;
+ // Helpers existants pour NPC
Handlebars.registerHelper('eq', (a, b) => a === b);
Handlebars.registerHelper('join', (arr, sep) => (Array.isArray(arr) ? arr.join(sep) : ''));
Handlebars.registerHelper('formatCredits', (amount) => formatCredits(amount));
Handlebars.registerHelper('contains', (text, search) => String(text ?? '').includes(search));
+
+ // Helpers pour Traveller NPC
+ Handlebars.registerHelper('gt', (a, b) => a > b);
+
+ // Helper pour afficher le niveau de compétence avec un symbole
+ Handlebars.registerHelper('skillLevelSymbol', (level) => {
+ if (level === 0) return '';
+ if (level === 1) return '★';
+ if (level === 2) return '★★';
+ if (level === 3) return '★★★';
+ return `+${level}`;
+ });
+
+ // Helper pour formater le DM (Difficulté Modificateur)
+ Handlebars.registerHelper('formatDm', (value) => {
+ const dm = Math.floor((value - 6) / 3);
+ return dm >= 0 ? `+${dm}` : `${dm}`;
+ });
+
+ // Helper pour obtenir la classe CSS du niveau de compétence
+ Handlebars.registerHelper('skillLevelClass', (level) => {
+ if (level === 3) return 'skill-level-3';
+ if (level === 2) return 'skill-level-2';
+ if (level === 1) return 'skill-level-1';
+ return 'skill-level-0';
+ });
+
+ // Helper pour lookup dans un objet
+ Handlebars.registerHelper('lookup', (obj, key) => {
+ if (!obj || !key) return '';
+ return obj[key] !== undefined ? obj[key] : '';
+ });
}
diff --git a/scripts/data/travellerNpcGenerator.js b/scripts/data/travellerNpcGenerator.js
index d45e8d0..58d9acb 100644
--- a/scripts/data/travellerNpcGenerator.js
+++ b/scripts/data/travellerNpcGenerator.js
@@ -774,7 +774,7 @@ export const DEFAULT_OPTIONS = {
*/
export const SKILL_LABELS_FR = {
'Pilot-Spacecraft': 'Pilote – Vaisseau spatial',
- 'Pilot-Small Craft': 'Pilote – Aéronef léger',
+ 'Pilot-Small Craft': 'Pilote – Petits vaisseaux',
'Pilot': 'Pilote',
'Flyer': 'Pilote – Aéronef atmosphérique',
'Astrogation': 'Astrogation',
@@ -804,7 +804,7 @@ export const SKILL_LABELS_FR = {
'Advocate': 'Plaidoyer',
'Diplomat': 'Diplomatie',
'Streetwise': 'Rues',
- 'Leadership': 'Direction',
+ 'Leadership': 'Leadership',
'Science-Biology': 'Science – Biologie',
'Science-Chemistry': 'Science – Chimie',
'Science': 'Science',
diff --git a/scripts/npc.js b/scripts/npc.js
index 12e8af1..10393ae 100644
--- a/scripts/npc.js
+++ b/scripts/npc.js
@@ -1,5 +1,4 @@
import { NpcDialog } from './NpcDialog.js';
-import { openTravellerNpcDialog } from './TravellerNpcDialog.js';
import { syncNpcRollTables } from './npcRollTableSync.js';
import './mgt2eMigration.js';
@@ -10,10 +9,6 @@ function openNpcDialog(initialTab, options = {}) {
new NpcDialog({ initialTab, ...options }).render({ force: true });
}
-function openTravellerNpcGenerator() {
- openTravellerNpcDialog();
-}
-
function registerNpcCommand(commandName, initialTab) {
if (!ChatLogV2?.CHAT_COMMANDS) {
console.warn(`${MODULE_ID} | ChatLog.CHAT_COMMANDS indisponible, commande /${commandName} non enregistrée`);
@@ -30,22 +25,6 @@ function registerNpcCommand(commandName, initialTab) {
console.log(`${MODULE_ID} | Commande /${commandName} enregistrée via ChatLog.CHAT_COMMANDS`);
}
-function registerTravellerNpcCommand() {
- if (!ChatLogV2?.CHAT_COMMANDS) {
- console.warn(`${MODULE_ID} | ChatLog.CHAT_COMMANDS indisponible, commande /gennpc non enregistrée`);
- return;
- }
-
- ChatLogV2.CHAT_COMMANDS.gennpc = {
- rgx: new RegExp(`^\\/gennpc(?:\\s+(.*))?$`, 'i'),
- fn: () => {
- openTravellerNpcGenerator();
- return false;
- },
- };
- console.log(`${MODULE_ID} | Commande /gennpc enregistrée via ChatLog.CHAT_COMMANDS`);
-}
-
Hooks.once('init', () => {
console.log(`${MODULE_ID} | Outils PNJ initialisés`);
@@ -64,12 +43,11 @@ Hooks.once('init', () => {
registerNpcCommand('pnj', 'npc');
registerNpcCommand('rencontre', 'encounter');
registerNpcCommand('mission', 'mission');
- registerTravellerNpcCommand();
});
Hooks.once('ready', async () => {
await syncNpcRollTables();
- console.log(`${MODULE_ID} | Outils PNJ prêts – tapez /pnj, /rencontre, /mission ou /gennpc dans le chat`);
+ console.log(`${MODULE_ID} | Outils PNJ prêts – tapez /pnj, /rencontre ou /mission dans le chat`);
});
/**
@@ -115,11 +93,6 @@ Hooks.on('renderChatInput', (app, html, data) => {
event.stopImmediatePropagation();
openNpcDialog('mission');
input.val('');
- } else if (content?.startsWith('/gennpc')) {
- event.preventDefault();
- event.stopImmediatePropagation();
- openTravellerNpcGenerator();
- input.val('');
}
}
});
@@ -147,11 +120,6 @@ Hooks.on('preCreateChatMessage', (message, data, options) => {
openNpcDialog('mission');
return false; // Empêche la création du message
}
-
- if (content === '/gennpc' || content?.startsWith('/gennpc ')) {
- openTravellerNpcGenerator();
- return false; // Empêche la création du message
- }
});
// Gardé pour compatibilité v13
@@ -186,9 +154,4 @@ Hooks.on('chatMessage', (...args) => {
openNpcDialog('mission');
return false;
}
-
- if (trimmed === '/gennpc' || trimmed?.startsWith('/gennpc ')) {
- openTravellerNpcGenerator();
- return false;
- }
});
diff --git a/scripts/travellerNpcGenerator.js b/scripts/travellerNpcGenerator.js
index 4d6f51d..10e058e 100644
--- a/scripts/travellerNpcGenerator.js
+++ b/scripts/travellerNpcGenerator.js
@@ -49,61 +49,100 @@ const MODULE_ID = 'mgt2-compendium-amiral-denisov';
* Mapping des compétences Traveller vers mgt2e
* @type {Object}
*/
+// Mapping des compétences Traveller vers MgT2e
+// IMPORTANT: MgT2e utilise des noms de compétences EN MINUSCULES (ex: pilot, electronics, gunner)
+// basé sur les références dans npcHelper.js et mgt2eSkills.js
+// Format: 'Compétence-Traveller' -> 'competence_mgt2e' ou 'competence_mgt2e.specialite'
+// Les spécialités sont en minuscules avec underscores
+// Si une spécialité n'existe pas dans MgT2e, setSkillLevel appliquera le niveau à la compétence parente
const SKILL_MAPPING = {
- 'Pilot-Spacecraft': 'pilot.spacecraft',
- 'Pilot-Small Craft': 'pilot.smallcraft',
+ // Pilotage - MgT2e a une compétence "pilot" (confirmé par les références)
+ // Corrigé : Small Craft = Petits vaisseaux (pas Aéronef léger)
+ 'Pilot-Spacecraft': 'pilot.vaisseau_spatial',
+ 'Pilot-Small Craft': 'pilot.petits_vaisseaux',
'Pilot': 'pilot',
+ 'Flyer': 'pilot.aeronef_atmospherique',
+
+ // Astrogation et Navigation (compétences séparées)
'Astrogation': 'astrogation',
- 'Electronics-Sensors': 'electronics.sensors',
+ 'Navigation': 'navigation',
+
+ // Électronique - MgT2e a une compétence "electronics" (confirmé par npcHelper.js:34)
+ // Révisé : "computers" → "informatique" pour alignement avec le libellé FR
+ 'Electronics-Sensors': 'electronics.capteurs',
'Electronics-Communications': 'electronics.communications',
- 'Electronics-Computers': 'electronics.computers',
+ 'Electronics-Computers': 'electronics.informatique',
'Electronics': 'electronics',
- 'Gunner-Turrets': 'gunner.turrets',
- 'Gunner-Screens': 'gunner.screens',
- 'Gunner': 'gunner',
+ 'Computers': 'electronics',
+ 'Communications': 'electronics',
+
+ // Artillerie - MgT2e utilise "gunner" ou "guncombat" ?
+ // Dans npcHelper.js:37 on voit "guncombat", donc utilisons ça
+ 'Gunner-Turrets': 'guncombat.tourelles',
+ 'Gunner-Screens': 'guncombat.boucliers',
+ 'Gunner': 'guncombat',
+
+ // Mécanique
'Mechanic': 'mechanic',
- 'Engineer-MDrive': 'engineer.mdrive',
- 'Engineer-Power': 'engineer.power',
- 'Engineer-JDrive': 'engineer.jdrive',
- 'Engineer-Life Support': 'engineer.lifesupport',
+
+ // Ingénierie - MgT2e utilise probablement "engineer"
+ 'Engineer-MDrive': 'engineer.propulsion_manoeuvre',
+ 'Engineer-Power': 'engineer.energie',
+ 'Engineer-JDrive': 'engineer.propulsion_saut',
+ 'Engineer-Life Support': 'engineer.support_vie',
'Engineer': 'engineer',
+
+ // Social et Administration - tous confirmés dans npcHelper.js
'Steward': 'steward',
'Carouse': 'carouse',
'Persuade': 'persuade',
'Broker': 'broker',
'Admin': 'admin',
- 'Computers': 'electronics.computers',
'Language': 'language',
'Advocate': 'advocate',
'Leadership': 'leadership',
'Medic': 'medic',
- 'Streetwise': 'streetwise',
'Diplomat': 'diplomat',
- 'Science-Biology': 'science.biology',
- 'Science-Chemistry': 'science.chemistry',
+
+ // Sciences
+ 'Science-Biology': 'science.biologie',
+ 'Science-Chemistry': 'science.chimie',
'Science': 'science',
- 'Deception': 'deception',
- 'Investigate': 'investigate',
+
+ // Combat - "guncombat" confirmé dans npcHelper.js:37
'Gun Combat': 'guncombat',
'Heavy Weapons': 'heavyweapons',
- 'Melee-Unarmed': 'melee.unarmed',
- 'Melee-Blade': 'melee.blade',
+ // Mêlée - "melee" confirmé dans npcHelper.js:37
+ 'Melee-Unarmed': 'melee.sans_arme',
+ 'Melee-Blade': 'melee.arme_blanche',
'Melee': 'melee',
- 'Athletics-Strength': 'athletics.strength',
- 'Athletics-Dexterity': 'athletics.dexterity',
+
+ // Athlétisme - probablement "athletics"
+ // Révisé : "dexterite" → "dextérité" (avec accent)
+ 'Athletics-Strength': 'athletics.force',
+ 'Athletics-Dexterity': 'athletics.dextérité',
'Athletics': 'athletics',
+
+ // Tactique et Exploration - "tactics" et "recon" confirmés dans npcHelper.js
'Tactics': 'tactics',
'Recon': 'recon',
'Survival': 'survival',
- 'Navigation': 'navigation',
'Stealth': 'stealth',
'Explosives': 'explosives',
- 'Communications': 'electronics.communications',
- 'Drive-Grav': 'drive.grav',
+ 'Deception': 'deception',
+ 'Investigate': 'investigate',
+
+ // Conduite - probablement "drive"
+ // Révisé : "gravite" → "gravité" (avec accent)
+ 'Drive-Grav': 'drive.gravité',
'Drive': 'drive',
+
+ // Équipement - probablement "vaccsuit" ou similaire
'Vacc Suit': 'vaccsuit',
- 'Flyer': 'flyer',
- 'Art-Acting': 'art.acting',
+
+ // Art - probablement "art"
+ // Révisé : "jeu_d_acteur" → "jeu_acteur" (plus naturel)
+ 'Art-Acting': 'art.jeu_acteur',
'Art-Instrument': 'art.instrument',
'Art': 'art'
};
@@ -114,7 +153,16 @@ const SKILL_MAPPING = {
* @returns {string} - Nom au format mgt2e
*/
function convertSkillToMgt2eFormat(skillName) {
- return SKILL_MAPPING[skillName] || skillName.toLowerCase().replace(/-| /g, '.');
+ // Vérifier d'abord dans le mapping explicite
+ if (SKILL_MAPPING[skillName]) {
+ return SKILL_MAPPING[skillName];
+ }
+
+ // Si pas dans le mapping, essayer de deviner
+ // MgT2e utilise des noms en minuscules (ex: pilot, electronics, guncombat)
+ // 1. Remplacer les tirets et espaces par des points
+ // 2. Tout mettre en minuscules
+ return skillName.toLowerCase().replace(/-| /g, '.');
}
/**
diff --git a/templates/npc-dialog.hbs b/templates/npc-dialog.hbs
index 594b19a..ec3991f 100644
--- a/templates/npc-dialog.hbs
+++ b/templates/npc-dialog.hbs
@@ -10,6 +10,9 @@
Client & mission
+
+ PNJ Détaillé
+
@@ -119,6 +122,116 @@
+
+
+
Générateur de PNJ Traveller
+
+ Génère un personnage non-joueur selon les règles du générateur Traveller,
+ avec caractéristiques, compétences et rôle aléatoires ou personnalisés.
+