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,416 @@
1
+ game: cyberpunk2077
2
+ topic: drones.combat
3
+ title: How a drone shoots - its AI shoot actions and their gates, the context-free script shot, and
4
+ the drone aim rig
5
+ facts:
6
+ - id: cp2077.drones.combat.octant-shoot-chain
7
+ claim: "An Octant shoots through its action map: Character.Drone_Octant_Base sets actionMap
8
+ DroneOctantArchetype.Map and equips Items.Octant_Autocannon into AttachmentSlots.WeaponRight
9
+ as primaryEquipment; the map overrides GenericArchetype.ShootDefault with
10
+ DroneOctantActions.ShootDefault, whose single loop sub-action is an AISubActionShootWithWeapon
11
+ on AttachmentSlots.WeaponRight at AIActionTarget.CombatTarget with numberOfShots 20. The
12
+ sub-action resolves the weapon through TransactionSystem.GetItemInSlot and every shot ends in
13
+ the static AIWeapon.Fire."
14
+ status: verified
15
+ verified_on: "2.31"
16
+ source: tools\redmod\tweaks\base\gameplay\static_data\database\characters\bases\base_records.tweak:290,
17
+ :297, :299-307; ...\ai\actions\packages\drone\droneoctant.tweak:30-33, :189;
18
+ ...\ai\actions\library\droneoctantactions.tweak:1193, :1244-1271;
19
+ tools\redmod\scripts\core\ai\actions\tweakAISubActions.script:3349, :3086, :3117
20
+ tags:
21
+ - drone
22
+ - octant
23
+ - shooting
24
+ - aisubactionshootwithweapon
25
+ - weaponright
26
+ - actionmap
27
+ - id: cp2077.drones.combat.octant-shoot-gates
28
+ claim: "DroneOctantActions.ShootDefault's activationCondition is an AND of five terms a humanoid's
29
+ shoot action does not carry: Condition.TargetBelow35deg (AISpatialCond coneAngle (-1, 35)),
30
+ OR(TargetUpTo6dot5mZDiff zDiff (0,6.5), TargetAbove15m distance (15,-1)), OR(TargetIsVisible
31
+ isVisible=1, IsNPCBlinded), MaxVisibilityToTargetDistance3m (the senses visibility trace must
32
+ end within 3 m of the target) and NotFriendlyFire. The Wyvern's DroneActions.ShootDefault is
33
+ the same shape with TargetBelow15deg, 3.5 m zDiff or 6 m and OptimalDistance10mTolerance."
34
+ status: verified
35
+ verified_on: "2.31"
36
+ source: tools\redmod\tweaks\base\gameplay\static_data\database\ai\actions\library\droneoctantactions.tweak:1195-1215;
37
+ ...\library\commonconditionchecks.tweak:10340, :10665, :9637, :5545, :1382, :5690, :6944;
38
+ ...\library\droneactions.tweak:226-280;
39
+ tools\redmod\scripts\core\ai\actions\tweakAIConditionChecks.script:2771-2788
40
+ tags:
41
+ - drone
42
+ - octant
43
+ - wyvern
44
+ - shooting
45
+ - aiaction
46
+ - conditions
47
+ - visibility
48
+ - id: cp2077.drones.combat.humanoid-shoot-gates-differ
49
+ claim: A humanoid's ShootActions.ShootDefault gates only on ValidTargetOrAimCommandCondition
50
+ (not-invalid-expectation AND MinAccuracyValue0, minAccuracyValue 0.001, or an aim command) and
51
+ ShootActivationCondition (AbilityCanShootWhileMoving AND TargetBelow270deg), and takes an
52
+ AITicketType.Shoot ticket. It asks for no target visibility, no cone below 35 degrees and no
53
+ height difference, which is why an injected threat with accuracy 1.0 is enough to make a human
54
+ shoot and not enough for a drone.
55
+ status: verified
56
+ verified_on: "2.31"
57
+ source: tools\redmod\tweaks\base\gameplay\static_data\database\ai\actions\library\shootingactions.tweak:439-444;
58
+ ...\library\commonconditionchecks.tweak:851-863, :1016-1022, :5511, :5649
59
+ tags:
60
+ - shooting
61
+ - aiaction
62
+ - conditions
63
+ - humanoid
64
+ - ticket
65
+ - id: cp2077.drones.combat.senses-off-blocks-drone-shoot
66
+ claim: "A script that turns a puppet's SenseComponent off (ToggleComponent(false)) and then only
67
+ injects a threat can make a humanoid shoot but not a drone: the drone's shoot action requires
68
+ OR(TargetIsVisible, IsNPCBlinded) and MaxVisibilityToTargetDistance3m, both of which read the
69
+ sense component, while the humanoid's requires neither. This is the leading explanation for a
70
+ quickhack mod's (v0.8.3) Fire() being inert on an Octant (suppression mask 30, bit 2 = senses
71
+ off) while it works on an android."
72
+ status: inferred
73
+ source: ModWright research
74
+ related:
75
+ - id: cp2077.drones.combat.octant-shoot-gates
76
+ - id: cp2077.drones.combat.humanoid-shoot-gates-differ
77
+ tags:
78
+ - drone
79
+ - shooting
80
+ - senses
81
+ - suppression
82
+ - id: cp2077.drones.combat.aiweapon-fire-static
83
+ claim: AIWeapon.Fire(weaponOwner, weapon, timeStamp, tbhCoefficient, requestedTriggerMode, optional
84
+ targetPosition, target, rangedAttack, maxSpreadOverride, aimingDelay, offset,
85
+ shouldTrackTarget, predictionTime, posProviderOverride, muzzleOffset, weaponCustomEvent) is a
86
+ public static on abstract class AIWeapon that takes no ScriptExecutionContext and no AI
87
+ component. It is what every AI shoot sub-action ends in, so script can call it directly to
88
+ fire a puppet's weapon without the behaviour tree. Its only early returns are a missing or
89
+ unattached weapon and an overheated one.
90
+ status: verified
91
+ verified_on: "2.31"
92
+ source: tools\redmod\scripts\cyberpunk\items\weapon.script:1516, :1845, :1870, :1874-1881;
93
+ core\ai\actions\tweakAISubActions.script:3117
94
+ tags:
95
+ - shooting
96
+ - aiweapon
97
+ - weaponobject
98
+ - script-entry-point
99
+ - no-behaviour-tree
100
+ - id: cp2077.drones.combat.aiweapon-fire-branches
101
+ claim: AIWeapon.Fire picks its shot three ways. With a target object it needs
102
+ weaponOwner.GetSensesComponent().IsAgentVisible(target) (or shouldTrackTarget) before it
103
+ builds a position provider on the target's best shooting component and applies the victim's
104
+ targetShootComponent. With target null and a targetPosition it builds a static position
105
+ provider at that point. It then calls the native WeaponObject.AI_ShootAt when
106
+ AIActionHelper.ShouldShootDirectlyAtTarget or TargetTrackerComponent.IsPositionValid accepts
107
+ the point, and otherwise falls through to WeaponObject.AI_ShootForwards along the weapon's own
108
+ forward - so the position form always produces a shot and never touches the sense component.
109
+ status: verified
110
+ verified_on: "2.31"
111
+ source: tools\redmod\scripts\cyberpunk\items\weapon.script:1915-1956, :1980-1996, :143-144;
112
+ core\ai\actions\aiActionHelper.script:148-169;
113
+ core\components\targetTrackingComponent.script:256
114
+ related:
115
+ - id: cp2077.drones.combat.aiweapon-fire-static
116
+ tags:
117
+ - shooting
118
+ - aiweapon
119
+ - ai-shootat
120
+ - ai-shootforwards
121
+ - positionprovider
122
+ - id: cp2077.drones.combat.forceshoot-command-limits
123
+ claim: AIForceShootCommand carries only targetOverrideNodeRef (NodeRef), targetOverridePuppetRef
124
+ (EntityReference, itself only a NodeRef) and duration, and its ForceShootCommandTask resolves
125
+ that reference and then calls AIActionHelper.SetCommandCombatTarget, which returns false on a
126
+ null target and cancels the command. So the command can only name a node-ref'd entity or
127
+ "#player", it needs the behaviour tree to be ticking, and it is unusable for an arbitrary or
128
+ spawned NPC target. AIAimAtTargetCommand has the same fields and the same handler shape, and
129
+ only aims.
130
+ status: verified
131
+ verified_on: "2.31"
132
+ source: tools\redmod\scripts\core\ai\aiCommand.script:572-578, :604-610;
133
+ cyberpunk\ai\commands\aiForceShootCommand.script:61-85;
134
+ cyberpunk\ai\commands\aiAimWithWeaponCommand.script:4-80;
135
+ core\ai\actions\aiActionHelper.script:295-316; core\systems\questSystem.script:10-13, :40-65
136
+ tags:
137
+ - shooting
138
+ - aiforceshootcommand
139
+ - aiaimattargetcommand
140
+ - entityreference
141
+ - noderef
142
+ - id: cp2077.drones.combat.forceshoot-bypasses-drone-gates
143
+ claim: The Octant's map routes GenericArchetype.CommandForceShoot to
144
+ DroneOctantActions.CommandForceShoot, which inherits ShootDefault but replaces its activation
145
+ with Condition.NotAIHoldPositionCommand alone, and ShootDefault's pause and to-next-phase
146
+ conditions each guard their not-visible term with Condition.NotAIForceShootCommand. So an
147
+ AIForceShootCommand makes a drone shoot through all five of its spatial and visibility gates,
148
+ including at a target it cannot see.
149
+ status: verified
150
+ verified_on: "2.31"
151
+ source: tools\redmod\tweaks\base\gameplay\static_data\database\ai\actions\packages\drone\droneoctant.tweak:50-53,
152
+ :213; ...\ai\actions\library\droneoctantactions.tweak:1233-1242, :1253-1269, :1306-1322;
153
+ ...\ai\actions\library\commonconditionchecks.tweak:6979-6990
154
+ related:
155
+ - id: cp2077.drones.combat.forceshoot-command-limits
156
+ tags:
157
+ - drone
158
+ - octant
159
+ - aiforceshootcommand
160
+ - conditions
161
+ - id: cp2077.drones.combat.shoot-subaction-needs-context
162
+ claim: Every entry point of AISubActionShootWithWeapon_Record_Implementation - Activate, Update,
163
+ Shoot and ShootToPoints - takes a ScriptExecutionContext, which exists only inside a running
164
+ behaviour tree, so none of them is callable from a mod. ShootToPoints is only a loop that
165
+ calls Shoot per world coordinate, and Shoot is only a wrapper over AIWeapon.Fire, so the
166
+ context-free equivalent of "shoot at a point" is AIWeapon.Fire with a targetPosition.
167
+ status: verified
168
+ verified_on: "2.31"
169
+ source: tools\redmod\scripts\core\ai\actions\tweakAISubActions.script:2928, :2979, :3117, :3164-3205
170
+ tags:
171
+ - shooting
172
+ - aisubactionshootwithweapon
173
+ - shoottopoint
174
+ - scriptexecutioncontext
175
+ - id: cp2077.drones.combat.drone-animgraph-has-no-aim-feature
176
+ claim: All four drone chassis use base\gameplay\anim_graphs\drone_humanoid.animgraph (from
177
+ archive\pc\content\basegame_3_nightcity.archive). Serialized, its declared anim features are
178
+ AnimFeature_DroneProcedural, AnimFeature_DroneActionAltitudeOffset,
179
+ AnimFeature_DroneStateAnimationData, animAnimFeature_DroneLocomotion,
180
+ AnimFeature_NPCUpperBodyState, AnimFeature_NPCStanceState and the status-effect, hit-reaction,
181
+ mounting and workspot ones - there is no AnimFeature_Aim and no AnimFeature_BasicAim. A
182
+ drone's aim is the LookAt system, not an anim feature.
183
+ status: verified
184
+ verified_on: "2.31"
185
+ source: base\gameplay\anim_graphs\drone_humanoid.animgraph serialized to JSON (its animAnimFeature*
186
+ and AnimFeature_* type names)
187
+ tags:
188
+ - drone
189
+ - animgraph
190
+ - animfeature
191
+ - aim
192
+ - lookat
193
+ - id: cp2077.drones.combat.drone-lookat-parts
194
+ claim: "The drone animgraph declares six animLookAtPartInfo parts - DroneHorizontal and
195
+ DroneHighSpeedHorizontal on the target bone pla_horizontal_tgt, DroneVertical and
196
+ DroneHighSpeedVertical on pla_vertical_tgt, DroneWeapons and DroneHighSpeedWeapons on
197
+ pla_weapons_tgt - and those target bones drive animAnimNode_AimConstraint chains whose blend
198
+ weight is a float input in the group DroneWeapons named blendWeight, with the gun bone
199
+ frontGun01_JNT as the weapons chain's source. Vanilla drives them from an AI action's lookats:
200
+ LookatPreset.DroneHorizontal and DroneVertical at the threat's Head slot and
201
+ LookatPreset.DroneWeapons at its Chest, whose records are bodyPart DroneHorizontal /
202
+ DroneVertical / DroneWeapons with 360, 80 and 360 degree limits."
203
+ status: verified
204
+ verified_on: "2.31"
205
+ source: base\gameplay\anim_graphs\drone_humanoid.animgraph serialized (animLookAtPartInfo,
206
+ animAnimNode_AimConstraint);
207
+ tools\redmod\tweaks\base\gameplay\static_data\database\ai\actions\library\droneoctantactions.tweak:1280-1303;
208
+ ...\lookat_presets\base_values.tweak:1404, :1416, :1428
209
+ tags:
210
+ - drone
211
+ - lookat
212
+ - aim
213
+ - droneweapons
214
+ - animgraph
215
+ - frontgun01_jnt
216
+ - id: cp2077.drones.combat.lookatevent-from-script
217
+ claim: A LookAtAddEvent (extends AnimTargetAddEvent) carries a bodyPart CName plus
218
+ SetStaticTarget(worldPos), SetEntityTarget(entity, slotName, offset), SetPositionProvider,
219
+ SetLimits, SetStyle, SetAdditionalPartsArray and a request struct with priority; the vanilla
220
+ preset path only fills those fields from a LookAtPreset record and QueueEvents it on the
221
+ owner. So script can point a drone's guns by queueing a LookAtAddEvent with bodyPart =
222
+ n"DroneWeapons" and a static world target, with no AI and no behaviour tree.
223
+ status: verified
224
+ verified_on: "2.31"
225
+ source: tools\redmod\scripts\core\events\lookAtEvents.script:111-154, :180, :261-277
226
+ related:
227
+ - id: cp2077.drones.combat.drone-lookat-parts
228
+ tags:
229
+ - lookat
230
+ - lookataddevent
231
+ - aim
232
+ - script-entry-point
233
+ - id: cp2077.drones.combat.octant-weapon-slot-and-components
234
+ claim: The Octant template's Item_Attachment_Slot binds WeaponRight to the bone frontGun01_JNT (and
235
+ Head to the root bone base), and the template carries a gameSourceShootComponent named
236
+ sourceShootComponent - the component GameObject requests as 'sourceShootComponent' and returns
237
+ from GetSourceShootComponent, used for the line-of-sight queries behind the shooting
238
+ conditions. ScriptedPuppet.GetWeaponRight(obj) is a public static that returns the
239
+ WeaponObject in that slot.
240
+ status: verified
241
+ verified_on: "2.31"
242
+ source: ep1\vehicles\special\av_zetatech_octant__basic_01_ep1.ent (entSlotComponent
243
+ Item_Attachment_Slot; component list); tools\redmod\scripts\core\entity\gameObject.script:453,
244
+ :3092; cyberpunk\puppet\scriptedPuppet.script:2284
245
+ tags:
246
+ - drone
247
+ - octant
248
+ - weaponright
249
+ - frontgun01_jnt
250
+ - sourceshootcomponent
251
+ - slots
252
+ - id: cp2077.drones.combat.octant-autocannon-record
253
+ claim: 'Items.Octant_Autocannon is an ordinary bullet weapon - entityName "octant_autocannon",
254
+ triggerModes [TriggerMode.FullAuto], rangedAttacks Attacks.PhysicalBulletPackage,
255
+ placementSlots [AttachmentSlots.WeaponRight], shooting pattern package
256
+ ShootingPatterns.OctantAutocannonShootingPackage, canDrop false, NPC handling stats CycleTime
257
+ 0.21 s and 3 shots in a burst. The Bombus is the chassis that differs: its fast and slow
258
+ packages point ShootDefault at DroneBombusActions.ShootBeam and its suicide package at
259
+ CommitSuicide.'
260
+ status: verified
261
+ verified_on: "2.31"
262
+ source: tools\redmod\tweaks\base\gameplay\static_data\database\items\weapons\ranged\custom\drone_weapons\octant_autocannon.tweak:5-50;
263
+ ...\ai\actions\packages\drone\dronebombusfast.tweak:205;
264
+ ...\ai\actions\packages\drone\dronebombussuicide.tweak:109
265
+ tags:
266
+ - drone
267
+ - octant
268
+ - bombus
269
+ - weapon
270
+ - autocannon
271
+ - triggermode
272
+ - beam
273
+ - id: cp2077.drones.combat.redmod-tweak-sources-on-disk
274
+ claim: The whole vanilla TweakDB ships as readable .tweak text under <install>\tools\redmod\tweaks\,
275
+ so every AI action map, AI action, sub-action, condition, lookat preset, character base and
276
+ item record can be cited by file and line instead of only by record name through an index. The
277
+ AI action library is under base\gameplay\static_data\database\ai\actions\ (library\ for the
278
+ definitions, packages\ for the per-archetype maps).
279
+ status: verified
280
+ verified_on: "2.31"
281
+ source: tools\redmod\tweaks\base\gameplay\static_data\database\ai\actions\packages\drone\droneoctant.tweak:1-4
282
+ (the file ModWright's lookup named as the occurrence of DroneOctantArchetype.Map)
283
+ tags:
284
+ - toolchain
285
+ - redmod
286
+ - tweakdb
287
+ - sources
288
+ - provenance
289
+ - id: cp2077.drones.combat.fire-falls-back-to-the-barrel-with-the-ai-off
290
+ claim: AIWeapon.Fire with a target position but no target object shoots at the position only if
291
+ AIActionHelper.ShouldShootDirectlyAtTarget or the owner's
292
+ TargetTrackerComponent.IsPositionValid passes; otherwise it calls AI_ShootForwards, down the
293
+ barrel. With the drone's AI off the tracker rejects the position, so a script shot flies
294
+ straight out of the barrel. Calling the weapon's own AI_ShootAt with
295
+ IPositionProvider.CreateStaticPositionProvider skips the checks.
296
+ status: verified
297
+ verified_on: "2.31"
298
+ source: tools\redmod\scripts\cyberpunk\items\weapon.script:1845-2000 (AIWeapon.Fire), :143-144
299
+ (AI_ShootAt, AI_ShootForwards); core\ai\actions\aiActionHelper.script:148-169
300
+ tags:
301
+ - drone
302
+ - fire
303
+ - weapon
304
+ - aim
305
+ - ai-off
306
+ related:
307
+ - cp2077.drones.combat.shoot-subaction-needs-context
308
+ - id: cp2077.drones.combat.a-drone-taken-at-spawn-has-no-weapon
309
+ claim: "A drone spawned and taken over at once has nothing in AttachmentSlots.WeaponRight: its AI
310
+ equips the record's primary equipment in the tree's EnterIdle, which never ran. Giving the
311
+ item (TransactionSystem.GiveItem) and mounting it (AddItemToSlot in the NPCEquipmentItem's
312
+ equipSlot) arms it; the Wyvern's is Items.Wyvern_Rifle."
313
+ status: verified
314
+ verified_on: "2.31"
315
+ source: ModWright field verification
316
+ tags:
317
+ - drone
318
+ - weapon
319
+ - equip
320
+ - spawn
321
+ - wyvern
322
+ - id: cp2077.drones.combat.wyvern-own-locomotion-is-slow
323
+ claim: "The Arasaka Wyvern drone's own walk movement parameters are 2 m/s top speed and 2.4 m/s^2
324
+ acceleration: flown on them it is \"definitely sluggish\". Walk 8, run 20 m/s, acceleration 60
325
+ and a release brake of 20 m/s^2 were accepted by hand for a script-flown Wyvern."
326
+ status: verified
327
+ verified_on: "2.31"
328
+ source: ModWright field verification
329
+ tags:
330
+ - drone
331
+ - wyvern
332
+ - locomotion
333
+ - speed
334
+ - tuning
335
+ - id: cp2077.drones.combat.npc-shots-on-friends-deal-no-damage
336
+ claim: "An NPC-instigated hit (a script-flown drone's shot) on an NPC Friendly to the instigator is
337
+ flagged DealNoDamage 'FriendlyFireIgnored' after the damage is computed: a spawned Arasaka
338
+ Wyvern is Friendly to the Maelstrom gangs, so its hits drew blood and did nothing. The
339
+ instigator's BaseStatusEffect.DoNotBlockShootingOnFriendlyFire lifts it. The victim still does
340
+ not react: AIActionHelper TryChangingAttitudeToHostile returns false for a Friendly attacker,
341
+ so turning the victim and each squadmate hostile toward the drone
342
+ (AttitudeAgent.SetAttitudeTowards) and injecting the drone as their threat
343
+ (TargetTrackingExtension.InjectThreat) is needed; then \"the entire squad attacked\"."
344
+ status: verified
345
+ verified_on: "2.31"
346
+ source: ModWright field verification
347
+ tags:
348
+ - drone
349
+ - damage
350
+ - friendly-fire
351
+ - attitude
352
+ - squad
353
+ - id: cp2077.drones.combat.wyvern-rifle-is-a-smart-weapon
354
+ claim: Items.Wyvern_Rifle is a smart weapon (WeaponEvolution.Smart, ranged attack
355
+ Attacks.SmartBulletDronePackage); fired without a lock its bullets curve side to side, and the
356
+ twin guns fire as a pair on the AIWeapon.Fire path. Its NPC damage comes from its npcRPGData
357
+ (BaseStats.DPS 40), not from the weapon's PhysicalDamage stat (0 on both a hand-given and an
358
+ AI-equipped rifle); its CycleTime is 0.9 s.
359
+ status: verified
360
+ verified_on: "2.31"
361
+ source: ModWright field verification
362
+ tags:
363
+ - drone
364
+ - wyvern
365
+ - smart
366
+ - weapon
367
+ - id: cp2077.drones.combat.drone-own-locomotion-by-size
368
+ claim: "The drones' own walk parameters: Wyvern and Griffin 2 m/s at 2.4 m/s^2, the Octant 3.5 m/s
369
+ at 20 m/s^2. Flown by script, the values accepted by hand were the Wyvern at walk 8, run 20,
370
+ acceleration 60, brake 20; the Griffin at 6, 12, 58, 18; the Octant on its own."
371
+ status: verified
372
+ verified_on: "2.31"
373
+ source: ModWright field verification
374
+ tags:
375
+ - drone
376
+ - locomotion
377
+ - tuning
378
+ - griffin
379
+ - octant
380
+ - wyvern
381
+ - id: cp2077.drones.combat.vanilla-smart-tracking-needs-the-weapons-lock
382
+ claim: "Vanilla AI guides a smart weapon's shot only when the weapon reports a native lock:
383
+ AISubActionShootWithWeapon passes shouldTrackTarget = (the weapon's evolution is Smart) and
384
+ weapon.IsTargetLocked(), a native lock the AI's aiming sets. A script shot with the AI off
385
+ never has that lock; forcing smartGunIsProjectileGuided and a trackedTargetComponent guides
386
+ the bullets to the component given (the best shooting component from above can be a leg's;
387
+ every human carries Targeting_Chest and Targeting_Head)."
388
+ status: verified
389
+ verified_on: "2.31"
390
+ source: core\ai\actions\tweakAISubActions.script:3117-3138; cyberpunk\items\weapon.script:134;
391
+ gang__ep1_maelstrom_ma.ent's gameTargetingComponent names
392
+ tags:
393
+ - drone
394
+ - smart
395
+ - weapon
396
+ - lock
397
+ - tracking
398
+ related:
399
+ - cp2077.drones.combat.fire-falls-back-to-the-barrel-with-the-ai-off
400
+ - cp2077.drones.combat.wyvern-rifle-is-a-smart-weapon
401
+ - id: cp2077.drones.combat.a-hit-animation-swings-a-flown-drones-view
402
+ claim: "A script-flown drone's view swings against its controls for a few seconds after it is hit
403
+ (forward and back, or left and right, swapped): the hit animation turns the drone's animated
404
+ skeleton, whose slot carries the camera, while the hull orientation the script moves by keeps
405
+ its heading. Toggling the HitReactionComponent off does not stop it; the animation is
406
+ requested from the damage pipeline (NPCPuppet.OnHitAnimation, gated by
407
+ ShouldRequestHitReaction)."
408
+ status: inferred
409
+ verified_on: "2.31"
410
+ source: ModWright research
411
+ tags:
412
+ - drone
413
+ - hit
414
+ - animation
415
+ - camera
416
+ - controls