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