modwright 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +212 -0
  3. package/assets/claude/agents/mw-explore.md +46 -0
  4. package/assets/claude/agents/mw-fixture.md +33 -0
  5. package/assets/claude/agents/mw-rule-author.md +51 -0
  6. package/assets/claude/agents/mw-scaffold-author.md +48 -0
  7. package/assets/claude/skills/mw-author.md +59 -0
  8. package/assets/claude/skills/mw-new-item.md +51 -0
  9. package/assets/claude/skills/mw-new-spell.md +50 -0
  10. package/assets/claude/skills/mw-scaffold.md +59 -0
  11. package/assets/claude/skills/mw-ship.md +57 -0
  12. package/assets/claude/skills/mw-validate.md +51 -0
  13. package/assets/claude/skills/mw-verify.md +59 -0
  14. package/assets/nivalisnights/extract_resources.py +177 -0
  15. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Config.json +5 -0
  16. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapClient.lua +55 -0
  17. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapServer.lua +81 -0
  18. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Log.lua +96 -0
  19. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Probes.lua +1038 -0
  20. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/ProbesClient.lua +74 -0
  21. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Protocol.lua +985 -0
  22. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Watch.lua +175 -0
  23. package/bridges/bg3-se/Mods/ModWrightBridge/meta.lsx +45 -0
  24. package/bridges/bg3-se/README.md +99 -0
  25. package/bridges/bg3-se/bridge.json +68 -0
  26. package/bridges/cp2077-cet/ModWrightBridge/init.lua +375 -0
  27. package/bridges/cp2077-cet/ModWrightBridge/probes.lua +1104 -0
  28. package/bridges/cp2077-cet/ModWrightBridge/protocol.lua +1306 -0
  29. package/bridges/cp2077-cet/README.md +165 -0
  30. package/bridges/cp2077-cet/bridge.json +53 -0
  31. package/dist/core/bridge/arm.js +175 -0
  32. package/dist/core/bridge/cet-console.js +26 -0
  33. package/dist/core/bridge/cet-log.js +362 -0
  34. package/dist/core/bridge/index.js +11 -0
  35. package/dist/core/bridge/locate.js +35 -0
  36. package/dist/core/bridge/paths.js +34 -0
  37. package/dist/core/bridge/pending.js +89 -0
  38. package/dist/core/bridge/poll.js +155 -0
  39. package/dist/core/bridge/stage.js +100 -0
  40. package/dist/core/bridge/status.js +97 -0
  41. package/dist/core/bridge/types.js +145 -0
  42. package/dist/core/bridge/validate.js +107 -0
  43. package/dist/core/build/index.js +6 -0
  44. package/dist/core/build/manifest.js +47 -0
  45. package/dist/core/build/paths.js +32 -0
  46. package/dist/core/build/run.js +342 -0
  47. package/dist/core/build/stage.js +265 -0
  48. package/dist/core/build/steps/bg3.js +129 -0
  49. package/dist/core/build/steps/core.js +195 -0
  50. package/dist/core/build/steps/cyberpunk.js +95 -0
  51. package/dist/core/build/steps/listing.js +35 -0
  52. package/dist/core/build/types.js +13 -0
  53. package/dist/core/build/zip.js +148 -0
  54. package/dist/core/compat/check.js +113 -0
  55. package/dist/core/compat/pe.js +220 -0
  56. package/dist/core/compat/types.js +1 -0
  57. package/dist/core/compat/version.js +70 -0
  58. package/dist/core/deploy/guards.js +292 -0
  59. package/dist/core/deploy/index.js +5 -0
  60. package/dist/core/deploy/plan.js +696 -0
  61. package/dist/core/deploy/reload-apply.js +361 -0
  62. package/dist/core/deploy/reload.js +358 -0
  63. package/dist/core/deploy/sources.js +169 -0
  64. package/dist/core/deploy/types.js +1 -0
  65. package/dist/core/epic.js +54 -0
  66. package/dist/core/fsutil.js +191 -0
  67. package/dist/core/home.js +70 -0
  68. package/dist/core/knowledge/facts.js +229 -0
  69. package/dist/core/knowledge/index.js +4 -0
  70. package/dist/core/knowledge/search.js +112 -0
  71. package/dist/core/knowledge/store.js +123 -0
  72. package/dist/core/knowledge/types.js +1 -0
  73. package/dist/core/ledger/check.js +42 -0
  74. package/dist/core/ledger/hooks.js +80 -0
  75. package/dist/core/ledger/index.js +7 -0
  76. package/dist/core/ledger/query.js +17 -0
  77. package/dist/core/ledger/record.js +84 -0
  78. package/dist/core/ledger/status.js +53 -0
  79. package/dist/core/ledger/store.js +98 -0
  80. package/dist/core/ledger/types.js +108 -0
  81. package/dist/core/logs/index.js +4 -0
  82. package/dist/core/logs/registry.js +50 -0
  83. package/dist/core/logs/scan.js +195 -0
  84. package/dist/core/logs/triage.js +160 -0
  85. package/dist/core/logs/types.js +1 -0
  86. package/dist/core/lsx.js +10 -0
  87. package/dist/core/lz4.js +66 -0
  88. package/dist/core/mods.js +229 -0
  89. package/dist/core/process.js +49 -0
  90. package/dist/core/project/build-steps.js +83 -0
  91. package/dist/core/project/describe.js +74 -0
  92. package/dist/core/project/index.js +5 -0
  93. package/dist/core/project/load.js +146 -0
  94. package/dist/core/project/schema.js +264 -0
  95. package/dist/core/project/types.js +3 -0
  96. package/dist/core/prompts.js +72 -0
  97. package/dist/core/registry.js +35 -0
  98. package/dist/core/safety/backup.js +206 -0
  99. package/dist/core/safety/execute.js +188 -0
  100. package/dist/core/safety/index.js +5 -0
  101. package/dist/core/safety/plan.js +122 -0
  102. package/dist/core/safety/restore.js +172 -0
  103. package/dist/core/safety/types.js +1 -0
  104. package/dist/core/scaffold/bootstrap.js +7 -0
  105. package/dist/core/scaffold/catalog.js +28 -0
  106. package/dist/core/scaffold/claude-assets.js +271 -0
  107. package/dist/core/scaffold/collisions.js +64 -0
  108. package/dist/core/scaffold/emit.js +356 -0
  109. package/dist/core/scaffold/engine.js +680 -0
  110. package/dist/core/scaffold/ids.js +78 -0
  111. package/dist/core/scaffold/index.js +10 -0
  112. package/dist/core/scaffold/jsonpath.js +121 -0
  113. package/dist/core/scaffold/load.js +81 -0
  114. package/dist/core/scaffold/render.js +85 -0
  115. package/dist/core/scaffold/sequence.js +396 -0
  116. package/dist/core/scaffold/types.js +309 -0
  117. package/dist/core/steam.js +63 -0
  118. package/dist/core/surfaceutil.js +36 -0
  119. package/dist/core/testplan/check.js +67 -0
  120. package/dist/core/testplan/index.js +5 -0
  121. package/dist/core/testplan/load.js +100 -0
  122. package/dist/core/testplan/registry.js +317 -0
  123. package/dist/core/testplan/run.js +389 -0
  124. package/dist/core/testplan/types.js +82 -0
  125. package/dist/core/text/converters/bg3.js +50 -0
  126. package/dist/core/text/converters/cyberpunk.js +36 -0
  127. package/dist/core/text/converters/index.js +261 -0
  128. package/dist/core/text/diff/cr2w.js +180 -0
  129. package/dist/core/text/diff/index.js +16 -0
  130. package/dist/core/text/diff/loca.js +43 -0
  131. package/dist/core/text/diff/lsx.js +126 -0
  132. package/dist/core/text/handles.js +86 -0
  133. package/dist/core/text/index.js +6 -0
  134. package/dist/core/text/json.js +46 -0
  135. package/dist/core/text/templates/cache.js +71 -0
  136. package/dist/core/text/templates/index.js +3 -0
  137. package/dist/core/text/templates/library.js +245 -0
  138. package/dist/core/text/templates/types.js +51 -0
  139. package/dist/core/text/toolchain.js +16 -0
  140. package/dist/core/text/types.js +1 -0
  141. package/dist/core/text/validate.js +149 -0
  142. package/dist/core/text/xml.js +58 -0
  143. package/dist/core/toolchain/datafetch.js +151 -0
  144. package/dist/core/toolchain/env.js +63 -0
  145. package/dist/core/toolchain/features.js +170 -0
  146. package/dist/core/toolchain/index.js +8 -0
  147. package/dist/core/toolchain/install.js +191 -0
  148. package/dist/core/toolchain/locate.js +275 -0
  149. package/dist/core/toolchain/remember.js +84 -0
  150. package/dist/core/toolchain/run.js +318 -0
  151. package/dist/core/toolchain/specs.js +351 -0
  152. package/dist/core/toolchain/types.js +1 -0
  153. package/dist/core/types.js +1 -0
  154. package/dist/core/userconfig.js +66 -0
  155. package/dist/core/validate/context.js +139 -0
  156. package/dist/core/validate/index.js +5 -0
  157. package/dist/core/validate/registry.js +58 -0
  158. package/dist/core/validate/run.js +131 -0
  159. package/dist/core/validate/suppressions.js +91 -0
  160. package/dist/core/validate/types.js +2 -0
  161. package/dist/core/yamledit.js +51 -0
  162. package/dist/index.js +389 -0
  163. package/dist/server.js +1914 -0
  164. package/dist/surfaces/baldursgate3/compat.js +164 -0
  165. package/dist/surfaces/baldursgate3/identity.js +110 -0
  166. package/dist/surfaces/baldursgate3/index/build.js +331 -0
  167. package/dist/surfaces/baldursgate3/index/index.js +17 -0
  168. package/dist/surfaces/baldursgate3/index/info.js +40 -0
  169. package/dist/surfaces/baldursgate3/index/parsers/loca.js +41 -0
  170. package/dist/surfaces/baldursgate3/index/parsers/lsx.js +137 -0
  171. package/dist/surfaces/baldursgate3/index/parsers/stats.js +45 -0
  172. package/dist/surfaces/baldursgate3/index/parsers/treasuretable.js +57 -0
  173. package/dist/surfaces/baldursgate3/index/parsers/xmlutil.js +142 -0
  174. package/dist/surfaces/baldursgate3/index/queries.js +327 -0
  175. package/dist/surfaces/baldursgate3/index/schema.js +62 -0
  176. package/dist/surfaces/baldursgate3/index.js +3 -0
  177. package/dist/surfaces/baldursgate3/logs.js +278 -0
  178. package/dist/surfaces/baldursgate3/modsettings.js +115 -0
  179. package/dist/surfaces/baldursgate3/pak.js +153 -0
  180. package/dist/surfaces/baldursgate3/settings.js +49 -0
  181. package/dist/surfaces/baldursgate3/surface.js +232 -0
  182. package/dist/surfaces/baldursgate3/validators/bridge.js +7 -0
  183. package/dist/surfaces/baldursgate3/validators/files.js +476 -0
  184. package/dist/surfaces/baldursgate3/validators/items.js +1001 -0
  185. package/dist/surfaces/baldursgate3/validators/progression.js +734 -0
  186. package/dist/surfaces/baldursgate3/validators/stats.js +1076 -0
  187. package/dist/surfaces/baldursgate3/validators/story.js +790 -0
  188. package/dist/surfaces/baldursgate3/validators/templates.js +7 -0
  189. package/dist/surfaces/cyberpunk2077/compat.js +223 -0
  190. package/dist/surfaces/cyberpunk2077/index/build.js +231 -0
  191. package/dist/surfaces/cyberpunk2077/index/index.js +17 -0
  192. package/dist/surfaces/cyberpunk2077/index/info.js +51 -0
  193. package/dist/surfaces/cyberpunk2077/index/model.js +52 -0
  194. package/dist/surfaces/cyberpunk2077/index/parsers/tweak.js +483 -0
  195. package/dist/surfaces/cyberpunk2077/index/parsers/tweakxl-yaml.js +183 -0
  196. package/dist/surfaces/cyberpunk2077/index/queries.js +504 -0
  197. package/dist/surfaces/cyberpunk2077/index/resource.js +135 -0
  198. package/dist/surfaces/cyberpunk2077/index/schema.js +90 -0
  199. package/dist/surfaces/cyberpunk2077/index.js +3 -0
  200. package/dist/surfaces/cyberpunk2077/logs.js +742 -0
  201. package/dist/surfaces/cyberpunk2077/paths.js +12 -0
  202. package/dist/surfaces/cyberpunk2077/surface.js +218 -0
  203. package/dist/surfaces/cyberpunk2077/validators/bridge.js +7 -0
  204. package/dist/surfaces/cyberpunk2077/validators/cr2w.js +349 -0
  205. package/dist/surfaces/cyberpunk2077/validators/garments.js +1181 -0
  206. package/dist/surfaces/cyberpunk2077/validators/mesh.js +338 -0
  207. package/dist/surfaces/cyberpunk2077/validators/modsettings.js +120 -0
  208. package/dist/surfaces/cyberpunk2077/validators/packaging.js +463 -0
  209. package/dist/surfaces/cyberpunk2077/validators/red4ext.js +318 -0
  210. package/dist/surfaces/cyberpunk2077/validators/redscript.js +193 -0
  211. package/dist/surfaces/cyberpunk2077/validators/templates.js +7 -0
  212. package/dist/surfaces/cyberpunk2077/validators/tweaks.js +768 -0
  213. package/dist/surfaces/cyberpunk2077/validators/vehicles.js +531 -0
  214. package/dist/surfaces/cyberpunk2077/validators/xl.js +308 -0
  215. package/dist/surfaces/eldenring/binders.js +111 -0
  216. package/dist/surfaces/eldenring/compat.js +166 -0
  217. package/dist/surfaces/eldenring/dcx.js +49 -0
  218. package/dist/surfaces/eldenring/index.js +13 -0
  219. package/dist/surfaces/eldenring/loaders.js +132 -0
  220. package/dist/surfaces/eldenring/logs.js +67 -0
  221. package/dist/surfaces/eldenring/paramdef.js +256 -0
  222. package/dist/surfaces/eldenring/params.js +129 -0
  223. package/dist/surfaces/eldenring/surface.js +121 -0
  224. package/dist/surfaces/eldenring/tools.js +52 -0
  225. package/dist/surfaces/eldenring/validators/binders.js +193 -0
  226. package/dist/surfaces/eldenring/validators/packages.js +159 -0
  227. package/dist/surfaces/eldenring/validators/params.js +334 -0
  228. package/dist/surfaces/eldenring/validators/profiles.js +287 -0
  229. package/dist/surfaces/index.js +34 -0
  230. package/dist/surfaces/nivalisnights/compat.js +229 -0
  231. package/dist/surfaces/nivalisnights/index/build.js +310 -0
  232. package/dist/surfaces/nivalisnights/index/index.js +5 -0
  233. package/dist/surfaces/nivalisnights/index/queries.js +231 -0
  234. package/dist/surfaces/nivalisnights/index.js +4 -0
  235. package/dist/surfaces/nivalisnights/logs.js +473 -0
  236. package/dist/surfaces/nivalisnights/surface.js +195 -0
  237. package/dist/surfaces/skyrimse/archives.js +229 -0
  238. package/dist/surfaces/skyrimse/compat.js +163 -0
  239. package/dist/surfaces/skyrimse/index.js +12 -0
  240. package/dist/surfaces/skyrimse/loadorder.js +174 -0
  241. package/dist/surfaces/skyrimse/logs.js +241 -0
  242. package/dist/surfaces/skyrimse/plugins.js +149 -0
  243. package/dist/surfaces/skyrimse/records.js +94 -0
  244. package/dist/surfaces/skyrimse/surface.js +240 -0
  245. package/dist/surfaces/skyrimse/validators/archive-records.js +165 -0
  246. package/dist/surfaces/skyrimse/validators/archives.js +110 -0
  247. package/dist/surfaces/skyrimse/validators/plugins.js +374 -0
  248. package/dist/surfaces/skyrimse/validators/records.js +117 -0
  249. package/dist/surfaces/stardewvalley/compat.js +190 -0
  250. package/dist/surfaces/stardewvalley/config.js +42 -0
  251. package/dist/surfaces/stardewvalley/contentpatcher.js +203 -0
  252. package/dist/surfaces/stardewvalley/index/index.js +229 -0
  253. package/dist/surfaces/stardewvalley/index/wiki.js +190 -0
  254. package/dist/surfaces/stardewvalley/index.js +12 -0
  255. package/dist/surfaces/stardewvalley/logs.js +307 -0
  256. package/dist/surfaces/stardewvalley/mods.js +182 -0
  257. package/dist/surfaces/stardewvalley/surface.js +244 -0
  258. package/dist/surfaces/stardewvalley/validators/content.js +321 -0
  259. package/dist/surfaces/stardewvalley/validators/fields.js +147 -0
  260. package/dist/surfaces/stardewvalley/validators/loadorder.js +69 -0
  261. package/dist/surfaces/stardewvalley/validators/manifest.js +221 -0
  262. package/dist/surfaces/subnautica2/compat.js +138 -0
  263. package/dist/surfaces/subnautica2/index.js +5 -0
  264. package/dist/surfaces/subnautica2/logs.js +129 -0
  265. package/dist/surfaces/subnautica2/paks.js +173 -0
  266. package/dist/surfaces/subnautica2/surface.js +151 -0
  267. package/dist/surfaces/subnautica2/validators/packaging.js +298 -0
  268. package/dist/surfaces/valheim/compat.js +171 -0
  269. package/dist/surfaces/valheim/index/index.js +301 -0
  270. package/dist/surfaces/valheim/index/tables.js +103 -0
  271. package/dist/surfaces/valheim/index.js +11 -0
  272. package/dist/surfaces/valheim/logs.js +197 -0
  273. package/dist/surfaces/valheim/packaging.js +131 -0
  274. package/dist/surfaces/valheim/plugins.js +270 -0
  275. package/dist/surfaces/valheim/references.js +121 -0
  276. package/dist/surfaces/valheim/surface.js +223 -0
  277. package/dist/surfaces/valheim/validators/packaging.js +218 -0
  278. package/dist/surfaces/valheim/validators/plugins.js +287 -0
  279. package/dist/surfaces/valheim/validators/references.js +169 -0
  280. package/knowledge/baldursgate3/animations.gr2.yaml +166 -0
  281. package/knowledge/baldursgate3/audio.voice.yaml +182 -0
  282. package/knowledge/baldursgate3/audio.wwise.yaml +104 -0
  283. package/knowledge/baldursgate3/charactercreation.heads-hair.yaml +193 -0
  284. package/knowledge/baldursgate3/communitylibrary.shared-content.yaml +129 -0
  285. package/knowledge/baldursgate3/compatibilityframework.api.yaml +176 -0
  286. package/knowledge/baldursgate3/crash.causes.yaml +90 -0
  287. package/knowledge/baldursgate3/dialogue.dialogbank.yaml +120 -0
  288. package/knowledge/baldursgate3/dialogue.files.yaml +236 -0
  289. package/knowledge/baldursgate3/dialogue.osiris-goals.yaml +386 -0
  290. package/knowledge/baldursgate3/dialogue.yaml +122 -0
  291. package/knowledge/baldursgate3/feats.classes.yaml +164 -0
  292. package/knowledge/baldursgate3/items.cloth-physics.yaml +167 -0
  293. package/knowledge/baldursgate3/items.roottemplates.yaml +320 -0
  294. package/knowledge/baldursgate3/items.visualbank.yaml +628 -0
  295. package/knowledge/baldursgate3/journal.quests.yaml +214 -0
  296. package/knowledge/baldursgate3/loadorder.modsettings.yaml +128 -0
  297. package/knowledge/baldursgate3/localization.handles.yaml +92 -0
  298. package/knowledge/baldursgate3/misc.encoding-and-practice.yaml +111 -0
  299. package/knowledge/baldursgate3/origins.companions.yaml +144 -0
  300. package/knowledge/baldursgate3/osiris.signatures.yaml +211 -0
  301. package/knowledge/baldursgate3/packaging.meta.yaml +155 -0
  302. package/knowledge/baldursgate3/packaging.paks.yaml +79 -0
  303. package/knowledge/baldursgate3/process.launch.yaml +34 -0
  304. package/knowledge/baldursgate3/progressions.yaml +92 -0
  305. package/knowledge/baldursgate3/publishing.modio-nexus.yaml +170 -0
  306. package/knowledge/baldursgate3/publishing.toolkit-modio.yaml +135 -0
  307. package/knowledge/baldursgate3/races.progression.yaml +228 -0
  308. package/knowledge/baldursgate3/scriptextender.console.yaml +257 -0
  309. package/knowledge/baldursgate3/scriptextender.yaml +252 -0
  310. package/knowledge/baldursgate3/stats.boosts.yaml +293 -0
  311. package/knowledge/baldursgate3/stats.equipment-kits.yaml +69 -0
  312. package/knowledge/baldursgate3/stats.interrupts.yaml +45 -0
  313. package/knowledge/baldursgate3/stats.itemcombos.yaml +65 -0
  314. package/knowledge/baldursgate3/stats.spells.yaml +293 -0
  315. package/knowledge/baldursgate3/stats.weapons.yaml +210 -0
  316. package/knowledge/baldursgate3/toolchain.divine.yaml +179 -0
  317. package/knowledge/baldursgate3/toolchain.lslib-formats.yaml +242 -0
  318. package/knowledge/baldursgate3/toolkit.levels.yaml +177 -0
  319. package/knowledge/baldursgate3/ui.icons-atlas.yaml +78 -0
  320. package/knowledge/baldursgate3/ui.icons.yaml +412 -0
  321. package/knowledge/baldursgate3/ui.mcm.yaml +161 -0
  322. package/knowledge/baldursgate3/vfx.materials.yaml +174 -0
  323. package/knowledge/baldursgate3/visuals.characterfix.yaml +73 -0
  324. package/knowledge/cyberpunk2077/animations.anims.yaml +118 -0
  325. package/knowledge/cyberpunk2077/anims.archivexl.yaml +163 -0
  326. package/knowledge/cyberpunk2077/anims.authoring.yaml +579 -0
  327. package/knowledge/cyberpunk2077/anims.encoder.yaml +156 -0
  328. package/knowledge/cyberpunk2077/anims.graph.yaml +629 -0
  329. package/knowledge/cyberpunk2077/anims.method.yaml +360 -0
  330. package/knowledge/cyberpunk2077/anims.pipeline.yaml +352 -0
  331. package/knowledge/cyberpunk2077/anims.roundtrip.yaml +222 -0
  332. package/knowledge/cyberpunk2077/anims.sets.yaml +176 -0
  333. package/knowledge/cyberpunk2077/archivexl.bodytypes.yaml +149 -0
  334. package/knowledge/cyberpunk2077/archivexl.dynamic-appearances.yaml +218 -0
  335. package/knowledge/cyberpunk2077/archivexl.manifest.yaml +214 -0
  336. package/knowledge/cyberpunk2077/audio.events.yaml +168 -0
  337. package/knowledge/cyberpunk2077/audio.sounds.yaml +164 -0
  338. package/knowledge/cyberpunk2077/audio.voicesets.yaml +146 -0
  339. package/knowledge/cyberpunk2077/cet.sandbox.yaml +219 -0
  340. package/knowledge/cyberpunk2077/clothing.garments.yaml +283 -0
  341. package/knowledge/cyberpunk2077/clothing.refits.yaml +215 -0
  342. package/knowledge/cyberpunk2077/codeware.overview.yaml +111 -0
  343. package/knowledge/cyberpunk2077/codeware.systems.yaml +192 -0
  344. package/knowledge/cyberpunk2077/drones.combat.yaml +416 -0
  345. package/knowledge/cyberpunk2077/drones.control.yaml +552 -0
  346. package/knowledge/cyberpunk2077/entities.appearance.yaml +166 -0
  347. package/knowledge/cyberpunk2077/equipmentex.slots.yaml +151 -0
  348. package/knowledge/cyberpunk2077/fx.effects.yaml +246 -0
  349. package/knowledge/cyberpunk2077/fx.lights.yaml +171 -0
  350. package/knowledge/cyberpunk2077/hair.modding.yaml +145 -0
  351. package/knowledge/cyberpunk2077/items.wiring.yaml +246 -0
  352. package/knowledge/cyberpunk2077/loadorder.archives.yaml +71 -0
  353. package/knowledge/cyberpunk2077/mesh.blender.yaml +209 -0
  354. package/knowledge/cyberpunk2077/nativedb.dump.yaml +98 -0
  355. package/knowledge/cyberpunk2077/npc.appearance.yaml +275 -0
  356. package/knowledge/cyberpunk2077/npc.behaviour.yaml +128 -0
  357. package/knowledge/cyberpunk2077/npc.locomotion.yaml +490 -0
  358. package/knowledge/cyberpunk2077/packaging.deploy.yaml +175 -0
  359. package/knowledge/cyberpunk2077/packaging.variants.yaml +176 -0
  360. package/knowledge/cyberpunk2077/player.control.yaml +918 -0
  361. package/knowledge/cyberpunk2077/process.assetbuild.yaml +154 -0
  362. package/knowledge/cyberpunk2077/process.lessons.yaml +276 -0
  363. package/knowledge/cyberpunk2077/quests.minor.yaml +46 -0
  364. package/knowledge/cyberpunk2077/quests.scenes.yaml +282 -0
  365. package/knowledge/cyberpunk2077/quickhacks.tiers.yaml +41 -0
  366. package/knowledge/cyberpunk2077/red4ext.api.yaml +645 -0
  367. package/knowledge/cyberpunk2077/red4ext.plugins.yaml +124 -0
  368. package/knowledge/cyberpunk2077/redhottools.hotreload.yaml +245 -0
  369. package/knowledge/cyberpunk2077/redscript.compile-log.yaml +76 -0
  370. package/knowledge/cyberpunk2077/redscript.modules.yaml +118 -0
  371. package/knowledge/cyberpunk2077/toolchain.wolvenkit.yaml +163 -0
  372. package/knowledge/cyberpunk2077/tweakdb.loot-recipes.yaml +184 -0
  373. package/knowledge/cyberpunk2077/tweakdb.melee.yaml +352 -0
  374. package/knowledge/cyberpunk2077/tweakdb.weapons.yaml +325 -0
  375. package/knowledge/cyberpunk2077/tweakxl.hotreload.yaml +151 -0
  376. package/knowledge/cyberpunk2077/tweakxl.yaml-syntax.yaml +208 -0
  377. package/knowledge/cyberpunk2077/ui.icons.yaml +259 -0
  378. package/knowledge/cyberpunk2077/ui.inkatlas.yaml +81 -0
  379. package/knowledge/cyberpunk2077/ui.modsettings.yaml +204 -0
  380. package/knowledge/cyberpunk2077/vehicles.control.yaml +475 -0
  381. package/knowledge/cyberpunk2077/vehicles.dashboard-ui.yaml +203 -0
  382. package/knowledge/cyberpunk2077/vehicles.entities.yaml +195 -0
  383. package/knowledge/cyberpunk2077/vehicles.wiring.yaml +137 -0
  384. package/knowledge/cyberpunk2077/wolvenkit.cli.yaml +167 -0
  385. package/knowledge/cyberpunk2077/workspot.system.yaml +55 -0
  386. package/knowledge/cyberpunk2077/world.interactions.yaml +41 -0
  387. package/knowledge/cyberpunk2077/world.loot-container.yaml +167 -0
  388. package/knowledge/cyberpunk2077/world.sectors.yaml +233 -0
  389. package/knowledge/eldenring/formats.binders.yaml +237 -0
  390. package/knowledge/eldenring/launcher.me3.yaml +230 -0
  391. package/knowledge/eldenring/launcher.modengine2.yaml +119 -0
  392. package/knowledge/eldenring/params.paramdef.yaml +149 -0
  393. package/knowledge/eldenring/params.regulation.yaml +142 -0
  394. package/knowledge/eldenring/saves.online.yaml +118 -0
  395. package/knowledge/eldenring/toolchain.cli.yaml +256 -0
  396. package/knowledge/nivalisnights/modding.runtime.yaml +157 -0
  397. package/knowledge/skyrimse/archives.bsa.yaml +212 -0
  398. package/knowledge/skyrimse/install.detection.yaml +41 -0
  399. package/knowledge/skyrimse/loadorder.files.yaml +242 -0
  400. package/knowledge/skyrimse/plugins.esl.yaml +189 -0
  401. package/knowledge/skyrimse/plugins.format.yaml +224 -0
  402. package/knowledge/skyrimse/skse.runtime.yaml +283 -0
  403. package/knowledge/skyrimse/toolchain.xedit-spriggit.yaml +336 -0
  404. package/knowledge/stardewvalley/contentpatcher.format.yaml +338 -0
  405. package/knowledge/stardewvalley/distribution.channels.yaml +236 -0
  406. package/knowledge/stardewvalley/game.versions.yaml +202 -0
  407. package/knowledge/stardewvalley/install.layout.yaml +277 -0
  408. package/knowledge/stardewvalley/smapi.loader.yaml +284 -0
  409. package/knowledge/stardewvalley/smapi.logs.yaml +329 -0
  410. package/knowledge/stardewvalley/smapi.manifest.yaml +293 -0
  411. package/knowledge/stardewvalley/toolchain.build.yaml +261 -0
  412. package/knowledge/stardewvalley/wiki.dataformat.yaml +130 -0
  413. package/knowledge/subnautica2/game.build.yaml +331 -0
  414. package/knowledge/subnautica2/modding.state.yaml +210 -0
  415. package/knowledge/subnautica2/ue5.containers.yaml +72 -0
  416. package/knowledge/subnautica2/ue5.paks.yaml +203 -0
  417. package/knowledge/subnautica2/ue5.tooling.yaml +175 -0
  418. package/knowledge/subnautica2/ue5.ue4ss.yaml +203 -0
  419. package/knowledge/valheim/bepinex.loader.yaml +247 -0
  420. package/knowledge/valheim/bepinex.plugins.yaml +251 -0
  421. package/knowledge/valheim/game.versions.yaml +321 -0
  422. package/knowledge/valheim/install.layout.yaml +216 -0
  423. package/knowledge/valheim/jotunn.library.yaml +334 -0
  424. package/knowledge/valheim/thunderstore.packaging.yaml +217 -0
  425. package/knowledge/valheim/toolchain.build.yaml +111 -0
  426. package/package.json +29 -0
  427. package/scaffolds/baldursgate3/new-class-injection.yaml +148 -0
  428. package/scaffolds/baldursgate3/new-item.yaml +264 -0
  429. package/scaffolds/baldursgate3/new-mod.yaml +174 -0
  430. package/scaffolds/baldursgate3/new-passive.yaml +100 -0
  431. package/scaffolds/baldursgate3/new-project.yaml +118 -0
  432. package/scaffolds/baldursgate3/new-quest-stub.yaml +159 -0
  433. package/scaffolds/baldursgate3/new-spell.yaml +102 -0
  434. package/scaffolds/baldursgate3/new-status.yaml +119 -0
  435. package/scaffolds/baldursgate3/sequences/subclass-kit.yaml +50 -0
  436. package/scaffolds/cyberpunk2077/edit-tweak.yaml +70 -0
  437. package/scaffolds/cyberpunk2077/mesh-export-preset.yaml +170 -0
  438. package/scaffolds/cyberpunk2077/new-entity-patch.yaml +255 -0
  439. package/scaffolds/cyberpunk2077/new-garment-refit.yaml +279 -0
  440. package/scaffolds/cyberpunk2077/new-item-chain.yaml +548 -0
  441. package/scaffolds/cyberpunk2077/new-localization.yaml +130 -0
  442. package/scaffolds/cyberpunk2077/new-mod-settings.yaml +133 -0
  443. package/scaffolds/cyberpunk2077/new-player-replacer.yaml +1003 -0
  444. package/scaffolds/cyberpunk2077/new-project.yaml +157 -0
  445. package/scaffolds/cyberpunk2077/new-sector-node.yaml +156 -0
  446. package/scaffolds/cyberpunk2077/new-tweak.yaml +121 -0
  447. package/scaffolds/cyberpunk2077/new-vehicle-livery.yaml +148 -0
  448. package/scaffolds/cyberpunk2077/new-workspot-entity.yaml +177 -0
  449. package/scaffolds/cyberpunk2077/sequences/iconic-weapon.yaml +72 -0
  450. package/scaffolds/cyberpunk2077/sequences/quickhack-takeover.yaml +213 -0
  451. package/scaffolds/stardewvalley/new-cp-patch.yaml +106 -0
  452. package/scaffolds/stardewvalley/new-csharp-mod.yaml +195 -0
  453. package/scaffolds/stardewvalley/new-project.yaml +184 -0
  454. package/scaffolds/stardewvalley/sequences/content-pack.yaml +31 -0
  455. package/scripts/mw-tool.mjs +184 -0
