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,552 @@
1
+ game: cyberpunk2077
2
+ topic: drones.control
3
+ title: Drones as script sees them - type, component, locomotion, altitude, ground and geometry queries
4
+ facts:
5
+ - id: cp2077.drones.control.npctype-enum
6
+ claim: gamedataNPCType is Android 0, Any 1, Cerberus 2, Chimera 3, Device 4, Drone 5, Human 6, Mech
7
+ 7, Spiderbot 8, Count 9. ScriptedPuppet.IsDrone() is GetNPCType() == Drone; IsMechanical() is
8
+ Android, Drone or Mech, or the Ability.IsMechanical gameplay ability.
9
+ status: verified
10
+ verified_on: "2.31"
11
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 orphans.swift:4928;
12
+ cyberpunk/puppet/scriptedPuppet.swift:1147, :1332
13
+ tags:
14
+ - drone
15
+ - npctype
16
+ - ismechanical
17
+ - scriptedpuppet
18
+ - id: cp2077.drones.control.same-ai-controller-as-humans
19
+ claim: "Every ScriptedPuppet, drones included, carries one AI controller field `m_aiController:
20
+ ref<AIHumanComponent>` returned by GetAIControllerComponent(); there is no drone-specific AI
21
+ component class in the scripts. A script lever that toggles that component (the mod's
22
+ mover-defeat) or reads its movement parameters therefore applies to a drone unchanged."
23
+ status: verified
24
+ verified_on: "2.31"
25
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 cyberpunk/puppet/scriptedPuppet.swift:137, :1018;
26
+ core/components/aiComponent.swift:252
27
+ tags:
28
+ - drone
29
+ - aihumancomponent
30
+ - ai-controller
31
+ - mover-defeat
32
+ - id: cp2077.drones.control.dronecomponent-components
33
+ claim: 'DroneComponent (a ScriptableComponent) resolves three components by name on its owner:
34
+ "Senses" (SenseComponent), "npcCollision" and "playerOnlyCollision" (SimpleColliderComponent);
35
+ the player-only collider is toggled off on game attach and back on only for a dead body whose
36
+ record sets `.keepColliderOnDeath`.'
37
+ status: verified
38
+ verified_on: "2.31"
39
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
40
+ core/components/scriptComponents/droneComponent.swift:26-46, :81-85
41
+ tags:
42
+ - drone
43
+ - dronecomponent
44
+ - senses
45
+ - collider
46
+ - id: cp2077.drones.control.locomotion-wrappers
47
+ claim: "A drone's movement animation is chosen by anim wrapper weights named DroneLocomotion_Walk,
48
+ DroneLocomotion_Run and DroneLocomotion_Sprint (the others zeroed, the chosen one set to 1).
49
+ The public static DroneComponent.SetLocomotionWrappers(owner, movementType: CName) queues an
50
+ ApplyDroneLocomotionWrapperEvent that applies them, so a script can pick the flight animation
51
+ without the AI."
52
+ status: verified
53
+ verified_on: "2.31"
54
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
55
+ core/components/scriptComponents/droneComponent.swift:168-188
56
+ tags:
57
+ - drone
58
+ - animation
59
+ - wrapper
60
+ - locomotion
61
+ - id: cp2077.drones.control.move-commands-force-walk
62
+ claim: The AI move command handlers (move-to, move-on-spline, the patrol task) force a drone's
63
+ movementType to moveMovementType.Walk and only switch the locomotion wrapper to the requested
64
+ type, so a drone's one effective movement parameter set is its Walk one
65
+ (GetMovementParams(Walk)); "Run" and "Sprint" are animation wrappers on a drone, not speeds.
66
+ status: verified
67
+ verified_on: "2.31"
68
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
69
+ cyberpunk/ai/commands/aiMoveToCommandHandler.swift:52-55, :112-115, :330-333;
70
+ cyberpunk/ai/Tasks/PatrolControllerTask.swift:55
71
+ tags:
72
+ - drone
73
+ - movement
74
+ - movementparameters
75
+ - walk
76
+ - id: cp2077.drones.control.movementparameters-struct
77
+ claim: MovementParameters is a native struct with type (moveMovementType), maxSpeed, acceleration,
78
+ deceleration and rotationSpeed; the AI component's GetMovementParams(type) returns it and
79
+ reads fine with the component toggled off (the mod measured 1.532 m/s on an android with the
80
+ AI off).
81
+ status: verified
82
+ verified_on: "2.31"
83
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 orphans.swift:49289;
84
+ core/components/aiComponent.swift:252
85
+ tags:
86
+ - movementparameters
87
+ - rotationspeed
88
+ - aicomponent
89
+ - id: cp2077.drones.control.altitude-is-an-anim-feature
90
+ claim: "A vanilla drone's altitude change is an animation feature, not a mover write:
91
+ AISubActionDroneModifyAltitude applies AnimFeature_DroneActionAltitudeOffset.desiredOffset
92
+ (default 0) on the animgraph input \"ActionAltitudeOffset\" through
93
+ AnimationControllerComponent.ApplyFeatureToReplicate, after the record's Delay, and resets it
94
+ to 0 on deactivate. A script can send the same feature to lift or lower the body relative to
95
+ where the mover holds it."
96
+ status: verified
97
+ verified_on: "2.31"
98
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 core/ai/actions/tweakAISubActions.swift:6185-6212;
99
+ orphans.swift:48807; core/components/animationControllerComponent.swift:43
100
+ tags:
101
+ - drone
102
+ - altitude
103
+ - animfeature
104
+ - applyfeaturetoreplicate
105
+ - id: cp2077.drones.control.procedural-feature-from-record
106
+ claim: "On attach, DroneComponent reads the drone's Character record floats .mass, .sizeFront,
107
+ .sizeBack, .sizeLeft, .sizeRight, .walkTiltCoefficient, .massNormalizedCoefficient,
108
+ .tiltAngleOnSpeed, .speedIdleThreshold, .startingRecoveryBalance, .pseudoAcceleration,
109
+ .turnInertiaDamping and .combatDefaultZOffset into an AnimFeature_DroneProcedural applied 0.2
110
+ s later on the input \"DroneProcedural\" (class defaults: mass 100, size front 1.5 / back -1.5
111
+ / left 1.2 / right -1.2, tilt angle on speed 40). The hover bob and the tilt on speed are the
112
+ animgraph's, driven by these."
113
+ status: verified
114
+ verified_on: "2.31"
115
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
116
+ core/components/scriptComponents/droneComponent.swift:136-166; orphans.swift:46700-46740
117
+ tags:
118
+ - drone
119
+ - animfeature
120
+ - procedural
121
+ - tweakdb
122
+ detail: The size floats describe the animated hull, not a collider; a collision test should not
123
+ trust them for more than an order of magnitude.
124
+ - id: cp2077.drones.control.poses-by-high-level-state
125
+ claim: DroneComponent applies DronePose.Combat (1) when the high-level state becomes Combat or
126
+ Alerted and DronePose.Relaxed (0) otherwise, as AnimFeature_DroneStateAnimationData.statePose
127
+ on the input "DroneStateAnimationData"; the AI events "CombatPose" / "RelaxedPose" do the
128
+ same. Alerted also re-applies the Walk wrapper.
129
+ status: verified
130
+ verified_on: "2.31"
131
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
132
+ core/components/scriptComponents/droneComponent.swift:57-79; orphans.swift:343
133
+ tags:
134
+ - drone
135
+ - pose
136
+ - highlevelstate
137
+ - id: cp2077.drones.control.isonground-geometry-query
138
+ claim: "NavigationSystem.IsOnGround(target, opt queryLength) is a static-geometry probe, not a
139
+ navmesh test: a GeometryDescriptionQuery with refPosition 0.1 m above the body along its up
140
+ vector, refDirection (0,0,-1), the filter QueryFilter.AddGroup(n\"Static\"),
141
+ primitiveDimension (0.1, 0.1, queryLength) with queryLength 0.2 when 0, run through
142
+ GameInstance.GetSpatialQueriesSystem(game).GetGeometryDescriptionSystem().QueryExtents; true
143
+ when the result's queryStatus is worldgeometryDescriptionQueryStatus.OK."
144
+ status: verified
145
+ verified_on: "2.31"
146
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 core/systems/navigationSystem.swift:41-58;
147
+ orphans.swift:7370
148
+ tags:
149
+ - navigation
150
+ - isonground
151
+ - geometry-query
152
+ - spatial-queries
153
+ detail: The same query along a movement direction is a 3-D wall or ceiling test that a flying body
154
+ can use where the navmesh calls (GetNearestNavmeshPointBelow, FindWallInLineForCharacter) do
155
+ not apply.
156
+ - id: cp2077.drones.control.geometry-query-api
157
+ claim: GeometryDescriptionQuery (native class) has refPosition, refDirection, refUp,
158
+ primitiveDimension, primitiveRotation, maxDistance, maxExtent, raycastStartDistance,
159
+ probingPrecision, probingMaxDistanceDiff, probingMaxHeight, maxProbes and filter (QueryFilter;
160
+ ALL(), ZERO(), AddGroup(out filter, group)); GeometryDescriptionResult carries queryStatus
161
+ (OK, NoGeometry, UpVectorSameAsDirection), collisionNormal, distanceVector,
162
+ topPoint/topNormal, behindPoint/behindNormal, obstacleDepth and up/down/top extents.
163
+ status: verified
164
+ verified_on: "2.31"
165
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 core/world/geomDescription.swift:2-26;
166
+ orphans.swift:27612-27700, :7370
167
+ tags:
168
+ - geometry-query
169
+ - spatial-queries
170
+ - collision
171
+ - id: cp2077.drones.control.aerial-death-ragdoll
172
+ claim: When a drone is incapacitated while NavigationSystem.IsOnGround(this) is false, NPCPuppet
173
+ sets ragdollNoGroundThreshold -1 on its uncontrolled movement event and delays a forced
174
+ ragdoll by the record's .airDeathRagdollDelay (default 1.0 s); DroneComponent's own OnDeath
175
+ starts uncontrolled movement with ragdollOnCollision true and switches the appearance to
176
+ "drone_destroyed".
177
+ status: verified
178
+ verified_on: "2.31"
179
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 cyberpunk/NPC/NPCPuppet.swift:3298-3301;
180
+ core/components/scriptComponents/droneComponent.swift:99-121
181
+ tags:
182
+ - drone
183
+ - death
184
+ - ragdoll
185
+ - id: cp2077.drones.control.background-combat-destinations
186
+ claim: In the background combat command's ChangeCover step a drone is given a desired destination
187
+ where a human is given a desired cover; drones do not take covers.
188
+ status: verified
189
+ verified_on: "2.31"
190
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
191
+ cyberpunk/ai/commands/aiBackgroundCombatCommand.swift:262-268
192
+ tags:
193
+ - drone
194
+ - combat
195
+ - cover
196
+ - id: cp2077.drones.control.hud-drone-widget
197
+ claim: hudDroneController (an inkHUDGameController in hud_drone.swift) fills a date, a timer and the
198
+ camera-HUD camera-id localization string and listens to PlayerStateMachine.ZoomLevel; no
199
+ script in the tree instantiates or references it, so it is a camera-HUD frame available to a
200
+ widget, not a mechanism.
201
+ status: verified
202
+ verified_on: "2.31"
203
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 cyberpunk/UI/hud/custom/hud_drone.swift
204
+ tags:
205
+ - drone
206
+ - hud
207
+ - ink
208
+ - id: cp2077.drones.control.nojump-checked-in-psm
209
+ claim: GameplayRestriction.NoJump is enforced inside the player state machine's transition
210
+ conditions (a status-effect tag check in defaultTransition), not by filtering input; the Jump
211
+ action itself is still dispatched to input listeners, the way MoveY reaches them under
212
+ NoMovement.
213
+ status: inferred
214
+ verified_on: "2.31"
215
+ source: ModWright research
216
+ tags:
217
+ - input
218
+ - restriction
219
+ - nojump
220
+ - listener
221
+ detail: To be confirmed by an input-listener probe listing "Jump" and "Crouch" while the player is
222
+ held under the restriction; if they do not arrive, Input Loader's custom actions are the
223
+ fallback (the route Let There Be Flight uses for its six-axis mode).
224
+ - id: cp2077.drones.control.records-in-amm-list
225
+ claim: "Appearance Menu Mod's public TweakDB record list names these drone and mech Character
226
+ records: Character.arasaka_base_drone_octant, Character.sts_wat_kab_101_drone_security,
227
+ Character.q112_camera_drone, Character.sq025_delamain_drone_bombus_speaker,
228
+ Character.q104_pp_drones, Character.q104_arasaka_av_droid,
229
+ Character.q115_arasaka_jungle_droid_rifle; mechs Character.ncpd_minotaur,
230
+ Character.q003_militech_mech, Character.q114_arasaka_netnest_mech_friendly_quest. The list is
231
+ partial (no Wyvern or Griffin entry by that name)."
232
+ status: community
233
+ source: MaximiliumM/appearancemenumod Resources/TweakDB Records.html (main, read 2026-09-21)
234
+ tags:
235
+ - drone
236
+ - mech
237
+ - tweakdb
238
+ - character-record
239
+ - amm
240
+ detail: Superseded in scope by cp2077.drones.control.record-trees (the full list from a local
241
+ vanilla index, 2026-09-22); kept as the public source a cloud session can read without an
242
+ install.
243
+ related:
244
+ - cp2077.drones.control.record-trees
245
+ - cp2077.drones.control.template-paths
246
+ - id: cp2077.drones.control.record-trees
247
+ claim: In the 2.31 TweakDB, Character.Drone_NPC_Base has 235 descendants and Character.Mech_NPC_Base
248
+ 50, both under Character.Mechanical_NPC_Base (399 descendants in all, androids included). The
249
+ four chassis bases are Character.Drone_Octant_Base (actionMap DroneOctantArchetype.Map, mass
250
+ 120, sizeFront/Back ±1.5, sizeLeft/Right ±1.2, tiltAngleOnSpeed 10),
251
+ Character.Drone_Wyvern_Base (DroneArchetype.Map, mass 20, ±0.75 × ±0.5, combatDefaultZOffset
252
+ -0.15), Character.Drone_Griffin_Base (DroneGriffinArchetype.Map, mass 2, 0.33/-0.66 × ±1) and
253
+ Character.Drone_Bombus_Base (DroneBombusArchetype.Map, mass 70, 0.2/-0.33 × ±0.33,
254
+ reactionPreset Mechanical_NonCombat); every faction drone record derives from one of them
255
+ (arasaka_base_drone_octant, militech_drone_wyvern_hard, kangtao_drone_griffin_medium,
256
+ ncpd_drone_bombus_medium, ...). Character.Drone_NPC_Base_Old has one child,
257
+ Character.e3_2019_scene_drone (archetype drone_deprecated).
258
+ status: verified
259
+ verified_on: "2.31"
260
+ source: ModWright field verification
261
+ tags:
262
+ - drone
263
+ - mech
264
+ - tweakdb
265
+ - character-record
266
+ - inheritance
267
+ - id: cp2077.drones.control.objectactions-inherited-from-mechanical-base
268
+ claim: "No drone record in the Drone_NPC_Base tree declares its own objectActions: Drone_NPC_Base
269
+ and the four chassis bases inherit the 36-entry list of Character.Mechanical_NPC_Base
270
+ unchanged, so an !append on Mechanical_NPC_Base reaches all 235 drones.
271
+ Character.Mech_NPC_Base and Character.Android_NPC_Base each add two takedown entries as an
272
+ append (contributors Mechanical_NPC_Base then the base itself), not a re-declaration. The only
273
+ mechanicals that re-declare the list are Character.q110_boxing_robot,
274
+ Character.ep1_combat_zone_non_combat_droid, Character.q304_market_minotaur and
275
+ Character.q306_black_ops_chopper."
276
+ status: verified
277
+ verified_on: "2.31"
278
+ source: ModWright field verification
279
+ tags:
280
+ - drone
281
+ - mech
282
+ - objectactions
283
+ - quickhack
284
+ - tweakdb
285
+ - id: cp2077.drones.control.template-paths
286
+ claim: The drone and mech Character records' entityTemplatePath values are
287
+ ep1\vehicles\special\av_zetatech_octant__basic_01_ep1.ent (Octant base and every faction
288
+ Octant), ep1\vehicles\special\av_militech_wyvern__basic_01_ep1.ent (Wyvern base),
289
+ ep1\vehicles\special\av_militech_griffin__basic_01_ep1.ent (Griffin base),
290
+ base\vehicles\special\av_zetatech_bombus__basic.ent (Bombus base),
291
+ ep1\vehicles\special\av_ep1_bombus__basic.ent and av_ep1_wyvern__basic_01.ent (Kurtz and
292
+ friendly open-world variants), ep1\vehicles\special\av_nusa_griffin__basic_01.ent (q301),
293
+ ep1\mechanical\mech\mch_003__minotaur_ep1.ent (Mech base) and
294
+ ep1\mechanical\ep1_mch_003__minotaur.ent (Kurtz and Dogtown prevention), plus one-off quest
295
+ templates. All eight ep1 files live in archive\pc\ep1\ep1_2_gamedata.archive (not the
296
+ nightcity archive); the base-game copies
297
+ (base\vehicles\special\av_zetatech_octant__basic_01.ent, av_militech_wyvern__basic_01.ent,
298
+ av_militech_griffin__basic_01.ent, base\mechanical\mech\mch_003__minotaur.ent) are in
299
+ basegame_4_appearance.archive and referenced by a few quest records.
300
+ status: verified
301
+ verified_on: "2.31"
302
+ source: ModWright field verification
303
+ tags:
304
+ - drone
305
+ - mech
306
+ - entity-template
307
+ - archive
308
+ - archivexl
309
+ - patch-list
310
+ detail: ModWright's index lists resources from archive\pc\content only (32 archives); archive\pc\ep1
311
+ is not indexed, so lookup kind=resource answers 0 for every ep1 path. Indexing archive\pc\ep1
312
+ is open work for ModWright.
313
+ - id: cp2077.drones.control.templates-have-head-slot-on-base
314
+ claim: The drone chassis templates (Octant, Wyvern, Griffin, both Bombus) each carry an
315
+ entSlotComponent named Item_Attachment_Slot whose slots include Head, Center, Perception,
316
+ Chest, RightHand and ScannerRoot on the root bone "base" (WeaponRight/WeaponLeft on the gun or
317
+ wing bones); the Minotaur templates carry the humanoid slot set with Head on upper_body_01. An
318
+ entHardTransformBinding to Item_Attachment_Slot / Head therefore has a target on every drone
319
+ and mech, at the hull's origin in the hull's own frame.
320
+ status: verified
321
+ verified_on: "2.31"
322
+ source: ModWright field verification
323
+ tags:
324
+ - drone
325
+ - mech
326
+ - entity-template
327
+ - slot
328
+ - item_attachment_slot
329
+ - camera-patch
330
+ detail: This contradicts an earlier (2026-09-21) assumption that a drone lacks the slot; a mod's
331
+ existing camera patch binds on a drone as is, so extending the XL patch list suffices instead
332
+ of adding a root-relative second entity.
333
+ - id: cp2077.drones.control.templates-components
334
+ claim: Every drone chassis template carries DroneComponent, a moveDroneMotionPlannerComponent with
335
+ snapToGround false (the Minotaur has the plain moveMotionPlannerComponent with snapToGround
336
+ true), moveComponent, movePoliciesComponent, AIHumanComponent, a gameHumanoidBody (baseHeight
337
+ 1.8, basePersonalSpace 1.2 on the Octant, 0.35 on the Wyvern) and an npcCollision collider.
338
+ The second collider is named playerOnlyCollision only on the Octant; the Wyvern and both
339
+ Bombus templates name it playerCollision and the Griffin has none, so DroneComponent's lookup
340
+ of "playerOnlyCollision" resolves nothing on three of the four chassis.
341
+ status: verified
342
+ verified_on: "2.31"
343
+ source: ModWright field verification
344
+ tags:
345
+ - drone
346
+ - mech
347
+ - entity-template
348
+ - dronecomponent
349
+ - collider
350
+ - motion-planner
351
+ related:
352
+ - cp2077.drones.control.dronecomponent-components
353
+ - id: cp2077.drones.control.dcr-spawner-and-follow
354
+ claim: "Drone Companions (Revamp) 0.5.0 spawns every companion as a gamedataSubCharacter_Record
355
+ filled with flats copied from a vanilla base (Character.Drone_Octant_Base, Drone_Wyvern_Base,
356
+ Drone_Griffin_Base, Drone_Bombus_Base; all three mechs from Character.Mech_NPC_Base; androids
357
+ from Character.wraiths_base_android with the mod's own .ent) through
358
+ Game.GetCompanionSystem():SpawnSubcharacterOnPosition. Following is the vanilla AI under an
359
+ AIFollowerRole whose followerRef is \"#player\" (GetAIControllerComponent():SetAIRole) plus
360
+ TweakDB edits to the vanilla follower records; script movement is AITeleportCommand with
361
+ doNavTest false (elevators, vehicles: drones go to a point 2 m up; fast travel) followed by a
362
+ ForceRagdollTask event. No altitude feature, no SetWorldTransform, no camera, no input
363
+ listeners, and the AI controller is never toggled."
364
+ status: community
365
+ source: "Nexus 23980 Drone Companions (Revamp) 0.5.0: bin/x64/plugins/cyber_engine_tweaks/mods/Drone
366
+ Companions (Revamp)/Modules/Base Drones.lua:40-58, :174, :189-203; Modules/Drone
367
+ Spawning.lua:203-212, :390-397; init.lua:25, :172-186; DroneLogic/Drone AI -
368
+ Combat.lua:137-145, :175; DroneLogic/Drone AI - Flying.lua:5-8; r6/scripts/DCO
369
+ Modules/DCO_Codeware.reds:24-31 (a DynamicEntitySystem path nothing raises)"
370
+ tags:
371
+ - drone
372
+ - community-mod
373
+ - companion
374
+ - spawner
375
+ - aifollowerrole
376
+ - teleport
377
+ - id: cp2077.drones.control.dc-spawner-and-follow
378
+ claim: "Drone Companion 5.7.0 (Nexus 32572) builds one gamedataSubCharacter_Record per chassis,
379
+ faction and instance from a vanilla faction base (Octant:
380
+ militech/arasaka/kangtao/trauma_team_base_drone_octant, prevention_unit_octant_drone,
381
+ max_border_drone_octant; Wyvern: eight *_base_drone_wyvern records; Griffin:
382
+ militech/kangtao/maelstrom_base_drone_griffin, q301_shuttle_fs_griffin,
383
+ sts_ep1_12_voodooboy_base_drone_griffin; Bombus: five *_base_drone_bombus plus
384
+ cvi_netwatch_drone_bombus_medium and sq025_delamain_drone_bombus; Minotaur:
385
+ militech/arasaka/ncpd/kurtz_base_minotaur) and spawns it with
386
+ CompanionSystem:SpawnSubcharacterOnPosition; Wyvern, Griffin and Android get the mod's own
387
+ .ent via entityTemplatePath. Following is an AIFollowerRole (AIHumanComponent.SetCurrentRole),
388
+ a once-a-second AITeleportCommand leash, AIFollowTargetCommand (desiredDistance 6, teleport
389
+ true) to resume, AIHoldPositionCommand (duration -1) to hold; ordered flyers are teleported to
390
+ the destination +2.5 m and held, never move-commanded. No altitude feature, no
391
+ SetWorldTransform, no AI toggle."
392
+ status: community
393
+ source: "Nexus 32572 Drone Companion 5.7.0:
394
+ bin/x64/plugins/cyber_engine_tweaks/mods/DroneCompanion/init.lua:16-122; records.lua:76-80,
395
+ :478-511, :677-682; companion.lua:456-466, :609-617, :910-920, :1585-1591, :1613-1617;
396
+ hacks.lua:287-290; orders.lua:157-159"
397
+ tags:
398
+ - drone
399
+ - community-mod
400
+ - companion
401
+ - spawner
402
+ - aifollowerrole
403
+ - teleport
404
+ - id: cp2077.drones.control.dc-drone-camera-is-a-free-camera
405
+ claim: "Drone Companion 5.7.0's \"drone camera\" is not bound to the drone: it spawns
406
+ base\\entities\\cameras\\simple_free_camera.ent with exEntitySpawner.Spawn, activates its
407
+ \"camera\" component (Activate(0.4, false)) and teleports the camera entity every frame with
408
+ TeleportationFacility:Teleport; V gets GameplayRestriction.NoMovement, NoCameraControl,
409
+ NoZooming, NoWeapons and NoDriving. For a flyer the camera is the pilot (12 m/s planar, 6 m/s
410
+ vertical from the inputs; a SyncRaycastByCollisionGroup \"Static\" ray refuses a blocked step)
411
+ and every 0.25 s the drone body is teleported by AITeleportCommand (doNavTest false) to a
412
+ chase offset behind and below the camera (Octant 2.2 back / 2.5 up, Wyvern 2.5 / 1.5, Griffin
413
+ 3.0 / 2.0, Bombus 1.5 / 0.8) with the AI on; ground units are driven with AIMoveToCommand hops
414
+ of 8 m every 0.4 s. Exit deactivates the free camera, activates V's FPP camera component and
415
+ disposes the entity after 0.5 s. There is no HUD for the view."
416
+ status: community
417
+ source: "Nexus 32572 Drone Companion 5.7.0:
418
+ bin/x64/plugins/cyber_engine_tweaks/mods/DroneCompanion/dronecam.lua:5, :14-17, :27-33,
419
+ :44-52, :198-203, :240-247, :316, :337, :351, :364-402, :466-467, :500-508, :514, :527-539,
420
+ :547-549"
421
+ tags:
422
+ - drone
423
+ - community-mod
424
+ - camera
425
+ - free-camera
426
+ - teleport
427
+ - restriction
428
+ detail: "The fallback behind the head-slot patch: a view with no archive patch, at the cost of the
429
+ body chasing the camera."
430
+ - id: cp2077.drones.control.dc-vertical-actions-arrive-under-restrictions
431
+ claim: 'Drone Companion 5.7.0 reads its flight input from an Override of PlayerPuppet.OnAction while
432
+ V is under NoMovement and NoCameraControl: "Jump" is up; "ToggleCrouch", "Dodge" and "Crouch"
433
+ are down; "MoveX"/"MoveY" and "Forward"/"Back"/"Left"/"Right" the plane;
434
+ "CameraMouseX"/"CameraMouseY" (relative) and "CameraX"/"CameraY" (stick) the look. The mod
435
+ ships no inputs.xml and does not need Input Loader; its own hotkeys are Codeware Input/Key
436
+ callbacks (F-keys) and one CET registerHotkey.'
437
+ status: community
438
+ source: "Nexus 32572 Drone Companion 5.7.0:
439
+ bin/x64/plugins/cyber_engine_tweaks/mods/DroneCompanion/input.lua:125-131, :141-143;
440
+ dronecam.lua:404-428; r6/scripts/DroneCompanion/DroneSettings.reds:404-424; hijack.lua:257"
441
+ tags:
442
+ - input
443
+ - jump
444
+ - crouch
445
+ - dodge
446
+ - restriction
447
+ - listener
448
+ - community-mod
449
+ related:
450
+ - cp2077.drones.control.nojump-checked-in-psm
451
+ detail: Community evidence for the nojump-checked-in-psm inference; a quickhack mod's own listener
452
+ (registered differently) still has to be read with its own input-listener probe.
453
+ - id: cp2077.drones.control.ltbf-drone-mode-inputs
454
+ claim: "Let There Be Flight 0.3.18's \"Drone\" flight mode (FlightModeDrone; the readme's
455
+ Drone/Acrobat) reads six scalars — lift, surge, sway as force and pitch, roll, yaw as torque —
456
+ from input listeners Pitch, Sway, Roll, SurgePos, Lift, Yaw, SurgeNeg registered on the player
457
+ while flight is active. Its inputs.xml defaults: Flight_Lift = IK_Pad_LeftAxisY, IK_Space +1,
458
+ IK_LControl -1; Flight_Yaw = IK_Pad_LeftAxisX, IK_D +1, IK_A -1; Flight_Pitch =
459
+ IK_Pad_RightAxisY, IK_L +1, IK_Period -1; Flight_Roll = IK_Pad_RightAxisX, IK_Slash +1,
460
+ IK_Comma -1; Flight_Sway = the arrow keys only; surge = the vanilla Acceleration_Axis /
461
+ Deceleration_Axis plus HOTAS sliders. The actions live in a new context BaseVehicleFlight;
462
+ only the toggle and the paraglider are appended to vanilla contexts. Input Loader is a hard
463
+ dependency; the file is one <bindings> root holding <context> and <mapping>/<pairedAxes>
464
+ elements in the vanilla syntax, append=\"true\" extending a vanilla context."
465
+ status: community
466
+ source: "Nexus 5208 Let There Be Flight 0.3.18: red4ext/plugins/let_there_be_flight/inputs.xml:5-6,
467
+ :20-44, :174-175, :250-257, :262-288; packed.reds:3494-3500, :4284, :4385-4399;
468
+ readme.md:20-27"
469
+ tags:
470
+ - input
471
+ - input-loader
472
+ - inputs-xml
473
+ - flight
474
+ - community-mod
475
+ - keybinding
476
+ - id: cp2077.drones.control.ltbf-physics-and-camera
477
+ claim: "Let There Be Flight flies V's vehicle through a native RED4ext plugin: the script computes a
478
+ force and a torque per frame and accumulates them into native fields of a native
479
+ FlightComponent, which the DLL applies in the vehicle physics tick; no SetWorldTransform, no
480
+ teleport, no geometry-description query (collision is a reactive recovery timer after an
481
+ impact; the only spatial queries are four SyncRaycastByQueryFilter rays down from the tyres
482
+ for the hover modes). It has no code for NPC drones (the one ScriptedPuppet reference is
483
+ oxygen consumption). Its camera is the stock vehicle perspectives via
484
+ vehicleRequestCameraPerspectiveEvent, plus one custom view that moves V's own FPP camera
485
+ component to a CustomFlightCamera slot; it never spawns or binds a camera component."
486
+ status: community
487
+ source: "Nexus 5208 Let There Be Flight 0.3.18: red4ext/plugins/let_there_be_flight/packed.reds:620,
488
+ :1746-1760, :2429-2431, :2503-2510, :2774-2775, :2920-2924, :6072-6084, :6113-6125"
489
+ tags:
490
+ - flight
491
+ - physics
492
+ - red4ext
493
+ - camera
494
+ - community-mod
495
+ - id: cp2077.drones.control.movecomponent-reasserts-its-own-transform
496
+ claim: "A drone's moveComponent keeps a world transform of its own and puts the drone back to it
497
+ whenever script stops writing: with the AI off a single SetWorldTransform snaps back in the
498
+ same frame; with the component toggled off the write holds; toggled on again the drone snaps
499
+ back to the old spot. The drone motion planner plays no part. While a drone is flown by script
500
+ the component's transform stays put (13.8 m from the root in one in-game run)."
501
+ status: verified
502
+ verified_on: "2.31"
503
+ source: ModWright field verification
504
+ tags:
505
+ - drone
506
+ - mover
507
+ - movecomponent
508
+ - cache
509
+ - stop
510
+ - id: cp2077.drones.control.teleport-proxy-moves-the-cache-only-unfrozen
511
+ claim: "The action teleport proxy moves the moveComponent's own transform when the drone's AI is off
512
+ and the drone is not frozen: later writes snap back to the proxy's spot. In a script take that
513
+ freezes the drone (individual time dilation) the proxy reports STATUS_COMPLETE and moves
514
+ nothing. The slide proxy never answered."
515
+ status: verified
516
+ verified_on: "2.31"
517
+ source: ModWright field verification
518
+ tags:
519
+ - drone
520
+ - proxy
521
+ - teleport
522
+ - frozen
523
+ - cache
524
+ - id: cp2077.drones.control.dithered-idle-holds-a-stop
525
+ claim: A script-flown drone's stop strobes when the idle stops writing (the moveComponent re-asserts
526
+ its transform) or writes the same transform each tick. Writing the last flown transform every
527
+ idle tick with the height alternately offset by +/-0.5 mm holds the drone still where it
528
+ stopped, on the Octant and the Wyvern; the idle animation's hover bob stays. The same writes
529
+ keep the hull's pitch, so no return to level is needed.
530
+ status: verified
531
+ verified_on: "2.31"
532
+ source: ModWright field verification
533
+ tags:
534
+ - drone
535
+ - idle
536
+ - dither
537
+ - stop
538
+ - strobe
539
+ related:
540
+ - cp2077.drones.control.movecomponent-reasserts-its-own-transform
541
+ - id: cp2077.drones.control.chase-camera-shows-a-quarter-of-the-pitch
542
+ claim: In a quickhack mod's chase camera the active camera pitched -9 to -13 degrees while the flown
543
+ hull pitched -41.5, so screen centre is not where the drone points; a drone camera component's
544
+ local-to-world matrix did not carry the pitch either (a shot aimed along it levelled out).
545
+ status: verified
546
+ verified_on: "2.31"
547
+ source: ModWright field verification
548
+ tags:
549
+ - drone
550
+ - camera
551
+ - pitch
552
+ - aim