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,174 @@
1
+ game: baldursgate3
2
+ topic: vfx.materials
3
+ title: VFX effects, MultiEffectInfo, materials, and custom models
4
+ facts:
5
+ - id: bg3.vfx.spell-effect-fields-hold-mei
6
+ claim: Spell effect fields (PrepareEffect/CastEffect/TargetEffect/BeamEffect/…) hold a
7
+ MultiEffectInfo UUID, not an effect resource ID. Each MEI is its own tiny .lsf at
8
+ Public/<Mod>/MultiEffectInfos/<uuid>.lsf (filename = UUID); custom MEIs in a mod's own folder
9
+ are picked up.
10
+ status: verified
11
+ verified_on: 4.73.98.727 (Patch 8)
12
+ source: ModWright field verification
13
+ tags:
14
+ - vfx
15
+ - multieffectinfo
16
+ - mei
17
+ - spells
18
+ detail: Vanilla ships ~4000 MEIs in Shared.pak.
19
+ - id: bg3.vfx.mei-structure
20
+ claim: 'A MEI (region MultiEffectInfos) holds ≥1 EffectInfo child: EffectResourceGuid (the actual
21
+ effect), BindSourceTo/BindTargetTo (SourceEntity/TargetEntity), SourceBone/TargetBone (e.g.
22
+ Dummy_R_HandFX → Dummy_BodyFX), Pivot, UseDistance (drives an lsfx "Distance To Target" input
23
+ — this is how beams stretch caster→victim), Min/MaxDistance, DetachSource/Target.'
24
+ status: verified
25
+ verified_on: 4.73.98.727 (Patch 8)
26
+ source: ModWright field verification
27
+ tags:
28
+ - vfx
29
+ - mei
30
+ - structure
31
+ - bones
32
+ detail: "UseDistance snaps a beam to the source→target distance, which is a real constraint on
33
+ animating beam length: a class mod's roll-out attempts animated the Model's Uniform Scale keys
34
+ instead, and its notes record the open possibility that outward growth cannot be keyframed
35
+ while UseDistance drives length."
36
+ - id: bg3.vfx.effectresource-in-bank
37
+ claim: "EffectResourceGuid matches a Resource node ID in an EffectBank _merged.lsf (vanilla:
38
+ Public/Shared/Content/Assets/Effects/Effects/**/[PAK]_*/_merged.lsf; mods can add their own
39
+ bank anywhere under Public/<Mod>/Content/**/[PAK]_*/_merged.lsf). The bank node is metadata
40
+ only (EffectName, bounds, Duration) plus SourceFile → the .lsfx payload path inside the pak."
41
+ status: verified
42
+ verified_on: 4.73.98.727 (Patch 8)
43
+ source: ModWright field verification
44
+ tags:
45
+ - vfx
46
+ - effectbank
47
+ - resource
48
+ - metadata
49
+ detail: The engine merges all banks from all loaded mods globally, so GUIDs resolve cross-pak.
50
+ - id: bg3.vfx.lsfx-recoloring
51
+ claim: ".lsfx files (Effects.pak, Public/Shared/Assets/Effects/Effects_Banks/**) are plain LSF:
52
+ divine convert-resource round-trips lsfx↔lsx. Colours are editable fvec4 keyframes under
53
+ Properties (Model Appearance.Color = mesh tint multiplier, Particle.Appearance.Color =
54
+ particle gradient). Recolor = clone lsfx + edit fvec4s + own EffectBank entry + own MEI +
55
+ point the spell field at the new MEI UUID."
56
+ status: verified
57
+ verified_on: 4.73.98.727 (Patch 8)
58
+ source: ModWright field verification
59
+ tags:
60
+ - vfx
61
+ - lsfx
62
+ - recoloring
63
+ - colors
64
+ detail: Scale/rotation keys are editable the same way — a class mod rewrote a garrote Model's "Scale
65
+ And Rotation.Uniform Scale" keys (normalized time, pivot = Source hand) to change the wire's
66
+ retract timing, regenerating the lsfx in place with zero GUID/stat/bank changes.
67
+ - id: bg3.vfx.beam-effect-field
68
+ claim: A beam lives ONLY in the BeamEffect field — copying Prepare/Cast/Target GUIDs from a beam
69
+ spell (e.g. Target_ThornWhip) misses the beam entirely. Also, AttackSpellOverride basic
70
+ attacks run the override's mechanics but fire NONE of its cast VFX/animation; only a real cast
71
+ (e.g. an UnlockSpell'ed action) plays them.
72
+ status: verified
73
+ verified_on: 4.73.98.727 (Patch 8)
74
+ source: ModWright field verification
75
+ tags:
76
+ - vfx
77
+ - beam
78
+ - attackspelloverride
79
+ - animation
80
+ detail: This is the gotcha behind "I copied a beam spell's effects and got no beam".
81
+ - id: bg3.vfx.lslib-meta-headers
82
+ claim: Keep the same lslib_meta string (e.g. "v1,bswap_guids,…") when hand-authoring lsx for divine
83
+ conversion. The GUID strings displayed in lsx are the logical, game-visible GUIDs — use
84
+ identical strings across MEI, bank and stats and everything stays consistent.
85
+ status: verified
86
+ verified_on: 4.73.98.727 (Patch 8)
87
+ source: ModWright field verification
88
+ tags:
89
+ - vfx
90
+ - lslib
91
+ - meta
92
+ - guids
93
+ detail: "Practical consequence: you can copy a GUID out of one converted lsx and paste it into
94
+ another without worrying about byte order, as long as the meta string is preserved on the
95
+ round-trip."
96
+ - id: bg3.materials.no-custom-base-material
97
+ claim: "There is no standalone material registry: MaterialBank is a region inside the same
98
+ _merged.lsf bank files that hold VisualBank (Public/<ns>/Content/**/[PAK]_*/_merged.lsf), and
99
+ one merged file can hold VirtualTextureBank, PhysicsBank, MaterialBank, TextureBank and
100
+ VisualBank side by side. A new BASE material cannot be authored without the Toolkit, because
101
+ each base needs compiled per-platform shaders (.bshd/.shd) beside the .lsf — so mods recolor
102
+ by registering a new INSTANCE of a vanilla base."
103
+ status: inferred
104
+ source: ModWright research
105
+ tags:
106
+ - materials
107
+ - materialbank
108
+ - base
109
+ - instance
110
+ detail: "The engine merges all banks from all loaded mods globally, so GUIDs resolve
111
+ cross-pak/cross-mod. Worked example from the notes: MaterialID 67605e13-…
112
+ (WPN_HUM_Warpick_A_0) is registered in
113
+ Shared.pak:Public/Shared/Content/Assets/Weapons/[PAK]_Humans/_merged.lsf."
114
+ - id: bg3.materials.instance-recipe
115
+ claim: "A MaterialBank Resource node is a material INSTANCE: ID (FixedString GUID = what
116
+ VisualBank's MaterialID references), Name, MaterialType (uint8; copy from a vanilla instance
117
+ of the same base — 4 = VT weapon, 27 = Glass_Glow, 5 = GM staff), DiffusionProfileUUID,
118
+ SourceFile = path to a base material .lsf under Public/Shared/Assets/Materials/…, plus
119
+ children (ScalarParameters / Vector3Parameters / Texture2DParameters /
120
+ VirtualTextureParameters) that override the base's parameters (ParameterName must match the
121
+ base's exactly; Enabled=True to take effect)."
122
+ status: inferred
123
+ source: ModWright research
124
+ tags:
125
+ - materials
126
+ - instance
127
+ - parameters
128
+ - customization
129
+ detail: The base material .lsf contains NO GUID (region Material, no ID attribute) — the bank entry
130
+ is the sole GUID→file mapping. All bank IDs are FixedString, so there is no bswap_guids
131
+ concern.
132
+ - id: bg3.materials.glow-capable-bases
133
+ claim: "Glow-capable bases: Base_Glass_Glow (params GlowColor fvec3 + GlowIntensity, classic
134
+ textures) versus the *_GM_VT family (the param is Glow_Color — with an underscore — plus
135
+ glowmap/Gradients VT textures; this is what vanilla elemental weapons use, e.g.
136
+ WPN_HUM_Glaive_A_2_2G_GM_Thunder). Base_VT (the plain weapon base) has no glow params at all."
137
+ status: inferred
138
+ source: ModWright research
139
+ tags:
140
+ - materials
141
+ - glow
142
+ - bases
143
+ - parameters
144
+ detail: The parameter name differs by base family (GlowColor vs Glow_Color), and ParameterName must
145
+ match the base exactly for an instance override to take effect.
146
+ - id: bg3.materials.clone-recipe
147
+ claim: "Cleanest recipe for a recolour: clone a full vanilla instance node of the target base (e.g.
148
+ the Lathander crystal 4dd462e8-d31e-ca0d-e3db-6acf40fef4ec for Base_Glass_Glow, in
149
+ Assets/Puzzle/[PAK]_Lathander/_merged.lsf), keep its texture GUIDs and DiffusionProfileUUID
150
+ verbatim (they are globally registered), give it a fresh v4 GUID + Name, retint GlowColor,
151
+ then point VisualBank Objects.MaterialID (every LOD row) at the new GUID. No meta.lsx
152
+ dependency changes are needed — Shared.pak and Materials.pak are implicit."
153
+ status: unverified
154
+ source: ModWright research
155
+ tags:
156
+ - materials
157
+ - recoloring
158
+ - recipe
159
+ detail: The same clone-and-retint shape is written up in more depth for armour/gloves in a class
160
+ mod's research notes, also unexecuted. Treat it as the planned route, not a proven one, and
161
+ pair the first attempt with a diagnostic.
162
+ - id: bg3.materials.divine-bracket-workaround
163
+ claim: Divine.exe convert-resource -s chokes on literal [PAK] brackets in the source path (glob
164
+ expansion) — copy the file to a bracket-free path first.
165
+ status: verified
166
+ verified_on: 4.73.98.727 (Patch 8)
167
+ source: ModWright field verification
168
+ tags:
169
+ - materials
170
+ - divine
171
+ - paths
172
+ - brackets
173
+ detail: "Related PowerShell trap when grepping the same paths: -Path treats [PAK]-style brackets as
174
+ wildcards, so use -LiteralPath or [System.IO.File]::ReadAllText."
@@ -0,0 +1,73 @@
1
+ game: baldursgate3
2
+ topic: visuals.characterfix
3
+ title: Fixing invisible / default-appearance Character Visuals in the Toolkit
4
+ facts:
5
+ - id: bg3.visuals.characterfix.base-dropdown-must-match-animation-set
6
+ claim: In the Toolkit's Character Visual editor, the "_Base" selected in the first (leftmost)
7
+ drop-down must be set to whatever animation-set base the character actually uses, or the
8
+ visual's equipment slots won't resolve correctly.
9
+ status: community
10
+ source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 1
11
+ tags:
12
+ - toolkit
13
+ - character-visuals
14
+ - invisible
15
+ - animation-set
16
+ - id: bg3.visuals.characterfix.filter-must-include-own-base-again
17
+ claim: 'After clicking Filter in the Character Visual editor, the "_Base" must be added a second
18
+ time inside the filter window itself: "search and double click to add your _Base again in the
19
+ first window". The outer drop-down and the filter window are separate settings, both
20
+ required.'
21
+ status: community
22
+ source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, steps 2-3
23
+ tags:
24
+ - toolkit
25
+ - character-visuals
26
+ - filter
27
+ - silent-failure
28
+ - id: bg3.visuals.characterfix.filters-use-naming-prefix
29
+ claim: Additional Filters entries in the Character Visual editor should reflect the naming prefix of
30
+ whatever assets you want selectable for that character — only assets whose names match an
31
+ active filter prefix will show up as pickable options later in the fix.
32
+ status: community
33
+ source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 4
34
+ tags:
35
+ - toolkit
36
+ - character-visuals
37
+ - filter
38
+ - naming-convention
39
+ - id: bg3.visuals.characterfix.body-gr2-goes-in-lower-right-slot
40
+ claim: The character's body .GR2 mesh goes into a separate field of the Filter window — "To the
41
+ lower right by 1, add the body gr2 by searching and double clicking" — not into the "_Base" or
42
+ prefix-filter entries.
43
+ status: community
44
+ source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 5
45
+ tags:
46
+ - toolkit
47
+ - character-visuals
48
+ - body-mesh
49
+ - id: bg3.visuals.characterfix.save-close-required-before-picking-body
50
+ claim: The Filter window must be saved and closed (Save & Close) before the newly filtered body
51
+ option becomes selectable in the Character Visual editor's lower body drop-down.
52
+ status: community
53
+ source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, steps 6-7
54
+ tags:
55
+ - toolkit
56
+ - character-visuals
57
+ - save
58
+ - ordering
59
+ - id: bg3.visuals.characterfix.missing-slots-added-with-plus
60
+ claim: "Any equipment slots the character is missing at the bottom of the Character Visual editor
61
+ must be added manually with the \"+\" button: \"At the bottom, add any slots you need and
62
+ don't have with the +. Anything with prefixes matching your filters and matching the slot
63
+ should show here now!\""
64
+ status: community
65
+ source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 8
66
+ tags:
67
+ - toolkit
68
+ - character-visuals
69
+ - slots
70
+ - filter
71
+ detail: "This is the fix for the symptom the page is titled after: a character showing as invisible
72
+ or with a default/fallback appearance because its Character Visual has no filtered, matching
73
+ options wired up for one or more slots."
@@ -0,0 +1,118 @@
1
+ game: cyberpunk2077
2
+ topic: animations.anims
3
+ title: Linking a custom .anims file into a scene's cinematic animation sets
4
+ facts:
5
+ - id: cp2077.animations.anims.three-part-index-linked-system
6
+ claim: "Playing a custom animation in a scene is \"a three-part system\": the Resource List
7
+ (`resourceReferences`) naming the external `.anims` files and the animations used from them;
8
+ the actor's \"Permissions\" (`playerActors` / `actors`) saying which animation sets it may
9
+ use; and the Event in the sceneGraph that plays one CName. \"The link between these three
10
+ parts is a simple index number (ID).\""
11
+ status: community
12
+ source: wiki.redmodding.org "Adding Animations", unheaded introduction and the "library" analogy
13
+ that follows it
14
+ tags:
15
+ - animation
16
+ - scene
17
+ - cinematicanimsets
18
+ - index-linked
19
+ detail: "Field-name caution for a validator: the page's introduction and \"Tying It All Together\"
20
+ write `resourceReferences`, while steps 1 and 2 write `resouresReferences`; the introduction's
21
+ spelling is the one used throughout these facts."
22
+ - id: cp2077.animations.anims.cinematicanimsets-depotpath-field
23
+ claim: A new `.anims` file is registered by adding an entry to
24
+ `resourceReferences.cinematicAnimSets` and setting its animation file path, "in the JSON, this
25
+ is `asyncAnimSet.DepotPath`". Entries are indexed from 0 upward and the index is reused in the
26
+ next two steps.
27
+ status: community
28
+ source: 'wiki.redmodding.org "Adding Animations", section "Step 1: Add the Animation Resource File"'
29
+ tags:
30
+ - animation
31
+ - scene
32
+ - cinematicanimsets
33
+ - depotpath
34
+ - syntax
35
+ detail: The page's example path is
36
+ `base\animations\npc\generic_characters\male_average\interactive_scene\generic_average_male_transitions.anims`.
37
+ - id: cp2077.animations.anims.cinematicanimnames-index-must-match
38
+ claim: An entry must be added to `resourceReferences.cinematicAnimNames` "at the exact same index"
39
+ as its `cinematicAnimSets` entry — "This is the most critical part. The index of
40
+ `cinematicAnimSets` and `cinematicAnimNames` must match for the same animation set." Inside
41
+ it, the `animationNames` array lists the CName of each animation to be called from that
42
+ `.anims` file.
43
+ status: community
44
+ source: 'wiki.redmodding.org "Adding Animations", section "Step 2: List the Animation Names"'
45
+ tags:
46
+ - animation
47
+ - scene
48
+ - cinematicanimnames
49
+ - index-match
50
+ - gotcha
51
+ - id: cp2077.animations.anims.actor-permission-is-index-only
52
+ claim: 'An actor is granted an animation set by adding an entry to its own animation-set array —
53
+ `bodyCinematicAnimSets` (full-body cinematic), `facialCinematicAnimSets` (facial expressions)
54
+ or `gameplayAnimSets` — where "This new entry will have a single, important field: `id`", set
55
+ to the shared index. The actor entry carries no resource reference of its own.'
56
+ status: community
57
+ source: "wiki.redmodding.org \"Adding Animations\", section \"Step 3: Give the Actor 'Permission' to
58
+ Use the Animation Set\""
59
+ tags:
60
+ - animation
61
+ - scene
62
+ - playeractors
63
+ - bodycinematicanimsets
64
+ - syntax
65
+ - id: cp2077.animations.anims.playeractors-vs-actors-array
66
+ claim: "Where to find the actor: \"if it's the player then the `playerActors`[0] or if it's a
67
+ specific actor, then find the entry in the `actors` array\"."
68
+ status: community
69
+ source: "wiki.redmodding.org \"Adding Animations\", section \"Step 3: Give the Actor 'Permission' to
70
+ Use the Animation Set\" (step 1)"
71
+ tags:
72
+ - animation
73
+ - scene
74
+ - playeractors
75
+ - actors
76
+ - syntax
77
+ - id: cp2077.animations.anims.rule-generalises-to-other-animset-types
78
+ claim: '"Although the guide specifically mentions `bodyCinematicAnimSets`, the same principle
79
+ applies for other animSets as well such as `lipsyncAnimSets`, `gameplayAnimSets`."'
80
+ status: community
81
+ source: wiki.redmodding.org "Adding Animations", info hint at the top of the page
82
+ tags:
83
+ - animation
84
+ - scene
85
+ - lipsyncanimsets
86
+ - gameplayanimsets
87
+ - index-match
88
+ - id: cp2077.animations.anims.runtime-resolution-order
89
+ claim: "At runtime the engine resolves a scene animation by index alone: it sees the actor is
90
+ playing the animation, checks the actor's `bodyCinematicAnimSets` for which animation set ids
91
+ it has, uses that id \"as an index to find the .anims file in
92
+ resourceReferences.cinematicAnimSets\", loads that file and plays the specified CName."
93
+ status: community
94
+ source: 'wiki.redmodding.org "Adding Animations", section "Tying It All Together: Playing the
95
+ animation"'
96
+ tags:
97
+ - animation
98
+ - scene
99
+ - runtime-resolution
100
+ detail: "Renamed from cp2077.animations.anims.runtime-resolution-has-no-validation on 2026-09-07:
101
+ the page describes the resolution order but says nothing about what a wrong index does or
102
+ whether WolvenKit validates it, so the previous claim's \"fails silently rather than raising a
103
+ WolvenKit-side validation error\" was removed as unsourced. The `scnPlaySkAnimEvent` in the
104
+ scene graph selects the animation by CName, e.g. `lie_ground__r_elbow_on_ground__01`."
105
+ - id: cp2077.animations.anims.community-anim-lookup-spreadsheet
106
+ claim: 'For valid animation CNames and their durations the guide points at a community Google Sheets
107
+ lookup: "Use this anim look up sheet to search for specific anim names, duration etc"
108
+ (docs.google.com/spreadsheets/d/1YxZf90FzvDfJcny94kTSed46ItH_0VyZr76rWtgEAxc).'
109
+ status: community
110
+ source: 'wiki.redmodding.org "Adding Animations", success hint under "Step 2: List the Animation
111
+ Names"'
112
+ tags:
113
+ - animation
114
+ - scene
115
+ - tooling
116
+ - community-resource
117
+ detail: "Corrected 2026-09-07: the previous claim's rationale, that `.anims` files are not browsable
118
+ by animation name from WolvenKit's scene editor, is not stated on the page."
@@ -0,0 +1,163 @@
1
+ game: cyberpunk2077
2
+ topic: anims.archivexl
3
+ title: ArchiveXL animation config, resource patching, and the upstream fix for custom per-weapon FPP
4
+ anim sets
5
+ facts:
6
+ - id: cp2077.anims.archivexl.animations-config-schema
7
+ claim: An ArchiveXL `animations:` .xl config entry supports `entity` (a scalar path or a list of
8
+ entity paths), `set` (the .anims resource path to mount), `priority` (an integer), and `vars`
9
+ (a list of AnimWrapper variable names gating when the set mounts).
10
+ status: inferred
11
+ source: ModWright research
12
+ tags:
13
+ - animations-config
14
+ - xl-schema
15
+ - entity
16
+ - set
17
+ - priority
18
+ - vars
19
+ detail: Described from the context of filing the two parser-bug issues below, which specifically
20
+ exercise the `entity`, `set`, `priority` and `vars` keys against
21
+ v1.27.0/v1.27.1/v1.28.0-beta.1.
22
+ - id: cp2077.anims.archivexl.animconfig-vars-parser-bug
23
+ claim: "ArchiveXL's AnimationsConfig::LoadYAML (src/App/Extensions/Animation/Config.cpp, line 82,
24
+ present in v1.27.0, v1.27.1 and v1.28.0-beta.1) has a parser bug: the loop over an entry's
25
+ `vars:` list tests `variablesNode.IsScalar()` (the SEQUENCE node) instead of
26
+ `variableNode.IsScalar()` (the item), so the condition is always false and entry.variables
27
+ stays empty — an `animations:` entry declared with `vars:` is injected with an EMPTY
28
+ variableNames list and mounts unconditionally instead of being variable-gated."
29
+ status: verified
30
+ verified_on: "2.3"
31
+ source: ModWright field verification
32
+ tags:
33
+ - archivexl
34
+ - parser-bug
35
+ - vars
36
+ - animwrapper-gating
37
+ - config-cpp
38
+ detail: "Practical effect for a set that overrides shared animation names: this bug leaks the
39
+ override to every weapon/state using those clip names, since the intended variable gate never
40
+ takes effect. It went unnoticed by photo-mode pose packs because they do not use `vars:`. Fix
41
+ (one line): test `variableNode.IsScalar()` instead of `variablesNode.IsScalar()`."
42
+ - id: cp2077.anims.archivexl.animconfig-entity-list-parser-bug
43
+ claim: "The same Config.cpp file (line 50) has a second parser bug: its `else if` branch for the
44
+ `entity:` field repeats the same condition as the `if` branch above it
45
+ (`entityNode.IsScalar()`) instead of testing `entityNode.IsSequence()`, so a LIST form of
46
+ `entity:` (multiple entity paths in one `animations:` entry) never parses and the whole entry
47
+ is rejected as malformed."
48
+ status: verified
49
+ verified_on: "2.3"
50
+ source: ModWright field verification
51
+ tags:
52
+ - archivexl
53
+ - parser-bug
54
+ - entity
55
+ - list-form
56
+ - config-cpp
57
+ detail: "Fix (one line): change the `else if` test from `entityNode.IsScalar()` to
58
+ `entityNode.IsSequence()`."
59
+ - id: cp2077.anims.archivexl.pr-merged-upstream
60
+ claim: A pull request fixing both Config.cpp parser bugs (the `vars` drop and the unreachable
61
+ list-form `entity:`) was submitted to psiberx/cp2077-archive-xl and was accepted and merged
62
+ into main on 2026-08-20.
63
+ status: inferred
64
+ source: ModWright research
65
+ tags:
66
+ - archivexl
67
+ - pull-request
68
+ - upstream
69
+ - merged
70
+ - animations-config
71
+ detail: "Downgraded from verified to community by review: the merge is an upstream repository event
72
+ reported by the project's own notes, not something observed in the engine here, and it has not
73
+ been re-checked against psiberx/cp2077-archive-xl. The mod does not depend on the fix landing
74
+ in a release — it ships via the ResourcePatch route instead (see
75
+ cp2077.anims.sets.resourcepatch-mounting-route) — but once an ArchiveXL release ships the fix,
76
+ `animations:` becomes a viable simpler alternative mounting method for a per-weapon FPP anim
77
+ set. Update 2026-09-07: both fixes are present in ArchiveXL v1.27.3 (source read, not tested
78
+ in engine, hence inferred). `animations:` with `vars:` and list-form `entity:` should work
79
+ from 1.27.3; the ResourcePatch route remains what the shipped mod uses and the only one
80
+ verified in game."
81
+ - id: cp2077.anims.archivexl.local-fix-dlls-used-for-testing
82
+ claim: "Before filing the upstream PR, the project built and locally tested three variant DLLs
83
+ against the stock v1.27.1 baseline: a stock reference build (ArchiveXL-1.27.1-stock.dll), a
84
+ build with only the two Config.cpp parser fixes applied (ArchiveXL-1.27.1-fix1.dll /
85
+ ArchiveXL-fix1-animconfig.dll), and a build additionally patching the
86
+ ResourcePatch/Extension.cpp header gate that was suspected (later retracted) to be a second
87
+ bug (ArchiveXL-1.27.1-fix2.dll / ArchiveXL-fix2-resourcepatch.dll)."
88
+ status: inferred
89
+ source: ModWright research
90
+ tags:
91
+ - archivexl
92
+ - local-build
93
+ - testing
94
+ - fix-dll
95
+ - resourcepatch
96
+ detail: Deploying a locally built test DLL requires backing up the original 1.27.1
97
+ red4ext\plugins\ArchiveXL\ArchiveXL.dll first and closing the game before overwriting it.
98
+ - id: cp2077.anims.archivexl.resourcepatch-header-issue-retracted
99
+ claim: An initially suspected ArchiveXL bug — that ResourcePatch component patches onto entity
100
+ templates silently skip base-game-cooked (base\) templates while applying fine to Phantom
101
+ Liberty (ep1\) templates, because of an early return when compiledDataHeader.IsEmpty() — was
102
+ investigated as a candidate "Fix 2" but the observed behavior was later found to be
103
+ MISTARGETING on the mod's own part, not an ArchiveXL bug; no issue was filed for it, and any
104
+ posted draft was to be retracted.
105
+ status: contradicted
106
+ source: ModWright research
107
+ tags:
108
+ - archivexl
109
+ - resourcepatch
110
+ - retracted
111
+ - mistargeting
112
+ - dead-belief
113
+ detail: The candidate bug fix (relaxing the early `if (templateHeader.IsEmpty()) return;` gate and
114
+ enabling a commented-out ObjectPackageReader fallback) was never submitted upstream. See
115
+ cp2077.anims.sets.patch-the-ep1-player-ent for the real cause (the mod's own mistargeting of
116
+ the base\ player entity on a Phantom Liberty install), which supersedes this.
117
+ - id: cp2077.anims.archivexl.animwrapper-raised-lowered-from-redscript
118
+ claim: The AnimWrapper variable that gates a custom per-weapon FPP anim set is raised and lowered
119
+ from redscript on equip/holster events, wrapping PlayerPuppet.OnItemAddedToSlot /
120
+ OnItemRemovedFromSlot, gated on the WeaponRight slot plus a custom weapon tag; this
121
+ registration technique is independent of the `animations:` ArchiveXL config feature entirely.
122
+ status: verified
123
+ source: ModWright field verification
124
+ tags:
125
+ - animwrapper
126
+ - redscript
127
+ - onitemadded
128
+ - equip-holster
129
+ - gating
130
+ detail: Verified in game via CET console (a mod's own debug call to disable its dev harness, then
131
+ holster/redraw to confirm the redscript path alone keeps the set gated correctly).
132
+ - id: cp2077.anims.archivexl.melee-animation-randomizer-steering-pattern
133
+ claim: A dissected community mod ("Melee Animation Randomizer", v4 source) demonstrated the pattern
134
+ of steering an animgraph's clip choice at runtime by using @wrapMethod on
135
+ Melee*AttackEvents.OnEnter to rewrite AnimFeature_MeleeSlotData(attackType, comboNumber) AFTER
136
+ the vanilla call runs, letting a mounted set play any addressable entry for any state; the
137
+ same mod also demonstrated a startup/active/recover speed-blend between the mechanical
138
+ (record) and native (visual) timing, a trailAttackSide fix, and an NPC hit-reaction fix via
139
+ HitReactionComponent.EvaluateHit attackDefinition swap.
140
+ status: community
141
+ source: ModWright research
142
+ tags:
143
+ - community-mod
144
+ - melee-animation-randomizer
145
+ - animsteering-pattern
146
+ - wrapmethod
147
+ detail: This dissected pattern is the direct ancestor of a melee weapon mod's own finisher redirect
148
+ in redscript; a mod reusing the pattern should credit the source mod.
149
+ - id: cp2077.anims.archivexl.archive-changes-need-restart-not-hot-reload
150
+ claim: "TweakXL.Reload() (the CET console hot-reload call) reloads TweakDB yaml only; ArchiveXL
151
+ loads and registers .xl manifest entries (animations config, resource patches, localization,
152
+ factories, streaming) once at game initialization and does NOT re-read them on a tweak reload
153
+ — any archive-side change (a repacked .anims, a changed animations: entry, a resource patch
154
+ edit) needs a repack, a redeploy, and a full game RESTART."
155
+ status: verified
156
+ source: ModWright field verification
157
+ tags:
158
+ - tweakxl-reload
159
+ - archive-restart
160
+ - hot-reload-asymmetry
161
+ - archivexl
162
+ detail: This asymmetry is the main cost driver of the archive-side iteration loop, distinct from and
163
+ slower than the yaml-side loop.