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,128 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: npc.behaviour
|
|
3
|
+
title: How NPCs treat a stand-in body, and what a hidden NPC still does (attitude, streaming,
|
|
4
|
+
damage, enemy hacks)
|
|
5
|
+
facts:
|
|
6
|
+
- id: cp2077.npc.behaviour.squads-obey-the-group-attitude
|
|
7
|
+
claim: "A squad treats a body by its attitude group, not by per-agent attitudes: with the body in
|
|
8
|
+
the player's group, AttitudeAgent SetAttitudeTowards(Neutral) both ways toward each squadmate
|
|
9
|
+
did not stop them attacking it at once. With the body in the squad's own group they left it
|
|
10
|
+
alone, but the player's gun lowers at a friendly, and a provoked squadmate turned the whole
|
|
11
|
+
group on itself (the released target too)."
|
|
12
|
+
status: verified
|
|
13
|
+
verified_on: "2.31"
|
|
14
|
+
source: ModWright field verification
|
|
15
|
+
tags:
|
|
16
|
+
- attitude
|
|
17
|
+
- squad
|
|
18
|
+
- group
|
|
19
|
+
- replacer
|
|
20
|
+
- combat
|
|
21
|
+
- id: cp2077.npc.behaviour.the-builtin-neutral-group
|
|
22
|
+
claim: The engine's built-in attitude groups 'friendly', 'neutral' and 'hostile' have fixed
|
|
23
|
+
relations (CanChangeAttitudeRelationFor refuses them) and can be assigned with
|
|
24
|
+
AttitudeAgent.SetAttitudeGroup, as vanilla's dynamic spawns do with 'hostile'. A body put in
|
|
25
|
+
'neutral' is left alone by a squad until it shoots one; then only that squad turns on it
|
|
26
|
+
(vanilla's per-agent AIActionHelper hostility), and the player's gun does not lower at them.
|
|
27
|
+
status: verified
|
|
28
|
+
verified_on: "2.31"
|
|
29
|
+
source: ModWright field verification
|
|
30
|
+
tags:
|
|
31
|
+
- attitude
|
|
32
|
+
- neutral
|
|
33
|
+
- group
|
|
34
|
+
- squad
|
|
35
|
+
related:
|
|
36
|
+
- cp2077.npc.behaviour.squads-obey-the-group-attitude
|
|
37
|
+
- id: cp2077.npc.behaviour.aiteleportcommand-runs-late-in-combat
|
|
38
|
+
claim: "An AITeleportCommand waits for the NPC's AI to take it: in combat it ran seconds late (the
|
|
39
|
+
NPC showed at its old spot, then jumped). The TeleportationFacility moves an unfrozen NPC at
|
|
40
|
+
once; sent before the NPC is unhidden, with the AI command after it, the NPC appeared at the
|
|
41
|
+
target spot (0 m, 0.7 m)."
|
|
42
|
+
status: verified
|
|
43
|
+
verified_on: "2.31"
|
|
44
|
+
source: ModWright field verification
|
|
45
|
+
tags:
|
|
46
|
+
- teleport
|
|
47
|
+
- ai
|
|
48
|
+
- combat
|
|
49
|
+
- npc
|
|
50
|
+
- id: cp2077.npc.behaviour.a-left-behind-world-npc-streams-out
|
|
51
|
+
claim: "A world (community) NPC left where it stood while the player travels far streams out: the
|
|
52
|
+
script's reference goes undefined, and when the player returns a new instance stands at its
|
|
53
|
+
streaming origin, beyond the old reference. World NPCs cannot be despawned from script
|
|
54
|
+
(spawn::Set::DespawnObject removes only its own set's), so a stand-in that must keep the NPC's
|
|
55
|
+
identity moves the hidden NPC along with the player's body (a teleport every second) instead."
|
|
56
|
+
status: verified
|
|
57
|
+
verified_on: "2.31"
|
|
58
|
+
source: ModWright field verification
|
|
59
|
+
tags:
|
|
60
|
+
- streaming
|
|
61
|
+
- community
|
|
62
|
+
- npc
|
|
63
|
+
- despawn
|
|
64
|
+
- follow
|
|
65
|
+
- id: cp2077.npc.behaviour.a-hidden-npc-keeps-its-hit-shapes
|
|
66
|
+
claim: "An NPC hidden by masks and toggles with collision disabled (NPCPuppet.DisableCollision) can
|
|
67
|
+
still be shot and killed: its hit shapes stay. Invulnerable god mode
|
|
68
|
+
(GodModeSystem.AddGodMode) makes it take no damage; its release must remove the god mode
|
|
69
|
+
before any scripted kill. The hit representation's scale event
|
|
70
|
+
(HitRepresentation_SetSingleScaleMultiplier_AllShapes) was sent too; whether it lets shots
|
|
71
|
+
pass is not separated from the god mode."
|
|
72
|
+
status: verified
|
|
73
|
+
verified_on: "2.31"
|
|
74
|
+
source: ModWright field verification
|
|
75
|
+
tags:
|
|
76
|
+
- damage
|
|
77
|
+
- godmode
|
|
78
|
+
- hitshape
|
|
79
|
+
- hide
|
|
80
|
+
- npc
|
|
81
|
+
- id: cp2077.npc.behaviour.an-npc-upload-on-a-stand-in-body
|
|
82
|
+
claim: "An enemy netrunner's quickhack upload aimed at the player's stand-in body runs through
|
|
83
|
+
UploadFromNPCToPlayerListener, which holds V's UI_HUDProgressBar and a 'PlayerBeingHacked'
|
|
84
|
+
save lock until the upload pool completes. Despawning the body mid-upload cuts it off: the bar
|
|
85
|
+
stays, the lock stays, and a red link from the netrunner through the squadmate it hacks
|
|
86
|
+
through (its proxy) to the body's last spot stays until that squadmate dies; it is not a
|
|
87
|
+
NetworkSystem link. Applying AIQuickHackStatusEffect.HackingInterrupted to the squadmates
|
|
88
|
+
carrying AIQuickHackStatusEffect.Hacking, and releasing a second later with the body still
|
|
89
|
+
there, ends it as \"failed\" with the bar and the link gone."
|
|
90
|
+
status: verified
|
|
91
|
+
verified_on: "2.31"
|
|
92
|
+
source: ModWright field verification
|
|
93
|
+
tags:
|
|
94
|
+
- netrunner
|
|
95
|
+
- upload
|
|
96
|
+
- quickhack
|
|
97
|
+
- hud
|
|
98
|
+
- save-lock
|
|
99
|
+
- replacer
|
|
100
|
+
- id: cp2077.npc.behaviour.a-replacer-is-the-player-main-object
|
|
101
|
+
claim: While a replacer body is enabled (the player system's replacer enable),
|
|
102
|
+
PlayerSystem.GetLocalPlayerMainGameObject returns the body, not V; code that means V must keep
|
|
103
|
+
V's own puppet from before the take.
|
|
104
|
+
status: inferred
|
|
105
|
+
verified_on: "2.31"
|
|
106
|
+
source: ModWright research
|
|
107
|
+
tags:
|
|
108
|
+
- replacer
|
|
109
|
+
- player
|
|
110
|
+
- main-object
|
|
111
|
+
- id: cp2077.npc.behaviour.spawned-npc-ability-stats-read-zero
|
|
112
|
+
claim: An NPC spawned from its record with exEntitySpawner.SpawnRecord reads 0 for the HasX /
|
|
113
|
+
CanQuickhack stats its archetype's ability groups grant (HasSandevistan, HasKerenzikov,
|
|
114
|
+
HasChargeJump, CanQuickhack), while TweakDBInterface's ability list for the record holds them
|
|
115
|
+
and the scanner shows them. An NPC placed by the world reads the same stats as 1. A script
|
|
116
|
+
gate on those stats refuses spawned NPCs that a player would expect to pass; reading the
|
|
117
|
+
ability list as well matches both.
|
|
118
|
+
status: verified
|
|
119
|
+
verified_on: "2.31"
|
|
120
|
+
source: ModWright field verification
|
|
121
|
+
tags:
|
|
122
|
+
- npc
|
|
123
|
+
- abilities
|
|
124
|
+
- stats
|
|
125
|
+
- spawn
|
|
126
|
+
- exentityspawner
|
|
127
|
+
detail: One spawned record, Character.lmg_dude, read no archetype at all in game, though the vanilla
|
|
128
|
+
index gives it ArchetypeData.HeavyRangedT2.
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: npc.locomotion
|
|
3
|
+
title: NPC locomotion, reactions and the animation graph - what script can and cannot drive on a
|
|
4
|
+
puppet whose mover is defeated
|
|
5
|
+
facts:
|
|
6
|
+
- id: cp2077.npc.locomotion.graph-archive
|
|
7
|
+
claim: The gameplay humanoid animation graph is base\gameplay\anim_graphs\humanoid.animgraph and it
|
|
8
|
+
is listed by exactly one archive, archive\pc\content\basegame_3_nightcity.archive (not the
|
|
9
|
+
animation archive). WolvenKit's `unbundle -w` matches the whole depot path, so the filename
|
|
10
|
+
alone finds nothing; a pattern such as "*anim_graphs*humanoid.animgraph" is needed. Serialized
|
|
11
|
+
with `convert serialize` the file is about 420 MB of JSON.
|
|
12
|
+
status: verified
|
|
13
|
+
verified_on: "2.31"
|
|
14
|
+
source: ModWright field verification
|
|
15
|
+
tags:
|
|
16
|
+
- animgraph
|
|
17
|
+
- humanoid
|
|
18
|
+
- archive
|
|
19
|
+
- wolvenkit
|
|
20
|
+
- resource
|
|
21
|
+
- id: cp2077.npc.locomotion.graph-feature-inputs
|
|
22
|
+
claim: 'humanoid.animgraph declares 51 animAnimFeatureEntry inputs. The locomotion one is
|
|
23
|
+
animAnimFeature_Locomotion on the input name "locomotion" and it is the only one; there is NO
|
|
24
|
+
animAnimFeature_Movement entry, so AnimFeature_Movement.SetSpeed applied on "locomotion" is
|
|
25
|
+
ignored. Other inputs worth knowing: animAnimFeatureFreezeFrame => "FreezeFrame",
|
|
26
|
+
entAnimFeature_LookAt => "lookAt", animAnimFeature_NPCState => "highLevelState" /
|
|
27
|
+
"upperBodyState" / "stanceState", animAnimFeature_HitReactionsData => "hit",
|
|
28
|
+
AnimFeature_StimReactions => "stimReaction", AnimFeature_NPCStatusEffect => "statusEffect",
|
|
29
|
+
animAnimFeatureUpdateWorkspot => "UpdateWorkspot", animAnimFeature_CrowdLocomotion =>
|
|
30
|
+
"crowd_locomotion", twelve animAnimFeature_AIAction inputs and the six
|
|
31
|
+
AnimFeature_PhotomodeBodyPartRotate ones.'
|
|
32
|
+
status: verified
|
|
33
|
+
verified_on: "2.31"
|
|
34
|
+
source: ModWright field verification
|
|
35
|
+
tags:
|
|
36
|
+
- animgraph
|
|
37
|
+
- animfeature
|
|
38
|
+
- locomotion
|
|
39
|
+
- humanoid
|
|
40
|
+
detail: Confirms and completes a partial list read earlier in an in-game probe.
|
|
41
|
+
- id: cp2077.npc.locomotion.action-is-movelocomotionaction
|
|
42
|
+
claim: The graph's locomotion transitions are animAnimStateTransitionCondition_IntFeature conditions
|
|
43
|
+
on featureName "locomotion", featurePropertyName "action", compared against 0,1,3,4,5,6,7 (36
|
|
44
|
+
conditions) and "style" (7 conditions). Those values are moveLocomotionAction term for term
|
|
45
|
+
(Undefined 0, Exploration 1, Idle 2, IdleTurn 3, Reposition 4, Start 5, Move 6, Stop 7), the
|
|
46
|
+
enum returned by MovePoliciesComponent.GetCurrentLocomotionAction(); the same component
|
|
47
|
+
answers GetInclineAngle() and IsOnStairs(), the other two animAnimFeature_Locomotion fields.
|
|
48
|
+
The locomotion feature is therefore the move-policies/mover state published to the graph by
|
|
49
|
+
the engine, not something a caller asserts.
|
|
50
|
+
status: verified
|
|
51
|
+
verified_on: "2.31"
|
|
52
|
+
source: ModWright field verification
|
|
53
|
+
tags:
|
|
54
|
+
- animgraph
|
|
55
|
+
- locomotion
|
|
56
|
+
- movepolicies
|
|
57
|
+
- mover
|
|
58
|
+
- walk-cycle
|
|
59
|
+
- id: cp2077.npc.locomotion.feature-class-not-in-script
|
|
60
|
+
claim: "animAnimFeature_Locomotion is declared nowhere a redscript can reach: not in the shipped
|
|
61
|
+
scripts (core\\animation\\animFeature.script declares AnimFeature_Movement at :157-160,
|
|
62
|
+
AnimFeature_NPCState at :20-23, AnimFeature_StimReactions at :770-773 and forty others, but no
|
|
63
|
+
Locomotion feature; the only \"Locomotion\" classes in the tree are
|
|
64
|
+
AnimFeature_PlayerLocomotionStateMachine at :169 and the drone's
|
|
65
|
+
ApplyDroneLocomotionWrapperEvent) and not in Codeware 1.20.3, which declares
|
|
66
|
+
animAnimFeature_CrowdLocomotion (:5699) and adds the fields of AnimFeature_Movement (:238-256)
|
|
67
|
+
but not the Locomotion feature. No script can build the object the graph's locomotion input
|
|
68
|
+
expects."
|
|
69
|
+
status: verified
|
|
70
|
+
verified_on: "2.31"
|
|
71
|
+
source: ModWright field verification
|
|
72
|
+
tags:
|
|
73
|
+
- animfeature
|
|
74
|
+
- locomotion
|
|
75
|
+
- redscript
|
|
76
|
+
- codeware
|
|
77
|
+
- id: cp2077.npc.locomotion.locomotioncycle-is-a-spawn-style
|
|
78
|
+
claim: 'LocomotionCycle01..14 are a spawn-time style roll, not a walk gate:
|
|
79
|
+
NPCPuppet.SetRandomAnimWrappersForLocomotion() does RandRange(1,15) and sets exactly one of
|
|
80
|
+
them to 1.0 (then, by visual tag, LowlifeLocomotion / MidCorpLocomotion / PoshLocomotion /
|
|
81
|
+
DirtGirlLocomotion / HomelessLocomotion / FreakLocomotion / JunkieLocomotion), and its only
|
|
82
|
+
caller is OnGameAttached. The serialized humanoid.animgraph contains ZERO occurrences of the
|
|
83
|
+
string "LocomotionCycle" and none of its 84 distinct wrapperNames is one, so
|
|
84
|
+
SetAnimWrapperWeight(npc, n"LocomotionCycle01", 1.0) on a puppet running that graph cannot
|
|
85
|
+
start a walk.'
|
|
86
|
+
status: verified
|
|
87
|
+
verified_on: "2.31"
|
|
88
|
+
source: ModWright field verification
|
|
89
|
+
tags:
|
|
90
|
+
- animwrapper
|
|
91
|
+
- locomotioncycle
|
|
92
|
+
- walk-cycle
|
|
93
|
+
- animgraph
|
|
94
|
+
- id: cp2077.npc.locomotion.graph-wrapper-names
|
|
95
|
+
claim: The locomotion-relevant anim wrappers humanoid.animgraph itself reads (on its
|
|
96
|
+
animAnimNode_WrapperValue nodes) are combatLocomotion, stealthLocomotion, alertedLocomotion,
|
|
97
|
+
FearLocomotion1..4, woundedLocomotion_l_arm / _r_arm / _l_leg / _r_leg,
|
|
98
|
+
dismemberedLocomotion_l_arm / _r_arm, blockStateLocomotion, the prop-carry set
|
|
99
|
+
(BucketLocomotion, BucketheadLocomotion, CanLocomotion, CellphoneLocomotion,
|
|
100
|
+
CellphoneTalkingLocomotion, CigaretteLocomotion, CrateLocomotion, DufflebagLocomotion,
|
|
101
|
+
LaptopbagLocomotion, PurseLocomotion, TabletLocomotion, UmbrellaLocomotion,
|
|
102
|
+
WaitressLocomotion), plus crowd, Droid, NCPD, Sandevistan, inVehicle, fear, panic, disturbed,
|
|
103
|
+
JackieWounded, the Cyb_* / Wea_* / w_* item wrappers and three sportbike seats - 84 distinct
|
|
104
|
+
names in all. They pick WHICH locomotion set plays, never whether it plays.
|
|
105
|
+
status: verified
|
|
106
|
+
verified_on: "2.31"
|
|
107
|
+
source: ModWright field verification
|
|
108
|
+
tags:
|
|
109
|
+
- animwrapper
|
|
110
|
+
- animgraph
|
|
111
|
+
- locomotion
|
|
112
|
+
- id: cp2077.npc.locomotion.no-external-locomotion-event
|
|
113
|
+
claim: humanoid.animgraph has 29 animAnimStateTransitionCondition_ExternalEvent transitions and
|
|
114
|
+
their complete set of event names is "hit" (16), "Shoot" (3), "Reload" (3), "PlayBlock" (2),
|
|
115
|
+
"PlayParry", "ActionStartup", "ActionLoop", "ActionRecovery", "RepeatActionLoop". There is no
|
|
116
|
+
locomotion event, so AnimationControllerComponent.PushEvent / PushEventToReplicate cannot
|
|
117
|
+
start the leg cycle.
|
|
118
|
+
status: verified
|
|
119
|
+
verified_on: "2.31"
|
|
120
|
+
source: ModWright field verification
|
|
121
|
+
tags:
|
|
122
|
+
- animgraph
|
|
123
|
+
- pushevent
|
|
124
|
+
- animationcontrollercomponent
|
|
125
|
+
- locomotion
|
|
126
|
+
- id: cp2077.npc.locomotion.no-mover-velocity-api
|
|
127
|
+
claim: There is no script API that sets a puppet's mover velocity. The only reference to
|
|
128
|
+
moveComponent in the whole shipped script tree is
|
|
129
|
+
MoveComponentVelocityProvider.CreateMoveComponentVelocityProvider(puppet), a read-only
|
|
130
|
+
velocity source; Codeware declares `moveComponent extends entIMoverComponent {}` with no
|
|
131
|
+
members and entIMoverComponent as an empty importonly class. The motion planner exposes
|
|
132
|
+
exactly one field, moveMotionPlannerComponent.snapToGround (writable through Codeware).
|
|
133
|
+
status: verified
|
|
134
|
+
verified_on: "2.31"
|
|
135
|
+
source: ModWright field verification
|
|
136
|
+
tags:
|
|
137
|
+
- movecomponent
|
|
138
|
+
- mover
|
|
139
|
+
- velocity
|
|
140
|
+
- codeware
|
|
141
|
+
- snaptoground
|
|
142
|
+
- id: cp2077.npc.locomotion.movepolicies-is-script-reachable
|
|
143
|
+
claim: MovePolicies is an ordinary new-able IScriptable with SetDestinationPosition,
|
|
144
|
+
SetDestinationObject, SetMovementType, SetUseStartStop, SetIgnoreNavigation,
|
|
145
|
+
SetDistancePolicy, SetStopOnObstacle, SetCollisionAvoidancePolicy, SetPositionProvider and
|
|
146
|
+
thirty more; ScriptedPuppet.GetMovePolicesComponent() is public and
|
|
147
|
+
MovePoliciesComponent.AddPolicies / PopPolicies take it. That is exactly how the AI moves an
|
|
148
|
+
NPC (AIActionMovePolicy.Add fills one from a MovementPolicy_Record and pushes it). Speed is
|
|
149
|
+
tunable with AIHumanComponent.SetMovementParams / GetMovementParams. Pushing a destination is
|
|
150
|
+
the only script-reachable input the graph's own locomotion conditions can see, and it needs
|
|
151
|
+
the mover alive.
|
|
152
|
+
status: verified
|
|
153
|
+
verified_on: "2.31"
|
|
154
|
+
source: ModWright field verification
|
|
155
|
+
tags:
|
|
156
|
+
- movepolicies
|
|
157
|
+
- walk-cycle
|
|
158
|
+
- mover
|
|
159
|
+
- movementparameters
|
|
160
|
+
- id: cp2077.npc.locomotion.no-script-walk-with-mover-defeated
|
|
161
|
+
claim: With the mover defeated (AIHumanComponent.Toggle(false) plus per-frame SetWorldTransform) NO
|
|
162
|
+
script-reachable path drives the humanoid leg cycle. Feeding AnimFeature_Movement on
|
|
163
|
+
"locomotion", setting the LocomotionCycle0N wrappers, pushing an animation event and writing
|
|
164
|
+
mover velocity are each ruled out by a read of the graph or of the script surface. The two
|
|
165
|
+
designs that can work are (a) let the mover move the body through a MovePolicies destination
|
|
166
|
+
and correct the transform only on drift, and (b) put the puppet in a workspot with a
|
|
167
|
+
walk-in-place clip, which plays with the mover off but owns the whole body.
|
|
168
|
+
status: inferred
|
|
169
|
+
verified_on: "2.31"
|
|
170
|
+
source: ModWright research
|
|
171
|
+
tags:
|
|
172
|
+
- walk-cycle
|
|
173
|
+
- mover
|
|
174
|
+
- locomotion
|
|
175
|
+
- design
|
|
176
|
+
related:
|
|
177
|
+
- cp2077.npc.locomotion.movepolicies-is-script-reachable
|
|
178
|
+
- cp2077.npc.locomotion.workspot-jump-to-anim
|
|
179
|
+
- id: cp2077.npc.locomotion.workspot-jump-to-anim
|
|
180
|
+
claim: humanoid.animgraph carries one animAnimNode_WorkspotHub and declares
|
|
181
|
+
animAnimFeatureUpdateWorkspot => "UpdateWorkspot" and
|
|
182
|
+
animAnimFeatureWorkspotInertializationAnim => "WorkspotInertialization"; WorkspotGameSystem
|
|
183
|
+
can put an actor in a workspot (PlayInDeviceSimple, PlayNpcInWorkspot) and jump it to a named
|
|
184
|
+
animation or tag (SendJumpToAnimEnt, SendJumpToTagCommandEnt), stop it (StopNpcInWorkspot) and
|
|
185
|
+
send reaction signals (SendReactionSignal). A workspot clip plays with the mover off because
|
|
186
|
+
the hub overrides the body pose.
|
|
187
|
+
status: verified
|
|
188
|
+
verified_on: "2.31"
|
|
189
|
+
source: ModWright field verification
|
|
190
|
+
tags:
|
|
191
|
+
- workspot
|
|
192
|
+
- animgraph
|
|
193
|
+
- walk-cycle
|
|
194
|
+
- id: cp2077.npc.locomotion.quickhack-completion-effects
|
|
195
|
+
claim: QuickHack.BaseBlindHack derives from QuickHack.ControlHack and QuickHack.QuickHack; its
|
|
196
|
+
effective completionEffects are five, contributed by QuickHack and ControlHack - an armour
|
|
197
|
+
stat group, a RefreshPingEffector on the target, BaseStatusEffect.WasQuickHacked on the
|
|
198
|
+
target, BaseStatusEffect.QuickHackUploaded on the instigator and
|
|
199
|
+
Effectors.NotifyPoliceEffector on the target. A mod hack based on BaseBlindHack inherits all
|
|
200
|
+
five; an !append adds to them. BaseStatusEffect.WasQuickHacked itself carries only the
|
|
201
|
+
gameplay tag "Debuff" (inherited from BaseStatusEffect.DebuffStatusEffect).
|
|
202
|
+
status: verified
|
|
203
|
+
verified_on: "2.31"
|
|
204
|
+
source: ModWright field verification
|
|
205
|
+
tags:
|
|
206
|
+
- quickhack
|
|
207
|
+
- controlhack
|
|
208
|
+
- completioneffects
|
|
209
|
+
- statuseffect
|
|
210
|
+
- tweakdb
|
|
211
|
+
- id: cp2077.npc.locomotion.nonstealth-quickhack-alert
|
|
212
|
+
claim: A completed non-stealth quickhack alerts the target through a DELAYED event, not through the
|
|
213
|
+
AI. NPCPuppet.OnStatusEffectApplied reads the applied effect's own gameplay tags and, when the
|
|
214
|
+
effect was not applied on spawn, the instigator is the player, the tags do not contain
|
|
215
|
+
'Stealth' and QuickHackableQueueHelper.IsAwarenessBumpingAllowed is true, schedules
|
|
216
|
+
NonStealthQuickHackVictimEvent 0.1 s later. OnNonStealthQuickHackVictimEvent then calls
|
|
217
|
+
NPCPuppet.RevealPlayerPositionIfNeeded and, if that returns false,
|
|
218
|
+
NPCStatesComponent.AlertPuppet, followed by AIActionHelper.TryChangingAttitudeToHostile.
|
|
219
|
+
AlertPuppet from Relaxed calls NPCPuppet.ChangeHighLevelState(owner, Alerted); from Alerted it
|
|
220
|
+
raises the security system's ALARM or AISquadHelper.EnterAlerted.
|
|
221
|
+
status: verified
|
|
222
|
+
verified_on: "2.31"
|
|
223
|
+
source: ModWright field verification
|
|
224
|
+
tags:
|
|
225
|
+
- quickhack
|
|
226
|
+
- alert
|
|
227
|
+
- statuseffect
|
|
228
|
+
- delaysystem
|
|
229
|
+
- reaction
|
|
230
|
+
- id: cp2077.npc.locomotion.highlevelstate-is-an-anim-feature
|
|
231
|
+
claim: NPCPuppet.ChangeHighLevelState writes an NPCStateChangeSignal into the puppet's signal table;
|
|
232
|
+
NPCStatesComponent.OnNPCStateChangeSignalReceived leads to UpdateHighLevelState, which applies
|
|
233
|
+
an AnimFeature_NPCState with state = the new high-level state on the input 'highLevelState'
|
|
234
|
+
through AnimationControllerComponent.ApplyFeature and writes the puppet-state blackboard (at
|
|
235
|
+
Combat it also calls AnimationSystem.EnterCombatMode). Since humanoid.animgraph declares
|
|
236
|
+
animAnimFeature_NPCState => "highLevelState" and tests it, entering Alerted is an
|
|
237
|
+
animation-graph state change - the alerted idle (the android's head jerk and scan) is the
|
|
238
|
+
graph's, played by the animation controller and not by the behaviour tree.
|
|
239
|
+
status: verified
|
|
240
|
+
verified_on: "2.31"
|
|
241
|
+
source: ModWright field verification
|
|
242
|
+
tags:
|
|
243
|
+
- highlevelstate
|
|
244
|
+
- animfeature
|
|
245
|
+
- npcstatescomponent
|
|
246
|
+
- alerted
|
|
247
|
+
- id: cp2077.npc.locomotion.reaction-components-are-separate
|
|
248
|
+
claim: ScriptedPuppet resolves the AI controller ('AIComponent' -> AIHumanComponent), the reaction
|
|
249
|
+
manager ('ReactionManager' -> ReactionManagerComponent) and the hit reactions
|
|
250
|
+
('HitReactionOverride' or 'HitReaction' -> HitReactionComponent) as separate components, and
|
|
251
|
+
NPCStatesComponent (an AINetStateComponent) is a fourth. Toggling the AI controller off
|
|
252
|
+
touches none of them, so the quickhack alert path, the stim reactions, the hit reactions and
|
|
253
|
+
the high-level-state animation all keep running on a driven puppet.
|
|
254
|
+
status: verified
|
|
255
|
+
verified_on: "2.31"
|
|
256
|
+
source: ModWright field verification
|
|
257
|
+
tags:
|
|
258
|
+
- aihumancomponent
|
|
259
|
+
- reactionmanagercomponent
|
|
260
|
+
- hitreactioncomponent
|
|
261
|
+
- mover-defeat
|
|
262
|
+
- id: cp2077.npc.locomotion.disallows-awareness-bump-tag
|
|
263
|
+
claim: QuickHackableQueueHelper.IsAwarenessBumpingAllowed(target) walks the target's
|
|
264
|
+
completed-quickhack history plus the currently uploading action and everything queued behind
|
|
265
|
+
it, collects every CompletionEffects() record, and returns false if ANY of their status
|
|
266
|
+
effects has the gameplay tag 'DisallowsAwarenessBumpInQueue'. It is per-action, not
|
|
267
|
+
per-effect, so one such tag on any status effect in a hack's completionEffects suppresses the
|
|
268
|
+
NonStealthQuickHackVictimEvent for that whole hack, including the inherited WasQuickHacked
|
|
269
|
+
effect. This is the clean pre-empt for a mod hack that must not alert its target.
|
|
270
|
+
status: verified
|
|
271
|
+
verified_on: "2.31"
|
|
272
|
+
source: ModWright field verification
|
|
273
|
+
tags:
|
|
274
|
+
- quickhack
|
|
275
|
+
- gameplaytag
|
|
276
|
+
- alert
|
|
277
|
+
- tweakdb
|
|
278
|
+
- stealth
|
|
279
|
+
- id: cp2077.npc.locomotion.reaction-cancel-levers
|
|
280
|
+
claim: The script-reachable levers on ReactionManagerComponent are ClearPendingReaction() (public);
|
|
281
|
+
queueing TerminateReactionLookatEvent on the NPC, whose handler calls DeactiveLookAt() and so
|
|
282
|
+
LookAtRemoveEvent.QueueRemoveLookatEvent with the component's own handle; queueing
|
|
283
|
+
SwapPresetEvent{mappingName} to map a preset whose type is
|
|
284
|
+
gamedataReactionPresetType.NoReaction, which short-circuits the reaction helpers; and
|
|
285
|
+
IComponent.Toggle(false) on the component. None of them touches the quickhack alert path,
|
|
286
|
+
which runs in NPCPuppet's own handlers and NPCStatesComponent. LookAtRemoveEvent needs the
|
|
287
|
+
original LookAtAddEvent, so a third party cannot remove a look-at it did not add.
|
|
288
|
+
status: verified
|
|
289
|
+
verified_on: "2.31"
|
|
290
|
+
source: ModWright field verification
|
|
291
|
+
tags:
|
|
292
|
+
- reactionmanagercomponent
|
|
293
|
+
- lookat
|
|
294
|
+
- reactionpreset
|
|
295
|
+
- cancel
|
|
296
|
+
- id: cp2077.npc.locomotion.root-motion-and-uncontrolled-movement
|
|
297
|
+
claim: "humanoid.animgraph publishes a motion table (424 animMotionTableProvider_Animation nodes
|
|
298
|
+
plus multi-blend, static switch, master-slave and default providers), so its clips carry root
|
|
299
|
+
motion the mover consumes; AI action animations are launched with an explicit useRootMotion
|
|
300
|
+
flag and an updateMovePolicy flag (ActionAnimationScriptProxy.Setup / ForceLaunch). The
|
|
301
|
+
engine's term for animation- or physics-owned motion is uncontrolled movement:
|
|
302
|
+
UncontrolledMovementStartEvent carries ragdollNoGroundThreshold, ragdollOnCollision and
|
|
303
|
+
calculateEarlyPositionGroundHeight, is ended by UncontrolledMovementEndEvent, and NPCPuppet
|
|
304
|
+
re-polls every 0.2 s and clears it only when the puppet is ragdolling or its velocity is under
|
|
305
|
+
0.01."
|
|
306
|
+
status: verified
|
|
307
|
+
verified_on: "2.31"
|
|
308
|
+
source: ModWright field verification
|
|
309
|
+
tags:
|
|
310
|
+
- rootmotion
|
|
311
|
+
- uncontrolledmovement
|
|
312
|
+
- ragdoll
|
|
313
|
+
- mover
|
|
314
|
+
- id: cp2077.npc.locomotion.fling-is-two-writers
|
|
315
|
+
claim: "A reaction animation on a puppet whose transform a script owns each frame has two writers -
|
|
316
|
+
the per-frame SetWorldTransform and the animation's root motion - and the mover's velocity
|
|
317
|
+
becomes the difference between consecutive transforms over a dt it did not choose. That is the
|
|
318
|
+
shape of one in-game reading (vel 44612936794112.0 with mover 3, defeated true: the body was
|
|
319
|
+
flung, not dropped, and the fall began exactly as the android's alerted scan played)."
|
|
320
|
+
status: inferred
|
|
321
|
+
verified_on: "2.31"
|
|
322
|
+
source: ModWright research
|
|
323
|
+
tags:
|
|
324
|
+
- rootmotion
|
|
325
|
+
- mover-defeat
|
|
326
|
+
- setworldtransform
|
|
327
|
+
- fall
|
|
328
|
+
detail: "Testable indirectly: if the DisallowsAwarenessBumpInQueue tag stops the alert and the fall
|
|
329
|
+
goes with it, the reaction animation was the cause."
|
|
330
|
+
- id: cp2077.npc.locomotion.individual-time-dilation-is-entity-level
|
|
331
|
+
claim: "TimeDilationHelper.SetIndividualTimeDilation is a wrapper that bails in multiplayer and
|
|
332
|
+
calls the target's own native; the native lives on TimeDilatable extends GameObject, beside
|
|
333
|
+
HasIndividualTimeDilation, UnsetIndividualTimeDilation, GetTimeDilationValue,
|
|
334
|
+
IsIgnoringGlobalTimeDilation and IsIgnoringTimeDilation, and takes two arguments the helper
|
|
335
|
+
never passes (ignoreGlobalDilation, useRealTime). Because it is a GameObject method and not a
|
|
336
|
+
component method it is untouched by AIHumanComponent.Toggle(false): a puppet with its AI off
|
|
337
|
+
still honours it."
|
|
338
|
+
status: verified
|
|
339
|
+
verified_on: "2.31"
|
|
340
|
+
source: ModWright field verification
|
|
341
|
+
tags:
|
|
342
|
+
- timedilation
|
|
343
|
+
- timedilatable
|
|
344
|
+
- gameobject
|
|
345
|
+
- mover-defeat
|
|
346
|
+
- id: cp2077.npc.locomotion.time-dilation-is-a-clock-not-a-switch
|
|
347
|
+
claim: "Individual time dilation scales an NPC's clock in both directions and nothing in the shipped
|
|
348
|
+
scripts pauses an animation graph: the uses are 'VeryStrongHit' at the impulse ratio for 0.5
|
|
349
|
+
s, 'MeleeLegKnockdown' at 1.6 for 0.5 s (hit and death reactions), a Kerenzikov ramp, and a
|
|
350
|
+
dive at 0.05 for 2.5 s. AnimationSystem itself has only SetForcedVisible,
|
|
351
|
+
SetForcedVisibleOnlyInFrustum, EnterCombatMode and ExitCombatMode."
|
|
352
|
+
status: verified
|
|
353
|
+
verified_on: "2.31"
|
|
354
|
+
source: ModWright field verification
|
|
355
|
+
tags:
|
|
356
|
+
- timedilation
|
|
357
|
+
- animationsystem
|
|
358
|
+
- freeze
|
|
359
|
+
- id: cp2077.npc.locomotion.procedural-nodes-survive-dilation
|
|
360
|
+
claim: "The humanoid graph's head and limb motion at idle is not only clip playback: it declares
|
|
361
|
+
entAnimFeature_LookAt => \"lookAt\" and carries animAnimNode_LookAtController (3),
|
|
362
|
+
animAnimNode_AimConstraint (15), animAnimNode_OrientConstraint (60), animAnimNode_RotateBone
|
|
363
|
+
(339), animAnimNode_AddIkRequest (34), animAnimNode_Ik2Constraint (43) and
|
|
364
|
+
animAnimNode_PostProcess_Footlock (5) - procedural solvers that write a pose toward a target
|
|
365
|
+
every time the graph is sampled. A near-zero time dilation stops the clock, not the sampling,
|
|
366
|
+
which is why the idle head turn and the android's scan keep moving on a puppet whose body is
|
|
367
|
+
rigid."
|
|
368
|
+
status: inferred
|
|
369
|
+
verified_on: "2.31"
|
|
370
|
+
source: ModWright research
|
|
371
|
+
tags:
|
|
372
|
+
- animgraph
|
|
373
|
+
- lookat
|
|
374
|
+
- procedural
|
|
375
|
+
- timedilation
|
|
376
|
+
- freeze
|
|
377
|
+
- id: cp2077.npc.locomotion.freeze-levers
|
|
378
|
+
claim: "What could stop the graph, and its cost: (1) animAnimFeatureFreezeFrame on the declared
|
|
379
|
+
input \"FreezeFrame\" is the right-named lever but its class is declared neither in the
|
|
380
|
+
shipped scripts nor in Codeware 1.20.3, so script cannot build one; (2)
|
|
381
|
+
AnimationControllerComponent.SetUsesSleepMode(obj, state) is the only graph-wide script switch
|
|
382
|
+
and it governs sleeping, not pausing; (3) IComponent.Toggle(false) on the
|
|
383
|
+
AnimationControllerComponent or the entAnimatedComponent is the blunt instrument
|
|
384
|
+
(AnimatedComponent has no script API of its own), untested and likely to freeze or break the
|
|
385
|
+
pose and anything bound to a bone slot; (4) the graph resource's own isPaused and
|
|
386
|
+
timeDeltaMultiplier fields are real but have no script setter."
|
|
387
|
+
status: verified
|
|
388
|
+
verified_on: "2.31"
|
|
389
|
+
source: ModWright field verification
|
|
390
|
+
tags:
|
|
391
|
+
- freeze
|
|
392
|
+
- animationcontrollercomponent
|
|
393
|
+
- animatedcomponent
|
|
394
|
+
- animgraph
|
|
395
|
+
- codeware
|
|
396
|
+
- id: cp2077.npc.locomotion.minotaur-graph-is-mover-fed
|
|
397
|
+
claim: "The Minotaur mech's look (base\\mechanical\\mech\\mch_003__minotaur\\mch_003__minotaur.app)
|
|
398
|
+
runs base\\gameplay\\anim_graphs\\maelstrom_exo.animgraph on its `root` animated component,
|
|
399
|
+
bound to the NPC's controller AnimationController1473. The graph picks its walk from
|
|
400
|
+
locomotion.action (18 transition conditions), float inputs of the `locomotion` group
|
|
401
|
+
(directionAngle, pathCurvature, ...) and of a `locomotion_ext` group it does not declare as a
|
|
402
|
+
feature (moveAnimationSpeed, moveAnimationTime, moveScale, startDirectionAngle), and 13
|
|
403
|
+
EnumSwitch nodes on animMotionTableAction over 168 motion table providers: the mover's and the
|
|
404
|
+
motion planner's state, none of it script-settable. On a body without a mover (a vehicle) that
|
|
405
|
+
graph cannot be made to walk; a graph of the mod's own is needed."
|
|
406
|
+
status: verified
|
|
407
|
+
verified_on: "2.31"
|
|
408
|
+
source: ModWright field verification
|
|
409
|
+
tags:
|
|
410
|
+
- animgraph
|
|
411
|
+
- mech
|
|
412
|
+
- minotaur
|
|
413
|
+
- locomotion
|
|
414
|
+
- vehicle
|
|
415
|
+
- id: cp2077.npc.locomotion.minotaur-walk-clip-speeds
|
|
416
|
+
claim: cr_minotaur_hmg_locomotion_combat.anims (the Minotaur's locomotion set) holds idle_stand,
|
|
417
|
+
walk_0, walk_180, walk_090, walk_270 and the start, stop and turn transitions, and no run. By
|
|
418
|
+
their motion extraction walk_0 and walk_180 cover 1.96 m in 1.5 s (1.31 m/s) and walk_090 /
|
|
419
|
+
walk_270 cover 1.40 m (0.93 m/s); walk_090 moves along +X, walk_270 along -X.
|
|
420
|
+
status: verified
|
|
421
|
+
verified_on: "2.31"
|
|
422
|
+
source: ModWright field verification
|
|
423
|
+
tags:
|
|
424
|
+
- anims
|
|
425
|
+
- mech
|
|
426
|
+
- minotaur
|
|
427
|
+
- walk
|
|
428
|
+
- motion-extraction
|
|
429
|
+
- id: cp2077.npc.locomotion.vehicle-graph-single-clip
|
|
430
|
+
claim: "A vehicle's animation graph can be a single looping clip: the Heist parade floats'
|
|
431
|
+
q112_carp_small_animgraph.animgraph is Root -> Output -> SkAnim (isLooped 1), with no features
|
|
432
|
+
and no variables. Graph float variables are set on a vehicle from script with
|
|
433
|
+
AnimationControllerComponent.SetInputFloat, as vanilla does for a car's destruction
|
|
434
|
+
variables."
|
|
435
|
+
status: verified
|
|
436
|
+
verified_on: "2.31"
|
|
437
|
+
source: base\quest\main_quests\part1\q112\vehicles\q112_carp_small_animgraph.animgraph;
|
|
438
|
+
tools\redmod\scripts\core\components\scriptComponents\vehicleComponent.script:4710-4752;
|
|
439
|
+
core\components\animationControllerComponent.script:118-124
|
|
440
|
+
tags:
|
|
441
|
+
- animgraph
|
|
442
|
+
- vehicle
|
|
443
|
+
- animationcontrollercomponent
|
|
444
|
+
- setinputfloat
|
|
445
|
+
- id: cp2077.npc.locomotion.skspeedanim-speed-is-ground-speed
|
|
446
|
+
claim: "animAnimNode_SkSpeedAnim with no motion provider takes its Speed input as a ground speed in
|
|
447
|
+
m/s and scales the clip by the clip's own motion-extraction speed: on the mod's mech vehicle
|
|
448
|
+
(walk_0 covers 1.31 m/s at rate 1) feeding the vehicle's forward speed in m/s put the legs in
|
|
449
|
+
sync, while feeding the ratio speed / 1.31 left them lagging the body."
|
|
450
|
+
status: verified
|
|
451
|
+
verified_on: "2.31"
|
|
452
|
+
source: ModWright field verification
|
|
453
|
+
tags:
|
|
454
|
+
- animgraph
|
|
455
|
+
- skspeedanim
|
|
456
|
+
- walk
|
|
457
|
+
- vehicle
|
|
458
|
+
- mech
|
|
459
|
+
- id: cp2077.npc.locomotion.parked-vehicle-graph-idle
|
|
460
|
+
claim: "A spawned vehicle that is not being driven does not tick the graph of an extra animated
|
|
461
|
+
component on it: SetInputFloat on the mod's parked mech vehicle changed nothing, and the same
|
|
462
|
+
call after SetVehicleRemoteControlled(true) played the walk. The variables reach a secondary
|
|
463
|
+
animated component bound to the vehicle's AnimationController."
|
|
464
|
+
status: verified
|
|
465
|
+
verified_on: "2.31"
|
|
466
|
+
source: ModWright field verification
|
|
467
|
+
tags:
|
|
468
|
+
- animgraph
|
|
469
|
+
- vehicle
|
|
470
|
+
- remote-control
|
|
471
|
+
- setinputfloat
|
|
472
|
+
- mech
|
|
473
|
+
- id: cp2077.npc.locomotion.minotaur-no-foot-ik
|
|
474
|
+
claim: "The Minotaur keeps its feet on the ground only through its root: its template's
|
|
475
|
+
moveMotionPlannerComponent has snapToGround = 1 and the walk clips' motion moves the root. Its
|
|
476
|
+
graph (maelstrom_exo, shared with the Maelstrom exo boss) carries a leg IK chain
|
|
477
|
+
(SetBonePosition on ik_leftMechanicalLeg01_cache_eff from an engine-fed model-space target,
|
|
478
|
+
then animAnimNode_Ik2Constraint over l_leg_IK_01..03 with a _cache_pv pole), but the
|
|
479
|
+
Minotaur's rig (mch_003__minotaur.rig, 68 bones) has no ik_*_cache_eff or _cache_pv bone, so
|
|
480
|
+
on this rig those nodes do nothing; its only Ik2 nodes are the arms'."
|
|
481
|
+
status: verified
|
|
482
|
+
verified_on: "2.31"
|
|
483
|
+
source: ModWright field verification
|
|
484
|
+
tags:
|
|
485
|
+
- animgraph
|
|
486
|
+
- ik
|
|
487
|
+
- mech
|
|
488
|
+
- minotaur
|
|
489
|
+
- rig
|
|
490
|
+
- locomotion
|