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