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,92 @@
1
+ game: baldursgate3
2
+ topic: progressions
3
+ title: Class progressions, retroactive grants, and progression descriptions
4
+ facts:
5
+ - id: bg3.progressions.structure
6
+ claim: Class/subclass tables are <node id="Progression"> rows keyed by Level + TableUUID, granting
7
+ via Selectors (AddSpells/SelectSpells/SelectSkills/SelectAbilityBonus) and
8
+ PassivesAdded/PassivesRemoved/Boosts. They live in Public/<Mod>/Progressions/Progressions.lsx.
9
+ status: verified
10
+ verified_on: 4.73.98.727 (Patch 8)
11
+ source: ModWright field verification
12
+ tags:
13
+ - progressions
14
+ - class
15
+ - structure
16
+ - lsx
17
+ detail: Progressions/ClassDescriptions .lsx are read at session load only — reload to the main menu
18
+ or a fresh save, never mid-session.
19
+ - id: bg3.progressions.not-retroactive
20
+ claim: Progression grants are NOT retroactive. Adding a feature/spell at level N does not appear on
21
+ a character already past N without a respec (Withers). Test level-gated additions on a fresh
22
+ character leveled up, or respec.
23
+ status: verified
24
+ verified_on: 4.73.98.727 (Patch 8)
25
+ source: ModWright field verification
26
+ tags:
27
+ - progressions
28
+ - retroactive
29
+ - respec
30
+ - testing
31
+ detail: A common source of "my feature isn't showing" on existing saves. Every testing checklist in
32
+ a class mod repeats it.
33
+ - id: bg3.progressions.class-anchor-description
34
+ claim: A mod class needs a class-name anchor ProgressionDescription (ExactMatch="<Class>",
35
+ Hidden=false, scoped to the class table) or the CC/level-up viewmodel never creates the class
36
+ feature GROUP and NOTHING boost-derived renders (not even proficiencies). Vanilla classes get
37
+ this implicitly; mod classes must ship it (Cantripster's pattern).
38
+ status: verified
39
+ verified_on: 4.73.98.727 (Patch 8)
40
+ source: ModWright field verification
41
+ tags:
42
+ - progressions
43
+ - class
44
+ - description
45
+ - features
46
+ detail: "Related, and separately confirmed in-game: the Class Features panel is passive-driven — it
47
+ renders passives flagged Highlighted;ForceShowInCC. Making the class's spellcasting passive
48
+ such a passive made the panel appear (confirmed by screenshot). The spell-SLOT card
49
+ specifically still did not render and remained an open question."
50
+ - id: bg3.progressions.subclass-anchor-description
51
+ claim: Subclass progression tables get their own class-name-anchor ProgressionDescription too
52
+ (ExactMatch = subclass Name, scoped to the subclass ProgressionTableId, Hidden=false) —
53
+ vanilla ships these (Champion, Assassin, Monk, …). Add one per mod subclass so the subclass
54
+ feature GROUP renders under its name at level-up.
55
+ status: verified
56
+ verified_on: 4.73.98.727 (Patch 8)
57
+ source: ModWright field verification
58
+ tags:
59
+ - progressions
60
+ - subclass
61
+ - description
62
+ detail: A class mod added one for each of its two subclasses (Hidden=false), mirroring the
63
+ base-class anchor fix. The mechanism is by analogy with the base-class anchor plus vanilla
64
+ precedent; the subclass render itself was gated with the rest of that phase.
65
+ - id: bg3.progressions.no-spell-replacement-idiom
66
+ claim: There is NO in-progression spell-REPLACEMENT / spell-removal idiom in stats. RemoveSpells has
67
+ zero occurrences across the entire vanilla stats + progressions extract, and no vanilla
68
+ subclass upgrades a granted spell to a stronger one in-progression. Ship the upgrade
69
+ additively (grant it, leave the original) or do the removal in Script Extender.
70
+ status: inferred
71
+ source: ModWright research
72
+ tags:
73
+ - progressions
74
+ - spells
75
+ - removal
76
+ - additive
77
+ detail: "A class mod shipped the additive form: its level-8 grant of Greater Invisibility does not
78
+ remove its level-2 spell; both remain 1/long-rest castable."
79
+ - id: bg3.progressions.addspells-no-levelup-card
80
+ claim: A direct AddSpells grant renders no level-up card. To make a granted spell show as a Class
81
+ Features card, pair it with a display-only Highlighted;ForceShowInCC passive (reuse the
82
+ spell's name/desc handles).
83
+ status: verified
84
+ verified_on: 4.73.98.727 (Patch 8)
85
+ source: ModWright field verification
86
+ tags:
87
+ - progressions
88
+ - spells
89
+ - addspells
90
+ - levelup-card
91
+ detail: "The passive grants nothing; it exists only to render the card. Related open item, tracked
92
+ as its own fact: bg3.spells.untilrest-levelup-card."
@@ -0,0 +1,170 @@
1
+ game: baldursgate3
2
+ topic: publishing.modio-nexus
3
+ title: Publishing to mod.io and Nexus — media specs and the SE-on-mod.io myth
4
+ facts:
5
+ - id: bg3.publishing.se-mod-io-myth
6
+ claim: "Near-universal community claim: \"the Toolkit doesn't support Script Extender, therefore SE
7
+ mods can't go on mod.io.\" It is wrong — it conflates authoring SE content in the Toolkit
8
+ (genuinely unsupported) with packing it."
9
+ status: contradicted
10
+ source: ModWright research
11
+ tags:
12
+ - publishing
13
+ - se
14
+ - toolkit
15
+ - mod.io
16
+ - community-myth
17
+ detail: "Kept so the myth is not repeated. Superseded by bg3.publishing.se-mods-can-ship-on-modio.
18
+ What IS real: no console curation (SE is PC-only) — don't tick PS5/Xbox in File Manager."
19
+ - id: bg3.publishing.se-mods-can-ship-on-modio
20
+ claim: SE mods CAN be published to mod.io. Toolkit Publish packs whatever sits in the project
21
+ folder, Mods/<Mod>/ScriptExtender/Lua/ included, and SE itself is a separately installed DLL,
22
+ so nothing prohibited ships in the pak.
23
+ status: verified
24
+ verified_on: 4.73.98.727 (Patch 8)
25
+ supersedes: bg3.publishing.se-mod-io-myth
26
+ source: ModWright field verification
27
+ tags:
28
+ - publishing
29
+ - se
30
+ - toolkit
31
+ - mod.io
32
+ detail: "Counter-example: Bliss (https://mod.io/g/baldursgate3/m/bliss), live since Sep 2024, 35k+
33
+ downloads, states on its own page that it requires SE. The MECHANISM was flagged as inferred
34
+ (\"verify with a throwaway Toolkit project published and left not-live before betting on
35
+ it\"); the practical proof here is a class mod's own Toolkit publish, whose pak was extracted
36
+ and diffed after upload."
37
+ - id: bg3.publishing.mod-io-name-limit
38
+ claim: mod.io mod name ≤ 50 chars — a HARD limit; publish fails over it.
39
+ status: community
40
+ source: https://docs.mod.io/restapiref/
41
+ tags:
42
+ - publishing
43
+ - mod.io
44
+ - name
45
+ detail: The API reference is "the only place these are actually written down"; not re-verified
46
+ against a failed publish here.
47
+ - id: bg3.publishing.mod-io-summary
48
+ claim: mod.io summary ≤ 250 chars, plain text.
49
+ status: community
50
+ source: https://docs.mod.io/restapiref/
51
+ tags:
52
+ - publishing
53
+ - mod.io
54
+ - summary
55
+ detail: One-liner pitch, no markup. Description, by contrast, supports and is encouraged to use HTML.
56
+ - id: bg3.publishing.mod-io-logo
57
+ claim: "mod.io logo (mandatory): jpg/jpeg/png, ≤ 8 MB, min 512x288, 16:9; author at 1920x1080.
58
+ mod.io derives 320x180 / 640x360 / 1280x720 thumbnails — a square source crops badly in every
59
+ tile."
60
+ status: community
61
+ source: https://docs.mod.io/restapiref/
62
+ tags:
63
+ - publishing
64
+ - mod.io
65
+ - logo
66
+ - image
67
+ detail: The 16:9 aspect is the load-bearing part; make a landscape image, not a square icon.
68
+ - id: bg3.publishing.mod-io-gallery
69
+ claim: "mod.io gallery: PNG recommended by Larian, 16:9 1920x1080, ≤ 8 MB each; bulk-uploadable as
70
+ images.zip."
71
+ status: community
72
+ source: https://docs.mod.io/restapiref/
73
+ tags:
74
+ - publishing
75
+ - mod.io
76
+ - gallery
77
+ - images
78
+ detail: "Open caveat: the API documents the gallery as accepting jpg/jpeg/png only, so an animated
79
+ gif may be rejected there even though Nexus takes it — check at upload."
80
+ - id: bg3.publishing.mod-io-video
81
+ claim: "mod.io video: YouTube links only, and web-only — they don't show in the in-game Mod Manager."
82
+ status: community
83
+ source: https://docs.mod.io/restapiref/
84
+ tags:
85
+ - publishing
86
+ - mod.io
87
+ - video
88
+ detail: Neither mod.io nor Nexus hosts a raw video file; both embed YouTube links.
89
+ - id: bg3.publishing.modmanager-tile-source
90
+ claim: The in-game mod-manager tile is fetched from mod.io, not read from the pak — a locally
91
+ sideloaded pak always shows the X placeholder no matter what art is inside it.
92
+ status: verified
93
+ verified_on: 4.73.98.727 (Patch 8)
94
+ source: ModWright field verification
95
+ tags:
96
+ - publishing
97
+ - mod-manager
98
+ - tile
99
+ - modio
100
+ detail: "Observed directly: sideloaded paks show the X placeholder; the tile comes from the mod.io
101
+ logo image."
102
+ - id: bg3.publishing.nexus-image-specs
103
+ claim: "Nexus/Vortex: the images area is built for 16:9 at 1920x1080, and the first image becomes
104
+ the tile that both Vortex and the site show (no separate Vortex asset exists). Per-image cap
105
+ is 8 MB, and gif — not webp — is the animated format Nexus accepts. Optional custom page
106
+ header is 1400x396. Videos get their own tab from YouTube URLs."
107
+ status: community
108
+ source: ModWright research
109
+ tags:
110
+ - publishing
111
+ - nexus
112
+ - vortex
113
+ - images
114
+ detail: "Factual correction: an earlier estimate put the per-image byte cap at \"~1.5–2 MB — confirm
115
+ at upload, it's the one number that moves\". 8 MB was then confirmed against the site, and the
116
+ capture script's -MaxMB default was changed to 8 to match. The 8 MB figure supersedes the
117
+ estimate."
118
+ - id: bg3.publishing.toolkit-publish-checklist
119
+ claim: "Before a Toolkit publish: (1) purge non-standard extras from the project (a binary .lsf twin
120
+ of the icon atlas .lsx, *.tmp.lsx next to _merged.lsf banks, duplicate loca XML, *.bak, and
121
+ Mods/<proj>/Globals|Levels vanilla-identical level overrides the Toolkit writes whenever you
122
+ select an object in the level editor); (2) sync hand edits into BOTH places the Toolkit reads
123
+ — Data\\Editor\\Mods\\<proj>\\Stats\\**\\*.stats and
124
+ Data\\Public\\<proj>\\Stats\\Generated\\...\\*.txt, plus the atlas .lsx; (3) remove the
125
+ Data\\Mods\\<proj> / Data\\Public\\<proj> junctions; (4) verify the output pak by Divine
126
+ list/extract."
127
+ status: verified
128
+ verified_on: 4.73.98.727 (Patch 8)
129
+ source: ModWright field verification
130
+ tags:
131
+ - publishing
132
+ - toolkit
133
+ - checklist
134
+ detail: "Example verification for one mod: expect 22 Story/DialogsBinary + the bank, 10 stats .txt,
135
+ 12 Lua, no Levels/Globals, no .tmp.lsx / .lsf atlas / .bak. Then download the file row from
136
+ the mod.io Files tab (each row has its own link — the main Download button may serve an OLD
137
+ file) and confirm the inner pak is byte-identical to the local one."
138
+ - id: bg3.publishing.toolkit-dialogbank-fix
139
+ claim: If the Toolkit drops the DialogBank, rerun the Toolkit variant with --with-lsj (which adds
140
+ Story/Dialogs/<rel>.lsj so the DialogResource has a real source file) and publish again.
141
+ status: unverified
142
+ source: ModWright research
143
+ tags:
144
+ - publishing
145
+ - toolkit
146
+ - dialogbank
147
+ detail: "A pre-written contingency, not an executed one: the 2026-09-04 publishes kept the bank
148
+ (extract+diff confirmed 22 resources), so the --with-lsj path was never exercised."
149
+ - id: bg3.publishing.modio-subscription-redownloads-a-retired-pak-after-a-launch
150
+ claim: "While a mod's author stays subscribed to their own mod on mod.io, renaming the mod.io copy
151
+ (<name>_<uuid-prefix>-<hash>.pak in the profile Mods folder) out of the way is undone by the
152
+ next game launch: the launcher downloads it again as a fresh file, and the module UUID is
153
+ duplicated once more. Until the subscription is dropped, retiring the copy is a per-session
154
+ chore before every deploy."
155
+ status: verified
156
+ verified_on: 4.73.98.727 (Patch 8)
157
+ source: ModWright field verification
158
+ tags:
159
+ - mod-io
160
+ - subscription
161
+ - duplicate-uuid
162
+ - deploy
163
+ - profile-mods
164
+ detail: "Unsubscribing is the obvious durable fix but was not tried, so it is a suggestion, not an
165
+ observed one. What the launch shows is only that the re-download happens while the
166
+ subscription stands, and that ModWright's duplicate-module-uuid guard catches it. Not every
167
+ launch, either: after the 2026-09-11 evening launches and a 2026-09-12 launch no new copy
168
+ appeared and the deploy was not refused, so whatever brings it back is narrower than the game
169
+ starting. The launcher's own sync is the obvious candidate but was not observed, and which
170
+ route the game was started by on each occasion was not recorded."
@@ -0,0 +1,135 @@
1
+ game: baldursgate3
2
+ topic: publishing.toolkit-modio
3
+ title: Publishing a mod from the Toolkit — dependencies, conflicts, and mod.io flow
4
+ facts:
5
+ - id: bg3.publishing.toolkit-modio.larian-and-modio-account-linkage-required
6
+ claim: Publishing to mod.io from the Toolkit requires both a Larian account and a mod.io account,
7
+ connected to each other, set up before starting the publish process; only loading the mod
8
+ project (not a level) is needed before publishing.
9
+ status: community
10
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Introduction
11
+ tags:
12
+ - publishing
13
+ - toolkit
14
+ - larian-account
15
+ - modio-account
16
+ - id: bg3.publishing.toolkit-modio.name-description-thumbnail-mandatory
17
+ claim: In the Toolkit's Project Settings, the Name, Description, and Thumbnail fields are mandatory
18
+ before a mod can be published; all of these can still be edited afterward on mod.io itself.
19
+ status: community
20
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Project Settings
21
+ tags:
22
+ - publishing
23
+ - toolkit
24
+ - project-settings
25
+ - required-fields
26
+ - id: bg3.publishing.toolkit-modio.dependencies-set-in-two-separate-places
27
+ claim: Setting a dependency in the Toolkit's Project Settings is a different, separate action from
28
+ setting a dependency on mod.io — both must be done to fully wire up a dependency relationship
29
+ for players; the Toolkit's dependency list governs load order, while mod.io's dependency list
30
+ governs automatic download of required mods for players.
31
+ status: community
32
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Dependencies, §Editing Your Mod on
33
+ Mod.io § Dependencies
34
+ tags:
35
+ - publishing
36
+ - dependencies
37
+ - toolkit
38
+ - modio
39
+ - load-order
40
+ - id: bg3.publishing.toolkit-modio.dependency-changes-require-toolkit-restart
41
+ claim: Changing a project's dependencies in the Toolkit requires closing and reopening the Toolkit
42
+ before those changes appear reflected in the Resource Manager — the dependency change does not
43
+ take effect live.
44
+ status: community
45
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Dependencies
46
+ tags:
47
+ - publishing
48
+ - dependencies
49
+ - toolkit
50
+ - gui-only
51
+ - gotcha
52
+ - id: bg3.publishing.toolkit-modio.conflict-disables-mod-and-cascades-to-its-own-dependencies
53
+ claim: Declaring mod A as a conflict of mod B causes the game to automatically disable mod B when
54
+ mod A is also active; disabling mod B in turn disables B's own dependencies too, unless
55
+ another active mod also depends on them (in which case those shared dependencies stay
56
+ enabled).
57
+ status: community
58
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Conflicts
59
+ tags:
60
+ - publishing
61
+ - conflicts
62
+ - cascading-disable
63
+ - id: bg3.publishing.toolkit-modio.save-before-closing-project-settings
64
+ claim: Changes made on the Dependencies and Conflicts tabs of Project Settings must be explicitly
65
+ saved before closing the window, or they are lost.
66
+ status: community
67
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Conflicts
68
+ tags:
69
+ - publishing
70
+ - project-settings
71
+ - save
72
+ - id: bg3.publishing.toolkit-modio.publish-local-vs-publish-to-modio
73
+ claim: "\"Publish Local\" packages a .pak file to a location you choose without any authentication
74
+ and without uploading anywhere; publishing \"to mod.io\" is a separate authenticated flow (via
75
+ Steam or a Larian account) that both packages and uploads the mod, showing a progress bar and,
76
+ on success, a specific success line in the Toolkit's Message Log panel."
77
+ status: community
78
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Publishing Locally, §Publishing to
79
+ Mod.io
80
+ tags:
81
+ - publishing
82
+ - publish-local
83
+ - modio
84
+ - authentication
85
+ - id: bg3.publishing.toolkit-modio.scan-gate-blocks-going-live
86
+ claim: Immediately after publishing to mod.io, a mod's File Manager page shows a "Needs
87
+ File"/scan-pending state (a clock icon under "Scan") and the mod cannot be set live until
88
+ Larian's automated scan of the uploaded file completes — mod profile fields (name, summary,
89
+ description, tags, media) can still be edited during this waiting period.
90
+ status: community
91
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Editing Your Mod on Mod.io
92
+ tags:
93
+ - publishing
94
+ - modio
95
+ - scan
96
+ - go-live
97
+ - id: bg3.publishing.toolkit-modio.media-recommends-png-youtube-web-only
98
+ claim: "Larian's own publishing doc confirms both existing media facts: it recommends \"sticking to
99
+ .png files\" for gallery images (bg3.publishing.mod-io-gallery, \"PNG recommended by Larian\")
100
+ and states that YouTube videos \"will only be displayed on the web, not in-game\"
101
+ (bg3.publishing.mod-io-video)."
102
+ status: community
103
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §General Settings > Media
104
+ tags:
105
+ - publishing
106
+ - modio
107
+ - media
108
+ - screenshots
109
+ detail: "Kept as the confirming citation only: the byte caps and pixel dimensions in
110
+ bg3.publishing.mod-io-logo / -gallery come from the mod.io REST API reference and are not
111
+ restated here."
112
+ - id: bg3.publishing.toolkit-modio.go-live-is-a-separate-manual-step
113
+ claim: Publishing and uploading a mod to mod.io does not itself make it visible/downloadable — a
114
+ separate "Go live" button on the mod's mod.io page must be clicked after verifying details; a
115
+ mod can be left un-live indefinitely while its details are edited, as long as Save is pressed
116
+ before leaving the page.
117
+ status: community
118
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Setting the Mod Live
119
+ tags:
120
+ - publishing
121
+ - modio
122
+ - go-live
123
+ - workflow
124
+ - id: bg3.publishing.toolkit-modio.mod-folder-must-be-under-localappdata
125
+ claim: For a mod to appear in the Toolkit's Dependencies/Conflicts selection lists, it must be
126
+ present (as a downloaded mod folder) under %localappdata%\Larian Studios\Baldur's Gate 3\Mods\
127
+ — a mod not visible there needs to be downloaded first before it can be picked as a dependency
128
+ or conflict.
129
+ status: community
130
+ source: docs.baldursgate3.game/Getting_Started:_Publishing_a_Mod §Dependencies, §Conflicts
131
+ tags:
132
+ - publishing
133
+ - toolkit
134
+ - mod-folder
135
+ - dependencies
@@ -0,0 +1,228 @@
1
+ game: baldursgate3
2
+ topic: races.progression
3
+ title: Race Progression tables, UUID linkage, and race setup
4
+ facts:
5
+ - id: bg3.races.progression.uuid-vs-tableuuid
6
+ claim: "Every Progression node has two distinct UUIDs: its own UUID identifies that single
7
+ Progression node only, while TableUUID is shared by every Progression node belonging to the
8
+ same race/subrace or class/subclass and is what the owning entity's ProgressionTableUUID field
9
+ points to. Referencing the node UUID targets only that one level; referencing the TableUUID
10
+ targets the whole progression table."
11
+ status: community
12
+ source: wiki.bg3.community/en/Information/Progression/Progressions
13
+ tags:
14
+ - progressions
15
+ - uuid
16
+ - tableuuid
17
+ - races
18
+ detail: 'Worked example from the page: TableUUID "ba2afe85-acba-4ea1-a238-2b4543f47821" is shared by
19
+ every base Paladin Progression node (Level 1, Level 4, Level 12, ...), while UUID
20
+ "b60618d1-c262-42b5-9fdd-2c0f7aa5e5af" refers only to the non-multiclass Level 1 Paladin
21
+ node.'
22
+ - id: bg3.races.progression.race-links-via-progressiontableuuid
23
+ claim: "A Race node's ProgressionTableUUID field must be set to the TableUUID shared across the
24
+ Progression nodes meant for that race — the final wiring step: \"In Races.lsx, where we
25
+ defined the race, we need to go take a look at our race's ProgressionTableUUID. Here, we'll
26
+ want to copy/paste our TableUUID from our Progressions nodes.\""
27
+ status: community
28
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod §Racial
29
+ Progressions > Applying the Progression
30
+ tags:
31
+ - progressions
32
+ - tableuuid
33
+ - races
34
+ - uuid-linkage
35
+ detail: The page presents it as the step that makes the race "fully-featured"; it does not state a
36
+ symptom for getting it wrong, so treat "no abilities at level-up" as the expected consequence,
37
+ not a documented one.
38
+ - id: bg3.races.progression.race-root-required-fields
39
+ claim: A Races.lsx Race node requires (at minimum) Description and DisplayName (TranslatedString
40
+ handles), a DisplayTypeUUID (typically mirroring ParentGuid), Name (FixedString,
41
+ conventionally prefixed to avoid collisions), ParentGuid (guid of the parent race, e.g.
42
+ Humanoid), ProgressionTableUUID (guid), RaceSoundSwitch (FixedString), and its own UUID
43
+ (guid).
44
+ status: community
45
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod §Race
46
+ Entry (annotated Shadar-Kai Race node)
47
+ tags:
48
+ - races
49
+ - races-lsx
50
+ - required-fields
51
+ - id: bg3.races.progression.internal-name-prefix-convention
52
+ claim: Race internal Name (and Tag Name) fields are conventionally prefixed (e.g. "CL_") to avoid
53
+ collisions with other mods' race and tag names, since Name is a FixedString the game and other
54
+ mods can reference by exact string.
55
+ status: community
56
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod §Race
57
+ Entry ("Write an internal name, prefixed with CL_ to help ensure there aren't any collisions
58
+ with other mods"), §Anatomy of a Tag (tag Name "CL_ShadarKai")
59
+ tags:
60
+ - races
61
+ - naming-convention
62
+ - tags
63
+ - id: bg3.races.progression.tag-filename-differs-from-internal-uuid
64
+ claim: A race Tag's filename is a UUID generated separately from — and distinct from — the Tag
65
+ node's own internal UUID attribute; a RootTemplate or Race referencing that tag must reference
66
+ it by the filename UUID, not by the tag's internal UUID field.
67
+ status: community
68
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod §Tags >
69
+ Anatomy of a Tag, §Using the Tag
70
+ tags:
71
+ - races
72
+ - tags
73
+ - uuid
74
+ - gotcha
75
+ detail: "Verbatim: \"UUID: This is an ID for your tag. However, this is not how you'll reference the
76
+ tag in other files - you'll instead want to use its Filename, which is a different UUID.\" The
77
+ same distinction applies to a class's Tags reference — see
78
+ bg3.feats.classes.tags-live-in-children-node."
79
+ - id: bg3.races.progression.charactervisuals-lsf-must-convert-to-lsx
80
+ claim: Character Visuals for a race are stored as _merged.lsf files that must be converted to .lsx
81
+ to be hand-edited, then converted back to .lsf before packing the mod.
82
+ status: community
83
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod
84
+ §Character Visuals, §Wrapping Up
85
+ tags:
86
+ - races
87
+ - character-visuals
88
+ - lsf
89
+ - lsx
90
+ detail: They arrive bundled as Public/ModName/Content/[PAK]_CharacterVisuals/_merged.lsf; convert
91
+ the whole file, edit, then "convert our _merged.lsx files back into _merged.lsf" before
92
+ packing.
93
+ - id: bg3.races.progression.four-body-variants-required
94
+ claim: A complete playable race needs 6 Root Templates (Base Female, Base Male, Female Player,
95
+ Female Player Strong, Male Player, Male Player Strong) and 6 Character Visual Resource nodes —
96
+ 2 base plus 4 player variants — and 4 CharacterCreationPresets nodes, "one each for Feminine,
97
+ Masculine, Feminine Strong, and Masculine Strong".
98
+ status: community
99
+ source: "github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod §Root
100
+ Templates (\"you'll typically have 6 per race\"), §Character Visuals (\"There will be 6 total
101
+ Resource nodes you'll want: 2 Within Community Library, and 4 within your Implementation
102
+ Mod\"), §Character Creation > Creating Presets"
103
+ tags:
104
+ - races
105
+ - character-creation
106
+ - body-type
107
+ detail: "The split is deliberate in the Community Library workflow: the 2 base templates/visuals
108
+ live in the Community Library so other mods can build NPCs on them, the 4 player ones in your
109
+ implementation mod. A Strong player template additionally carries EquipmentRace (\"Without it,
110
+ there'll be a ton of clipping\") and GeneratePortrait."
111
+ - id: bg3.races.progression.ccpreset-vo-lines-table-default
112
+ claim: CharacterCreationPresets.lsx's VOLinesTableUUID field controls which voice-preview lines play
113
+ in character creation; the community template recommends leaving it at the default table UUID
114
+ (14df8f45-90af-4bd0-8024-42624da9976e) for a standard playable race.
115
+ status: community
116
+ source: wiki.bg3.community/en/Tutorials/Races/Creating-A-Basic-Race-Mod
117
+ tags:
118
+ - races
119
+ - character-creation-presets
120
+ - voice
121
+ - uuid
122
+ - id: bg3.races.progression.camera-closeups-need-adjustment-for-nonstandard-height
123
+ claim: "CharacterCreationPresets' CloseUpA/CloseUpB/Overview camera values need adjusting for a
124
+ non-standard stature: \"The default camera values given are fine for standard body humans,
125
+ elves, half-elves, drow, and tieflings. However, if you are making a shorter or taller race,
126
+ you will need to adjust those camera values so that the camera will zoom in the correct
127
+ place.\""
128
+ status: community
129
+ source: wiki.bg3.community/en/Tutorials/Races/Creating-A-Basic-Race-Mod
130
+ tags:
131
+ - races
132
+ - character-creation-presets
133
+ - camera
134
+ - id: bg3.races.progression.progressiontype-numeric-values
135
+ claim: "A Progression node's ProgressionType attribute distinguishes what kind of entity it belongs
136
+ to: 0 = Class Progression, 1 = Subclass Progression, 2 = Race Progression."
137
+ status: community
138
+ source: wiki.bg3.community/en/Tutorials/Classes/Basic-Class-Creation §Subclasses ("0 is for classes,
139
+ 1 is for subclasses, 2 is for races"); confirmed by the Community Library wiki,
140
+ Building-a-Race-Mod §Racial Progressions (race Progression nodes carry ProgressionType uint8
141
+ value="2")
142
+ tags:
143
+ - progressions
144
+ - progressiontype
145
+ - races
146
+ - classes
147
+ - id: bg3.races.progression.character-visuals-slots-set-default-mesh
148
+ claim: "A race's per-body-type Character Visuals Resource node carries child Slots nodes, each
149
+ pairing a Slot name (Head, Hair, ModestyLeaf, Private Parts, ...) with a VisualResource UUID;
150
+ that UUID is what ties the slot to the CharacterCreationAppearanceVisuals file, which the page
151
+ states as: \"Matched to the CharacterCreationAppearanceVisuals file using the VisualResource
152
+ UUID.\""
153
+ status: community
154
+ source: wiki.bg3.community/en/Tutorials/Races/Creating-A-Basic-Race-Mod
155
+ tags:
156
+ - races
157
+ - character-visuals
158
+ - slots
159
+ - default-appearance
160
+ - id: bg3.races.progression.roottemplate-race-attribute-must-match
161
+ claim: "The Race attribute on a race's BASE Root Templates must be the UUID of that race's Races.lsx
162
+ entry (\"Race: This will be the UUID field of your Race entry in Races.lsx\"); the
163
+ player/implementation Root Templates in the worked example carry no Race attribute at all and
164
+ inherit through ParentTemplateId. The tag wiring step is scoped the same way: \"Whichever Root
165
+ Templates you've added that have a Race field, you'll want to open and perform these actions
166
+ on.\""
167
+ status: community
168
+ source: github.com/BG3-Community-Library-Team/BG3-Community-Library/wiki/Building-a-Race-Mod §Base
169
+ Root Templates, §Implementation Root Templates, §Ensuring the Tags reach the Root Template
170
+ correctly
171
+ tags:
172
+ - races
173
+ - roottemplate
174
+ - uuid-linkage
175
+ detail: "Corrected from \"every RootTemplate ... base and player variants alike\": the page's
176
+ implementation templates (Elves_Female_ShadarKai_Player, ..._Player_Strong) set
177
+ ParentTemplateId to the base template and omit Race. A validator should require Race on
178
+ templates that declare one, not on all of them."
179
+ - id: bg3.races.progression.charactercreationpreset-required-fields
180
+ claim: "A CharacterCreationPresets.lsx CharacterCreationPreset node's fields, per the community race
181
+ template: BodyShape (uint8), BodyType (uint8), CloseUpA/CloseUpB/Overview (LSString camera
182
+ resource names), RaceUUID (the owning race's Races.lsx UUID), RootTemplate (a guid pointing
183
+ into the race's own RootTemplates file, not the race's Races.lsx UUID), SubRaceUUID (all-zero
184
+ 00000000-0000-0000-0000-000000000000 when the preset has no subrace), UUID (this preset's own
185
+ unique id), and VOLinesTableUUID."
186
+ status: community
187
+ source: bg3-community/Tutorials/Races/Creating-A-Basic-Race-Mod.html §Understanding The Files,
188
+ CharacterCreationPresets.lsx (annotated Female/Male Standard preset nodes)
189
+ tags:
190
+ - races
191
+ - character-creation-presets
192
+ - required-fields
193
+ related:
194
+ - id: bg3.races.progression.ccpreset-vo-lines-table-default
195
+ detail: Same file/node this existing fact's VOLinesTableUUID field belongs to; adds the complete
196
+ field list around it, including that RootTemplate here is a distinct UUID from RaceUUID
197
+ (one points at Races.lsx, the other at the race's RootTemplates file).
198
+ - id: bg3.races.progression.bodyshape-bodytype-numeric-values
199
+ claim: CharacterCreationPreset's BodyShape attribute uses 0 for "Standard" (the community template's
200
+ only documented value); BodyType uses 0 for Male and 1 for Female, per the template's own
201
+ inline comments on its Male/Female Standard preset pair.
202
+ status: community
203
+ source: bg3-community/Tutorials/Races/Creating-A-Basic-Race-Mod.html §Understanding The Files,
204
+ CharacterCreationPresets.lsx (comments "0 = Standard" on BodyShape; "1 = Female" / "0 = Male"
205
+ on BodyType)
206
+ tags:
207
+ - races
208
+ - character-creation-presets
209
+ - bodyshape
210
+ - bodytype
211
+ - enum
212
+ detail: Only Standard (0) is demonstrated in the template; whether other BodyShape values exist
213
+ (e.g. for a Strong variant) is not stated on this page — see
214
+ bg3.races.progression.four-body-variants-required for the separate Strong-variant pattern,
215
+ which uses distinct Root Templates rather than a BodyShape value.
216
+ - id: bg3.races.progression.tan-square-icon-is-expected-patch7-placeholder
217
+ claim: As of Patch 7, a freshly created custom race's selection icon in Character Creation renders
218
+ as a tan square placeholder — the tutorial states this explicitly is "normal" and not a sign
219
+ of a broken race setup, before any custom race icon has been authored.
220
+ status: community
221
+ source: bg3-community/Tutorials/Races/Creating-A-Basic-Race-Mod.html §Seeing What We've Got ("as of
222
+ Patch 7, the custom race icon may appear as a tan square. That is normal.")
223
+ tags:
224
+ - races
225
+ - icon
226
+ - placeholder
227
+ - patch7
228
+ - gotcha