@@ -0,0 +1,182 @@
1
+ game: baldursgate3
2
+ topic: audio.voice
3
+ title: Voice-line filename conventions, replacement workflow, and Wwise limits
4
+ facts:
5
+ - id: bg3.audio.voice.wwise-free-tier-200-asset-cap
6
+ claim: '"The Free Trial version of Wwise allows you to create a project for non-commercial use only
7
+ and is limited to 200 media assets in the Wwise SoundBanks" — a hard ceiling on how many lines
8
+ one voice-replacement or new-voice-line mod can carry without a paid Wwise licence.'
9
+ status: community
10
+ source: wiki.bg3.community/en/Information/Sound/Summary
11
+ tags:
12
+ - audio
13
+ - wwise
14
+ - asset-cap
15
+ - licensing
16
+ - id: bg3.audio.voice.no-way-to-add-new-soundbanks-or-events
17
+ claim: 'There is no way to add new soundbanks or new audio events to BG3 — "The only option is to
18
+ replace existing sound files (.wem format) so that an event plays your replaced track in place
19
+ of the original." Both pages date-stamp the claim (Summary: "as of May 6, 2024";
20
+ Replace-Sound: "as of May 11th 2024").'
21
+ status: community
22
+ source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound;
23
+ wiki.bg3.community/en/Information/Sound/Summary
24
+ tags:
25
+ - audio
26
+ - wwise
27
+ - soundbank
28
+ - scope-limit
29
+ detail: "This is the authoring boundary around the verified read-side facts in audio.wwise.yaml
30
+ (bg3.audio.fnv-1-hash-resolution, bg3.audio.wem-extraction-and-decode): resolving an existing
31
+ event to its .wem and decoding it is solved there; minting a new event is not possible from
32
+ the mod side."
33
+ - id: bg3.audio.voice.audio-events-not-editable-as-data
34
+ claim: Wwise-authored audio events can be viewed as data in .lsf(x) files, but their actual playback
35
+ instructions (which files, durations, triggers) come from Wwise itself and cannot be edited
36
+ through normal data editing — inspecting the event data doesn't let a modder change what it
37
+ plays.
38
+ status: community
39
+ source: wiki.bg3.community/en/Information/Sound/Summary
40
+ tags:
41
+ - audio
42
+ - wwise
43
+ - events
44
+ - scope-limit
45
+ - id: bg3.audio.voice.replacement-wem-must-match-format-exactly
46
+ claim: A replacement .wem must be converted through Wwise's conversion settings to match the
47
+ original file's channel count, sample rate, and format exactly (identified beforehand with
48
+ vgmstream-cli -m on the original .wem); a format mismatch is the documented cause of the
49
+ replacement producing no sound in game at all.
50
+ status: community
51
+ source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Getting Metadata, §Converting to .wem
52
+ with Wwise ("If you end up with no sound in game for the event, the format is probably wrong")
53
+ tags:
54
+ - audio
55
+ - wem
56
+ - format
57
+ - silent-failure
58
+ - id: bg3.audio.voice.replacement-clip-truncated-to-original-length
59
+ claim: A replacement sound plays only up to the original clip's duration — inserting audio longer
60
+ than the original file it replaces wastes the extra runtime, since playback is cut off at the
61
+ original's length, not extended to the new file's length.
62
+ status: community
63
+ source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Editing Your Audio ("If the original
64
+ clip is 18 seconds and you insert a 2 minute clip, it will only play the first 18 seconds")
65
+ tags:
66
+ - audio
67
+ - wem
68
+ - duration
69
+ - gotcha
70
+ - id: bg3.audio.voice.wwise-output-filename-must-match-source-1to1
71
+ claim: "Wwise's conversion output adds extra characters to the converted .wem's filename: \"Wwise
72
+ added some junk to your filename, make sure to rename it. It needs to match 1-to-1 with the
73
+ source .wem file.\""
74
+ status: community
75
+ source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Converting to .wem with Wwise
76
+ tags:
77
+ - audio
78
+ - wem
79
+ - filename
80
+ - id: bg3.audio.voice.non-voice-sounds-vs-voice-lines-different-paths
81
+ claim: Replaced non-voice sounds (music, sound effects) go under Public/Shared/Assets/Sound/ in the
82
+ mod's own workspace, while story voice lines (location and quest remarks, dialogue) and
83
+ repeated point-and-click reaction lines are placed under
84
+ Data/Mods/Gustav/Localization/English/Soundbanks/ instead — the two categories are not
85
+ interchangeable paths.
86
+ status: community
87
+ source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Placing Your File, §Voice Lines
88
+ tags:
89
+ - audio
90
+ - voice
91
+ - file-path
92
+ - id: bg3.audio.voice.character-voice-lines-are-four-plus-file-types
93
+ claim: "A character voice line is assembled from several files: \"A character voicebank .lsf file, A
94
+ .wem audio file, A .GR2 animation file for the character's gestures during the line, A
95
+ .ffxanim file for lipsyncing. And .ffxactor and .ffxbones files for the character to use those
96
+ lipsyncing files.\" They \"are referenced within the DialogBinary files via a text handle,
97
+ which is also used to call to the captions in the localization files.\""
98
+ status: community
99
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines
100
+ tags:
101
+ - audio
102
+ - voice
103
+ - voicebank
104
+ - ffxanim
105
+ - structure
106
+ - id: bg3.audio.voice.voicebank-filename-is-character-uuid-no-hyphens
107
+ claim: A character's voicebank .lsf file is named after that character's Root/GlobalTemplate UUID
108
+ with all hyphens removed; the same (hyphenated) UUID also appears inside the file under
109
+ VoiceSpeakerMetaData, which is how you confirm you have the right voicebank for a character.
110
+ status: community
111
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines
112
+ tags:
113
+ - audio
114
+ - voicebank
115
+ - uuid
116
+ - naming-convention
117
+ - id: bg3.audio.voice.wem-filename-convention
118
+ claim: A new voice line's audio filename follows the pattern v<character voicebank ID>_<text
119
+ handle>.wem — the voicebank ID is the character UUID with hyphens stripped, and the handle
120
+ keeps its leading "h" — and the same v<id>_<handle> stem is reused with an "MC_" prefix for
121
+ the mocap .GR2 and an "FX_" prefix for the lipsync .ffxanim.
122
+ status: community
123
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines
124
+ tags:
125
+ - audio
126
+ - wem
127
+ - naming-convention
128
+ - ffxanim
129
+ detail: "Worked example: character UUID 1323c4b6-92f7-4fda-8bad-6a96b8ddbc73 (voicebank ID
130
+ 1323c4b692f74fda8bad6a96b8ddbc73) and text handle h580e6615c3364b05843d7575309ad942e568 give
131
+ v1323c4b692f74fda8bad6a96b8ddbc73_h580e6615c3364b05843d7575309ad942e568.wem, with mocap
132
+ MC_v1323c4b692f74fda8bad6a96b8ddbc73_h580e6615c3364b05843d7575309ad942e568.GR2 and lipsync
133
+ FX_v1323c4b692f74fda8bad6a96b8ddbc73_h580e6615c3364b05843d7575309ad942e568.ffxanim."
134
+ - id: bg3.audio.voice.ffxactor-ffxbones-unique-per-character
135
+ claim: .ffxactor and .ffxbones lipsync files are unique per character and a lipsync .ffxanim can
136
+ only be used by the character whose matching .ffxactor/.ffxbones pair is present in that
137
+ character's Localization/English/Animation/FaceFXActors folder; a custom character with no
138
+ such files can borrow another character's pair by renaming a duplicated copy to the custom
139
+ character's own UUID.
140
+ status: community
141
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines §A note about mocap and lipsync
142
+ tags:
143
+ - audio
144
+ - ffxactor
145
+ - ffxbones
146
+ - lipsync
147
+ detail: 'The pair must stay together: "Mixing and matching them will result in horrors beyond
148
+ imagination." Cloning is explicitly allowed — "you can clone them and use them for your own
149
+ characters, without affecting the original!"'
150
+ - id: bg3.audio.voice.dialog-priority-levels
151
+ claim: A VoiceTextMetaData entry's dialog priority level should be set to one of P1_StoryDialog
152
+ (cutscene/conversation dialog), P2_VoiceBark_AD (combat/overworld voicebarks),
153
+ P3_StoryDialog_AD (story-related overworld automatic dialog), or P4_RepeatingDialog_AD
154
+ (repeating/ambient overworld automatic dialog) matching the kind of line being added.
155
+ status: community
156
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines
157
+ tags:
158
+ - audio
159
+ - voicetextmetadata
160
+ - priority
161
+ - enum
162
+ - id: bg3.audio.voice.mocap-gr2-not-required-to-match-bodytype
163
+ claim: Any character's mocap .GR2 animation can be reused as the gesture animation for a different
164
+ character's voice line — it does not have to match the target character's body type — as long
165
+ as the filename follows the required naming pattern for that line.
166
+ status: community
167
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines §A note about mocap and lipsync
168
+ tags:
169
+ - audio
170
+ - gr2
171
+ - mocap
172
+ - reuse
173
+ - id: bg3.audio.voice.bg3-target-audio-level-around-minus-12db
174
+ claim: BG3's voice lines sit around -12 to -18db, noticeably quieter than the -6 to -9db typical of
175
+ other media's voice audio; a replacement/new voice line should be normalized to roughly -12db
176
+ and checked against an audio meter, not by ear, since speaker setups vary.
177
+ status: community
178
+ source: wiki.bg3.community/en/Tutorials/new-voice-lines
179
+ tags:
180
+ - audio
181
+ - volume
182
+ - normalization
@@ -0,0 +1,104 @@
1
+ game: baldursgate3
2
+ topic: audio.wwise
3
+ title: Wwise audio banks, sound event resolution, and FNV-1 hashing
4
+ facts:
5
+ - id: bg3.audio.sound-numbering-unnamed
6
+ claim: "BG3 sounds are Wwise. Nothing is named on disk — SharedSounds.pak is 105,402 files called
7
+ Public/Shared/Assets/Sound/<numeric-id>.wem. The names only exist as FNV-1 hashes inside the
8
+ banks. Resolution chain: stats field → event name → hash → bank lookup → wem id → decode."
9
+ status: verified
10
+ verified_on: 4.73.98.727 (Patch 8)
11
+ source: ModWright field verification
12
+ tags:
13
+ - audio
14
+ - wwise
15
+ - sound
16
+ - fnv-1
17
+ - banks
18
+ detail: This is why there is no "find the sound file" UI — the lookup is table-driven via hashing.
19
+ - id: bg3.audio.event-names-from-stats
20
+ claim: "Get event names from the stats: CastSound / TargetSound / PrepareSound / SoundLoop /
21
+ SoundStop carry readable Wwise event names, e.g., Spell_Cast_Damage_Fireball_L5."
22
+ status: verified
23
+ verified_on: 4.73.98.727 (Patch 8)
24
+ source: ModWright field verification
25
+ tags:
26
+ - audio
27
+ - wwise
28
+ - events
29
+ - stats
30
+ detail: These are the entry points for sound lookup. Not every event is declared (e.g., Fireball
31
+ declares CastSound but not the detonation or charge-up).
32
+ - id: bg3.audio.wwise-bnk-extraction
33
+ claim: Wwise banks are in Data/SharedSoundBanks.pak (43 MB, 133 .bnk files). Extract with Divine.exe
34
+ -a extract-package. Spells are in SPELLS.bnk; status loops in STATUS.bnk.
35
+ status: verified
36
+ verified_on: 4.73.98.727 (Patch 8)
37
+ source: ModWright field verification
38
+ tags:
39
+ - audio
40
+ - wwise
41
+ - banks
42
+ - divine
43
+ detail: The .bnk files are binary; they need a hash walker to resolve event names to wem IDs.
44
+ - id: bg3.audio.fnv-1-hash-resolution
45
+ claim: "Resolve event name to wem id: hash the name (FNV-1 32-bit, LOWERCASED, multiply-then-xor),
46
+ find the Event in the HIRC, and walk Event → Action (only actionType 0x04xx = Play) →
47
+ container → CAkSound → source wem ids. Tool: tools/wwise_bnk.py <bank1;bank2> <EventName...>."
48
+ status: verified
49
+ verified_on: 4.73.98.727 (Patch 8)
50
+ source: ModWright field verification
51
+ tags:
52
+ - audio
53
+ - wwise
54
+ - fnv-1
55
+ - hash
56
+ detail: "The name must be LOWERCASED before hashing. Most events resolve to 4 wems (random-container
57
+ variants). Container child lists are found heuristically (NodeBaseParams is version-dependent
58
+ and variable-length): scan the payload for a u32 count followed by count u32s that are all
59
+ known object ids in the bank."
60
+ - id: bg3.audio.wem-extraction-and-decode
61
+ claim: 'Pull the wem from SharedSounds.pak: Divine.exe -a extract-single-file -s SharedSounds.pak -f
62
+ "Public/Shared/Assets/Sound/<id>.wem" -d out.wem (~0.2 s each). Decode: vgmstream-cli -o
63
+ out.wav in.wem. The wems are Wwise Vorbis (plugin=0x00040001, RIFF fmt size 0x42). ffmpeg
64
+ cannot decode them, and neither can Audacity without a plugin.'
65
+ status: verified
66
+ verified_on: 4.73.98.727 (Patch 8)
67
+ source: ModWright field verification
68
+ tags:
69
+ - audio
70
+ - wwise
71
+ - vorbis
72
+ - vgmstream
73
+ - decode
74
+ detail: ~0.2 s per extraction even against the 10.8 GB pak. The wem files are proprietary Wwise
75
+ Vorbis, not standard Vorbis.
76
+ - id: bg3.audio.event-guessing-convention
77
+ claim: Not every event is declared in stats. For undeclared events, guess from the convention
78
+ Spell_<Cast|Prepare|Impact|Loop|Status>_<VerbalIntent>_<SpellName>_<L#> and probe the hash.
79
+ The script prints NOT FOUND with the id if the guess misses.
80
+ status: verified
81
+ verified_on: 4.73.98.727 (Patch 8)
82
+ source: ModWright field verification
83
+ tags:
84
+ - audio
85
+ - wwise
86
+ - events
87
+ - conventions
88
+ detail: "Example: Fireball declares CastSound but not the detonation
89
+ (Spell_Impact_Damage_Fireball_L5) or charge-up (Spell_Prepare_Damage_Fireball_L5) — these
90
+ exist in the bank but appear in no txt. The convention is a guessing heuristic: an individual
91
+ guessed event name is unproven until the hash probe finds it."
92
+ - id: bg3.audio.divine-silent-failure
93
+ claim: Divine.exe writes nothing if a path is malformed and still exits 0 — silent no-op, no stderr.
94
+ Build Windows paths with cygpath -m and forward slashes. In bash, "$D\$var" collapses to a
95
+ literal $var with the backslash eaten.
96
+ status: verified
97
+ verified_on: 4.73.98.727 (Patch 8)
98
+ source: ModWright field verification
99
+ tags:
100
+ - audio
101
+ - divine
102
+ - paths
103
+ - windows
104
+ detail: This cost an hour in the audio session. No output, no error, just a missing file.
@@ -0,0 +1,193 @@
1
+ game: baldursgate3
2
+ topic: charactercreation.heads-hair
3
+ title: Head/hair mesh import, CC slot registration, and the GLTF/Collada exporter split
4
+ facts:
5
+ - id: bg3.character-creation.heads-hair.gr2-extension-must-be-uppercase
6
+ claim: A hair/head mesh's SourceFile path in the _merged.lsf.lsx VisualBank entry must point at a
7
+ file named with an uppercase ".GR2" extension — a mesh saved as ".gr2" (lowercase) will not
8
+ load, and the path separators must be "/" (Windows Explorer's copy-path default of "\" must be
9
+ corrected).
10
+ status: community
11
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
12
+ tags:
13
+ - character-creation
14
+ - hair
15
+ - gr2
16
+ - case-sensitivity
17
+ - silent-failure
18
+ - id: bg3.character-creation.heads-hair.needsskeletonremap-toggles-autosnap
19
+ claim: "The VisualBank Resource attribute NeedsSkeletonRemap is what tells the game whether a hair
20
+ is autosnapping or not: True = autosnapping (the mesh reshapes to fit different body types),
21
+ False = non-autosnapping (fixed to one body type, requiring a separate mesh per body type
22
+ supported)."
23
+ status: community
24
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
25
+ tags:
26
+ - character-creation
27
+ - hair
28
+ - autosnapping
29
+ - needsskeletonremap
30
+ - id: bg3.character-creation.heads-hair.ccav-vs-ccsv-compatibility-tradeoff
31
+ claim: CharacterCreationAppearanceVisuals.lsx (CCAV) and CharacterCreationSharedVisuals.lsx (CCSV)
32
+ both register a new CC slot entry. "CCSV is a lot easier to set up, file-wise. However, it is
33
+ incompatible with other mods that edit the same files. Unless you plan on using Compatibility
34
+ Framework, we recommend sticking with CCAV for both types of hair."
35
+ status: community
36
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
37
+ tags:
38
+ - character-creation
39
+ - ccav
40
+ - ccsv
41
+ - compatibility
42
+ - id: bg3.character-creation.heads-hair.ccav-ccsv-must-stay-lsx
43
+ claim: CharacterCreationAppearanceVisuals and CharacterCreationSharedVisuals files must stay in .lsx
44
+ format, not .lsf or .lsf.lsx — converting them to .lsf (as the multitool does by default for
45
+ that naming pattern) makes the game unable to read them.
46
+ status: community
47
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
48
+ tags:
49
+ - character-creation
50
+ - ccav
51
+ - ccsv
52
+ - lsx
53
+ - silent-failure
54
+ - id: bg3.character-creation.heads-hair.autosnapping-can-use-either-ccav-or-ccsv
55
+ claim: An autosnapping hair/CC asset can register its slot through either
56
+ CharacterCreationAppearanceVisuals or CharacterCreationSharedVisuals; a non-autosnapping asset
57
+ can only use CharacterCreationAppearanceVisuals.
58
+ status: community
59
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
60
+ tags:
61
+ - character-creation
62
+ - ccav
63
+ - ccsv
64
+ - autosnapping
65
+ - id: bg3.character-creation.heads-hair.ccav-uuid-must-match-merged-id
66
+ claim: A CharacterCreationAppearanceVisual node's VisualResource attribute must equal the ID
67
+ attribute set on the corresponding VisualBank Resource in the asset's own _merged.lsf.lsx
68
+ file, or the CC slot entry won't resolve to any mesh.
69
+ status: community
70
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
71
+ tags:
72
+ - character-creation
73
+ - ccav
74
+ - uuid-linkage
75
+ - visualresource
76
+ - id: bg3.character-creation.heads-hair.invisible-after-selection-means-path-mismatch
77
+ claim: A hair that appears as a selectable CC slot but is invisible once selected almost always
78
+ indicates a mismatch between the _merged file's SourceFile/Template path and the mesh's actual
79
+ location on disk; a slot missing entirely instead points to the CCAV/CCSV registration itself.
80
+ status: community
81
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
82
+ tags:
83
+ - character-creation
84
+ - hair
85
+ - troubleshooting
86
+ - silent-failure
87
+ - id: bg3.character-creation.heads-hair.scalpmaterialid-known-bug
88
+ claim: Some hairs in the vanilla game files ship without a ScalpMaterialId to copy — "(as of
89
+ 24.11.23 some hairs in the game files don't have a scalp ID, larian is aware of this bug)" —
90
+ so a custom hair should reuse the base hair's ScalpMaterialId where one exists rather than
91
+ assume every vanilla hair has one.
92
+ status: community
93
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
94
+ tags:
95
+ - character-creation
96
+ - hair
97
+ - scalpmaterialid
98
+ - known-bug
99
+ detail: "Corrected from \"as of 24 November 2025\": the page's date stamp is 24.11.23, i.e. 24
100
+ November 2023."
101
+ - id: bg3.character-creation.heads-hair.hair-physics-needs-vanilla-skeletonresource
102
+ claim: Custom hair physics is only possible by borrowing a vanilla physics-enabled hair's
103
+ SkeletonResource UUID (set into the _merged.lsf.lsx SkeletonResource field) and weighting the
104
+ custom mesh to that armature — there is no way to author a new physics skeleton for hair.
105
+ status: community
106
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/Creating-Hair-Mesh-Blender
107
+ tags:
108
+ - character-creation
109
+ - hair
110
+ - physics
111
+ - skeletonresource
112
+ - id: bg3.character-creation.heads-hair.export-order-must-be-sequential
113
+ claim: "The exporter's per-mesh Export Order field must be set sequentially: \"For the first part of
114
+ your mesh set the export order to 1. Increase the export order number for every part you
115
+ have\" (with LOD Level and LOD Distance set to 0), because \"Blender will throw an error if
116
+ you don't have these in order.\""
117
+ status: community
118
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/Creating-Hair-Mesh-Blender
119
+ tags:
120
+ - character-creation
121
+ - export-order
122
+ - blender
123
+ - gr2
124
+ - id: bg3.character-creation.heads-hair.conform-required-for-multi-mesh-hair
125
+ claim: A hair mesh exported directly as .GR2 without conforming can look deformed or detached
126
+ in-game due to a skeleton mismatch; the fix is either using a hair's own "_Base" UUID as
127
+ SkeletonResource, or using LSLIB to conform an exported .dae to a vanilla .GR2 and copy its
128
+ skeleton — LSLIB's conform matches meshes by mesh DATA name (not the Blender object name), so
129
+ any mesh not sourced from that vanilla hair must have its mesh data name renamed to match one
130
+ already present in the vanilla file, or the conform export fails.
131
+ status: community
132
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/exporting-conforming
133
+ tags:
134
+ - character-creation
135
+ - hair
136
+ - gr2
137
+ - lslib
138
+ - conform
139
+ - id: bg3.character-creation.heads-hair.export-collada-requires-selected-only-and-dae-extension
140
+ claim: Exporting a hair mesh for LSLIB conforming must use File > Export > DOS2/BG3 Collada with the
141
+ extension explicitly changed to .dae and "Selected Only" chosen instead of "Visible Only,"
142
+ after applying all transforms (Ctrl+A > Apply > All Transforms) so the mesh doesn't fall
143
+ through the floor in-game due to leftover rotation.
144
+ status: community
145
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/exporting-conforming
146
+ tags:
147
+ - character-creation
148
+ - hair
149
+ - collada
150
+ - export-settings
151
+ - id: bg3.character-creation.heads-hair.body-shape-body-type-numeric-values
152
+ claim: A CharacterCreationAppearanceVisual's BodyShape attribute is 0 = Standard, 1 = Tall Muscular
153
+ (except Half-Orcs, which use Tall Muscular assets but must still be set to 0), and BodyType is
154
+ 0 = Masc, 1 = Fem.
155
+ status: community
156
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
157
+ tags:
158
+ - character-creation
159
+ - ccav
160
+ - bodyshape
161
+ - bodytype
162
+ - enum
163
+ - id: bg3.character-creation.heads-hair.filename-is-the-in-game-asset-name
164
+ claim: "The filename of a hair/head mesh (e.g. HAIR_HUM_F_Braids_Short_B) is what the asset is
165
+ called in the game files, and is what you search for when extracting it with the Multitool:
166
+ \"the filename is what the hair is actually called in the game files. You'll need this when
167
+ extracting the hair meshes using the Multitool.\""
168
+ status: community
169
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/Preparing-To-Mod
170
+ tags:
171
+ - character-creation
172
+ - hair
173
+ - naming
174
+ - multitool
175
+ - id: bg3.character-creation.heads-hair.gltf-and-collada-are-both-supported-import-paths
176
+ claim: "The same Blender exporter add-on offers two export routes and the tutorials pick different
177
+ ones by asset kind: a static hair/head mesh being conformed goes out through \"File > Export >
178
+ DOS2/BG3 Collada\" as .dae, while an animation is exported \"using the exporter addon (the
179
+ 'export via GLTF' option, not via Collada)\". Choose the route by whether the asset carries
180
+ animation, not by preference."
181
+ status: community
182
+ source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/exporting-conforming
183
+ (Collada/.dae route); wiki.bg3.community/en/Tutorials/Animations/CustomAnimationsBlender §How
184
+ to correctly bake and export your animation (GLTF route)
185
+ tags:
186
+ - character-creation
187
+ - gltf
188
+ - collada
189
+ - exporter
190
+ detail: "Neither the Creating-A-Head-Mod page nor getting-started-with-3d-modding states the
191
+ add-on's format capabilities, so this fact cites the two pages that actually demonstrate each
192
+ route. Duplicates nothing: it is the selection rule;
193
+ bg3.animations.gr2.export-via-gltf-not-collada-for-animations is the animation half."
@@ -0,0 +1,129 @@
1
+ game: baldursgate3
2
+ topic: communitylibrary.shared-content
3
+ title: BG3 Community Library — reusing shared content as a runtime dependency
4
+ facts:
5
+ - id: bg3.community-library.shared-content.reference-not-copy
6
+ claim: Using Community Library content does not require copying any of its files into a dependent
7
+ mod — a mod references a Community Library entry by its data ID (e.g. a spell or passive name)
8
+ from its own SpellLists.lsx/Progressions.lsx, and the actual asset stays owned by the
9
+ Community Library mod, which must be installed as a runtime dependency.
10
+ status: community
11
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
12
+ Using-Community-Library-Content.md ("You don't need to copy/paste any of the Community Library
13
+ content into your mod to make use of it. All you have to do is reference the ID of the piece
14
+ you want in the right spot."); dependency half from Readme.md §For Players
15
+ tags:
16
+ - community-library
17
+ - dependency
18
+ - reuse
19
+ detail: "This is the distinction that matters for provenance: a declared dependency, not a vendored
20
+ copy of the library's mesh/texture/script/data files."
21
+ - id: bg3.community-library.shared-content.cl-naming-prefix-convention
22
+ claim: Community Library content is namespaced with a "CL_" prefix on every internal Name (e.g.
23
+ CL_Target_WeaknessToFire, CL_STATUS_WEAKNESS_TO_FIRE, CL_Passive_Petpal), which is what a
24
+ dependent mod's Selectors/PassivesAdded strings must reference verbatim.
25
+ status: community
26
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library Included.md (all three names
27
+ appear in the included-content list)
28
+ tags:
29
+ - community-library
30
+ - naming-convention
31
+ - cl-prefix
32
+ - id: bg3.community-library.shared-content.add-spell-via-spelllist-and-addspells
33
+ claim: Pulling a Community Library spell into a mod's own race/class/subclass is done by (1) adding
34
+ a SpellList entry in Public/ModName/Lists/SpellLists.lsx whose Spells attribute names the CL_
35
+ spell, then (2) referencing that SpellList's UUID from a Progression's Selectors as
36
+ AddSpells(YOUR_SPELLLIST_UUID), then (3) putting that Progression's TableUUID into the target
37
+ Race/ClassDescription's ProgressionTableUUID field — three separate files must all agree.
38
+ status: community
39
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
40
+ Using-Community-Library-Content.md §Adding a spell or passive to a race or class via
41
+ progression
42
+ tags:
43
+ - community-library
44
+ - spelllists
45
+ - progressions
46
+ - uuid-linkage
47
+ - id: bg3.community-library.shared-content.add-passive-skips-spelllist-step
48
+ claim: Adding a Community Library passive (instead of a spell) skips the SpellLists.lsx step
49
+ entirely — the CL_ passive's name is placed directly into the target Progression's
50
+ PassivesAdded attribute.
51
+ status: community
52
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
53
+ Using-Community-Library-Content.md §Adding a spell or passive to a race or class via
54
+ progression
55
+ tags:
56
+ - community-library
57
+ - passivesadded
58
+ - progressions
59
+ - id: bg3.community-library.shared-content.using-clause-clones-and-overrides
60
+ claim: A mod can create a specialized version of a Community Library spell/passive/item/character by
61
+ making a new stats entry that "using"s the CL_ entry's name and then overriding only the
62
+ fields it wants to change — the new entry pulls in all of the CL_ entry's data first, so only
63
+ the differing fields need to be listed.
64
+ status: community
65
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
66
+ Using-Community-Library-Content.md §Using a library spell, passive, or other data item as a
67
+ base for a more mod-specialized version
68
+ tags:
69
+ - community-library
70
+ - using-clause
71
+ - stats-inheritance
72
+ - id: bg3.community-library.shared-content.compat-framework-split-out-since-2-0-4-1
73
+ claim: As of Community Library 2.0.4.1, the Compatibility Framework is no longer bundled inside the
74
+ Community Library — it was split out into its own project, though the Compatibility Framework
75
+ still relies on Lua functions defined within the Community Library at runtime.
76
+ status: community
77
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md ("As of 2.0.4.1, this
78
+ mod no longer includes the Compatibility Framework, which has been separated out into it's own
79
+ project. Compatibility Framework does rely on Lua functions defined within the Community
80
+ Library.")
81
+ tags:
82
+ - community-library
83
+ - compatibility-framework
84
+ - version-floor
85
+ - dependency
86
+ - id: bg3.community-library.shared-content.players-only-need-it-if-a-mod-requires-it
87
+ claim: Community Library is not something a player needs to install proactively — it's only required
88
+ when another installed mod declares it as a dependency; if none of a player's mods require it,
89
+ the README states they "don't need to install it."
90
+ status: community
91
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §For Players
92
+ tags:
93
+ - community-library
94
+ - player-facing
95
+ - dependency
96
+ - id: bg3.community-library.shared-content.attribution-credited-in-readme
97
+ claim: 'The Community Library README carries a "Credits for External Content Used" section that
98
+ credits third-party art individually by name — "Game-Icons.net for The following Icons,
99
+ granted under CC 3.0", then each icon listed (Alter Weapon, Alter Weapon: Enflame, ...).
100
+ Attribution for externally-sourced assets inside shared content is expected to be itemised,
101
+ not covered by a blanket licence note.'
102
+ status: community
103
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §Credits for External
104
+ Content Used
105
+ tags:
106
+ - community-library
107
+ - attribution
108
+ - licensing
109
+ - id: bg3.community-library.shared-content.contribution-goes-through-fork-and-pr
110
+ claim: "Contributing content to the Community Library follows a fork-then-pull-request workflow on
111
+ GitHub: fork the repo, add and test changes, then submit a PR for the team to review, accept,
112
+ or explain why it wasn't accepted."
113
+ status: community
114
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §Independent Contribution
115
+ tags:
116
+ - community-library
117
+ - contribution
118
+ - workflow
119
+ - id: bg3.community-library.shared-content.recommended-load-order-top
120
+ claim: The Community Library's own install instructions direct players to drag it to the top of the
121
+ mod list in BG3 Mod Manager's left pane — the opposite end from where the (now-separate)
122
+ Compatibility Framework is told to load.
123
+ status: community
124
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §Installation > BG3
125
+ Mod Manager, step 6 ("Drag CommunityLibrary to the top of the Left pane"); contrast with
126
+ bg3.compatibility-framework.api.load-order-bottom
127
+ tags:
128
+ - community-library
129
+ - load-order