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,214 @@
1
+ game: cyberpunk2077
2
+ topic: archivexl.manifest
3
+ title: archivexl manifest format, streaming blocks, and resource registration
4
+ facts:
5
+ - id: cp2077.archivexl.manifest-top-level-keys
6
+ claim: "archivexl .xl manifest files have three top-level keys: localization (maps language codes to
7
+ localization files), factories (list of factory csv paths), and streaming (defines streaming
8
+ blocks and other resources)."
9
+ status: inferred
10
+ source: ModWright research
11
+ tags:
12
+ - manifest
13
+ - .xl
14
+ - format
15
+ - schema
16
+ detail: Those are the three keys an example weapon-mod manifest uses, not the whole schema —
17
+ ArchiveXL's README also advertises submesh visibility overrides, visual tags on clothing and
18
+ widget spawning, which need other keys documented on its wiki. That manifest in full -
19
+ localization/onscreens/en-us -> mod\<mod>\en-us.json; factories ->
20
+ mod\<mod>\factory_parts.csv; streaming/blocks -> <mod>\all.streamingblock. Note the file
21
+ begins with a UTF-8 BOM.
22
+ - id: cp2077.archivexl.localization-onscreens-json
23
+ claim: The localization.onscreens section maps language codes (e.g., en-us) to json files containing
24
+ localization strings; these strings are registered and available throughout the game via
25
+ LocKey# references.
26
+ status: verified
27
+ verified_on: "2.31"
28
+ source: ModWright field verification
29
+ tags:
30
+ - localization
31
+ - onscreens
32
+ - json
33
+ - lockey
34
+ detail: "Keys shipped by a weapon mod: <Mod>-Name, -Description, -Mod-Description,
35
+ -Gameplay-Description, -Cache-Name. They are referenced as LocKey#<Mod>-Name (capital L, K)
36
+ from TweakDB records and from the case entity's displayName. Some TweakDB fields take the bare
37
+ key instead (displayName: <Mod>-Name on Items.<ModWeapon>)."
38
+ - id: cp2077.archivexl.factories-csv-paths
39
+ claim: The factories section is a list of factory csv file paths that register resource appearance
40
+ mappings; each csv is loaded and its records become available for appearance factory lookups
41
+ throughout the game.
42
+ status: verified
43
+ verified_on: "2.31"
44
+ source: ModWright field verification
45
+ tags:
46
+ - factory
47
+ - csv
48
+ - appearance
49
+ - registration
50
+ detail: One csv is registered, mod\<mod>\factory_parts.csv, and the weapon renders in game through
51
+ it. The record field is appearanceResourceName (not "appearance-resource-name").
52
+ - id: cp2077.archivexl.factory-csv-appearance-mapping
53
+ claim: Factory csv files map an appearance name to the .app resource that supplies it, one row per
54
+ appearance.
55
+ status: inferred
56
+ source: ModWright research
57
+ tags:
58
+ - factory
59
+ - csv
60
+ - schema
61
+ - appearance
62
+ detail: 'Answering the open question this fact used to carry ("actual csv not read"): the columns
63
+ are name, path, shared, and the shipped rows are <mod>_body -> mod\<mod>\<mod>_body.app ->
64
+ false and <Mod>_Weapon -> mod\<mod>\<mod>_weapon.app -> false. There is no "baseAppearance"
65
+ column as the earlier version of this fact guessed. The file is a cooked C2dArray, not plain
66
+ text. What the `shared` flag does is not documented in these sources.'
67
+ - id: cp2077.archivexl.streaming-blocks-path
68
+ claim: The streaming.blocks section is a list of .streamingblock file paths; each block registers
69
+ world sectors and determines when they are loaded during gameplay (always-loaded vs streaming
70
+ distance).
71
+ status: verified
72
+ verified_on: "2.31"
73
+ source: ModWright field verification
74
+ tags:
75
+ - streaming
76
+ - block
77
+ - sector
78
+ - world-placement
79
+ detail: The shipped block is <mod>\all.streamingblock, whose descriptor points at
80
+ <mod>\sectors\<mod>.streamingsector. The mod's earlier notes still name an abandoned
81
+ hand-authored path, mod\<mod>\<mod>.streamingblock.
82
+ - id: cp2077.archivexl.localization-json-format
83
+ claim: archivexl localization json files are not standard .json files but follow the W2RC json
84
+ format with cr2w serialization conventions (no BOM, enum strings as quoted values); the file
85
+ must be named with .json extension and placed relative to the archive root.
86
+ status: unverified
87
+ source: ModWright research
88
+ tags:
89
+ - localization
90
+ - json
91
+ - format
92
+ - cr2w
93
+ detail: "What is sourced: a mod's en-us.source.json is a CR2W json (Header WolvenKitVersion 8.20.0,
94
+ GameVersion 2310, DataType CR2W, ArchiveFileName mod\\<mod>\\en-us.json) holding a
95
+ JsonResource root with localizationPersistenceOnScreenEntries, and it is deserialized to
96
+ binary before packing. The BOM claim and the \"must be relative to the archive root\" claim
97
+ are not stated anywhere; leave unverified."
98
+ - id: cp2077.archivexl.double-extension-json-naming
99
+ claim: Localization files in archive staging are named with double .json extension (e.g.,
100
+ en-us.json.json); this is the convention for deserializable json intermediates in archivexl
101
+ packing.
102
+ status: inferred
103
+ source: ModWright research
104
+ tags:
105
+ - naming
106
+ - convention
107
+ - .json
108
+ - archive
109
+ detail: The resource inside the archive is itself named en-us.json (see the source file's
110
+ ArchiveFileName header), so its CR2W-json form carries a second .json that deserialize strips.
111
+ It is a consequence of the resource's own name, not a marker ArchiveXL looks for; the earlier
112
+ reading of it as a gate ("unmarked .json files in staging are not deserialized") is
113
+ unsupported. Fabricated in-game verified attribution removed.
114
+ - id: cp2077.archivexl.manifest-registers-at-init
115
+ claim: archivexl loads and registers all .xl manifest entries (localization, factories, streaming)
116
+ when the game initializes; TweakXL.Reload() does not reload them — archive changes need a
117
+ repack, a redeploy and a game restart.
118
+ status: verified
119
+ verified_on: "2.31"
120
+ source: ModWright field verification
121
+ tags:
122
+ - manifest
123
+ - load
124
+ - registration
125
+ - hot-reload
126
+ detail: 'Claim corrected: the earlier wording had ArchiveXL registering "when the game initializes
127
+ or when tweakxl.Reload() is called", which contradicts its own detail and the source —
128
+ TweakXL.Reload() reloads TweakDB yaml only. This asymmetry is the main cost of the
129
+ archive-side iteration loop.'
130
+ - id: cp2077.archivexl.streaming-block-descriptor
131
+ claim: A streaming block file (.streamingblock) is a json record containing descriptor entries; each
132
+ descriptor specifies a sector path, category, and level that determine load behavior
133
+ (always-loaded vs streaming distance).
134
+ status: inferred
135
+ source: ModWright research
136
+ tags:
137
+ - streaming-block
138
+ - descriptor
139
+ - sector
140
+ - category
141
+ - level
142
+ detail: Each descriptor carries data.DepotPath (the sector), category, level, questPrefabNodeRef and
143
+ streamingBox. the sector-building script starts from a vanilla AlwaysLoaded descriptor in a
144
+ donor block, repoints it and overwrites category to "Exterior" and level to 1. See
145
+ cp2077.sectors.sector-category-level for the status of that value.
146
+ - id: cp2077.archivexl.manifest.version-floors
147
+ claim: ArchiveXL's README lists its compatibility as Cyberpunk 2077 2.31 and redscript 0.5.31+, and
148
+ its installation step 1 requires RED4ext 1.29.0+ before extracting `ArchiveXL-x.x.x.zip` into
149
+ the Cyberpunk 2077 directory.
150
+ status: community
151
+ source: cp2077-archive-xl/README.md, sections "Getting Started > Compatibility" (game, redscript)
152
+ and "Getting Started > Installation" (RED4ext)
153
+ tags:
154
+ - archivexl
155
+ - version-floor
156
+ - redscript
157
+ - red4ext
158
+ detail: "RELATED: this is a different, later ArchiveXL release than the one
159
+ cp2077.archivexl.manifest-registers-at-init and its siblings were verified against (both cite
160
+ game 2.31, so the axis matches; no contradiction)."
161
+ - id: cp2077.archivexl.manifest.resource-patch-key
162
+ claim: A `.xl` manifest's `resource.patch` key maps a source resource file's depot path to a list of
163
+ target resource file depot paths; at load ArchiveXL merges the source file's content into
164
+ every listed target, without overwriting the target files on disk, so multiple mods can each
165
+ patch the same target without file conflicts.
166
+ status: community
167
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
168
+ for-mod-creators-theory/core-mods-explained/archivexl/archivexl-resource-patching/README.md,
169
+ sections "How do I use this?" and "Why do I need this?"
170
+ tags:
171
+ - archivexl
172
+ - manifest
173
+ - resource-patch
174
+ - .xl
175
+ detail: 'Applies to `.ent`, `.app` and `.mesh` resources ("You can patch pretty much any `.ent`,
176
+ `.app` or `.mesh` file!"). RELATED: this is a manifest key not covered by
177
+ cp2077.archivexl.manifest-top-level-keys, which only documents the
178
+ localization/factories/streaming keys of one weapon-mod manifest — resource is a fourth,
179
+ separate top-level key that manifest does not use.'
180
+ - id: cp2077.archivexl.manifest.resource-patch-per-filetype-limits
181
+ claim: "Resource patching has different field-level limits per target file type: a `.mesh` patch can
182
+ only replace which material an existing appearance references (materials/material definitions
183
+ themselves cannot be overwritten by a patch); a `.ent` patch can touch `appearances`,
184
+ `components`, `entity` and `visualTags`; a `.app` patch can touch `components`, `partsValues`
185
+ and `visualTags`, but explicitly cannot touch `partsOverrides`."
186
+ status: community
187
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
188
+ for-mod-creators-theory/core-mods-explained/archivexl/archivexl-resource-patching/README.md,
189
+ section "What is the minimal patching level?"
190
+ tags:
191
+ - archivexl
192
+ - resource-patch
193
+ - mesh
194
+ - ent
195
+ - app
196
+ - limitation
197
+ detail: For hiding/showing submeshes on a `.app` (which would otherwise need `partsOverrides`), the
198
+ page points to ArchiveXL's tag-based conditional component un/loading instead.
199
+ - id: cp2077.archivexl.patch-component-replaces-on-name-and-id
200
+ claim: When ArchiveXL applies an entity-template patch (resource.patch), each patch component whose
201
+ name AND CRUID id both match a component of the target replaces that component; any other
202
+ patch component is appended. The log line says "replaced component in" or "added to". So to
203
+ change a template's existing component, the patch component carries the target component's own
204
+ name and id.
205
+ status: verified
206
+ source: https://github.com/psiberx/cp2077-archive-xl src/App/Extensions/ResourcePatch/Extension.cpp,
207
+ MergeComponents (the comparison resultComponent->name == patchComponent->name &&
208
+ resultComponent->id.unk00 == patchComponent->id.unk00)
209
+ tags:
210
+ - archivexl
211
+ - resource-patch
212
+ - entity-template
213
+ - component
214
+ - cruid
@@ -0,0 +1,168 @@
1
+ game: cyberpunk2077
2
+ topic: audio.events
3
+ title: .wem/.opuspak/.bnk audio layout and the REDmod event-override model
4
+ facts:
5
+ - id: cp2077.audio.events.wem-holds-voiceover-and-most-music
6
+ claim: "\"The game stores voice-overs and most music as `.wem` files which are directly in the
7
+ game's `.archive`s and their exporting/importing is handled as any other asset.\""
8
+ status: community
9
+ source: wiki.redmodding.org "Audio files", section "Primary file types > WEM files"
10
+ tags:
11
+ - audio
12
+ - wem
13
+ - file-format
14
+ detail: Page title and section name corrected 2026-09-07 (the page is "Audio files" and has no "File
15
+ Types & Roles" heading).
16
+ - id: cp2077.audio.events.opuspak-needs-opusinfo-mapping
17
+ claim: '"Sound effects, grunts, and some music are packed together in files ending with `.opuspak`.
18
+ Those paks are mapped by a single `.opusinfo` file."'
19
+ status: community
20
+ source: wiki.redmodding.org "Audio files", section "Primary file types > Opuspaks and bnks"
21
+ tags:
22
+ - audio
23
+ - opuspak
24
+ - opusinfo
25
+ - file-format
26
+ detail: 'Note "a single `.opusinfo`" — one index covers the paks. The page links a separate
27
+ replacing-sound-effects guide for actually manipulating them. Corrected 2026-09-07: "an
28
+ individual sound cannot just be pulled from a .opuspak directly" is an inference the page does
29
+ not state.'
30
+ - id: cp2077.audio.events.bnk-describes-behavior-not-just-audio
31
+ claim: "Community page confirms cp2077.audio.sounds.event-name-to-wwise-id-is-a-simple-lookup.
32
+ \".bnk files are primarily for other purpose than storing audio. They describe how and which
33
+ the audio should be played.\" The playback chain is: the game sends an event to Wwise, \"those
34
+ are described in `eventsmetadata.json` file in the game's archives\"; the event connects to a
35
+ tree of nodes in `.bnk` files (random next-node selection, layering, volume modification,
36
+ conditional switching); the last node points at an audio file or a plugin."
37
+ status: community
38
+ source: wiki.redmodding.org "Audio files", section "How are SFX handled by the engine"; embedded
39
+ audio from section "Primary file types > Opuspaks and bnks"
40
+ tags:
41
+ - audio
42
+ - bnk
43
+ - wwise
44
+ - node-tree
45
+ - eventsmetadata
46
+ detail: "Names cp2077.audio.sounds.event-name-to-wwise-id-is-a-simple-lookup
47
+ (knowledge/cyberpunk2077/audio.sounds.yaml), an inferred fact that already uses
48
+ `base\\sound\\event\\eventsmetadata.json` as the offline event-name-to-Wwise-ID lookup; this
49
+ page confirms that file is where the engine's events are described. The sibling
50
+ cp2077.audio.sounds.event-id-to-wem-sample-is-not-a-simple-lookup is the other half — the
51
+ event-to-source mapping in a bank's HIRC section — and this page agrees the bank is where the
52
+ tree lives. Also: \"Few sounds, mostly car noises, are so-called preloaded (or embedded) in
53
+ `.bnk` files, they're mostly duplicated and can be found elsewhere, but some sounds are only
54
+ preloaded.\""
55
+ - id: cp2077.audio.events.some-bnk-audio-not-fully-extractable
56
+ claim: VGMStream "is able to extract some of them, but not all, because they differ in audio
57
+ format". Separately, "Some sounds ... are handled differently. For example generated (noise,
58
+ sine wave, etc.), or generated by CDPR's custom Wwise plugins" — those have no extractable
59
+ source file.
60
+ status: community
61
+ source: wiki.redmodding.org "Audio files", section "Primary file types > Opuspaks and bnks"
62
+ tags:
63
+ - audio
64
+ - bnk
65
+ - vgmstream
66
+ - procedural
67
+ - gotcha
68
+ detail: Section name corrected 2026-09-07 (there is no "Key Gotchas" heading).
69
+ - id: cp2077.audio.events.voiceover-subtitles-mapped-by-string-id
70
+ claim: '"Every subtitle in the game has a String ID (which is a really long number) that is
71
+ universal between languages. What `.wem` audio file belongs to which String ID is mapped
72
+ inside files starting with `voiceover` and ending in `.json`", and further `.json` files in
73
+ the `subtitles` folders hold the subtitle text for each String ID.'
74
+ status: community
75
+ source: wiki.redmodding.org "Audio files", section "How are voice-overs connected to subtitles"
76
+ tags:
77
+ - audio
78
+ - subtitle
79
+ - string-id
80
+ - localization
81
+ detail: Some `voiceover*.json` files cover holocall voice-overs, some the helmet-on case; the
82
+ subtitles folders hold "few thousands" of files, so the page recommends searching them via
83
+ SoundDB (sounddb.redmodding.org) instead. Same String IDs as the `locstringIds` in
84
+ cp2077.quests.scenes.subtitle-edit-needs-two-resources, reached from the scene side. Section
85
+ name corrected 2026-09-07.
86
+ - id: cp2077.audio.events.redmod-is-event-override-not-file-replace
87
+ claim: '"REDmod allows you to add new and override existing audio events... This will not override
88
+ `.wem` files; it will instead override audio events, which are what use `.wem` files. That
89
+ way, you can override events that layer or randomize between multiple sounds without manually
90
+ altering each sound." The cost: "any events added or overridden will use a different Wwise
91
+ event, removing any special parameters and Wwise logic attached (e.g. overriding a gun sound
92
+ event will result in it no longer receiving time-dilation effects processing)."'
93
+ status: community
94
+ source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Summary"'
95
+ tags:
96
+ - audio
97
+ - redmod
98
+ - wwise
99
+ - event-override
100
+ - gotcha
101
+ detail: Page title and section name corrected 2026-09-07 (there is no "Event-Override Model" heading).
102
+ - id: cp2077.audio.events.redmod-custom-sound-folder-layout
103
+ claim: '"Place raw `.wav` audio files inside `<Cyberpunk 2077>/mods/<name>/customSounds`. Include a
104
+ `info.json` file with your mod (`<Cyberpunk 2077>/mods/<name>/info.json`) where you sepcify
105
+ how to use your custom sounds. You may use nested folders with `\\`."'
106
+ status: community
107
+ source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Audio Modding - Manually"'
108
+ tags:
109
+ - audio
110
+ - redmod
111
+ - customsounds
112
+ - info.json
113
+ - file-structure
114
+ detail: 'The `info.json` top level carries `name`, `version` and the `customSounds` array; the
115
+ nested-folder example is `"file": "mysounds\\new_sound.wav"`. Section name corrected
116
+ 2026-09-07.'
117
+ - id: cp2077.audio.events.info-json-required-and-optional-fields
118
+ claim: "A `customSounds` entry's parameters: `name` (String) \"The game audio event to override\";
119
+ `type` (String) the sound type; `file` (String) \"The `.wav` file to use (inside
120
+ `/customSounds`)\"; `gain` (Float) \"How loud the sound is; ranges from 0 to 1\"; `pitch`
121
+ (Float) \"The amount of pitch variance applied to the sound; ranges from 0 to 1\". `file` is
122
+ omitted for a `mod_skip` entry, which plays nothing."
123
+ status: community
124
+ source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Parameters" and the example
125
+ `info.json` under "Audio Modding - Manually > Example"'
126
+ tags:
127
+ - audio
128
+ - redmod
129
+ - info.json
130
+ - required-field
131
+ - syntax
132
+ detail: "Corrected 2026-09-07: the previous claim listed `file` as always required, which the page's
133
+ own example contradicts — its `amb_bl_eq_medical_electronics_small` and
134
+ `w_gun_revol_power_overture_fire_suppressor` entries carry only `name` and `type: mod_skip`."
135
+ - id: cp2077.audio.events.redmod-sound-type-vocabulary
136
+ claim: The `type` options are `mod_skip` ("Do not play this sound event"), `mod_sfx_2d` ("played
137
+ without any positions / attenuation"), `mod_sfx_city` ("longer attenuation... suitable for
138
+ city sounds"), `mod_sfx_low_occlusion` ("long attenuation that isn't occluded much e.g. a VO
139
+ or quest sound that you don't want to be muffled"), `mod_sfx_occlusion` ("Medium attenuation
140
+ with normal occlusion"), `mod_sfx_radio` ("Needs to be tuned to a broadcast channel"),
141
+ `mod_sfx_room` ("shorter attenuation suitable for something that can be heard across a room"),
142
+ `mod_sfx_street` ("medium attenuation, good for something to be heard down a street") and
143
+ `mod_sfx_ui` ("For menu and UI sound replacement").
144
+ status: community
145
+ source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Parameters" (the `type` bullet list)'
146
+ tags:
147
+ - audio
148
+ - redmod
149
+ - sound-type
150
+ - mod_skip
151
+ - enum
152
+ detail: 'Corrected 2026-09-07: "there is no custom/free-form type" was trimmed — the page presents
153
+ these as the options without saying the set is closed.'
154
+ - id: cp2077.audio.events.wolvenkit-sound-modding-tool-alternative
155
+ claim: "\"The REDmod sound import tool can be used in a WolvenKit project\": add the `.wav` files to
156
+ the project's `/customSounds` folder, click Tools > Sound Modding Tool, choose which event to
157
+ mod from the list of game sound events, adjust the parameters in the bottom right, and click
158
+ Save."
159
+ status: community
160
+ source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Audio Modding - WolvenKit Integration"'
161
+ tags:
162
+ - audio
163
+ - redmod
164
+ - wolvenkit
165
+ - sound-modding-tool
166
+ detail: 'Corrected 2026-09-07: "equally valid paths to the same result" was trimmed — the page
167
+ documents both routes without ranking them. Section name corrected (there is no
168
+ "Implementation Methods" heading).'
@@ -0,0 +1,164 @@
1
+ game: cyberpunk2077
2
+ topic: audio.sounds
3
+ title: Weapon audio — anim-baked events vs TweakDB impact profiles
4
+ facts:
5
+ - id: cp2077.audio.sounds.two-independent-audio-systems-per-weapon
6
+ claim: "A melee weapon's audio comes from two completely independent systems that can disagree:
7
+ swing/handling/equip/block-ring sounds are anim events baked into the weapon's .anims clips,
8
+ while hit/impact/flesh/ block sounds come from the TweakDB audioWeaponConfiguration field on
9
+ the weapon record. Changing one has no effect on the other."
10
+ status: inferred
11
+ source: ModWright research
12
+ tags:
13
+ - audio
14
+ - anim-event
15
+ - tweakdb
16
+ - impact
17
+ - architecture
18
+ detail: "Discovered auditing a report that a weapon's sounds were \"just the katana\": it was worse
19
+ than that — the weapon played katana swings over kukri impacts, because the swing side came
20
+ from re-authored katana donor clips and the impact side was inherited TweakDB, and nobody had
21
+ touched either deliberately."
22
+ - id: cp2077.audio.sounds.audio-impact-profile-inherited-through-base
23
+ claim: A weapon's impact audio profile can be silently inherited from its $base preset chain rather
24
+ than set on the weapon's own record; check the full inheritance chain, not just the leaf
25
+ record, when auditing which profile is actually live.
26
+ status: inferred
27
+ source: ModWright research
28
+ tags:
29
+ - audio
30
+ - tweakdb
31
+ - inheritance
32
+ - base-record
33
+ detail: A melee weapon mod's record, Items.<ModWeapon> ($base Items.Preset_Machete_Default),
34
+ inherited audio_melee_metadata_kukri_voodoo with no explicit line anywhere in the mod's yaml
35
+ setting it — the audit had to trace the $base chain to find where it came from.
36
+ - id: cp2077.audio.sounds.audioweaponconfiguration-hot-reloads
37
+ claim: Changing a weapon record's audioWeaponConfiguration field is a yaml-only edit that
38
+ hot-reloads via TweakXL.Reload() in the CET console, with no archive rebuild and no game
39
+ restart required.
40
+ status: inferred
41
+ source: ModWright research
42
+ tags:
43
+ - audio
44
+ - tweakdb
45
+ - hot-reload
46
+ - tweakxl
47
+ detail: "Confirms the general tweak hot-reload path (cp2077.process.tweakxl-hot-reload) applies
48
+ specifically to this audio-routing field. The applied swap sets audioWeaponConfiguration:
49
+ audio_melee_metadata_borg_machete, deployed and hash-verified 2026-09-03; the user's ear
50
+ judgment on the result was still pending as of that note."
51
+ - id: cp2077.audio.sounds.anim-baked-events-never-hot-reload
52
+ claim: Renaming or changing the anim events baked into a weapon's .anims file (the
53
+ swing/handling/equip side of weapon audio) requires an archive repack and a full game restart,
54
+ because .anims assets never hot-reload the way TweakDB yaml does
55
+ (cp2077.anims.sets.do-not-hot-reload).
56
+ status: inferred
57
+ source: ModWright research
58
+ tags:
59
+ - audio
60
+ - anim-event
61
+ - anims
62
+ - hot-reload
63
+ - restart
64
+ detail: The note frames this as the reason to try the impact-profile swap (yaml-only) first as the
65
+ cheap A/B, since it "may be most of what you want" before paying for a repack+restart cycle on
66
+ the anim-event side.
67
+ - id: cp2077.audio.sounds.event-name-to-wwise-id-is-a-simple-lookup
68
+ claim: Mapping a named audio event (e.g. w_melee_katana_whoosh) to its Wwise event ID is a simple,
69
+ fully offline lookup via base\sound\event\eventsmetadata.json.
70
+ status: inferred
71
+ source: ModWright research
72
+ tags:
73
+ - audio
74
+ - wwise
75
+ - event-id
76
+ - lookup
77
+ detail: Table of 11 weapon-specific katana events extracted this way, e.g. w_melee_katana_whoosh ->
78
+ 4107381959, w_melee_katana_equip -> 1337780739. 60 of the anim set's 97 clips carry audio
79
+ events at all; the rest are generic (block/parry/fast_whoosh) or foley (AnimEvent_FoleyAction
80
+ lcm_mvs_* cloth/movement, 67 uses).
81
+ - id: cp2077.audio.sounds.event-id-to-wem-sample-is-not-a-simple-lookup
82
+ claim: "Unlike event-name-to-Wwise-ID, mapping a Wwise event ID to its actual .wem audio sample is
83
+ NOT a simple offline lookup: weapon SFX are loose .wem files streamed by source ID, and the
84
+ event-to-source mapping lives in the HIRC section of a binary Wwise soundbank (init.bnk),
85
+ which this project's tooling cannot parse."
86
+ status: inferred
87
+ source: ModWright research
88
+ tags:
89
+ - audio
90
+ - wwise
91
+ - wem
92
+ - soundbank
93
+ - blocker
94
+ detail: The 201 .bnk files in audio_2_soundbanks.archive are almost all vehicles plus init.bnk. The
95
+ note explicitly frames hand-parsing a Wwise soundbank as exactly the kind of
96
+ undocumented-binary work to time-box and hand to a community tool instead — here, the
97
+ WolvenKit GUI audio browser (browse/play/export .wem) plus vgmstream/ww2ogg for .wem -> .wav
98
+ conversion.
99
+ - id: cp2077.audio.sounds.audio-metadata-profile-shape
100
+ claim: A complete per-weapon audio impact profile in
101
+ base\sound\metadata\cooked_metadata.audio_metadata exists as BOTH an
102
+ audioMeleeWeaponConfiguration entry and an audioMeleeWeaponVariations entry; a profile missing
103
+ either half should be treated as incomplete before assigning it to a weapon.
104
+ status: inferred
105
+ source: ModWright research
106
+ tags:
107
+ - audio
108
+ - tweakdb
109
+ - profile
110
+ - metadata
111
+ - verification
112
+ detail: The audit explicitly verified audio_melee_metadata_borg_machete has both shapes, "the same
113
+ shape as the kukri_voodoo it replaces," before applying it — treating shape-completeness as a
114
+ precondition, not an assumption.
115
+ - id: cp2077.audio.sounds.new-wem-audio-needs-redmod-sound-pipeline
116
+ claim: Getting modified or new audio samples into the game (as opposed to reassigning which existing
117
+ vanilla event/profile a weapon uses) requires REDmod's sound pipeline — a REDmod module
118
+ shipping .wem + info.json — not ArchiveXL; this is a deployment path the mod does not
119
+ currently use at all.
120
+ status: unverified
121
+ source: ModWright research
122
+ tags:
123
+ - audio
124
+ - redmod
125
+ - wem
126
+ - pipeline
127
+ - plan
128
+ detail: Framed explicitly as a future phase, budgeted separately, "only after Route A proves
129
+ insufficient." No attempt at this path is recorded.
130
+ - id: cp2077.audio.sounds.vanilla-family-has-deeper-whoosh-variants
131
+ claim: The katana audio family already ships heavier/deeper variant events for whoosh and handling
132
+ sounds (e.g. w_melee_katana_whoosh_large, w_melee_katana_handling_strong) that can be
133
+ substituted by simple rename with no new audio authoring, if a reskin needs to go further than
134
+ the impact-profile swap alone.
135
+ status: inferred
136
+ source: ModWright research
137
+ tags:
138
+ - audio
139
+ - katana
140
+ - whoosh
141
+ - variant
142
+ - reskin
143
+ detail: "w_melee_katana_whoosh -> w_melee_katana_whoosh_large (1670341267);
144
+ w_melee_katana_handling_soft -> w_melee_katana_handling_strong (275000592). Other whoosh
145
+ families available as impact-profile alternatives if borg_machete is not heavy enough: machete
146
+ (_heavy), blade (_normal), cut_o_matic (_low), blunt (_heavy/_low), sledgehammer,
147
+ boss_sledgehammer, caretaker_shovel (_heavy). None of this was applied as of the audit;
148
+ recorded as available inventory."
149
+ - id: cp2077.audio.sounds.donor-clip-anim-events-inherited-unintentionally
150
+ claim: When a weapon's attack animations are re-authored from a donor weapon's clips (rather than
151
+ newly authored), the donor's baked audio events come along for free and unintentionally — the
152
+ resulting weapon sounds like its animation donor, not its own identity, until someone audits
153
+ and reskins the events deliberately.
154
+ status: verified
155
+ source: ModWright field verification
156
+ tags:
157
+ - audio
158
+ - anim-event
159
+ - donor
160
+ - reskin
161
+ detail: The weapon's light-attack clips are re-authored katana clips (see the shared animation work,
162
+ out of scope here), so all of their baked audio events are still w_melee_katana_*. This is the
163
+ mechanism behind cp2077.audio.sounds.two-independent-audio-systems-per-weapon's swing side
164
+ specifically.