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,475 @@
1
+ game: cyberpunk2077
2
+ topic: vehicles.control
3
+ title: How the player controls a vehicle - remote control, the mount, vehicle classes, cameras,
4
+ weapons, destruction, and how Let There Be Flight adds lift
5
+ facts:
6
+ - id: cp2077.vehicles.control.remote-control-native
7
+ claim: VehicleObject has a native SetVehicleRemoteControlled(enable, shouldUnseatPassengers,
8
+ shouldModifyInteractionState), with ToggleVehicleRemoteControlCamera(),
9
+ IsVehicleRemoteControlled() and SetIsHackable(enable) beside it. In script the perk, range and
10
+ not-mounted conditions belong to the quickhack that offers it, not to the call; whether the
11
+ native checks anything itself is unread (ModWright research calls it with no perk).
12
+ status: inferred
13
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 core/gameplay/vehicles.swift:68, :144, :146, :148;
14
+ core/components/scriptComponents/vehicleComponentPS.swift:1004-1018
15
+ tags:
16
+ - vehicle
17
+ - remote-control
18
+ - quickhack
19
+ - native
20
+ - id: cp2077.vehicles.control.remote-control-quickhack-flow
21
+ claim: The vanilla vehicle takeover quickhack (DeviceAction.TakeControlVehicleClassHack) builds a
22
+ TriggerVehicleRemoteControlEvent with all three flags true, releases any vehicle already
23
+ remote-controlled, and passes the event to TakeOverControlSystem.ReleaseControl, which ends
24
+ any camera or device control first; VehicleComponent.OnTriggerVehicleRemoteControlEvent then
25
+ calls SetVehicleRemoteControlled. It is offered only with the perk
26
+ Intelligence_Right_Milestone_1, V not mounted, the vehicle within
27
+ player.vehicleQuickHacks.maxRange, not already remote-controlled, and IsHackable().
28
+ status: inferred
29
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
30
+ core/components/scriptComponents/vehicleComponentPS.swift:1004-1018, :1060-1068;
31
+ core/systems/takeOverControlSystem.swift:183-225;
32
+ core/components/scriptComponents/vehicleComponent.swift:1608-1613
33
+ tags:
34
+ - vehicle
35
+ - remote-control
36
+ - quickhack
37
+ - takeovercontrolsystem
38
+ - id: cp2077.vehicles.control.remote-control-v-stays-standing
39
+ claim: "Under vehicle remote control V is not mounted: she stays where she hacked from, her weapon
40
+ is unequipped by the upper-body state while PlayerStateMachine.EntityIDVehicleRemoteControlled
41
+ is set, the HUD's signal meter is 1 - distance(V, vehicle) / maxRange, and a hit on an
42
+ unmounted V ends the remote control."
43
+ status: inferred
44
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
45
+ cyberpunk/player/psm/upperBodyTransitions.swift:1789-1792;
46
+ cyberpunk/UI/vehicles/remote_control_driving_hud.swift:30-104;
47
+ cyberpunk/player/player.swift:3265-3272
48
+ tags:
49
+ - vehicle
50
+ - remote-control
51
+ - player-state-machine
52
+ - release
53
+ - id: cp2077.vehicles.control.remote-control-input-context
54
+ claim: A remote-controlled vehicle switches V's input context to VehicleRemoteControlDriverContext.
55
+ In it ToggleVehCamera (on release) toggles the native remote camera and Exit (on press) calls
56
+ SetVehicleRemoteControlled(false, false, true); entering it adds the "RemoteControl" save
57
+ lock. Enabling through the context requires the vehicle's IsHackable(); disabling does not.
58
+ Steering and throttle routing are native.
59
+ status: inferred
60
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
61
+ cyberpunk/player/psm/inputContextTransitions.swift:1-39, :723-729, :1394-1423
62
+ tags:
63
+ - vehicle
64
+ - remote-control
65
+ - input-context
66
+ - save-lock
67
+ - id: cp2077.vehicles.control.remote-control-ends
68
+ claim: "Every script path that ends vehicle remote control calls SetVehicleRemoteControlled(false,
69
+ false, true): the Exit key, a hit on an unmounted V, and another take-control request. The
70
+ native also ends it on distance and reports that through
71
+ VehicleRemoteControlEvent.isDistanceDisconnect."
72
+ status: inferred
73
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
74
+ cyberpunk/player/psm/inputContextTransitions.swift:1394-1423;
75
+ cyberpunk/player/player.swift:3265-3272; orphans.swift:37280-37289
76
+ tags:
77
+ - vehicle
78
+ - remote-control
79
+ - release
80
+ - distance-disconnect
81
+ - id: cp2077.vehicles.control.vehicle-types-and-classes
82
+ claim: gamedataVehicleType is Bike 0, Car 1, Panzer 2. The script classes are CarObject and
83
+ BikeObject under WheeledObject, TankObject (empty script body) and AVObject (thruster effects
84
+ only); all extend VehicleObject. gamedataVehicleModel includes Basilisk 2 and Octant 17.
85
+ status: inferred
86
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 orphans.swift:5296-5302, :5313, :5328, :25080,
87
+ :26860, :36822; core/gameplay/vehicles.swift:2, :1356-1365
88
+ tags:
89
+ - vehicle
90
+ - vehicle-type
91
+ - tank
92
+ - av
93
+ - octant
94
+ - id: cp2077.vehicles.control.av-never-driven-by-player
95
+ claim: "No script path lets the player drive an AV: VehicleComponent.IsDriver returns false for any
96
+ AVObject, and AVs move by AI spline commands (AIVehicleOnSplineCommand) and scenes. A vehicle
97
+ meant to be driven should not be an AV-class record."
98
+ status: inferred
99
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
100
+ core/components/scriptComponents/vehicleComponent.swift:295-314; orphans.swift:47211-47250
101
+ tags:
102
+ - vehicle
103
+ - av
104
+ - driver
105
+ - id: cp2077.vehicles.control.tank-drive-model-hover
106
+ claim: "TankDriveModelData_Record (Vehicle_Record.TankDriveModelData()) carries
107
+ TankSpringsLocalPositions, TankSpringVerticalOffset, TankSpringStiffness, TankSpringDamping,
108
+ TankSpringDistance, TankSpringRadius, TankGravityMul, TankMaxSpeed, TankAcceleration,
109
+ TankDeceleration and TankTurningSpeed: a spring-supported drive model with a gravity
110
+ multiplier, the Basilisk's hover. It holds a ride height; nothing in it climbs."
111
+ status: inferred
112
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 orphans.swift:20924, :63836-63884
113
+ tags:
114
+ - vehicle
115
+ - tank
116
+ - basilisk
117
+ - drive-model
118
+ - hover
119
+ - id: cp2077.vehicles.control.tank-player-driven
120
+ claim: "The player drives a TankObject: VehicleTankDriverContext is entered in the Driving state for
121
+ a TankObject, PanzerHUDGameController runs, and mounting a tank's driver seat takes V's hit
122
+ shapes off and puts the tank on the targeting system's ignore list, so turrets and AI aim at
123
+ the tank."
124
+ status: inferred
125
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
126
+ cyberpunk/player/psm/inputContextTransitions.swift:1497-1528;
127
+ cyberpunk/UI/hud/custom/hud_panzer.swift:182-243;
128
+ core/components/scriptComponents/vehicleComponent.swift:1450-1453, :2930-2968;
129
+ cyberpunk/devices/securityTurret/securityTurret.swift:397-399
130
+ tags:
131
+ - vehicle
132
+ - tank
133
+ - basilisk
134
+ - targeting
135
+ - id: cp2077.vehicles.control.destruction-kills-mounted-v
136
+ claim: A destroyed vehicle's KillPassengers applies BaseStatusEffect.ForceKill to every mounted
137
+ child, the player included unless she has the Invulnerable god mode. A vehicle with the
138
+ Immortal god mode has its damage level capped at 2, so it does not reach the destroyed state
139
+ on its own. A remote-controlled vehicle's destruction cannot reach V this way, because V is
140
+ not mounted.
141
+ status: inferred
142
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3
143
+ core/components/scriptComponents/vehicleComponent.swift:2667-2695, :2698-2711, :3957-3959
144
+ tags:
145
+ - vehicle
146
+ - death
147
+ - killpassengers
148
+ - immortal
149
+ - death-guard
150
+ - id: cp2077.vehicles.control.vehicle-weapons-need-driver-combat
151
+ claim: "Vehicle_Record.Weapons() lists VehicleWeapon_Records (slot, item, yaw and pitch limits,
152
+ cycle time, range, projectiles). The player fires them from the PSM state
153
+ DriverCombatMountedWeapons, entered from Drive when the record's DriverCombat type is
154
+ MountedWeapons and player.vehicle.canEnterDriverCombat is set - a mounted-driver state.
155
+ TankTurretComponent is a scripted alternative: it listens for ShootTertiary and fires an
156
+ Attack_GameEffect from a slot."
157
+ status: inferred
158
+ source: codeberg adamsmasher/cyberpunk@a2e6bb3 orphans.swift:21062, :65155-65192;
159
+ cyberpunk/player/psm/vehicleTransition.swift:12-14, :1335-1368, :2578-2662;
160
+ cyberpunk/vehicles/tankTurret.swift:2-63
161
+ tags:
162
+ - vehicle
163
+ - weapons
164
+ - driver-combat
165
+ - turret
166
+ - id: cp2077.vehicles.control.ltbf-lift-is-added-force
167
+ claim: "Let There Be Flight lifts a vehicle by adding force and torque, not by writing its
168
+ transform: a native system registers an update in the Vehicle bucket at
169
+ PhysicsExecuteAsyncQueries (the source's comments call UpdateTransformPrePhysics too early and
170
+ UpdateTransformPostPhysics too late), and per flying vehicle calls ForceEnablePhysics(), runs
171
+ the script update, then adds the result to vehicle->physicsData->force and ->torque for the
172
+ engine to integrate."
173
+ status: inferred
174
+ source: github jackhumbert/let_there_be_flight@6d7c1b7 src/red4ext/FlightSystem.cpp:88-131;
175
+ src/red4ext/Flight/Component.cpp:57-83
176
+ tags:
177
+ - vehicle
178
+ - flight
179
+ - lift
180
+ - red4ext
181
+ - ltbf
182
+ - id: cp2077.vehicles.control.ltbf-anti-gravity-drone-mode
183
+ claim: Let There Be Flight's Drone mode applies body-frame lift, surge and sway as force and pitch,
184
+ roll and yaw as torque, with a brake damping term and no gravity term; its Anti-Gravity Drone
185
+ mode adds world up (in the vehicle frame) times 9.81 times gravityFactor, cancelling gravity
186
+ so the vehicle holds where it is with no input.
187
+ status: inferred
188
+ source: github jackhumbert/let_there_be_flight@6d7c1b7
189
+ src/redscript/Flight/FlightModeDrone.reds:94-117;
190
+ src/redscript/Flight/FlightModeDroneAntiGravity.reds:16-19
191
+ tags:
192
+ - vehicle
193
+ - flight
194
+ - drone-mode
195
+ - ltbf
196
+ - id: cp2077.vehicles.control.ltbf-unmounted-input-path
197
+ claim: With no player mounted, Let There Be Flight takes a flying vehicle's surge from the vehicle's
198
+ own acceleration and deceleration and its yaw from turnX (the path its FlightEnable quickhack
199
+ flies an NPC car on); lift, pitch, roll and sway have no source on that path.
200
+ status: inferred
201
+ source: github jackhumbert/let_there_be_flight@6d7c1b7
202
+ src/redscript/Flight/FlightComponent.reds:640-672; src/redscript/Quickhacks/Actions.reds:8-27
203
+ tags:
204
+ - vehicle
205
+ - flight
206
+ - input
207
+ - ltbf
208
+ - id: cp2077.vehicles.control.physicsdata-layout-not-upstream
209
+ claim: vehicle::BaseObject's physicsData pointer (0x2D0) and the vehicle::PhysicsData layout (force
210
+ 0x00, torque 0x0C, velocity 0x18, size 0x1E0) are declared only in Let There Be Flight's
211
+ RED4ext.SDK fork; upstream's vehicleBaseObject.hpp declares neither, and the two disagree by
212
+ four bytes on the drive inputs (upstream acceleration 0x264 and deceleration 0x268; the fork's
213
+ script offsets 0x268 and 0x26C behind an input block at 0x264). A plugin that writes vehicle
214
+ forces must re-derive both at the running game version.
215
+ status: inferred
216
+ source: github jackhumbert/RED4ext.SDK@b5ea591
217
+ include/RED4ext/Scripting/Natives/vehiclePhysicsData.hpp:69-105,
218
+ vehicleBaseObject.hpp:469-511; github wopss/RED4ext.SDK@ad72777
219
+ include/RED4ext/Scripting/Natives/vehicleBaseObject.hpp:38-42; github
220
+ jackhumbert/let_there_be_flight@6d7c1b7 src/redscript/Extensions/VehicleObject.reds:92-127
221
+ tags:
222
+ - vehicle
223
+ - red4ext
224
+ - layout
225
+ - version-fragile
226
+ - id: cp2077.vehicles.control.remote-control-from-script-on-a-spawned-car
227
+ claim: "A script can put a vanilla car under remote control with no perk and no quickhack: on a
228
+ Car-type vehicle spawned through DynamicEntitySystem, SetVehicleRemoteControlled(true, true,
229
+ true) makes IsVehicleRemoteControlled true, sets the player blackboard's remote-controlled
230
+ vehicle to it and V's upper-body state to 4 while she stays unmounted, and shows vanilla's own
231
+ remote-control HUD (the signal-strength bar and the neural-link icon). The car drives on V's
232
+ keys. The camera stays at V until ToggleVehicleRemoteControlCamera(), which gives a chase
233
+ camera that tracks the car; Exit hands control back to V."
234
+ status: verified
235
+ verified_on: "2.31"
236
+ source: ModWright field verification
237
+ tags:
238
+ - vehicle
239
+ - remote-control
240
+ - camera
241
+ - hud
242
+ - drone
243
+ related:
244
+ - cp2077.vehicles.control.remote-control-native
245
+ - cp2077.vehicles.control.remote-control-v-stays-standing
246
+ - cp2077.vehicles.control.remote-control-input-context
247
+ detail: "Driven far from V, the view went to a loading icon and a black screen for a couple of
248
+ seconds: the world streams around V, not the camera. The test spawn fell back to
249
+ Vehicle.v_standard2_thorton_galena_nomad_player."
250
+ - id: cp2077.vehicles.control.remote-control-on-an-av-crashes
251
+ claim: "Vehicle.av_zetatech_octant, the base game's vehicle record with the Octant model, is type
252
+ Car in TweakDB but spawns as a vehicleAVBaseObject, reads hackable false, and holds its height
253
+ (no drop after the spawn). Calling SetIsHackable(true) and SetVehicleRemoteControlled(true,
254
+ true, true) on it from the CET thread crashed the game: an access violation reading 0x468 in
255
+ fn_4E98F8 (exe+0x4E9902, a method called on a null object, this+0x468)."
256
+ status: verified
257
+ verified_on: "2.31"
258
+ source: ModWright field verification
259
+ tags:
260
+ - vehicle
261
+ - av
262
+ - remote-control
263
+ - crash
264
+ - drone
265
+ related:
266
+ - cp2077.vehicles.control.av-never-driven-by-player
267
+ - cp2077.vehicles.control.remote-control-native
268
+ detail: "Which object is null is unread: fn_4E98F8 reads this+0x468 and then a flag at +0x1FC of
269
+ what it finds, and its caller fn_25F95B4 is on the native's path. So a vanilla AV is not a
270
+ shortcut to a remote-controlled drone; such a drone stays a copied car- or tank-class
271
+ template. The tank drive model is Vehicle.v_militech_basilisk_inline5 at runtime (the source
272
+ tweak's inline numbering gives inline3)."
273
+ - id: cp2077.vehicles.control.remote-control-takes-a-tank-and-its-hover-height-is-the-spring-distance
274
+ claim: "Remote control takes a tank. On a spawned Vehicle.v_militech_basilisk
275
+ (vehicleTankBaseObject, hackable false), SetVehicleRemoteControlled(true, true, true) works as
276
+ on a car: vanilla's remote-control HUD with the maker's logo, the chase camera from the
277
+ toggle, and V's keys drive it on its spring hover. The hover height follows the drive model's
278
+ tankSpringDistance, read when the tank spawns. Changing the flat on a live tank does nothing,
279
+ and a respawn picks it up. Measured against the spawn point (vanilla 2.1 m springs): 1.06 m,
280
+ then 3.16 m at 4.2, and 7.48 m at 8.4, level (pitch 1.0, roll 0.0) and stable at speed."
281
+ status: verified
282
+ verified_on: "2.31"
283
+ source: ModWright field verification
284
+ tags:
285
+ - vehicle
286
+ - tank
287
+ - remote-control
288
+ - hover
289
+ - drone
290
+ related:
291
+ - cp2077.vehicles.control.tank-drive-model-hover
292
+ - cp2077.vehicles.control.remote-control-from-script-on-a-spawned-car
293
+ - cp2077.vehicles.control.remote-control-on-an-av-crashes
294
+ detail: "Spawned under an overhang at 4x, the tank came up pitched 26 and rolled -43 until it was
295
+ driven into the open. That spawn also landed on V and hurt her as remote control switched on:
296
+ the first rc-on returned true and read remote=false a moment later, which is vanilla ending
297
+ remote control on a hit to an unmounted V
298
+ (cp2077.vehicles.control.remote-control-v-stays-standing; observed in game: \"The tank spawned
299
+ on Vs head, doing damage at the moment of taking control\"). A second rc-on held. The spawn
300
+ was then moved to put the tank 12 m ahead. The drive model's runtime name is
301
+ Vehicle.v_militech_basilisk_inline5, shared by every Basilisk, so an edit reaches them all;
302
+ the tests reset it between runs. No ledge or slope was tried (a city street)."
303
+ - id: cp2077.vehicles.control.a-light-small-tank-hull-runs-away-under-remote-control
304
+ claim: A tank of the mod's own on a small, light hull ran away under remote control. It was the
305
+ Basilisk's template with the Octant's hull boxes scaled 0.55 (mass 2363,
306
+ maxDepenetrationVelocity -1) and a drive model scaled down in mass, stiffness and damping but
307
+ not in its attitude gains. It landed on its end partly inside the ground; switching remote
308
+ control on flung it tens of metres at runaway speed through the surroundings, and the game
309
+ then crashed in an engine buffer overflow.
310
+ status: verified
311
+ verified_on: "2.31"
312
+ source: ModWright field verification
313
+ tags:
314
+ - vehicle
315
+ - tank
316
+ - physics
317
+ - remote-control
318
+ - drone
319
+ - crash
320
+ related:
321
+ - cp2077.vehicles.control.remote-control-takes-a-tank-and-its-hover-height-is-the-spring-distance
322
+ detail: "The first run blamed the unlimited depenetration velocity and the light mass. A second run
323
+ showed the landing on its end was neither: at the Basilisk's mass with the depenetration
324
+ capped the hull still read pitch 89.4 at rest, and the cause was the hull's body frame
325
+ (cp2077.vehicles.control.chassis-body-frame-is-the-vehicle-frame). That the runaway itself
326
+ came from the springs pushing along the nose is inferred."
327
+ - id: cp2077.vehicles.control.chassis-body-frame-is-the-vehicle-frame
328
+ claim: A vehicle takes its frame from its chassis hull's physics body. The Octant AV's hull
329
+ (av_zetatech_octant__ext01_body_01.phys) has a body localToModel of a half turn about (0, 1,
330
+ 1) (Y and Z swapped, mapped to the bone `base`), where the Basilisk's hull body is the model
331
+ frame (identity, no bone). On the Basilisk's template the Octant's boxes left the vehicle
332
+ resting at pitch 89.4 at either mass, looking level in the Basilisk's own meshes and on its
333
+ end in the Wyvern's. Baking the body frame into the boxes and the centre of mass, with
334
+ localToModel set to identity, made it spawn at pitch 0.0 and hover.
335
+ status: verified
336
+ verified_on: "2.31"
337
+ source: ModWright field verification
338
+ tags:
339
+ - vehicle
340
+ - physics
341
+ - phys
342
+ - chassis
343
+ - drone
344
+ related:
345
+ - cp2077.vehicles.control.a-light-small-tank-hull-runs-away-under-remote-control
346
+ detail: Whether the engine honours localToModel for the rendered rig and ignores it for the
347
+ vehicle's transform, or the reverse, is not read; the rule that works is a chassis hull whose
348
+ body frame is the model frame. A ModWright new-custom-vehicle scaffold should check it.
349
+ - id: cp2077.vehicles.control.a-drone-sized-tank-drives-under-remote-control
350
+ claim: A tank of the mod's own on a drone-sized hull (1.5 x 1.45 x 0.75 m, the Basilisk's mass,
351
+ drive model and gains, nine springs inside the hull at 4.2) drives under native remote
352
+ control. Switched on, it rose to about 3.2 m over its spawn point and held level (pitch within
353
+ 0.5) when still. It was flown smoothly for 107 m until the signal dropped at vanilla's range
354
+ (player.vehicleQuickHacks.maxRange 100), and it was left parked, level and undamaged.
355
+ status: verified
356
+ verified_on: "2.31"
357
+ source: ModWright field verification
358
+ tags:
359
+ - vehicle
360
+ - tank
361
+ - remote-control
362
+ - hover
363
+ - drone
364
+ related:
365
+ - cp2077.vehicles.control.remote-control-takes-a-tank-and-its-hover-height-is-the-spring-distance
366
+ - cp2077.vehicles.control.remote-control-ends
367
+ detail: It "moves like a much larger object than it is" (as observed in game), it once sank into the
368
+ ground and was pushed back up by a car, and the Basilisk's hover glow was left standing at the
369
+ spawn point. The Basilisk's chase camera (boom 13.5 / 16 / 19.5 m aimed 5.75 m up,
370
+ airFlowDistortion true) framed it from far away and shook; the shake stopped once a session
371
+ edit set a 5 / 6 / 7.5 m boom and the airflow distortion off, both at once, so which one cured
372
+ it is not separated.
373
+ - id: cp2077.vehicles.control.remote-control-range-flat-not-live
374
+ claim: "Setting player.vehicleQuickHacks.maxRange in a session (TweakDB SetFlat to 300, read back as
375
+ 300) did not let remote control take a vehicle 112 m away: SetVehicleRemoteControlled(true,
376
+ true, true) returned with IsVehicleRemoteControlled true, and the next reads had it false."
377
+ status: verified
378
+ verified_on: "2.31"
379
+ source: ModWright field verification
380
+ tags:
381
+ - vehicle
382
+ - remote-control
383
+ - range
384
+ - tweakdb
385
+ related:
386
+ - cp2077.vehicles.control.remote-control-ends
387
+ - cp2077.vehicles.control.remote-control-quickhack-flow
388
+ detail: Whether the native reads the range once, reads another value, or whether a deployed tweak of
389
+ the flat works, is not established.
390
+ - id: cp2077.vehicles.control.remote-camera-toggle-without-remote-control-freezes-the-look
391
+ claim: ToggleVehicleRemoteControlCamera() on a vehicle that is not remote-controlled sets
392
+ PlayerStateMachine.IsVehicleRemoteControlCameraTPP true and leaves V able to walk but not turn
393
+ with the mouse; a second toggle frees her.
394
+ status: verified
395
+ verified_on: "2.31"
396
+ source: ModWright field verification
397
+ tags:
398
+ - vehicle
399
+ - remote-control
400
+ - camera
401
+ - player-state-machine
402
+ related:
403
+ - cp2077.vehicles.control.remote-control-input-context
404
+ - id: cp2077.vehicles.control.remote-camera-choice-outlives-the-vehicle
405
+ claim: "The remote-control camera choice (PlayerStateMachine.IsVehicleRemoteControlCameraTPP)
406
+ outlives the remote control and the vehicle: it stayed true after the Exit key, a despawn and
407
+ a respawn, and the next SetVehicleRemoteControlled(true, ...) came up in the chase camera with
408
+ no toggle. A toggle then turns it off."
409
+ status: verified
410
+ verified_on: "2.31"
411
+ source: ModWright field verification
412
+ tags:
413
+ - vehicle
414
+ - remote-control
415
+ - camera
416
+ - player-state-machine
417
+ related:
418
+ - cp2077.vehicles.control.remote-camera-toggle-without-remote-control-freezes-the-look
419
+ - id: cp2077.vehicles.control.a-released-tank-drops
420
+ claim: A tank hovers on its springs only while it is driven. Released from remote control by the
421
+ Exit key, the drone-sized tank fell from its hover to the ground at once.
422
+ status: verified
423
+ verified_on: "2.31"
424
+ source: ModWright field verification
425
+ tags:
426
+ - vehicle
427
+ - tank
428
+ - hover
429
+ - remote-control
430
+ - release
431
+ related:
432
+ - cp2077.vehicles.control.remote-control-ends
433
+ - cp2077.vehicles.control.tank-drive-model-hover
434
+ - id: cp2077.vehicles.control.a-drone-sized-tank-tunes-no-further
435
+ claim: >-
436
+ A drone-sized tank is stable only at the Basilisk's tuning ratios. The light drone (2363 kg,
437
+ every mass-proportional term scaled by 2363 / 54431.1) hovered and drove with a slight wobble
438
+ on turns. Every session change away from that made it worse: - the attitude damping tankCTOD
439
+ x1.5 jerked less; - x3 spun; - all three tankCTO* gains x4 spun; - the "agile" set
440
+ (tankAcceleration x2, tankDeceleration x2.5,
441
+ tankTurningSpeed x1.5) spun it on its own.
442
+ The same agile set made the dense drone (54431 kg), steady at its defaults, jerk at idle.
443
+ status: verified
444
+ verified_on: "2.31"
445
+ source: ModWright field verification
446
+ tags:
447
+ - vehicle
448
+ - tank
449
+ - physics
450
+ - tuning
451
+ - drone
452
+ related:
453
+ - cp2077.vehicles.control.a-drone-sized-tank-drives-under-remote-control
454
+ detail: "Which agile flat destabilises is not separated. Neither is why the gains do not scale
455
+ freely: a controller stepped at a fixed rate would explain it, and that is inferred. The
456
+ tankCTO* gains are evidently not normalized by mass inside the engine, since x4 on the light
457
+ drone spins while the dense drone carries 23 times the gain."
458
+ - id: cp2077.vehicles.control.chase-camera-boom-has-a-floor
459
+ claim: The remote-control chase camera follows the tppCameraPresets' boomLength from the Basilisk's
460
+ 13.5-19.5 m down to about 2-3 m, then no closer. Booms of 2 / 3 / 4.5 m were "still too far",
461
+ 1.2 / 1.8 / 2.7 m "a little closer", and 0.72 / 1.08 / 1.62 m "unchanged". Session edits of
462
+ the preset flats reached the camera.
463
+ status: verified
464
+ verified_on: "2.31"
465
+ source: ModWright field verification
466
+ tags:
467
+ - vehicle
468
+ - camera
469
+ - remote-control
470
+ - tweakdb
471
+ related:
472
+ - cp2077.vehicles.control.a-drone-sized-tank-drives-under-remote-control
473
+ detail: "What sets the floor is not read. The candidate is the vehicle's bounds: the Basilisk's
474
+ bodycar mesh is chunk-masked but still in the entity. Also unread are the camera's collision
475
+ and a minimum distance in the camera code."