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,209 @@
1
+ game: cyberpunk2077
2
+ topic: mesh.blender
3
+ title: blender mesh authoring and export for Cyberpunk 2077
4
+ facts:
5
+ - id: cp2077.mesh.vertex-cap-65535
6
+ claim: The engine enforces a hard cap of 65,535 vertices per submesh; exceeding this produces a
7
+ silently invalid mesh that may render incompletely or fail to load.
8
+ status: verified
9
+ verified_on: "2.31"
10
+ source: ModWright field verification
11
+ tags:
12
+ - vertex
13
+ - limit
14
+ - submesh
15
+ - cap
16
+ - rendering
17
+ detail: "The trigger was double-siding: the export script's comment reads \"gunmetal CANNOT be
18
+ doubled wholesale: 2x 47k verts exceeds the engine's 65535-per-submesh limit\". The fix was
19
+ NOT to split into more submeshes — only the black submesh is duplicated and normal-flipped (in
20
+ the exporter script), and inward-facing gunmetal faces are repaired at the source in Blender
21
+ instead."
22
+ - id: cp2077.mesh.join-by-material-submesh-order
23
+ claim: When exporting a kitbashed mesh with multiple materials, join geometry by material slot to
24
+ create fixed submesh indices; wolvenkit import expects submesh order to match the material
25
+ assignment sequence.
26
+ status: inferred
27
+ source: ModWright research
28
+ tags:
29
+ - mesh
30
+ - material
31
+ - submesh
32
+ - join
33
+ - export
34
+ detail: 'The current export produces FOUR submeshes, in this fixed order: submesh_00 gunmetal body,
35
+ submesh_01 red grip, submesh_02 ink lettering, submesh_03 black parts. The script comment
36
+ explains the ordering rule — "00..02 keep their old indices, black appends as 03 so existing
37
+ chunkMaterials stay valid" — and grouping is by MATERIAL, not object name, "so face-level
38
+ edits carry over". The earlier an earlier exporter produced three.'
39
+ - id: cp2077.mesh.glb-triangulation-required
40
+ claim: glb export from blender must have all faces triangulated; n-gons or quads produce invalid
41
+ mesh data at import time.
42
+ status: verified
43
+ source: ModWright field verification
44
+ tags:
45
+ - glb
46
+ - blender
47
+ - triangulation
48
+ - faces
49
+ - n-gons
50
+ detail: The export script triangulates every joined submesh with
51
+ bpy.ops.mesh.quads_convert_to_tris(quad_method='BEAUTY', ngon_method='BEAUTY') before export.
52
+ The sources state the requirement; the exact failure mode when it is skipped is not recorded,
53
+ so do not quote one. In-game verified_on/verified_by removed — this is a WolvenKit import
54
+ requirement, not an engine observation.
55
+ - id: cp2077.mesh.glb-tangent-vectors-required
56
+ claim: glb export must include tangent vectors baked for each vertex; missing tangents cause
57
+ incorrect normal mapping and lighting at import.
58
+ status: verified
59
+ source: ModWright field verification
60
+ tags:
61
+ - glb
62
+ - blender
63
+ - tangent
64
+ - normal-mapping
65
+ - export
66
+ detail: Tangents are requested explicitly in the glTF export call, not baked automatically by the
67
+ add-on. The lighting consequence in the claim is reasoning, not something the sources record.
68
+ - id: cp2077.mesh.glb-uv-layers-required
69
+ claim: glb export must include uv layers named correctly; missing or incorrectly named uv layers
70
+ cause material mapping failures.
71
+ status: verified
72
+ source: ModWright field verification
73
+ tags:
74
+ - glb
75
+ - uv
76
+ - blender
77
+ - layers
78
+ - material-mapping
79
+ detail: 'The exact requirement the script enforces: every mesh gets exactly ONE uv layer, named
80
+ UVMap (capital U, V, M). Meshes with none are smart-projected (angle_limit=1.15,
81
+ island_margin=0.02); extra layers are removed. The earlier version of this fact spelled the
82
+ layer "uvMap", which is wrong.'
83
+ - id: cp2077.mesh.cyberpunk-io-suite-exporter
84
+ claim: blender 5.1 with Cyberpunk IO Suite 2.0.0 add-on installed provides the export function for
85
+ glb files compatible with wolvenkit cli; the exporter handles triangulation, tangent baking,
86
+ and format conformance.
87
+ status: inferred
88
+ source: ModWright research
89
+ tags:
90
+ - blender
91
+ - cyberpunk-io-suite
92
+ - exporter
93
+ - glb
94
+ - add-on
95
+ detail: "Correction to the claim's second half: the export script does the triangulation, uv
96
+ normalisation and tangent request itself through plain bpy/glTF calls (the exporter script),
97
+ so those are not services of the add-on. What the add-on supplies is the import side for the
98
+ vanilla game meshes the kitbash is built from. build.ps1 -Export invokes blender --background
99
+ --python on the exporter script."
100
+ - id: cp2077.mesh.kitbash-donor-transfer
101
+ claim: When kitbashing (combining parts from multiple source meshes), preserve material assignments
102
+ and uv from donor meshes if possible; copying materials between donors can create mismatches
103
+ that require post-import fixing.
104
+ status: inferred
105
+ source: ModWright research
106
+ tags:
107
+ - kitbash
108
+ - material
109
+ - donor
110
+ - uv
111
+ - transfer
112
+ detail: One weapon mod's kitbash is imported over the Malorian 3516 mesh as donor, then materials
113
+ are reassigned by index with a mesh-materials script. Its notes record the resulting
114
+ chunkMaterials as [pasted__malorian_ml_base, malorian_ml_handle2 (red grip),
115
+ pasted__malorian_ml_base]. The "preserve if possible / mismatches need fixing" advice is the
116
+ author's generalisation.
117
+ - id: cp2077.mesh.material-pasting-convention
118
+ claim: When a material is copied from a donor mesh during kitbashing, it may be pasted with a
119
+ "pasted__" prefix in the name; these pasted materials are distinct from the original and allow
120
+ local overrides.
121
+ status: inferred
122
+ source: ModWright research
123
+ tags:
124
+ - material
125
+ - pasted
126
+ - naming
127
+ - convention
128
+ - override
129
+ detail: 'Only the names are sourced: pasted__malorian_ml_base for body/fittings and
130
+ malorian_ml_handle2 for the red grip. What the "pasted__" prefix means to the engine or to
131
+ WolvenKit is not stated anywhere in the sources; the "allows local overrides" reading is an
132
+ inference.'
133
+ - id: cp2077.mesh.chunk-materials-array-order
134
+ claim: The chunkMaterials array in a .mesh file specifies material assignments by index; the order
135
+ must match the submesh indices created during glb join-by-material.
136
+ status: inferred
137
+ source: ModWright research
138
+ tags:
139
+ - chunk
140
+ - material
141
+ - array
142
+ - index
143
+ - order
144
+ detail: One weapon mod's mesh-materials script keeps one appearance named "default" and writes three
145
+ chunkMaterials entries — index 0 pasted__malorian_ml_base, 1 malorian_ml_handle2, 2
146
+ pasted__malorian_ml_base — matching its three-submesh export script. A later four-submesh
147
+ export deliberately appends black as index 03 "so existing chunkMaterials stay valid", and the
148
+ shipped mod adds its own materials (mod\<mod>\materials\blackmetal.mi, <mod>_gunmetal.mi).
149
+ - id: cp2077.mesh.serialize-edit-deserialize-pattern
150
+ claim: "Complex mesh edits (material reassignment, submesh tweaks) are performed via: cli serialize
151
+ (binary to json) → Python script edit → cli deserialize (json to binary). This allows
152
+ programmatic mesh modification without gui interaction."
153
+ status: verified
154
+ source: ModWright field verification
155
+ tags:
156
+ - serialize
157
+ - deserialize
158
+ - mesh
159
+ - json
160
+ - edit
161
+ detail: "This is the pattern behind every scripted asset in the project (mesh materials, case entity
162
+ and app, sector, localization). In-game verified_on/verified_by removed: it is a WolvenKit CLI
163
+ workflow, not an engine observation."
164
+ - id: cp2077.mesh.donor-mesh-replacement
165
+ claim: When importing a custom glb over a donor mesh path, wolvenkit preserves the donor mesh's
166
+ material structure and embedded metadata; custom geometry replaces only the vertex/face data.
167
+ status: inferred
168
+ source: ModWright research
169
+ tags:
170
+ - donor
171
+ - mesh
172
+ - import
173
+ - replacement
174
+ - metadata
175
+ detail: The pipeline copies the donor mesh next to the glb and imports with --keep (-k in
176
+ build.ps1). That the donor's material structure and metadata survive is an inference from the
177
+ pipeline's shape and from the material-editing script having donor materialEntries to print;
178
+ no source states it directly.
179
+ - id: cp2077.mesh.phys-chunk-colliders
180
+ claim: Custom meshes used in lootable entities require a meshMeshParamPhysics chunk with box
181
+ colliders set to both Simple and Complex filter types; missing physics prevents interact
182
+ prompts.
183
+ status: verified
184
+ verified_on: "2.31"
185
+ source: ModWright field verification
186
+ tags:
187
+ - mesh
188
+ - physics
189
+ - collider
190
+ - box
191
+ - filter
192
+ - loot
193
+ detail: Applies to cache_case_top.mesh and cache_case_bottom.mesh. The prompt only appeared once the
194
+ physics param was grafted in, which is why this is listed among the late-stage lessons of the
195
+ completed build.
196
+ - id: cp2077.mesh.headless-blender-render
197
+ claim: Headless blender renders are used in the pipeline for icon generation (an icon-render script)
198
+ and visual QA; blender is launched with --background --python <script> to render without gui.
199
+ status: verified
200
+ source: ModWright field verification
201
+ tags:
202
+ - blender
203
+ - headless
204
+ - render
205
+ - script
206
+ - icon
207
+ detail: Four headless render scripts ship with the mod. README names the newer icon render as the
208
+ current inventory-icon render (moody top-lit pass + gamma curve); the older icon render is its
209
+ predecessor. In-game verified_on/verified_by removed — nothing here is observed in the engine.
@@ -0,0 +1,98 @@
1
+ game: cyberpunk2077
2
+ topic: nativedb.dump
3
+ title: cp2077-nativedb's RTTI dump generation and the shape of its reddump JSON files
4
+ facts:
5
+ - id: cp2077.nativedb.dump.generation-pipeline
6
+ claim: "NativeDB's RTTI dump assets are generated by installing the separate `RED4.RTTIDumper`
7
+ RED4ext plugin, running the game until loading blocks and then closing it, and copying four
8
+ files from `<game>\\bin\\x64\\dumps\\nativedb\\json` into the NativeDB project's
9
+ `src/assets/reddump/` folder: `enums.json`, `bitfields.json`, `classes.json` and
10
+ `globals.json`."
11
+ status: community
12
+ source: rayshader/cp2077-nativedb@b5d29af README.md:12-24, section "Setup"
13
+ tags:
14
+ - nativedb
15
+ - rttidumper
16
+ - dump
17
+ - generation
18
+ - reddump
19
+ - id: cp2077.nativedb.dump.readme-pinned-versions
20
+ claim: The snapshot of rayshader/cp2077-nativedb read for this intake badges itself as NativeDB
21
+ version 2.1.0, targeting Cyberpunk 2077 game version 2.31.
22
+ status: verified
23
+ verified_on: "2.31"
24
+ source: rayshader/cp2077-nativedb@b5d29af README.md:2-4, badge row at the top
25
+ tags:
26
+ - nativedb
27
+ - version
28
+ detail: Verified only as a literal reading of the two badges ("version - 2.1.0", "game - 2.31").
29
+ `verified_on` records the game version the README itself names, on the game's marketing axis;
30
+ nothing here was observed in-engine.
31
+ - id: cp2077.nativedb.dump.json-files-are-flat-lists-of-minified-records
32
+ claim: Each of the four `reddump/*.json` files is a flat top-level JSON array (not a nested tree
33
+ keyed by name); every element is an object whose field names are single lowercase letters
34
+ (`a`, `b`, `c`, ...) rather than descriptive names — the real field meanings are only
35
+ documented in NativeDB's own TypeScript AST types, not in the dump files themselves.
36
+ status: verified
37
+ source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/{enums,bitfields,classes,globals}.json
38
+ (structure only; no dump content transcribed beyond single illustrative records) and the
39
+ field-name comments in src/shared/red-ast/red-enum.ast.ts and red-class.ast.ts
40
+ tags:
41
+ - nativedb
42
+ - reddump
43
+ - json-shape
44
+ - minified-keys
45
+ - id: cp2077.nativedb.dump.enum-and-bitfield-record-shape
46
+ claim: In `enums.json` and `bitfields.json`, each record has field `a` (the enum/bitfield name),
47
+ optional `b` (an alias name) and `c` (an array of member objects); each member object has
48
+ exactly one key, the member's name, whose value is its numeric value (for an enum) or bit
49
+ index (for a bitfield).
50
+ status: verified
51
+ source: 'rayshader/cp2077-nativedb@b5d29af src/shared/red-ast/red-enum.ast.ts, the
52
+ `RedEnumJson`/`RedEnumMemberJson` interfaces (:4-12, the member interface commented "name:
53
+ value OR name: bit")'
54
+ tags:
55
+ - nativedb
56
+ - reddump
57
+ - enum
58
+ - bitfield
59
+ - schema
60
+ - id: cp2077.nativedb.dump.class-record-shape
61
+ claim: "In `classes.json`, each record has optional field `a` (parent class name), required `b` (the
62
+ class's own name), optional `c` (an alias name), required `d` (a numeric class-flags bitmask),
63
+ optional `e` (an array of property records) and optional `f` (an array of function records);
64
+ an optional `g: true` marks the record as a struct rather than a class."
65
+ status: verified
66
+ source: rayshader/cp2077-nativedb@b5d29af src/shared/red-ast/red-class.ast.ts, the `RedClassJson`
67
+ interface (:9-17)
68
+ tags:
69
+ - nativedb
70
+ - reddump
71
+ - class
72
+ - struct
73
+ - schema
74
+ - id: cp2077.nativedb.dump.property-and-function-record-shape
75
+ claim: A property record (inside a class's `e` array) has field `a` (a nested type descriptor),
76
+ optional `b` (the property name), optional `c` (a numeric flags value) and optional `d` (the
77
+ byte offset within the containing struct/class). A function record (inside a class's `f`
78
+ array, or a top-level entry in `globals.json`) has field `a` (the function's full/mangled
79
+ name), optional `b` (a short display name), optional `c` (the return type descriptor) and
80
+ required `d` (a numeric flags value); a function's parameters, when present, are an array of
81
+ property-shaped records under key `e`.
82
+ status: verified
83
+ source: rayshader/cp2077-nativedb@b5d29af src/shared/red-ast/red-property.ast.ts, the
84
+ `RedPropertyJson` interface (:6-11); and src/shared/red-ast/red-function.ast.ts, the
85
+ `RedFunctionJson` interface (:9-15)
86
+ tags:
87
+ - nativedb
88
+ - reddump
89
+ - property
90
+ - function
91
+ - offset
92
+ - flags
93
+ - schema
94
+ detail: 'Checked against the source (2026-09-08): an earlier detail said the sampled `globals.json`
95
+ entries carried only `a` and `d`. The first records in the file disprove that —
96
+ `AIInstantiateObject` is `{"a":...,"d":12}`, but `AT_AddATID` also carries `e` (parameters)
97
+ and `Abs` carries both `c` (return type) and `e`. All four keys occur in globals; only `a` and
98
+ `d` are non-optional.'
@@ -0,0 +1,275 @@
1
+ game: cyberpunk2077
2
+ topic: npc.appearance
3
+ title: NPC appearance patching in WolvenKit and AMM custom appearances
4
+ facts:
5
+ - id: cp2077.npc.appearance.component-prefix-naming
6
+ claim: "Component names in an NPC's `.app` are prefaced by a body-location code: \"t=torso (t0 is
7
+ usually the body mesh, t1 is usually clothes), l=legs, h=head, s=shoe\". Vik's default
8
+ appearance, for example, has `t0_001_ma_body__ripper_doc6245` (body mesh) and
9
+ `t1_001_ma_full__ripper_doc1487` (shirt)."
10
+ status: community
11
+ source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", section
12
+ "Understanding the .app file" (info hint)
13
+ tags:
14
+ - npc
15
+ - appearance
16
+ - app
17
+ - component-prefix
18
+ - naming
19
+ detail: The page hedges with "usually" and points at the canonical list under
20
+ garment-support-how-does-it-work#component-prefixes; the same prefixes are what garment
21
+ support scores against, which is why the dynamic-variants guide warns not to strip them when
22
+ renaming components. Page title and section name corrected 2026-09-07.
23
+ - id: cp2077.npc.appearance.edit-is-export-blender-reimport
24
+ claim: "Editing an NPC's mesh is a round trip, not a direct `.app` edit: check the mesh in
25
+ WolvenKit's Export Tool and \"Export Selected\"; in Blender (with the WolvenKit Blender IO
26
+ Suite installed) use \"File>Import>Cyberpunk GLTF\", edit, then export as a Cyberpunk GLB over
27
+ the same file; back in WolvenKit use \"Tools>Import Tool\" and \"import selected\"; finally
28
+ replace the component's \"mesh\" path in the `.app` with the new mesh's relative path
29
+ (right-click the mesh in the project explorer, \"copy relative path\")."
30
+ status: community
31
+ source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", sections
32
+ "Modifying the Body Mesh" and "Modifying the Clothes"
33
+ tags:
34
+ - npc
35
+ - appearance
36
+ - blender
37
+ - export
38
+ - import
39
+ - workflow
40
+ - id: cp2077.npc.appearance.edits-are-per-appearance-not-per-npc
41
+ claim: "Edits land on the one `appearances` array entry that was modified: \"since we didn't copy
42
+ the mesh and use a custom path, this mod would not display the other two appearances
43
+ correctly. You would have to modify the other clothes.\""
44
+ status: community
45
+ source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", section
46
+ "Modifying the Clothes" (closing warning hint)
47
+ tags:
48
+ - npc
49
+ - appearance
50
+ - gotcha
51
+ - multiple-appearances
52
+ detail: Vik has three appearances; the guide edits only the default one and says "the process is the
53
+ same for all of them". Section name corrected 2026-09-07 (there is no "Known Limitations &
54
+ Gotchas" heading).
55
+ - id: cp2077.npc.appearance.duplicated-mesh-needs-dependency-path-updated
56
+ claim: "\"Note that if you did copy the mesh and created a custom path, you would have to also
57
+ replace the path under 'AppearanceVisualController>appearanceDependancy' for the component to
58
+ appear correctly.\""
59
+ status: community
60
+ source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", section
61
+ "Modifying the Clothes" (closing warning hint)
62
+ tags:
63
+ - npc
64
+ - appearance
65
+ - appearancevisualcontroller
66
+ - dependency
67
+ - gotcha
68
+ detail: "The field really is spelled `appearanceDependancy` in the engine data. Corrected
69
+ 2026-09-07: the page says the component will not \"appear correctly\"; the previous claim's
70
+ \"silently keeps the old dependency resolved\" was unsourced."
71
+ - id: cp2077.npc.appearance.amm-collab-file-layout
72
+ claim: "An AMM custom-appearance Collab is two files in two different places: the Lua at
73
+ `bin/x64/plugins/cyber_engine_tweaks/mods/AppearanceMenuMod/Collabs/Custom
74
+ Appearances/your_custom_file.lua` inside the WolvenKit project's Resources directory, and a
75
+ `your_project_name.archive.xl` created DIRECTLY in that Resources directory, not alongside the
76
+ Lua."
77
+ status: community
78
+ source: 'wiki.redmodding.org "AMM: Custom NPC appearances", sections "The .lua file" (folder tree)
79
+ and "The .xl file > 1. Create the file"'
80
+ tags:
81
+ - npc
82
+ - amm
83
+ - collab
84
+ - file-structure
85
+ - cet
86
+ detail: "Corrected 2026-09-07: the previous claim placed the `.xl` \"in that same folder\" as the
87
+ Lua, which the page contradicts — \"Directly in your project's Resources directory, create an
88
+ empty text file called `your_project_name.archive.xl`\"."
89
+ - id: cp2077.npc.appearance.amm-lua-required-fields
90
+ claim: An AMM Collab Lua returns a table with `modder`, `unique_identifier`, `entity_id` and
91
+ `appearances`. `unique_identifier` "must be UNIQUE so be creative! NO SPACES OR SYMBOLS
92
+ ALLOWED"; `entity_id` is a string such as `"0xF43B2B48, 18"` that "You can find... using AMM's
93
+ Swap tab and looking at the NPC".
94
+ status: community
95
+ source: 'wiki.redmodding.org "AMM: Custom NPC appearances", section "The .lua file" (the example Lua
96
+ and its comments)'
97
+ tags:
98
+ - npc
99
+ - amm
100
+ - lua
101
+ - entity-id
102
+ - naming
103
+ - required-field
104
+ detail: The page links a dedicated finding-files-amm-npcs guide for locating the entity ID. Section
105
+ name corrected 2026-09-07 (there is no "Required Fields (.lua file)" heading).
106
+ - id: cp2077.npc.appearance.amm-delivered-as-resourcepatch
107
+ claim: "Community page confirms and extends cp2077.archivexl.manifest-top-level-keys. The Collab's
108
+ `.xl` uses a `resource:` / `patch:` block mapping the modder's own file to the vanilla file it
109
+ adds to — `path\\to\\your\\app_file.app: -
110
+ base\\characters\\appearances\\main_npc\\goro_takemura.app` and `path\\to\\your\\ent_file.ent:
111
+ - base\\quest\\primary_characters\\takemura.ent` — because \"Do not overwrite an NPC's
112
+ original files! This will cause compatibility issues for every single modder out there, and
113
+ risk breaking the NPC with every game update.\""
114
+ status: community
115
+ source: 'wiki.redmodding.org "AMM: Custom NPC appearances", danger hint under "Summary" and sections
116
+ "The .xl file > 1. Create the file", "2. Adjust the .app file path" and "3. Adjusting the .ent
117
+ file path"'
118
+ tags:
119
+ - npc
120
+ - amm
121
+ - archivexl
122
+ - resourcepatch
123
+ - compatibility
124
+ detail: Names cp2077.archivexl.manifest-top-level-keys
125
+ (knowledge/cyberpunk2077/archivexl.manifest.yaml), an inferred fact that lists `localization`,
126
+ `factories` and `streaming` as the three top-level `.xl` keys while explicitly saying that is
127
+ only what one weapon-mod manifest uses, not the whole schema. This page documents a fourth
128
+ top-level key, `resource`, with a `patch` sub-key — the same mechanism as
129
+ cp2077.clothing.refits.body-patch-lists-gendered-player-ents and
130
+ cp2077.anims.sets.resourcepatch-mounting-route. Both replaced paths are "relative paths"
131
+ copied from WolvenKit via `Copy Relative Path`.
132
+ - id: cp2077.npc.appearance.amm-appearance-names-must-match-exactly
133
+ claim: The Lua's `appearances` array is "a list of appearances you added" and "It has to be the
134
+ exact name you added to the entity file".
135
+ status: community
136
+ source: 'wiki.redmodding.org "AMM: Custom NPC appearances", section "The .lua file" (comments in the
137
+ example Lua)'
138
+ tags:
139
+ - npc
140
+ - amm
141
+ - appearance-name
142
+ - exact-match
143
+ - gotcha
144
+ detail: 'Corrected 2026-09-07: "character-for-character including case" and the stated consequence
145
+ were trimmed — the page says "exact name" without spelling out case handling or the failure
146
+ mode.'
147
+ - id: cp2077.npc.appearance.yaml-indentation-strictness
148
+ claim: "The `.xl` block is indentation-sensitive: \"Do not change the indent (number of spaces at
149
+ the beginning of each line)\", and \"If your custom appearances aren't working, run your .xl
150
+ file through yamllint and fix any mistakes.\""
151
+ status: community
152
+ source: 'wiki.redmodding.org "AMM: Custom NPC appearances", info hint under "The .xl file > 1.
153
+ Create the file" and section "4. Optional: Fixing that damn indent"'
154
+ tags:
155
+ - npc
156
+ - amm
157
+ - yaml
158
+ - indentation
159
+ - gotcha
160
+ detail: "The body-mods page gives the same advice for its own `.xl`/`.yaml`: \"Double-check your
161
+ `.yaml` via yamllint and make sure you don't have syntax errors (indent matters)\". Section
162
+ names corrected 2026-09-07."
163
+ - id: cp2077.npc.appearance.world-androids-use-the-2-0-templates
164
+ claim: "The game's android character records resolve, almost all of them, to two Phantom Liberty-era
165
+ templates: ep1/characters/entities/corpo/corpo__ep1_android_ma.ent (62 records: the Arasaka,
166
+ Militech, NCPD, security, Kang Tao and Sixth Street androids with their district variants) and
167
+ ep1/characters/entities/gang/gang__ep1_android_ma.ent (19: Maelstrom, Wraiths, Scavengers).
168
+ Only Character.android_guards resolves to the base game's
169
+ base/characters/entities/corpo/corpo__android_ma.ent. Both 2.0 templates use man_base.rig,
170
+ carry Item_Attachment_Slot with Head, and draw their looks from the base game's
171
+ corpo__android_ma.app (6 appearances on the corpo template) and gang__android_ma.app (22 on
172
+ the gang one), under entity-level names prefixed corpo__android_ma_ / gang__android_ma_."
173
+ status: verified
174
+ verified_on: "2.31"
175
+ source: ModWright field verification
176
+ tags:
177
+ - android
178
+ - npc
179
+ - template
180
+ - appearance
181
+ - archivexl
182
+ - patch
183
+ detail: A mod that patches NPC templates by path (an ArchiveXL resource.patch list) and lists only
184
+ the base-game android templates misses every world android; a quickhack mod's camera patch did
185
+ until v0.12.22.
186
+ - id: cp2077.npc.appearance.spawning-a-default-appearance-record-can-render-nothing
187
+ claim: "exEntitySpawner.SpawnRecord of Character.maelstrom_android_android2_copperhead_ma (the
188
+ gang__ep1_android_ma.ent template) with no appearance argument gave an android with no
189
+ rendered body: only its marker and weak points. GetCurrentAppearanceName read \"default\". The
190
+ same call with gang__android_ma_maelstrom_droid__lvl2_01 as the third argument rendered. The
191
+ corpo template's Arasaka record, spawned the same way without an appearance, rendered in
192
+ corpo__android_ma_arasaka_droid__lvl2_01."
193
+ status: verified
194
+ verified_on: "2.31"
195
+ source: ModWright field verification
196
+ tags:
197
+ - spawn
198
+ - appearance
199
+ - android
200
+ - codeware
201
+ - bridge
202
+ - id: cp2077.npc.appearance.the-distance-proxy-mesh-is-the-engines
203
+ claim: "An NPC appearance carries an AppearanceProxyMesh (an entSkinnedMeshComponent), the
204
+ low-detail stand-in the engine switches on and off with the viewer's distance. Script that
205
+ switches every visual component off and later restores each one's saved on/off state forces
206
+ the proxy back on if it was on at the save (the NPC far away then). Once the viewer is close,
207
+ the NPC renders only its weapon: its meshes are on, their masks right, and an off-on of every
208
+ component does not help. It rendered again by itself later."
209
+ status: verified
210
+ verified_on: "2.31"
211
+ source: ModWright field verification
212
+ tags:
213
+ - appearance
214
+ - lod
215
+ - proxy
216
+ - mesh
217
+ - npc
218
+ - take
219
+ related:
220
+ - cp2077.npc.appearance.world-androids-use-the-2-0-templates
221
+ - id: cp2077.npc.appearance.a-changed-mask-draws-after-an-off-on
222
+ claim: A visual component's chunkMask change is drawn only once the component re-registers (Toggle
223
+ off then on); this holds for the AppearanceProxyMesh too. Hiding an NPC by zeroing masks and
224
+ restoring them later leaves meshes the engine re-enables afterwards drawing nothing (every
225
+ mask right, every mesh on) until an off-on; one off-on of every enabled visual component, a
226
+ second and three seconds after the restore, makes it visible. Toggling a component the engine
227
+ owns (the proxy) to a remembered state is what
228
+ cp2077.npc.appearance.the-distance-proxy-mesh-is-the-engines warns against; an off-on only
229
+ when it is on now keeps the engine's state.
230
+ status: verified
231
+ verified_on: "2.31"
232
+ source: ModWright field verification
233
+ tags:
234
+ - appearance
235
+ - mask
236
+ - proxy
237
+ - toggle
238
+ - npc
239
+ - hide
240
+ related:
241
+ - cp2077.npc.appearance.the-distance-proxy-mesh-is-the-engines
242
+ - id: cp2077.npc.appearance.effect-spawners-are-visual-components
243
+ claim: "entEffectSpawnerComponent is an entIVisualComponent: a hide that toggles every visual
244
+ component off also disables the NPC's effect spawners. Disabling a spawner does not stop an
245
+ effect already playing, and an entKillEffectEvent queued in the same frame then fails to stop
246
+ it: the 2.0 android's eye scan (\"scan\", on ScanEffectSpawner) hung in the air. Left enabled,
247
+ the kill by name works (with a second kill at the freeze half a second later, the scan went)."
248
+ status: inferred
249
+ verified_on: "2.31"
250
+ source: ModWright research
251
+ tags:
252
+ - effects
253
+ - spawner
254
+ - kill
255
+ - hide
256
+ - npc
257
+ - id: cp2077.npc.appearance.a-human-looks-head-group
258
+ claim: "A human NPC look's meshes name their slot by prefix; the head group is h0_ (the head), ht_
259
+ (teeth), he_ (eyes), heb_ (eyebrows), hh_ (hair), hx_ (makeup), h1_ (hats, masks, kerchiefs)
260
+ and h2_ (helmets); the body is t0_/t1_/t2_ (torso layers), a0_ (arms; \"_big\" variants on the
261
+ strong looks), l1_ (legs), s1_ (shoes), g1_ (gloves), i1_ (items, slots, chokers). An NPC
262
+ template carries no meshes itself: its looks are entries naming an .app appearance
263
+ (gang__ep1_maelstrom_ma.ent: 38 entity-level looks, all from gang__maelstrom_ma.app, on
264
+ man_base.rig, the strong looks included)."
265
+ status: verified
266
+ verified_on: "2.31"
267
+ source: ModWright field verification
268
+ tags:
269
+ - appearance
270
+ - mesh
271
+ - human
272
+ - head
273
+ - fpp
274
+ related:
275
+ - cp2077.npc.appearance.world-androids-use-the-2-0-templates