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,176 @@
1
+ game: baldursgate3
2
+ topic: compatibilityframework.api
3
+ title: Compatibility Framework injection API (Selectors, Strings, Subclasses)
4
+ facts:
5
+ - id: bg3.compatibility-framework.api.purpose-inject-not-overwrite
6
+ claim: The Compatibility Framework's stated purpose is letting Script-Extender-enabled mods "insert
7
+ values into Progressions and Spell/Skill/PassiveLists at Runtime", so a mod "can inject their
8
+ mod's data into existing Progressions or Lists without overwriting data, allowing for total
9
+ compatibility." It was "Initially designed for Subclass Compatibility".
10
+ status: community
11
+ source: github.com/BG3-Community-Library-Team/BG3-Compatibility-Framework Readme.md (opening paragraph)
12
+ tags:
13
+ - compatibility-framework
14
+ - purpose
15
+ - overwrite
16
+ - progressions
17
+ detail: "Why this is the default scaffold shape rather than raw list edits is ModWright's own
18
+ conclusion, not the README's: ModWright research calls raw overwrites \"the single most common
19
+ cross-mod incompatibility in this category.\""
20
+ - id: bg3.compatibility-framework.api.load-order-bottom
21
+ claim: The Compatibility Framework should be loaded at the bottom of a mod list, per its own
22
+ installation instructions.
23
+ status: community
24
+ source: github.com/BG3-Community-Library-Team/BG3-Compatibility-Framework Readme.md §Installation >
25
+ Load Order ("Compatibility Framework should be loaded at the bottom of your mods list.")
26
+ tags:
27
+ - compatibility-framework
28
+ - load-order
29
+ - id: bg3.compatibility-framework.api.config-file-location
30
+ claim: "The Compatibility Framework reads a per-mod config from either
31
+ Mods/ModName/ScriptExtender/CompatibilityFrameworkConfig.yaml or
32
+ Mods/ModName/ScriptExtender/CompatibilityFrameworkConfig.json, as an alternative to calling
33
+ its Lua API directly; every entry starts with FileVersion: 1, and YAML is the recommended form
34
+ as of v2.8.0.0."
35
+ status: community
36
+ source: BG3-Compatibility-Framework wiki, _Class-Module.md ("You may do this with a
37
+ CompatibilityFrameworkConfig.json or CompatibilityFrameworkConfig.yaml file placed in your
38
+ Mods/ModName/ScriptExtender/ folder"), _Selector-API.md and _Boosts-and-Passives.md (both
39
+ headed "YAML Configuration (Recommended - v2.8.0.0)")
40
+ tags:
41
+ - compatibility-framework
42
+ - config-file
43
+ - scriptextender
44
+ detail: 'Confirmed against the repo itself:
45
+ CompatibilityFramework/Mods/SubclassCompatibilityFramework/
46
+ ScriptExtender/Lua/ConfigLayer/_ConfigLoader.lua builds its path from
47
+ "Mods/%s/ScriptExtender/CompatibilityFrameworkConfig." and tries both extensions.'
48
+ - id: bg3.compatibility-framework.api.selectors-target-progression-or-feat-by-uuid
49
+ claim: A Selectors config entry lives inside a Progressions or Feats list entry (identified by UUID
50
+ or, for multiple targets at once, UUIDs) and has required fields Action ("Insert" or "Remove")
51
+ and Function (one of SelectSpells, AddSpells, SelectSkills, SelectAbilities,
52
+ SelectAbilityBonus, SelectEquipment, SelectSkillsExpertise, or SelectPassives); Insert
53
+ additionally requires Params, Remove requires the target list's UUID instead.
54
+ status: community
55
+ source: BG3-Compatibility-Framework wiki, _Selector-API.md §Selector fields reference (Action /
56
+ Function / Params / UUID rows)
57
+ tags:
58
+ - compatibility-framework
59
+ - selectors
60
+ - config-schema
61
+ - id: bg3.compatibility-framework.api.target-uuid-must-not-point-at-mergedinto-data
62
+ claim: A Selectors/Strings/Subclasses config entry's target UUID or UUIDs must never point at data
63
+ carrying a MergedInto attribute — it should point at the data that MergedInto data merges into
64
+ instead, or the injection targets the wrong (superseded) entry.
65
+ status: community
66
+ source: 'BG3-Compatibility-Framework wiki, _Selector-API.md, _Boosts-and-Passives.md,
67
+ _Class-Module.md (all three: "The target UUID or UUIDs should never point to data that has a
68
+ MergedInto attribute. Instead, you should point them to the data that they merge into.")'
69
+ tags:
70
+ - compatibility-framework
71
+ - mergedinto
72
+ - gotcha
73
+ - id: bg3.compatibility-framework.api.replacepassives-read-as-selectpassives
74
+ claim: The game engine reads a ReplacePassives selector as SelectPassives internally; when using the
75
+ Compatibility Framework to manipulate what looks like a ReplacePassives selector, it may need
76
+ to be targeted as a SelectPassives selector instead.
77
+ status: community
78
+ source: 'BG3-Compatibility-Framework wiki, _Selector-API.md (opening note: "The game reads
79
+ ReplacePassives as SelectPassives - when manipulating a ReplacePassives selector, you may need
80
+ to make it a SelectPassives selector instead")'
81
+ tags:
82
+ - compatibility-framework
83
+ - replacepassives
84
+ - selectpassives
85
+ - gotcha
86
+ - id: bg3.compatibility-framework.api.modguid-makes-entry-conditional
87
+ claim: Adding a modGuid field to a Selectors/Strings config entry makes that specific insertion
88
+ conditional on another mod being loaded — the entry is skipped entirely if the named mod (by
89
+ its meta.lsx UUID) is not present.
90
+ status: community
91
+ source: BG3-Compatibility-Framework wiki, _Selector-API.md and _Boosts-and-Passives.md fields
92
+ references ("modGuid | No | UUID of a required mod; entry is skipped if that mod is not
93
+ loaded")
94
+ tags:
95
+ - compatibility-framework
96
+ - modguid
97
+ - conditional
98
+ - id: bg3.compatibility-framework.api.strings-type-covers-four-fields
99
+ claim: A Strings config entry (for inserting/removing values on a Progression or Feat) requires
100
+ Action ("Insert" or "Remove") and Type, where Type must be one of Boosts, PassivesAdded,
101
+ PassivesRemoved, or Requirements — the same YAML/JSON entry shape and the same underlying API
102
+ call handle all four Types.
103
+ status: community
104
+ source: 'BG3-Compatibility-Framework wiki, _Boosts-and-Passives.md §Fields reference (Type row:
105
+ "Boosts, PassivesAdded, PassivesRemoved, or Requirements") and §API ("Behind the scenes, these
106
+ all work in the same way, so the same API call can be used for all of them")'
107
+ tags:
108
+ - compatibility-framework
109
+ - strings
110
+ - boosts
111
+ - passivesadded
112
+ - requirements
113
+ - id: bg3.compatibility-framework.api.subclass-addition-fully-automatic-since-2-6-5-8
114
+ claim: As of Compatibility Framework 2.6.5.8, adding a subclass requires no explicit registration
115
+ call at all — any valid ClassDescription entry with a ParentGuid pointing at its parent
116
+ class's ClassDescription is picked up automatically.
117
+ status: community
118
+ source: BG3-Compatibility-Framework wiki, _Class-Module.md §Subclass Addition ("Adding subclasses is
119
+ now automatic as of 2.6.5.8, and requires no action on a mod author's part")
120
+ tags:
121
+ - compatibility-framework
122
+ - subclass
123
+ - version-floor
124
+ - automatic
125
+ - id: bg3.compatibility-framework.api.subclass-removal-requires-explicit-config-since-2-7-0-0
126
+ claim: "Removing a subclass from a Progression (added in Compatibility Framework 2.7.0.0) is not
127
+ automatic and must be done explicitly, either via a Progressions/Subclasses config entry
128
+ (Action: Remove, the subclass's ClassDescription UUID) or by calling the Api.RemoveSubClasses
129
+ Lua endpoint directly."
130
+ status: community
131
+ source: 'BG3-Compatibility-Framework wiki, _Class-Module.md §Subclass Removal ("To Remove Subclasses
132
+ from a Progression (Implemented in 2.7.0.0), you have two options: The Config Method or
133
+ directly calling the API")'
134
+ tags:
135
+ - compatibility-framework
136
+ - subclass
137
+ - removal
138
+ - version-floor
139
+ - id: bg3.compatibility-framework.api.removesubclasses-class-param-accepts-name-or-uuid
140
+ claim: Api.RemoveSubClasses's per-entry "class" field accepts either the lowercase name of the
141
+ parent class (one of barbarian, bard, cleric, druid, fighter, monk, paladin, ranger, rogue,
142
+ sorcerer, warlock, wizard) or the UUID of the Progression at which subclass options for that
143
+ class become available.
144
+ status: community
145
+ source: 'BG3-Compatibility-Framework wiki, _Class-Module.md §API > Api.RemoveSubClasses (the "class"
146
+ field: "The lower-case name of your classes Parent class" or "The UUID of the Progression at
147
+ which the subclass options for the parent class become available")'
148
+ tags:
149
+ - compatibility-framework
150
+ - api
151
+ - removesubclasses
152
+ - id: bg3.compatibility-framework.api.insert-remove-boost-passive-endpoints
153
+ claim: Api.InsertBoosts, Api.InsertPassives, and Api.InsertPassivesForRemoval all route to the same
154
+ underlying logic and take the same payload shape (modGuid, Target, FileType, Type, Strings);
155
+ the mirrored removal endpoints Api.RemoveBoosts, Api.RemovePassives, and
156
+ Api.RemovePassivesForRemoval work the same way in reverse.
157
+ status: community
158
+ source: BG3-Compatibility-Framework wiki, _Boosts-and-Passives.md §API > Adding Strings, > Removing
159
+ Strings
160
+ tags:
161
+ - compatibility-framework
162
+ - api
163
+ - insertboosts
164
+ - insertpassives
165
+ - id: bg3.compatibility-framework.api.yaml-anchors-share-selector-definitions
166
+ claim: The YAML config format supports standard YAML anchors and aliases to reuse one
167
+ Selectors/Strings definition across multiple Progression/Feat targets; each alias produces an
168
+ independent deep copy, so editing one applied instance does not affect the others.
169
+ status: community
170
+ source: 'BG3-Compatibility-Framework wiki, _Selector-API.md §YAML Anchors & Aliases and
171
+ _Boosts-and-Passives.md §YAML Anchors & Aliases (both: "Each alias produces an independent
172
+ deep copy.")'
173
+ tags:
174
+ - compatibility-framework
175
+ - yaml
176
+ - anchors
@@ -0,0 +1,90 @@
1
+ game: baldursgate3
2
+ topic: crash.causes
3
+ title: Crash and freeze causes found in production
4
+ facts:
5
+ - id: bg3.crash.islinkedspellcontainer-unlinked
6
+ claim: The SpellFlags value IsLinkedSpellContainer without any linked spells is an instant
7
+ null-deref crash. Use vanilla-proven flags (e.g. SpellFlags
8
+ "HasSomaticComponent;HasVerbalComponent") instead.
9
+ status: verified
10
+ source: ModWright field verification
11
+ tags:
12
+ - crash
13
+ - spells
14
+ - flags
15
+ - spellflags
16
+ detail: "Symptom on an earlier mod: CTD in the SYS_CC_I character-creation level when the origin was
17
+ selected; bin\\network.*.log showed that no level transition to TUT_Avernus_C ever started.
18
+ Fixed by swapping the flag for HasSomaticComponent;HasVerbalComponent. A later mod's dev-loop
19
+ notes carry it as rule 3 of the five rules that caused CTDs on that earlier mod."
20
+ - id: bg3.crash.spell-missing-spellanimation
21
+ claim: 'Never author a spell without a SpellAnimation, or a `using` parent that has one. Without it
22
+ the CastTextEvent "Cast" keyframe never fires: the spell "casts" but never resolves (eyes
23
+ glow, nothing happens).'
24
+ status: verified
25
+ verified_on: 4.73.98.727 (Patch 8)
26
+ source: ModWright field verification
27
+ tags:
28
+ - crash
29
+ - spells
30
+ - spellanimation
31
+ - silent-failure
32
+ detail: 'No error is logged; the entry loads fine and only misbehaves in-engine. "This bit us hard."
33
+ Fix: give every spell an explicit SpellAnimation or a `using` parent that carries one.'
34
+ - id: bg3.crash.dangling-tag-guid
35
+ claim: A custom tag GUID used in Origins.lsx ReallyTags must have a Tags.lsx definition; an
36
+ undefined tag UUID is believed to null-deref in tag lookup when the character is selected. Use
37
+ vanilla tags or define your own.
38
+ status: unverified
39
+ source: ModWright research
40
+ tags:
41
+ - crash
42
+ - tags
43
+ - origins
44
+ - references
45
+ detail: The source lists this among "likely crash causes ... not yet tested" — it was fixed at the
46
+ end of the final session on an earlier mod and the fix was never run. The dev-loop notes of a
47
+ later class mod restate it as one of the five rules that caused CTDs on that earlier mod, but
48
+ no passage records an isolated in-engine test.
49
+ - id: bg3.crash.dangling-spelllist-reference
50
+ claim: A SpellLists.lsx entry naming a spell that was removed from Spells.txt is a dangling
51
+ reference and is believed to cause a null lookup. SpellLists.lsx must stay in sync with
52
+ Spells.txt.
53
+ status: unverified
54
+ source: ModWright research
55
+ tags:
56
+ - crash
57
+ - spells
58
+ - spelllists
59
+ - references
60
+ detail: "Same status as the dangling tag GUID: fixed at the end of the final session on an earlier
61
+ mod, never tested. A later class mod's dev-loop notes restate it as a rule. A reference
62
+ checker (a script that cross-checks SpellLists.lsx against Spells.txt) catches it before
63
+ packing regardless."
64
+ - id: bg3.crash.arearadius-hp-budget-targeting
65
+ claim: AreaRadius / HP-budget targeting spells (e.g., Target_Sleep) FREEZE the game if reskinned to
66
+ single-target with a huge MaximumTotalTargetHP — the target-preview scan chokes.
67
+ status: verified
68
+ verified_on: 4.73.98.727 (Patch 8)
69
+ source: ModWright field verification
70
+ tags:
71
+ - crash
72
+ - spells
73
+ - targeting
74
+ - ui-freeze
75
+ detail: For a single-target no-save effect, base the spell on a clean single-target spell such as
76
+ Target_CrownOfMadness instead of reskinning an AreaRadius/HP-budget base.
77
+ - id: bg3.crash.xml-comments-loca-parse
78
+ claim: NEVER put XML comments (<!-- -->) in a Localization .xml — the loca parser CTDs the game
79
+ whenever the owning module is ACTIVE. Module inactive = no crash (the loca never parses).
80
+ status: verified
81
+ verified_on: 4.73.98.727 (Patch 8)
82
+ source: ModWright field verification
83
+ tags:
84
+ - crash
85
+ - localization
86
+ - xml
87
+ - comments
88
+ detail: 'Symptom timing varies with WHEN the module activates: pre-menu (module pre-enabled at boot)
89
+ or ~67% of save-load (module enabled via the save screen Mod Verification checkbox). The
90
+ "module inactive = no crash" behaviour is what makes this maddening to bisect.'
@@ -0,0 +1,120 @@
1
+ game: baldursgate3
2
+ topic: dialogue.dialogbank
3
+ title: Non-override dialogue editing via DialogBank and TimelineBank resource headers
4
+ facts:
5
+ - id: bg3.dialogue.dialogbank.isolated-lsx-header-for-dialogbank-edits
6
+ claim: To retarget a single Dialog Assets Resource Bank entry without an override mod, create a
7
+ standalone .lsx containing only that one edited resource, with the exact header `<region
8
+ id="DialogBank"><node id="DialogBank"><children>...</children></node></region>` inside a
9
+ `<save><version major="4" minor="0" revision="9" build="0"
10
+ lslib_meta="v1,bswap_guids,lsf_adjacency" />` wrapper — not the full vanilla file with every
11
+ other bank entry included.
12
+ status: community
13
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:159-172, §Creating Dialog Mods With
14
+ Compatibility In Mind (DialogBank header code block)
15
+ tags:
16
+ - dialogue
17
+ - dialogbank
18
+ - lsx
19
+ - header
20
+ - non-override
21
+ - id: bg3.dialogue.dialogbank.timelinebank-header-for-generateddialogtimelines-edits
22
+ claim: The equivalent isolated-.lsx technique for a GeneratedDialogTimelines entry uses a
23
+ `TimelineBank` region/node instead of `DialogBank`, with the same save/version wrapper
24
+ attributes — a distinct region id per bank type, not a shared one.
25
+ status: community
26
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:176-190, §Creating Dialog Mods With
27
+ Compatibility In Mind (TimelineBank header code block)
28
+ tags:
29
+ - dialogue
30
+ - timelinebank
31
+ - generateddialogtimelines
32
+ - lsx
33
+ - header
34
+ - id: bg3.dialogue.dialogbank.repoint-by-editing-sourcefile-path-only
35
+ claim: The recommended non-override technique is to leave a DialogBank/TimelineBank resource's other
36
+ fields untouched and only change its file-path attribute to point into the mod's own folder
37
+ instead of the original Gustav/GustavDev/Shared/SharedDev path, then move the actual edited
38
+ file to that new path — not to duplicate or rename the resource entry itself.
39
+ status: community
40
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:196, §Creating Dialog Mods With
41
+ Compatibility In Mind ("You'll then want to update the file path for these resources,
42
+ replacing the original Gustav/GustavDev/Shared/SharedDev folder in the file path with your mod
43
+ folder name."; the next sentence adds moving the edited files to that new path)
44
+ tags:
45
+ - dialogue
46
+ - dialogbank
47
+ - repoint
48
+ - non-override
49
+ related:
50
+ - id: bg3.dialogue.dialogbank-namespaced-pattern
51
+ detail: Generalizes the existing verified fact's mod-specific recipe (byte-for-byte copies of
52
+ vanilla Resource nodes with only SourceFile re-pointed) into the community tutorial's
53
+ stated general technique for any DialogBank/TimelineBank entry, independent of the
54
+ specific example.
55
+ - id: bg3.dialogue.dialogbank.only-include-resources-actually-being-edited
56
+ claim: A non-override DialogBank/TimelineBank/GeneratedDialogTimelines .lsx should contain only the
57
+ resource entries actually being changed, never a full copy of the vanilla bank — "you should
58
+ only include the entries for the dialog timelines you're editing in your mods," since these
59
+ vanilla files are described as "huge."
60
+ status: community
61
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:125-133, §Generated Dialog Timelines and
62
+ §Dialog Assets Resource Banks
63
+ tags:
64
+ - dialogue
65
+ - dialogbank
66
+ - generateddialogtimelines
67
+ - minimal-diff
68
+ - id: bg3.dialogue.dialogbank.dialogbank-sourcefile-repoints-to-lsj-path
69
+ claim: A DialogBank Resource node's file-path attribute must be repointed to a .lsj path
70
+ (Mods\<mod>\Story\ Dialogs\<rel>.lsj) even when the mod ships no .lsj file at all — the engine
71
+ follows that .lsj-shaped path and resolves through it to the actual DialogsBinary .lsf, which
72
+ is why a working DialogBank entry can reference a file that does not exist on disk in that
73
+ exact form.
74
+ status: community
75
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:143-145, §What Goes Into Dialog... "A
76
+ note" callout ("Even entirely new modded dialog files can be referenced without an .lsj file,
77
+ even when the file path is set to look for an .lsj file."; the same callout states the banks
78
+ refer to the .lsj paths and that the game resolves the corresponding DialogsBinary .lsf
79
+ through them)
80
+ tags:
81
+ - dialogue
82
+ - dialogbank
83
+ - lsj
84
+ - lsf
85
+ - resolution
86
+ related:
87
+ - id: bg3.dialogue.dialogbank-namespaced-pattern
88
+ detail: Explains the mechanism behind the existing fact's "SourceFile re-pointed to
89
+ Mods/<mod>/Story/Dialogs/<rel>.lsj" step — that .lsj path resolves to the accompanying
90
+ .lsf even with no .lsj physically present, which is why the namespaced pattern needs no
91
+ .lsj to ship.
92
+ - id: bg3.dialogue.dialogbank.timeline-and-scene-must-move-together
93
+ claim: When repointing a GeneratedDialogTimelines entry, the Dialog Timeline and its paired Dialog
94
+ Scene file must both be relocated into the new (mod-namespaced) file path together — "if
95
+ they're not in the same file path, the game will reference the vanilla files, instead of your
96
+ edited ones."
97
+ status: community
98
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:198, §Creating Dialog Mods With
99
+ Compatibility In Mind ("If they're not in the same file path, the game will reference the
100
+ vanilla files, instead of your edited ones."; the preceding sentence is the bolded instruction
101
+ to place them together)
102
+ tags:
103
+ - dialogue
104
+ - timeline
105
+ - dialog-scene
106
+ - silent-failure
107
+ - id: bg3.dialogue.dialogbank.nested-dialogue-eases-compat-over-timeline-edits
108
+ claim: Nested Dialog files (separate dialogue files linked from a parent DialogsBinary, e.g.
109
+ companion romance content) are explicitly recommended over editing a shared Dialog Timeline
110
+ for compatibility, because "editing the DialogsBinary files to link to nested dialogue is much
111
+ simpler, and will allow for much easier compatibility patching between mods" than merging two
112
+ mods' edits to the same Timeline file.
113
+ status: community
114
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:365-370, §How To Edit > "Linking Nested
115
+ Dialogue"
116
+ tags:
117
+ - dialogue
118
+ - nested-dialog
119
+ - compatibility
120
+ - timeline
@@ -0,0 +1,236 @@
1
+ game: baldursgate3
2
+ topic: dialogue.files
3
+ title: The five dialogue file types, their locations, and non-override editing headers
4
+ facts:
5
+ - id: bg3.dialogue.files.five-dialogue-specific-file-types
6
+ claim: "A BG3 scene is built from five distinct dialogue-specific file types: DialogsBinary files,
7
+ Dialog Timeline files, Dialog Scene files, GeneratedDialogTimelines files, and Dialog (Assets
8
+ Resource Bank) files. The tutorial calls the first three \"most likely what you'll be
9
+ editing\" and the last two \"what help the game reference the first three files.\""
10
+ status: community
11
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md §What Goes Into Dialog in Baldur's Gate 3?
12
+ tags:
13
+ - dialogue
14
+ - file-types
15
+ - overview
16
+ - id: bg3.dialogue.files.scene-lsf-not-lsx-is-the-real-file
17
+ claim: Extracting a Dialog Scene produces both a .lsf and a same-named .lsx; the .lsf is the one the
18
+ tutorial says to edit. Those .lsx files (and the Dialogs .lsj files alongside them) are
19
+ described as what Larian's engine uses to generate the DialogsBinary and Dialog Scene .lsf
20
+ files.
21
+ status: community
22
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:54-58, §What Goes Into Dialog... ("The
23
+ Dialog Scene files with the .lsf file extension are what you'll want to edit, NOT the .lsx
24
+ files")
25
+ tags:
26
+ - dialogue
27
+ - dialog-scene
28
+ - lsf
29
+ - lsx
30
+ - gotcha
31
+ detail: 'Checked against the source (2026-09-08): an earlier wording ended "and editing it has no
32
+ effect on the shipped scene". The same paragraph says the opposite for the .lsj half of that
33
+ pair — "the Dialogs .lsj files can be edited and included in your mod without an accompanying
34
+ DialogsBinary .lsf file, and create a working scene" — so the no-effect clause has been
35
+ removed. The page does not say what shipping an edited Scene .lsx alone does.'
36
+ - id: bg3.dialogue.files.timeline-and-dialogsbinary-paths
37
+ claim: Dialog Timeline files live under Data\Public\<Module>\Timeline\Generated (Gustav, GustavDev,
38
+ and sometimes Shared/SharedDev); DialogsBinary files live under
39
+ Data\Mods\<Module>\Story\DialogsBinary (Gustav, GustavDev), further split into subfolders by
40
+ game section (e.g. Act 3, Tutorial, Companion dialog).
41
+ status: community
42
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md §A Summary of Dialog Timeline Files, and
43
+ the DialogsBinary paragraph immediately after it
44
+ tags:
45
+ - dialogue
46
+ - file-paths
47
+ - timeline
48
+ - dialogsbinary
49
+ - id: bg3.dialogue.files.scene-dialogsbinary-timeline-share-filename
50
+ claim: For a given scene, the DialogsBinary, Dialog Timeline, and Dialog Scene files all share the
51
+ same base file name; the Dialog Scene file's name is that same base name with the literal word
52
+ "Scene" appended.
53
+ status: community
54
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md §Dialog Scene files ("will all have the
55
+ same file name, with the Dialogue Scene files just appending the word Scene to that same file
56
+ name")
57
+ tags:
58
+ - dialogue
59
+ - naming-convention
60
+ - dialog-scene
61
+ - id: bg3.dialogue.files.default-scene-inheritance-path
62
+ claim: A Dialog Scene file can inherit camera/lighting/character-presence settings from a base scene
63
+ file, most commonly the default one at Public\Shared\Timeline\Scenes\Default\, "often linked
64
+ at the bottom of the file."
65
+ status: community
66
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md §Dialog Scene files
67
+ tags:
68
+ - dialogue
69
+ - dialog-scene
70
+ - inheritance
71
+ - default-scene
72
+ - id: bg3.dialogue.files.resource-bank-still-points-at-lsj-even-for-lsf-only-mods
73
+ claim: "A Dialog Assets Resource Bank entry's file path always names the Dialogs .lsj file, never
74
+ the DialogsBinary .lsf directly — even when a mod ships only a new/modified .lsf and no .lsj
75
+ at all, the engine still resolves through that .lsj-shaped path to find the .lsf. Pointing a
76
+ Resource Bank entry at the .lsf path instead breaks the scene: \"the game won't be able to
77
+ play the scene.\""
78
+ status: community
79
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:143-145, §What Goes Into Dialog..., "A
80
+ note" callout ("If you refer to the DialogsBinary .lsf file instead in these resources, the
81
+ game won't be able to play the scene!"; the surrounding paragraph states the banks still name
82
+ the .lsj paths and that the game resolves the .lsf through them, even with no .lsj present)
83
+ tags:
84
+ - dialogue
85
+ - dialog-assets-resource-bank
86
+ - lsj
87
+ - lsf
88
+ - gotcha
89
+ related:
90
+ - id: bg3.dialogue.dialogbank.dialogbank-sourcefile-repoints-to-lsj-path
91
+ detail: Both facts independently describe the same lsj-path-even-without-an-lsj-file resolution
92
+ behavior; this one is the general statement from the dialogue-files tutorial, the other is
93
+ the specific DialogBank Resource-node header this general rule applies to.
94
+ - id: bg3.dialogue.files.override-mods-invisible-to-igmm-and-unordered
95
+ claim: A dialogue override mod (files placed at the exact vanilla path) shows with an orange
96
+ background in BG3 Mod Manager but never appears in Larian's in-game mod manager at all, and
97
+ cannot be reliably reordered relative to other override mods even inside BG3 Mod Manager —
98
+ "which override mod takes priority seems to be random."
99
+ status: community
100
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:205, §Creating Dialog Mods With
101
+ Compatibility In Mind ("Which override mod takes priority seems to be random, which means
102
+ override mods also can't be reliably patched for compatibility."; the two preceding sentences
103
+ state that override mods do not appear in the IGMM and cannot be reliably ordered in BGMM)
104
+ tags:
105
+ - dialogue
106
+ - override
107
+ - load-order
108
+ - compatibility
109
+ related:
110
+ - id: bg3.dialogue.override-packing-rule-was-wrong
111
+ detail: Complements the existing verified fact (that dialog overrides CAN be packed and don't CTD)
112
+ with a separate, still-open caveat from the community side about override load-order being
113
+ unpredictable — packing safely and ordering predictably are different problems.
114
+ - id: bg3.dialogue.files.compat-patch-needs-unique-mod-folder-name
115
+ claim: When patching two dialogue mods for compatibility by merging their edits into one shared
116
+ file, the patch's own mod folder name must be unique — "mods that use the same mod folder name
117
+ can cause your mod load order to reset."
118
+ status: community
119
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md §Creating Dialog Mod Compatibility
120
+ Patches ("The mod folder for the patch should be unique; mods that use the same mod folder
121
+ name can cause your mod load order to reset")
122
+ tags:
123
+ - dialogue
124
+ - compatibility-patch
125
+ - mod-folder
126
+ - load-order
127
+ - gotcha
128
+ - id: bg3.dialogue.files.eleven-dialogue-node-types
129
+ claim: "The tutorial documents 11 DialogsBinary node types: TagGreeting, TagAnswer, TagQuestion,
130
+ TagCinematic, ActiveRoll, PassiveRoll, RollResult, Alias, Jump, Nested Dialog, and RootNodes —
131
+ more than the subset already recorded (TagGreeting, TagQuestion, TagAnswer, ActiveRoll,
132
+ RollResult, Jump, Alias), adding TagCinematic, PassiveRoll, Nested Dialog, and RootNodes."
133
+ status: community
134
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:236-294, §Documentation (node type list
135
+ and per-type entries)
136
+ tags:
137
+ - dialogue
138
+ - node-graph
139
+ - node-types
140
+ detail: "The page hedges its own list: 11 types are \"all I've found at this point\", with an
141
+ explicit \"There might be something I've missed\" — treat it as the largest attested list, not
142
+ a closed set."
143
+ related:
144
+ - id: bg3.dialogue.node-structure
145
+ detail: Extends the existing verified fact's node-type list with four additional documented node
146
+ types not previously recorded (TagCinematic, PassiveRoll, Nested Dialog, RootNodes).
147
+ - id: bg3.dialogue.files.jump-jumptargetpoint-1-vs-2
148
+ claim: "A Jump node's jumptargetpoint attribute controls whether the jump lands ON the target line
149
+ or skips past it: jumptargetpoint 1 takes you to the target line itself, jumptargetpoint 2
150
+ skips over it — used specifically to bypass a PassiveRoll node \"which will keep retriggering
151
+ unless they're bypassed by a Jump node.\""
152
+ status: community
153
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md §Jump ("a jumptargetpoint of 1 will take
154
+ you to the line, while a jumptargetpoint of 2 will skip over it")
155
+ tags:
156
+ - dialogue
157
+ - jump
158
+ - jumptargetpoint
159
+ related:
160
+ - id: bg3.dialogue.node-structure
161
+ detail: "Confirms the existing verified fact's shorthand (\"jumptargetpoint: 2 = target's
162
+ children\") by spelling out both values (1 = land on the line, 2 = skip over it) and the
163
+ PassiveRoll use case that motivates using 2."
164
+ - id: bg3.dialogue.files.checkflags-usage-type-by-flag-kind
165
+ claim: "A dialogue flag's usage type corresponds to which kind of flag it is: Global flags are
166
+ \"often given usage type 5\"; HasMet-style flags (whether one character has met another) are
167
+ \"usually given usage type 6,\" corresponding to the \"Dialog\" flag type seen in
168
+ DialogsBinary files. Matching the usage type to an existing same-kind flag when authoring a
169
+ new custom flag keeps the convention consistent."
170
+ status: community
171
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:354-356, §How To Edit > "Making custom
172
+ game flags" (usage type 6 for HasMet flags, usage type 5 for Global flags, and the advice to
173
+ copy the usage type from an existing flag of the same type)
174
+ tags:
175
+ - dialogue
176
+ - checkflags
177
+ - flags
178
+ - usage-type
179
+ detail: The page hedges the meaning of the Dialog flag type itself ("I believe this flag type is
180
+ used to mark flags that are tested in dialog specifically... but I'm not entirely sure yet"),
181
+ so treat the type-to-usage mapping as a convention to copy, not a rule the engine is known to
182
+ enforce.
183
+ - id: bg3.dialogue.files.flag-scope-kinds-tag-global-local-object
184
+ claim: "checkflags/setflags distinguish four flag scopes: Tag flags test what tags a character has;
185
+ Global flags are true/false for the whole game, not per-character; Local flags \"seem to be\"
186
+ set on the player character specifically (the page's own hedge); Object flags test whether the
187
+ specific character being spoken to has a flag set — Object flags are \"distinct from tags;
188
+ flags are conditional, and are usually set during gameplay, as opposed to tags, which are used
189
+ to determine different qualities of a character.\""
190
+ status: community
191
+ source: bg3-community/Tutorials/dialogue-files-tutorial.md:344, §How To Edit > "Checking game flags"
192
+ tags:
193
+ - dialogue
194
+ - checkflags
195
+ - flag-scope
196
+ - tag
197
+ - global
198
+ - local
199
+ - object
200
+ - id: bg3.dialogue.files.scriptflags-lsx-must-stay-lsx
201
+ claim: Script flags (for testing OR/NOR combinations of conditions that plain checkflags AND/NOT
202
+ logic cannot express) are declared in Mods\<Mod>\Story\Dialogs\ScriptFlags\ScriptFlags.lsx;
203
+ this file "should be left an .lsx file, and should not be converted to .lsf in order to
204
+ function" — unlike DialogsBinary files, which must be .lsf.
205
+ status: community
206
+ source: bg3-community/Tutorials/Dialogue/script-flags.md §Making script flags ("This file should be
207
+ left an .lsx file, and should not be converted to .lsf in order to function")
208
+ tags:
209
+ - dialogue
210
+ - scriptflags
211
+ - lsx
212
+ - silent-failure
213
+ - id: bg3.dialogue.files.scriptflag-check-syntax-c-numbered-conditions
214
+ claim: A ScriptFlags entry lists one or more CONDITION lines, each implicitly numbered by position
215
+ (c1, c2, c3, ...), and a single CHECK line whose string combines them with & (AND), | (OR),
216
+ and parentheses for grouping — e.g. CHECK "(c1&c3)|(c2&c4)" evaluates true if either the
217
+ first-and-third conditions are both true, or the second-and-fourth are.
218
+ status: community
219
+ source: bg3-community/Tutorials/Dialogue/script-flags.md §Making script flags (worked example, CHECK
220
+ "(c1&c3)|(c2&c4)"), §Evaluating script flag conditions
221
+ tags:
222
+ - dialogue
223
+ - scriptflags
224
+ - syntax
225
+ - condition
226
+ - check
227
+ - id: bg3.dialogue.files.dialogvariables-lsx-path
228
+ claim: New dialogue variables (strings, numeric countdowns, etc. testable from script flags and
229
+ Osiris) are declared in Mods\<Mod>\Story\Dialogs\DialogVariables\DialogVariables.lsx,
230
+ referenced elsewhere by their own UUID the same way flags are.
231
+ status: community
232
+ source: bg3-community/Tutorials/Dialogue/script-flags.md §Dialog variables
233
+ tags:
234
+ - dialogue
235
+ - dialogvariables
236
+ - file-path