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,215 @@
1
+ game: cyberpunk2077
2
+ topic: clothing.refits
3
+ title: ArchiveXL body types and the Blender garment-refit workflow
4
+ facts:
5
+ - id: cp2077.clothing.refits.body-mod-version-floor
6
+ claim: 'The body-mods page states a "Minimum required ArchiveXL version: 1.5". The older method of
7
+ adding the component to each individual appearance still works, but the page directs modders
8
+ to the new method "(for version >= 1.14)" as more robust and less tedious.'
9
+ status: community
10
+ source: "wiki.redmodding.org \"ArchiveXL: body mods and refits\", section \"Summary\" (front-matter
11
+ line) and the info hint under \"Wait, that's not what I want!\""
12
+ tags:
13
+ - archivexl
14
+ - body-mod
15
+ - version-floor
16
+ detail: Framework versions on ArchiveXL's own numbering, so they stay in the claim with no
17
+ `verified_on`. The archived old method is kept on the wiki as
18
+ "archived-registering-the-body-tag". Section name corrected 2026-09-07 (there is no "Version
19
+ Requirements" heading).
20
+ - id: cp2077.clothing.refits.default-body-tag-is-base-body
21
+ claim: "\"If no body mod is installed, the value will be `base_body`\" — so `base_body` is what a
22
+ dynamic appearance's `{body}` substitution resolves to on an unmodified install, and mesh
23
+ files and folders must be named accordingly."
24
+ status: community
25
+ source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "Clothing mods: Making use
26
+ of the tags > Dynamic Appearances" (warning hint)'
27
+ tags:
28
+ - archivexl
29
+ - body-mod
30
+ - base-body
31
+ - default
32
+ detail: The same hint notes `base_body` is also the value for body mods that are vanilla-shaped,
33
+ naming EVB and VTK Vanilla HD FemV. Section name corrected 2026-09-07.
34
+ - id: cp2077.clothing.refits.bodytypes-key-snake-cases-name
35
+ claim: "A custom body type is declared in a `.xl` file as `player: bodyTypes: [ CustomName ]`; for
36
+ substitutions ArchiveXL converts that name to snake case, so `BoobsForBackProblems` is
37
+ consumed as `boobs_for_back_problems` and `Adonis` as `adonis`."
38
+ status: community
39
+ source: "wiki.redmodding.org \"ArchiveXL: body mods and refits\", section \"1. Registering the body
40
+ mod\" (the yaml block's inline comment \"for substitutions, this will be converted to snake
41
+ case\")"
42
+ tags:
43
+ - archivexl
44
+ - body-mod
45
+ - manifest
46
+ - bodytypes
47
+ - naming
48
+ - snake-case
49
+ detail: "Corrected 2026-09-07: the snake-case form is used for SUBSTITUTIONS only. Component names
50
+ keep the declared CamelCase form — see cp2077.clothing.refits.body-tag-patches-player-ent,
51
+ where the component is named `Body:BoobsForBackProblems`."
52
+ - id: cp2077.clothing.refits.body-tag-patches-player-ent
53
+ claim: Registering a body-mod tag means shipping a patch `.ent` whose `components` array holds an
54
+ `entMeshComponent` whose `name` matches the body mod in the form `Body:<CustomName>`, e.g.
55
+ `Body:BoobsForBackProblems`. The component name itself carries the tag identity; there is no
56
+ separate declared field.
57
+ status: community
58
+ source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "2. Patch the player entity
59
+ files > Set up the patch .ent" (step 2)'
60
+ tags:
61
+ - archivexl
62
+ - body-mod
63
+ - resourcepatch
64
+ - entmeshcomponent
65
+ - naming
66
+ detail: "The page's own verification step is the CET snippet
67
+ `print(GetPlayer():FindComponentByName(\"Body:BoobsForBackProblems\"))`, or checking the
68
+ component in RedHotTools. A separate CET snippet reads the active body:
69
+ `print(Game.GetScriptableSystemsContainer():Get(\"PuppetStateSystem\"):GetBodyTypeSuffix(Item\
70
+ ID.new(), GetPlayer(), nil))`."
71
+ - id: cp2077.clothing.refits.body-patch-lists-gendered-player-ents
72
+ claim: "The patch `.ent` is registered through ArchiveXL resource patching, with the `.xl` block
73
+ `resource: patch: path\\to\\your\\patch_file.ent: - !include player_wa.ent - !include
74
+ player_ma.ent`. The wiki's instruction is \"Include only the relevant body gender!\", so a
75
+ female-only body mod lists only `player_wa.ent`."
76
+ status: community
77
+ source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "2. Patch the player entity
78
+ files > Register the patch .ent"'
79
+ tags:
80
+ - archivexl
81
+ - body-mod
82
+ - resourcepatch
83
+ - gender
84
+ - manifest
85
+ detail: "Renamed from cp2077.clothing.refits.body-patch-must-list-both-genders on 2026-09-07: the
86
+ old claim said a patch \"must list the gendered player .ent paths it targets explicitly\",
87
+ which inverts the page's actual instruction to include only the relevant gender. Also of note:
88
+ the page's \"Invisible mesh for body xyz\" troubleshooting entry is forgetting a new body's
89
+ mesh in the resource-patch list."
90
+ - id: cp2077.clothing.refits.named-community-body-types
91
+ claim: "Registered body-mod tag names, with the lowercase substitution value used for `{body}` and
92
+ for `&body=value` conditional appearances — male V: Adonis/`adonis`, Atlas/`atlas`,
93
+ Gymfiend/`gymfiend`; female V: Lush/`lush`, Ult/`ult`, Solo_OG/`solo_og`, SoloArms/`soloarms`,
94
+ Song2/`song2`, Flat/`flat`, ELEGY/`elegy`, RB/`rb`, EBB/`ebb`, EBBP/`ebbp`, EBBRB/`ebbrb`,
95
+ EBBPRB/`ebbprb`, Angel/`angel`, EVE/`eve`, EVB/`evb`, VHD/`vhd`, Ishtar/`ishtar`,
96
+ Small/`small`, Big/`big`."
97
+ status: community
98
+ source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "Supporting mods" (the two
99
+ tag tables)'
100
+ tags:
101
+ - archivexl
102
+ - body-mod
103
+ - naming
104
+ - community-convention
105
+ detail: "Corrected 2026-09-07: the page flags BOTH EVB and VHD (not EVB alone) with \"These tags are
106
+ not required unless your mod specially modifies body meshes for these body mods. Otherwise the
107
+ value is `base_body` since these bodies are Vanilla shaped.\" The previous claim's closing
108
+ sentence about a mod only needing to cover the body types it intends to support is not on this
109
+ page; the equivalent statement lives on the dynamic-variants guide (\"you only need to create
110
+ extra meshes where refits are needed\"). Section name corrected (there is no \"Body Type Tags
111
+ and Names\" heading)."
112
+ - id: cp2077.clothing.refits.akl-autofitter-tool
113
+ claim: "The AKL Autofitter, an auto-refitter by AllKnowingLion shipped with the WolvenKit Blender IO
114
+ Suite from version 1.5.0, automates conforming a garment mesh to a body mod: with a mesh
115
+ selected, find it under Mesh Tools in the CP77 panel, pick the target body from the dropdown,
116
+ and click the button."
117
+ status: community
118
+ source: 'wiki.redmodding.org "WKit Blender Plugin: AKL Autofitter", sections "Summary" and "How to
119
+ auto-refit"; version floor from "R&R: Refitting (step by step)", section "Step 4: Refitting"
120
+ (success hint, "Starting in version 1.5.0")'
121
+ tags:
122
+ - refit
123
+ - blender
124
+ - autofitter
125
+ - wolvenkit-blender-io-suite
126
+ - tool
127
+ detail: The refitting guide's hint adds that if you use the plugin instead of refitting by hand you
128
+ must select all the meshes first. Source corrected 2026-09-07 — the refitting page has no
129
+ "Autofitter Tool" section; the tool has its own page.
130
+ - id: cp2077.clothing.refits.manual-refit-proportional-editing
131
+ claim: Manual refitting exports the base body and the garment from WolvenKit as .glb, imports both
132
+ into one Blender file, hides the body armature, selects the garment meshes and edits them in
133
+ Edit Mode with Proportional Editing on at a low Proportional Size (0.1m). Proportional Editing
134
+ is chosen because it "leaves garment supports intact and prevents the risk of string cheese".
135
+ status: community
136
+ source: 'wiki.redmodding.org "R&R: Refitting (step by step)", sections "Step 2: Exporting the meshes
137
+ from WKit", "Step 3: Importing to Blender" and "Step 4: Refitting"'
138
+ tags:
139
+ - refit
140
+ - blender
141
+ - proportional-editing
142
+ - manual-workflow
143
+ detail: "Rationale corrected 2026-09-07: the page's stated reason is garment support and string
144
+ cheese, not smooth falloff/creases. The base body meshes are
145
+ `base\\characters\\common\\player_base_bodies\\player_female_average\\t0_000_pwa_base__full.m\
146
+ esh` and `...\\player_man_average\\t0_000_pma_base__full.mesh`. Tools used are scale (`S`) and
147
+ move (`G`), axis-locked with `X`/`Y`/`Z`; the mouse wheel scales the proportional radius once
148
+ a tool is active. Re-export overwrites the .glb that was originally imported."
149
+ - id: cp2077.clothing.refits.reimport-requires-garment-support-checkbox
150
+ claim: Reimporting a refitted mesh means selecting it in the Import Tool and checking the `Import
151
+ Garment Support` box, and doing the same for the second mesh and the emissive components
152
+ before importing.
153
+ status: community
154
+ source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 6: Importing into
155
+ Wolvenkit"'
156
+ tags:
157
+ - refit
158
+ - wolvenkit
159
+ - garment-support
160
+ - import
161
+ - gotcha
162
+ detail: The page does not state what happens if the box is left unchecked; the previously recorded
163
+ consequence was trimmed on 2026-09-07. The closest stated consequence is on the string-cheese
164
+ workaround, where deleting the garment-support parameters "will destroy the automatic deform
165
+ when you put a jacket on".
166
+ - id: cp2077.clothing.refits.string-cheese-distortion-fix
167
+ claim: '"As of 8.9.1, Garment Support is still experimental. If your meshes look like string cheese
168
+ or twitch all over the place, you can delete the parameters. That will destroy the automatic
169
+ deform when you put a jacket on, but at least your mesh will work."'
170
+ status: community
171
+ source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 6: Importing into
172
+ Wolvenkit" (info hint)'
173
+ tags:
174
+ - refit
175
+ - garment-support
176
+ - string-cheese
177
+ - bug
178
+ - workaround
179
+ detail: Section name corrected 2026-09-07 (the page's "Troubleshooting" section contains only the
180
+ viewport-shading entry, not this one). The full string-cheese treatment lives on the linked
181
+ troubleshooting-your-mesh-edits page.
182
+ - id: cp2077.clothing.refits.export-materials-checkbox-workaround
183
+ claim: "Known gotcha: if exporting a mesh from WolvenKit's Export Tool fails with \"Error while
184
+ finding the file: ...\\textures_netrunning_suit.mi\", uncheck \"Export Materials (default)\"
185
+ under Import/Export: Mesh (3d Model) in the export tool's settings panel and export again."
186
+ status: community
187
+ source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 2: Exporting the meshes
188
+ from WKit" (the "Export failed: Error while finding file" box)'
189
+ tags:
190
+ - refit
191
+ - wolvenkit
192
+ - export
193
+ - bug
194
+ - workaround
195
+ detail: 'Renamed from cp2077.clothing.refits.export-tool-mesh-checkbox-workaround and corrected on
196
+ 2026-09-07 on two counts: the checkbox is "Export Materials (default)" (Import/Export: Mesh
197
+ (3d Model) is the settings section it lives under, not the checkbox), and the failing export
198
+ is the WolvenKit -> .glb export in Step 2, not an export out of Blender.'
199
+ - id: cp2077.clothing.refits.viewport-shading-hides-clipping-colour
200
+ claim: The refitting guide recolours the imported body mesh (Material Properties tab -> uncheck "Use
201
+ Nodes" -> set a non-white base colour) so clipping is visible. If the colour does not show,
202
+ the fix is switching Blender's viewport to Viewport Shading (the third globe in the top-right
203
+ corner), not repainting.
204
+ status: community
205
+ source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 3: Importing to Blender"
206
+ (step 5) and section "Troubleshooting > My mesh refuses to show any colours!"'
207
+ tags:
208
+ - refit
209
+ - blender
210
+ - viewport-shading
211
+ - gotcha
212
+ detail: "Renamed from cp2077.clothing.refits.viewport-shading-hides-vertex-colors on 2026-09-07: the
213
+ guide colourises via the material's base colour, not via vertex colours. (Vertex colour does
214
+ have a documented role elsewhere in Cyberpunk — see
215
+ cp2077.hair.modding.vertex-color-ao-convention — but not in this workflow.)"
@@ -0,0 +1,111 @@
1
+ game: cyberpunk2077
2
+ topic: codeware.overview
3
+ title: Codeware's resource, localization, reflection and compatibility utilities
4
+ facts:
5
+ - id: cp2077.codeware.overview.documentation-category-list
6
+ claim: "Codeware's own documentation groups its API surface under nine headings: Lifecycle, World,
7
+ Entities, Player, User Interface, Resources, Localization, Reflection and Utilities."
8
+ status: community
9
+ source: psiberx/cp2077-codeware/README.md, section "Documentation" (list)
10
+ tags:
11
+ - codeware
12
+ - overview
13
+ - documentation-structure
14
+ detail: cp2077.codeware.systems.yaml's existing facts are drawn from Lifecycle (scriptable
15
+ services), and from Player/World-adjacent systems (callback system, appearance refresh, static
16
+ entities, player system, wardrobe, vehicle unlock); this file's facts are drawn from the
17
+ remaining Resources, Localization and Reflection sections plus one World-adjacent
18
+ compatibility idiom.
19
+ - id: cp2077.codeware.overview.resource-depot-existence-checks
20
+ claim: "`GameInstance.GetResourceDepot()` exposes `ArchiveExists(name)` and
21
+ `ResourceExists(depotPath)`, letting a mod check at runtime whether a specific `.archive` file
22
+ or a specific resource inside any mounted archive is present — the documented uses are
23
+ verifying that the mod's own archive is actually enabled, and detecting whether another mod
24
+ (and therefore a resource it ships) is installed."
25
+ status: community
26
+ source: psiberx/cp2077-codeware/wiki/Home.md, section "Resources > Checking resource existence"
27
+ tags:
28
+ - codeware
29
+ - resourcedepot
30
+ - archiveexists
31
+ - resourceexists
32
+ - compat-check
33
+ - id: cp2077.codeware.overview.resource-loading-is-async-token-callback
34
+ claim: Reading an arbitrary resource at runtime goes through
35
+ `GameInstance.GetResourceDepot().LoadResource(path)`, which returns a `ResourceToken`; the
36
+ caller registers a callback (`token.RegisterCallback(this, n"OnResourceReady")`) and only
37
+ accesses `token.GetResource()` inside that callback — resource loading through this API is
38
+ asynchronous, not a direct return value.
39
+ status: community
40
+ source: psiberx/cp2077-codeware/wiki/Home.md, section "Resources > Reading resources"
41
+ tags:
42
+ - codeware
43
+ - resourcedepot
44
+ - resourcetoken
45
+ - async
46
+ - loadresource
47
+ - id: cp2077.codeware.overview.resource-ref-assignment-operator
48
+ claim: A native `ResourceRef`/`ResourceAsyncRef` field added via `@addField` is initialized by
49
+ assigning a resource depot path to it with the `*=` operator (the wiki's example is
50
+ `weapon.effect *= r"base\gameplay\game_effects\strongmelee.es";`); `*=` is the only
51
+ initialization form the page shows.
52
+ status: community
53
+ source: psiberx/cp2077-codeware/wiki/Home.md, section "Resources > Resource references"
54
+ tags:
55
+ - codeware
56
+ - resourceref
57
+ - addfield
58
+ - operator
59
+ - syntax
60
+ - id: cp2077.codeware.overview.localization-provider-package-pattern
61
+ claim: "Codeware's script-level localization system is wired up in two parts: a
62
+ `ModLocalizationProvider` subclass resolves a language code (`CName`) to a
63
+ `ModLocalizationPackage` instance and defines a fallback language via `GetFallback()`; each
64
+ `ModLocalizationPackage` subclass defines its actual strings in
65
+ `DefineTexts()`/`DefineSubtitles()` using `Text`/`TextM`/`TextF` (and
66
+ `Subtitle`/`SubtitleM`/`SubtitleF`) calls, with gendered variants set either as two separate
67
+ calls or one three-argument `Text(key, female, male)` call."
68
+ status: community
69
+ source: psiberx/cp2077-codeware/wiki/Home.md, sections "Localization > Localization providers" and
70
+ "Localization > Localization packages"
71
+ tags:
72
+ - codeware
73
+ - localization
74
+ - modlocalizationprovider
75
+ - modlocalizationpackage
76
+ detail: Texts registered this way are also pushed into the native localization system, so they
77
+ remain reachable via `GetLocalizedTextByKey`/`GetLocalizedText` and from TweakDB records — not
78
+ only from the mod's own redscript.
79
+ - id: cp2077.codeware.overview.reflection-get-class-and-call
80
+ claim: "Codeware's `Reflection` API lets a mod resolve a class by name
81
+ (`Reflection.GetClass(n\"...\")` or `Reflection.GetTypeOf(instance)`), enumerate its
82
+ properties/functions, and read/write/call them dynamically: `prop.GetValue(instance)`,
83
+ `getter.Call(instance)`, `setter.Call(instance, [args])`, with a `status`-returning overload
84
+ of `Call` available to detect argument-count/signature mismatches instead of throwing."
85
+ status: community
86
+ source: psiberx/cp2077-codeware/wiki/Home.md, sections "Reflection > Inspecting types and values"
87
+ and "Reflection > Custom callbacks"
88
+ tags:
89
+ - codeware
90
+ - reflection
91
+ - getclass
92
+ - getfunction
93
+ - call
94
+ - dynamic-dispatch
95
+ detail: Reflection-based callback invocation by short function name requires the target function to
96
+ carry the `cb` qualifier ("Don't forget to use `cb` modifier for callbacks to be able to use
97
+ functions short names."); this is the same `cb` item qualifier redscript's grammar defines
98
+ (see cp2077.redscript.modules.item-qualifier-keywords).
99
+ - id: cp2077.codeware.overview.moduleexists-for-soft-compat
100
+ claim: For cross-mod or cross-patch compatibility checks that can't be expressed with redscript's
101
+ own conditional compilation (`ModuleExists()`), Codeware's documented alternative is to use
102
+ Reflection to check whether a particular class, property or function exists at runtime before
103
+ touching it, rather than assuming it does.
104
+ status: community
105
+ source: psiberx/cp2077-codeware/wiki/Home.md, section "Reflection > Mods and patches compatibility"
106
+ tags:
107
+ - codeware
108
+ - moduleexists
109
+ - reflection
110
+ - compatibility
111
+ - soft-dependency
@@ -0,0 +1,192 @@
1
+ game: cyberpunk2077
2
+ topic: codeware.systems
3
+ title: Codeware's redscript API surface and version floors
4
+ facts:
5
+ - id: cp2077.codeware.systems.version-floors
6
+ claim: Codeware's README lists its compatibility as Cyberpunk 2077 2.31, redscript 0.5.31+ and Cyber
7
+ Engine Tweaks 1.37.0+, and its installation step 1 requires RED4ext 1.29.0+ before extracting
8
+ `Codeware-x.x.x.zip` into the Cyberpunk 2077 directory.
9
+ status: community
10
+ source: cp2077-codeware README.md, sections "Getting Started > Compatibility" (game, redscript, CET)
11
+ and "Getting Started > Installation" (RED4ext)
12
+ tags:
13
+ - codeware
14
+ - version-floor
15
+ - redscript
16
+ - cet
17
+ - red4ext
18
+ detail: "Source corrected 2026-09-07: RED4ext is listed under Installation, not Compatibility, and
19
+ the previous claim's parenthetical \"(per its own README, version 1.18.0 wiki)\" conflated two
20
+ things. 1.18.0 is the version stamped on line 1 of the Codeware wiki's Home page, and is what
21
+ every API fact in this file was read against; it is not a floor. Framework versions stay in
22
+ the claim; \"Cyberpunk 2077 2.31\" is the game version this Codeware release targets, not an
23
+ observation date, so there is no `verified_on`. This instantiates the general
24
+ cp2077.packaging.version-matrix-breakage."
25
+ - id: cp2077.codeware.systems.service-persists-between-sessions
26
+ claim: '"Services are singletons that created on scripts initialization and, unlike scriptable
27
+ systems, live between game sessions. To create your own service, you have to define a class
28
+ derived from `ScriptableService`." The instance is reached with
29
+ `GameInstance.GetScriptableServiceContainer().GetService(n"MyService") as MyService`.'
30
+ status: community
31
+ source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
32
+ tags:
33
+ - codeware
34
+ - scriptableservice
35
+ - scriptablesystem
36
+ - lifecycle
37
+ detail: Its lifecycle callbacks are `OnLoad` ("Scripts loaded"), `OnReload` ("Scripts reloaded"),
38
+ `OnInitialize` ("Game instance initialized, can access game systems") and `OnUninitialize`
39
+ ("Game is shutting down") — the same four the Mod Settings page wires `Listen`/`Unlisten`
40
+ into, see cp2077.ui.modsettings.lifecycle-differs-by-base-class.
41
+ - id: cp2077.codeware.systems.module-scoped-service-needs-full-path
42
+ claim: '"If you declare `MyService` in a module, you must include the full path of the module to get
43
+ the service" — a service declared in `module MyModule.Services` is fetched as
44
+ `GetService(n"MyModule.Services.MyService")`.'
45
+ status: community
46
+ source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
47
+ tags:
48
+ - codeware
49
+ - scriptableservice
50
+ - module
51
+ - gotcha
52
+ detail: 'Corrected 2026-09-07: "passing the bare name returns null" was trimmed — the wiki states
53
+ the requirement without describing the failure mode.'
54
+ - id: cp2077.codeware.systems.persistent-field-type-exclusions
55
+ claim: '"Service properties marked as `persistent` will keep their state forever. Unlike scriptable
56
+ systems, service state storage is not tied to save files." "Persistence is available for all
57
+ types except `String`, `ResRef`, `Variant`."'
58
+ status: community
59
+ source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
60
+ tags:
61
+ - codeware
62
+ - persistent
63
+ - scriptableservice
64
+ - type-exclusion
65
+ detail: "Corrected 2026-09-07: \"tied to the mod's install instead\" was trimmed — the wiki says
66
+ only that storage is not tied to save files. The worked example counts game launches since the
67
+ mod was installed via a `persistent let counter: Int32` inside a struct."
68
+ - id: cp2077.codeware.systems.unmarked-fields-reset-silently
69
+ claim: "\"In case of objects, only fields marked as `persistent` are restored, and unmarked fields
70
+ are reset to defaults on each game launch. It's safe to change persistent data structure at
71
+ any time.\""
72
+ status: community
73
+ source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
74
+ tags:
75
+ - codeware
76
+ - persistent
77
+ - gotcha
78
+ detail: 'Corrected 2026-09-07: "with no warning that it was dropped" was trimmed as unsourced, and
79
+ the reassurance that the structure is safe to change was added since it is the actionable
80
+ half.'
81
+ - id: cp2077.codeware.systems.service-object-reference-disposal-risk
82
+ claim: '"Be careful with storing references to game objects in services. Most objects must be
83
+ disposed when game session ends. An unreleased reference can interfere with normal object
84
+ disposal and lead to bugs such as disappearing sounds or crashes."'
85
+ status: community
86
+ source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services" (the "Referencing game
87
+ objects" blockquote)
88
+ tags:
89
+ - codeware
90
+ - scriptableservice
91
+ - memory
92
+ - disposal
93
+ - gotcha
94
+ - id: cp2077.codeware.systems.callback-system-target-selectors
95
+ claim: A callback is registered as `GameInstance.GetCallbackSystem().RegisterCallback(n"<Event>",
96
+ this, n"<Method>").AddTarget(<selector>)`. Events include `Resource/Load`,
97
+ `Resource/PostLoad`, `Session/BeforeStart`, `Session/Start`, `Session/Ready`,
98
+ `Session/BeforeSave`, `Entity/Extract`, `Entity/Assemble`, `Entity/Initialize`,
99
+ `Entity/Reassemble`, `Entity/Attach`, `Entity/Detach`, `Component/Toggle`, `Input/Key`,
100
+ `Input/Axis` and `InkWidget/Spawn`. Selectors are typed to the event —
101
+ `ResourceTarget.Path(ResRef)`, `ResourceTarget.Type(CName)`,
102
+ `EntityTarget.ID`/`.Type`/`.RecordID(TweakDBID)`/`.Template`/`.Appearance`/`.Definition`,
103
+ `ComponentTarget.ID`/`.Name`, `InputTarget.Key`/`.Axis`,
104
+ `inkWidgetTarget.Library`/`.Controller`.
105
+ status: community
106
+ source: cp2077-codeware wiki Home, section "Lifecycle > Game events"
107
+ tags:
108
+ - codeware
109
+ - callbacksystem
110
+ - resourcetarget
111
+ - entitytarget
112
+ - syntax
113
+ detail: "Caution for a validator: the event table names `Entity/Attach`, but the wiki's own
114
+ `SetRunMode` example registers `n\"Entity/Attached\"` — the two spellings disagree on the same
115
+ page. Callback lifetime: \"When defined inside scriptable service, callback stays registered
116
+ until you manually unregister it. When defined in other contexts, callback is auto removed at
117
+ the end of the session\", overridable with `.SetLifetime(CallbackLifetime.Forever)` or
118
+ `...Session)`. The callback system can be accessed before the game instance is initialized."
119
+ - id: cp2077.codeware.systems.callback-once-run-mode
120
+ claim: '"You can make callback to auto unregister after being fired by calling
121
+ `.SetRunMode(CallbackRunMode.Once)`." `CallbackRunMode.OncePerTarget` instead auto-unregisters
122
+ "after being fired for each listed target".'
123
+ status: community
124
+ source: cp2077-codeware wiki Home, section "Lifecycle > Game events"
125
+ tags:
126
+ - codeware
127
+ - callbacksystem
128
+ - runmode
129
+ - syntax
130
+ - id: cp2077.codeware.systems.appearance-refresh-vs-load
131
+ claim: "\"After changing component mesh resource and/or appearance you can request it to load new
132
+ appearance\" with `comp.LoadAppearance()`; \"After changing any other properties that don't
133
+ require loading resources you can refresh appearance\" with `comp.RefreshAppearance()`.
134
+ Supported components are `entMeshComponent`, `entSkinnedMeshComponent`,
135
+ `entGarmentSkinnedMeshComponent` and `entMorphTargetSkinnedMeshComponent`."
136
+ status: community
137
+ source: cp2077-codeware wiki Home, section "Entities > Mesh appearances"
138
+ tags:
139
+ - codeware
140
+ - loadappearance
141
+ - refreshappearance
142
+ - entity-component
143
+ detail: The worked example is `comp.mesh *= r"mod\player\dynamic.mesh"; comp.meshAppearance =
144
+ n"neon_red"; comp.LoadAppearance();`. Softened on 2026-09-07 from "must be called ... (it
145
+ re-resolves resources)" to the wiki's own "you can request it to load".
146
+ - id: cp2077.codeware.systems.static-entity-reposition-without-respawn
147
+ claim: '"Static entities can be moved now without respawning them at new position" via
148
+ `entity.SetWorldTransform(transform)`.'
149
+ status: community
150
+ source: cp2077-codeware wiki Home, section "Entities > World transform"
151
+ tags:
152
+ - codeware
153
+ - setworldtransform
154
+ - static-entity
155
+ - id: cp2077.codeware.systems.player-system-alternate-puppets
156
+ claim: Codeware adds functions to the player system for the puppets besides the main player object —
157
+ `playerSystem.GetCustomizationPuppet()`, `GetInventoryPuppet()` and `GetPhotoPuppet()`, from
158
+ `GameInstance.GetPlayerSystem(GetGameInstance())`, for the customization screen, inventory
159
+ screen and photo mode respectively.
160
+ status: community
161
+ source: cp2077-codeware wiki Home, section "Player > Accessing player objects"
162
+ tags:
163
+ - codeware
164
+ - playersystem
165
+ - customization
166
+ - photo-mode
167
+ - puppet
168
+ - id: cp2077.codeware.systems.wardrobe-forget-item
169
+ claim: '"Items can be permanently removed from wardrobe" with
170
+ `GameInstance.GetWardrobeSystem(GetGameInstance()).ForgetItemID(ItemID.FromTDBID("Items.Glasses_03_basic_09"))`.'
171
+ status: community
172
+ source: cp2077-codeware wiki Home, section "Player > Managing wardrobe"
173
+ tags:
174
+ - codeware
175
+ - wardrobesystem
176
+ - forgetitemid
177
+ detail: Split from a combined wardrobe+vehicle fact on 2026-09-07; "transmog history" was dropped,
178
+ as the wiki says only "wardrobe".
179
+ - id: cp2077.codeware.systems.vehicle-unlock-by-record-id
180
+ claim: "\"Player vehicles can now be enabled by record ID instead of string, which normally can't be
181
+ retrieved at runtime\" —
182
+ `GameInstance.GetVehicleSystem(GetGameInstance()).EnablePlayerVehicleID(t\"Vehicle.v_sport2_q\
183
+ uadra_type66_avenger_player\", true)`."
184
+ status: community
185
+ source: cp2077-codeware wiki Home, section "Player > Unlocking vehicles"
186
+ tags:
187
+ - codeware
188
+ - vehiclesystem
189
+ - tweakdbid
190
+ - unlock
191
+ detail: Split from a combined wardrobe+vehicle fact on 2026-09-07. The record name shape matches
192
+ cp2077.vehicles.entities.tweak-name-from-ent-filename.