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,282 @@
1
+ game: cyberpunk2077
2
+ topic: quests.scenes
3
+ title: .questphase/.scene structure and WolvenKit's quest/scene editing limits
4
+ facts:
5
+ - id: cp2077.quests.scenes.questphase-vs-scene-roles
6
+ claim: "\"Missions or quests are organized into separate files that contain nodes or references to
7
+ other 'files' called Questphases and Scenes. Questphases can be thought of as graphs that may
8
+ contain a few #noderefs, which are used to load prefabs for the phase. The questphases are
9
+ connected together using handlerefs, which handle IDs in their socket setups.\""
10
+ status: community
11
+ source: wiki.redmodding.org "Visualize Quest files", opening paragraphs
12
+ tags:
13
+ - quest
14
+ - questphase
15
+ - scene
16
+ - noderef
17
+ - handleref
18
+ - file-type
19
+ detail: "The page's illustration of the split is the apartments: \"they consist of a questphase
20
+ side, which forms the core of the entire game, and a scene file side, which includes choices,
21
+ animations, buffs obtained from sleeping, timeskips resulting from sleeping, or audio in the
22
+ shower\". Trimmed on 2026-09-07: that list is the apartment example, not a general statement
23
+ of everything a `.scene` owns. Page title corrected (the page is \"Visualize Quest files\",
24
+ and it has no \"File Types\" heading)."
25
+ - id: cp2077.quests.scenes.wolvenkit-view-is-resource-plus-graph-only
26
+ claim: Opening a `.questphase` in WolvenKit shows "first a 'resource' window with all the questphase
27
+ dependencies/archives and info"; the node graph is on a separate Graph editor tab you switch
28
+ to.
29
+ status: community
30
+ source: wiki.redmodding.org "Visualize Quest files", section "To visualize Questphase in Wolvenkit
31
+ we need to:"
32
+ tags:
33
+ - quest
34
+ - questphase
35
+ - wolvenkit
36
+ - editor-limitation
37
+ detail: 'Corrected 2026-09-07: the previous claim that there is "no dedicated higher-level quest
38
+ logic view beyond those two tabs" is an inference the page does not make. The page links a
39
+ community list of questphase files (DoctorPresto/Cyberpunk-File-Types, questphase.txt) for
40
+ finding one to open, and its own worked example is
41
+ `/dlc\dlc6_apart\loc_dlc6_apart_hey_gle\quest\phases\dlc6_apart_hey_gle.questphase`.'
42
+ - id: cp2077.quests.scenes.subtitle-edit-needs-two-resources
43
+ claim: "Finding a spoken line's text spans two resources: in the `.scene`, walk `struct Data >
44
+ scnSceneResource > scnscreenplayStore > scnscreenplayDialogLine` and read its `locstringIds`;
45
+ then open the matching localization `.json` under
46
+ `lang_en_text\\base\\localization\\en-us\\subtitles\\quest\\` and walk `struct Data >
47
+ JsonResource > handle:iSerializable > localizationPersistenceSubtitleEntry >
48
+ array:localizationPersistenceSubtitleEntry`, whose `stringId` values are the same numbers."
49
+ status: community
50
+ source: wiki.redmodding.org "How to Edit Voiceover and Subtitles In a Quest.", numbered steps 2-7
51
+ tags:
52
+ - quest
53
+ - scene
54
+ - dialogue
55
+ - subtitle
56
+ - locstringid
57
+ - localization
58
+ detail: "Worked example: `mq041_corpo_01_deadmans_switch.scene` against
59
+ `mq041_corpo_01_deadmans_switch.json`, where stringId 1822802647440039936 is \"Hey, yeah,
60
+ sure. Damn, you ol' bastard, been a while since...\" The archive is named `lang_eng_text` in
61
+ prose while the extracted path is `lang_en_text`. The same String ID mechanism is described
62
+ from the audio side in cp2077.audio.events.voiceover-subtitles-mapped-by-string-id. Section
63
+ name corrected 2026-09-07 (there is no \"Key Steps\" heading; the page is a numbered list)."
64
+ - id: cp2077.quests.scenes.subtitle-locstringids-must-swap-in-pairs
65
+ claim: 'Reassigning a line is a two-part swap INSIDE the `.scene`: first swap the two `locstringIds`
66
+ in the dialogue-line array, then "swap the names we see on the left; in this case
67
+ `m_194BE559A84E2000` with `m_1A04A1D80244D000`" by replacing their entries in the `CName`
68
+ array. The localization JSON is only read to learn which stringId carries which line.'
69
+ status: community
70
+ source: wiki.redmodding.org "How to Edit Voiceover and Subtitles In a Quest.", numbered steps 8-11
71
+ tags:
72
+ - quest
73
+ - scene
74
+ - subtitle
75
+ - locstringid
76
+ - cname
77
+ - gotcha
78
+ detail: 'Corrected 2026-09-07: the previous claim had the pair straddling the `.scene` and the
79
+ localization JSON, and asserted an audio/subtitle desync as the failure mode; neither is what
80
+ the page describes. The `m_<hex>` CName is the hex form of the same stringId. The edit
81
+ finishes with "save, pack" and putting the archive in the Mod folder.'
82
+ - id: cp2077.quests.scenes.scene-editing-tooling-is-not-wolvenkit
83
+ claim: "Both raw `.scene` editing guides list the same toolchain and none of it is WolvenKit: CP77
84
+ Tools (github.com/WolvenKit/CP77Tools) to unbundle and uncook the archives, 010 Editor, and
85
+ alphaZomega's `CP77_CR2W.bt` binary template to read and write the structs."
86
+ status: community
87
+ source: wiki.redmodding.org "How to Edit Voiceover and Subtitles In a Quest.", section
88
+ "Requirements:"; same list in "How to Remove an Animation (and Potentially Replace It)",
89
+ section "Requirements:"
90
+ tags:
91
+ - quest
92
+ - scene
93
+ - 010editor
94
+ - cp77tools
95
+ - tooling
96
+ detail: The animation guide spells the template `CP77_CR2.bt` while the subtitle guide spells it
97
+ `CP77_CR2W.bt`; both link the same CP77_CR2W_v0.46.zip download. Both also ask for "Some basic
98
+ knowledge of what are you doing".
99
+ - id: cp2077.quests.scenes.remove-animation-five-hop-chain
100
+ claim: "Removing a scene animation traces a chain: find the `sectionNode` playing it, then `Struct
101
+ Data > scnSceneResource > scnSceneEvent array > scnPlaySkAnimEvent >
102
+ scnEventBlendWorkspotSetup` and note its `workspotId`; find the `scnWorkspotInstance` whose
103
+ `workspotInstanceId` matches and note its `dataId`; find the `scnWorkspotData` with that
104
+ `dataId` and note the path after `workspotResource`; open that `.workspot` at `Struct Data >
105
+ workWorkspotResource > workWorkspotTree > handle:worldEntry > workSequence > worklEntry`, find
106
+ the `work[...]Anim` matching the animation, note the number before the name, and zero out that
107
+ name in the CNAME array."
108
+ status: community
109
+ source: wiki.redmodding.org "How to Remove an Animation (and Potentially Replace It)", section "The
110
+ Steps:" (steps 2-8)
111
+ tags:
112
+ - quest
113
+ - scene
114
+ - animation
115
+ - workspot
116
+ - scnplayskanimevent
117
+ detail: "Worked example: removing the mirror idle, with the scene at
118
+ `base\\quest\\minor_quests\\mq000\\scenes\\mq000_01_apartment.scene` and the workspot at
119
+ `base\\worksposts\\quest\\main_quests\\prologue\\q001\\q001_01_wakeup\\q001_01_wakeup__look_m\
120
+ irror.workspot` (the page's own spelling of the folder). Section names corrected 2026-09-07
121
+ (there are no \"Key Node/Event Types\" or \"Essential Steps\" headings)."
122
+ - id: cp2077.quests.scenes.workspots-underpin-most-ai-interaction
123
+ claim: "\"Most of the game relies on Workspots used as interactable points both by the AI and the
124
+ Player\" — a workspot edited for one scene's animation may be shared, e.g. the mirror workspot
125
+ above \"is used for the various interactions in V's appartment\"."
126
+ status: community
127
+ source: wiki.redmodding.org "How to Remove an Animation (and Potentially Replace It)", section "The
128
+ Steps:" (the SIDE NOTE after step 3)
129
+ tags:
130
+ - quest
131
+ - scene
132
+ - workspot
133
+ - shared-resource
134
+ - gotcha
135
+ detail: Section name corrected 2026-09-07 (there is no "Critical Gotchas" heading; this is a side
136
+ note in the numbered steps).
137
+ - id: cp2077.quests.scenes.community-area-node-alwaysloaded-requirement
138
+ claim: '"There are two types `worldCompiledCommunityAreaNode` and
139
+ `worldCompiledCommunityAreaNode_Streamable`. The difference between them is only that
140
+ `worldCompiledCommunityAreaNode` must be registered in `AlwaysLoaded` type of
141
+ `.streamingsector` [and] `worldCompiledCommunityAreaNode_Streamable` can be registered in
142
+ other types of `.streamingsector` (exterior/quest/etc)."'
143
+ status: community
144
+ source: wiki.redmodding.org "How to use worldCommunityRegistry and worldCompiledCommunity", section
145
+ "Basics"
146
+ tags:
147
+ - quest
148
+ - community-registry
149
+ - worldcompiledcommunityareanode
150
+ - streaming-sector
151
+ detail: Page title and section name corrected 2026-09-07. The page's own warning is that it
152
+ "explains the theory"; for actually creating communities it redirects to the Object Spawner
153
+ "creating communities" guide.
154
+ - id: cp2077.quests.scenes.community-registry-sourceobjectid-must-match
155
+ claim: On a `worldCompiledCommunityAreaNode`, "`Node/area/entriesData` we specify an
156
+ `entryName/phaseName/spotId(AiSpoNodeHash)` so in the future, we can
157
+ `Activate/Reactivate/Deactivate` its entities by these params" and "`sourceObjectId` - it
158
+ should match `id` of registry item".
159
+ status: community
160
+ source: wiki.redmodding.org "How to use worldCommunityRegistry and worldCompiledCommunity", section
161
+ "Theory" (step 4, "Important")
162
+ tags:
163
+ - quest
164
+ - community-registry
165
+ - sourceobjectid
166
+ - gotcha
167
+ detail: "On the `worldCommunityRegistryNode` side, \"`communitiesData` - there we are specifying the
168
+ type of NPC its template, entryName, and all possible phases\" and \"`workspotsPersistentData`
169
+ - there we are adding a new spot into the engine's global registry by the hash of our
170
+ `AiSpotNode`\". Corrected 2026-09-07: the previous claim placed the matching `id` in
171
+ `communitiesData` specifically and asserted a failure mode (\"the spawn registration fails to
172
+ resolve\"); the page says neither."
173
+ - id: cp2077.quests.scenes.community-registry-version-floor
174
+ claim: The worldCommunityRegistry/worldCompiledCommunity guide's one listed requirement is ArchiveXL
175
+ 1.17.0+.
176
+ status: community
177
+ source: wiki.redmodding.org "How to use worldCommunityRegistry and worldCompiledCommunity", section
178
+ "Requirements"
179
+ tags:
180
+ - quest
181
+ - community-registry
182
+ - archivexl
183
+ - version-floor
184
+ detail: An ArchiveXL version on its own numbering, so it stays in the claim with no `verified_on`.
185
+ Section name corrected 2026-09-07 (it is under "Requirements", not "Important Gotchas").
186
+ - id: cp2077.quests.scenes.archivexl-quest-phase-merge
187
+ claim: "ArchiveXL merges a mod's .questphase into a loaded quest graph from the manifest key `quest:
188
+ phases:`, a list of entries with `path` (the mod phase) and `parent` (a .questphase or .quest,
189
+ scope names allowed), plus optional `connection` / `input` (a node-id path and optional
190
+ socket; empty means the parent's start node), `output` and `intercept`. It adds a
191
+ questPhaseNodeDefinition whose id is a CRC-16 of \"<path>:<input node id>\" and connects the
192
+ input node's Out to its In1. When the parent is a .quest resource, the merged phase node is
193
+ also force-started on game restore (once, recorded by a fact keyed on the node) and marked
194
+ started on quest start, so a phase merged into the main quest runs on every load without any
195
+ trigger of its own."
196
+ status: verified
197
+ source: https://github.com/psiberx/cp2077-archive-xl src/App/Extensions/QuestPhase/Config.cpp
198
+ (LoadYAML, FillConnection) and Extension.cpp (PatchPhase, CreatePhaseNode, OnGameRestored,
199
+ OnQuestStart); bundle/source/resources/QuestBaseScope.xl (the cyberpunk2077.quest scope)
200
+ tags:
201
+ - archivexl
202
+ - questphase
203
+ - quest
204
+ - merge
205
+ - mod-quest
206
+ detail: >-
207
+ Installed quest mods (Kidnap, Aldecaldos High Stakes, Lizzie's BDs) each list their launcher
208
+ phase twice, with parents base\quest\cyberpunk2077.quest and ep1\quest\ep1_standalone.quest,
209
+ and again for the NG+ quests; a cyberware mod (v0.12) follows the first two. The input node's
210
+ phase is started with the socket "In1", so the mod phase's questInputNodeDefinition carries
211
+ socketName In1.
212
+
213
+ Seen in game on 2026-09-22. After a save loaded, ArchiveXL logged `[QuestPhase] Patching phase
214
+ "base\quest\cyberpunk2077.quest"...` and `Merged phase "mod\<mod>\body\<mod>_body.questphase"
215
+ from "<Mod>.archive.xl"`. The phase's fact-driven loops then ran with no trigger of their own:
216
+ community Activate on the fact 1, Deactivate on 0, and again. At the main menu the log has
217
+ only the config pass; the merge lines come with the save.
218
+ - id: cp2077.quests.scenes.noderef-hash-is-fnv-of-the-path-without-hash-marks
219
+ claim: A full world NodeRef path ("$/03_night_city/.../#prefab/#name") hashes to the 64-bit FNV-1a
220
+ of the path string with every '#' removed; the community registry's gameCommunityID, the
221
+ compiled community area's sourceObjectId, an AI spot's worldGlobalNodeID and the
222
+ AISpotPersistentData globalNodeId are all that hash. Quests and scripts name the same node by
223
+ its short alias ("#name"), which the engine resolves through the sector's nodeRefs list, not
224
+ by hashing the alias itself.
225
+ status: verified
226
+ verified_on: "2.31"
227
+ source: base\worlds\03_night_city\_compiled\default\always_loaded_1.streamingsector
228
+ (ep1_1_nightcity.archive) nodeRefs entries for
229
+ tags:
230
+ - noderef
231
+ - hash
232
+ - community-registry
233
+ - ai-spot
234
+ - streaming-sector
235
+ detail: >-
236
+ FNV-1a 64 of the bare alias ("mq060_communityArea") does not give the id, so the alias form is
237
+ resolved, not hashed. The alias resolution through the nodeRefs list is inferred from vanilla
238
+ (the spot's full path is listed in the always-loaded sector although the spot node lives
239
+ elsewhere) and from Kidnap, whose quest names "#sq_kidnap_community" while its sector lists
240
+ only the full path.
241
+
242
+ Checked in game on 2026-09-22. Codeware's NodeRefToHash(CreateNodeRef(path)) on
243
+ "$/03_night_city/#<mod>/#<mod>_body_community" returned the generator's value. The same call
244
+ on the alias "#<mod>_body_community" returned the FNV-1a 64 of the bare
245
+ "<mod>_body_community", not the node's id. Even so, the mod phase's
246
+ questCommunityTemplate_NodeType, given that alias, activated the community. The quest system
247
+ resolves an alias; script CreateNodeRef only hashes it.
248
+ related:
249
+ - cp2077.quests.scenes.community-registry-sourceobjectid-must-match
250
+ - id: cp2077.quests.scenes.vanilla-quest-community-shape
251
+ claim: "A quest-activated community in vanilla is three nodes in an AlwaysLoaded sector: a
252
+ worldCommunityRegistryNode item (communityAreaType Regular, communityId = the area's path
253
+ hash, entriesInitialState entryActiveOnStart 0 with the initial phase, and the template inline
254
+ as communityCommunityTemplateData: a communitySpawnEntry with characterRecordId, entryName,
255
+ and a communitySpawnPhase with alwaysSpawned, appearances, phaseName and
256
+ communityPhaseTimePeriod entries of hour, quantity and spotNodeRefs), a
257
+ worldCompiledCommunityAreaNode whose sourceObjectId is the same id and whose entriesData maps
258
+ entry, phase and period to the spots' worldGlobalNodeIDs, with MaxStreamingDistance FLT_MAX in
259
+ its node data; and the spots' AISpotPersistentData (hash, world position as FixedPoint bits of
260
+ metres x 131072, yaw) in the registry's workspotsPersistentData. A quest activates it with
261
+ questSpawnManagerNodeDefinition -> questCommunityTemplate_NodeType (action Activate /
262
+ Deactivate, spawnerReference the area's alias, communityEntryName, communityEntryPhaseName)."
263
+ status: verified
264
+ verified_on: "2.31"
265
+ source: base\worlds\03_night_city\_compiled\default\always_loaded_1.streamingsector
266
+ (ep1_1_nightcity.archive) nodes 2277 (mq060 area) and 3256 (the registry);
267
+ base\quest\minor_quests\mq060\phases\mq060_yaiba_showroom.questphase nodes 174 and 206
268
+ tags:
269
+ - community-registry
270
+ - worldcompiledcommunityareanode
271
+ - ai-spot
272
+ - questphase
273
+ - streaming-sector
274
+ detail: "A working mod lays it out the same way (Kidnap's kidnap_always_loaded sector: registry,
275
+ compiled area node and nine AI spots together, level 0, AlwaysLoaded descriptor), and
276
+ entSpawner's exporter writes the registry into a separate AlwaysLoaded sector with the area
277
+ node in the group's sector. Spot workspots are resources the NPC plays at the spot; Kidnap
278
+ places a vehicle entry on a spot carrying a bar-stool workspot, so the spot is read as a
279
+ position for entities that cannot use it (inferred)."
280
+ related:
281
+ - cp2077.quests.scenes.community-area-node-alwaysloaded-requirement
282
+ - cp2077.quests.scenes.community-registry-sourceobjectid-must-match
@@ -0,0 +1,41 @@
1
+ game: cyberpunk2077
2
+ topic: quickhacks.tiers
3
+ title: How a vanilla quickhack's tiers are built in TweakDB
4
+ facts:
5
+ - id: cp2077.quickhacks.tiers.program-chain-per-quality
6
+ claim: "A vanilla quickhack's tiers are separate program items in a $base chain, one per quality,
7
+ each with its own hack action. Blind is the worked example: Items.BlindProgram
8
+ (Quality.Common, Tier0Shard, QuickHack.BlindHack) <- Items.BlindLvl1Program (Uncommon,
9
+ Tier1Shard, BlindLvl1Hack) <- Items.BlindLvl2Program (Rare, Tier2Shard, BlindLvl2Hack) <-
10
+ Items.BlindLvl3Program (Epic, Tier3Shard, BlindLvl3Hack) <- Items.BlindLvl4Program (Legendary,
11
+ Tier4Shard, BlindLvl4Hack). Items.BlindLvl4PlusPlusProgram is an iconic Legendary (Tier6Shard)
12
+ that reuses the Lvl4 actions. Each tier lists its action with Boss… and Chimera… variants in
13
+ objectActions, and has its own OnAttach and OnEquip packages and a CraftingData package. The
14
+ Lvl2 action costs QuickHack.MemoryIncreaseTier4."
15
+ status: verified
16
+ verified_on: "2.31"
17
+ source: .modwright-cache/cyberpunk2077/vanilla.sqlite (Items.Blind*Program, QuickHack.Blind*Hack)
18
+ tags:
19
+ - quickhack
20
+ - tier
21
+ - quality
22
+ - program
23
+ - tweakdb
24
+ - id: cp2077.quickhacks.tiers.one-program-per-shardtype
25
+ claim: "The cyberdeck takes one program per shardType: slotting compares the new program's shardType
26
+ with each slotted one's (itemModificationSystem.script:125). A mod quickhack whose program
27
+ $bases a vanilla program inherits its shardType (Items.BlindProgram: \"Blind\") and cannot
28
+ share the deck with that vanilla quickhack; it needs its own shardType."
29
+ status: verified
30
+ verified_on: "2.31"
31
+ source: 'tools\redmod\scripts\cyberpunk\systems\itemModificationSystem.script:125, :136, :316; the
32
+ vanilla index: Items.BlindProgram shardType "Blind", Items.DisableCyberwareProgram shardType
33
+ "DisableCyberware"'
34
+ tags:
35
+ - quickhack
36
+ - program
37
+ - cyberdeck
38
+ - shardtype
39
+ - slot
40
+ related:
41
+ - cp2077.quickhacks.tiers.program-chain-per-quality