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,579 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: anims.authoring
|
|
3
|
+
title: authoring custom FPP melee grips, regrips, sway, lunge, heavies and finishers
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.anims.authoring.hand-position-report-was-improvement-not-regression
|
|
6
|
+
claim: "A user report that \"hand positions have moved\" (comparing the current build to the prior
|
|
7
|
+
baseline) was diagnosed via an A/B launch comparison as NOT a regression: the prior 08-20
|
|
8
|
+
baseline was materially worse everywhere the grip mattered, and the true remaining defect was
|
|
9
|
+
that the idle's own hand-posed right-hand grip was itself bad — because it fed every hold and
|
|
10
|
+
the whole crouch family through GRIP_SRC, the defect propagated everywhere except the block,
|
|
11
|
+
which kept its own independent hand-posed grip."
|
|
12
|
+
status: verified
|
|
13
|
+
source: ModWright field verification
|
|
14
|
+
tags:
|
|
15
|
+
- grip
|
|
16
|
+
- regression-diagnosis
|
|
17
|
+
- grip-src
|
|
18
|
+
- ab-comparison
|
|
19
|
+
- hand-position
|
|
20
|
+
detail: 'Concrete symptom that ruled out "the new hands are fine": fingers were visibly intersecting
|
|
21
|
+
the blade wherever the grip came from GRIP_SRC (idle, holds, crouch), exactly where the block
|
|
22
|
+
did not show the defect.'
|
|
23
|
+
- id: cp2077.anims.authoring.grip-transfer-must-use-palm-line-not-donor-wrist
|
|
24
|
+
claim: A naive grip-transfer (repointing weapon_rel/hand_rel from one hand-posed source pose to
|
|
25
|
+
another) silently assumes the source and the donor hold the wrist alike; replaying a donor's
|
|
26
|
+
untouched wrist under a source pose whose wrist was turned 86 degrees by hand-posing swung the
|
|
27
|
+
blade 0.426 m off the palm line (versus 0.115 m for the working approach). The working
|
|
28
|
+
transfer instead derives the roll term and palm midpoint FROM the source pose itself
|
|
29
|
+
(GRIP["roll_rel"], GRIP["palm_mid_local"]), turns BOTH wrists onto the re-fitted blade, and
|
|
30
|
+
iterates three rounds because turning a wrist moves the palm point the fit uses.
|
|
31
|
+
status: inferred
|
|
32
|
+
source: ModWright research
|
|
33
|
+
tags:
|
|
34
|
+
- grip-transfer
|
|
35
|
+
- palm-line
|
|
36
|
+
- weapon-rel
|
|
37
|
+
- hand-rel
|
|
38
|
+
- wrist-independence
|
|
39
|
+
detail: "Generalizes to: a grip is a relationship between the weapon and BOTH hands together;
|
|
40
|
+
anchoring the transfer to one hand only works while that hand is a fixed reference point,
|
|
41
|
+
which hand-posing specifically breaks. Offline result of the working transfer: 0.057/0.048 m
|
|
42
|
+
wrap-to-palm on all 12 transferred holds against the idle's own 0.063/0.049 m, and grip within
|
|
43
|
+
0.1 degree of the idle on all 12. Status is inferred, not verified — the evidence is an
|
|
44
|
+
offline measurement; the transferred holds were separately seen in game 2026-08-21 but no note
|
|
45
|
+
records an in-game confirmation of the palm-line rule itself. Concrete source numbers:
|
|
46
|
+
GRIP[\"roll_rel\"] came out 152.3 degrees against the ROLL=180 constant it replaced."
|
|
47
|
+
- id: cp2077.anims.authoring.rotate-weapon-in-grip-not-grip-with-weapon
|
|
48
|
+
claim: "When a pose needs the weapon reoriented, pivoting the weapon ALONE about its own grip axis
|
|
49
|
+
(the line through the two wrap centroids) leaves the hands byte-identical to the pre-roll
|
|
50
|
+
pose; a rigid rotation of hands and weapon together as one piece instead forces the whole
|
|
51
|
+
angle through the wrists and can slide the wraps up to about 6 cm out of the palms. Measured
|
|
52
|
+
at a 75-degree weapon-only roll: wrists 108.5/39.5 degrees, identical before and after."
|
|
53
|
+
status: inferred
|
|
54
|
+
source: ModWright research
|
|
55
|
+
tags:
|
|
56
|
+
- rotate-weapon-in-grip
|
|
57
|
+
- grip-axis
|
|
58
|
+
- wrist-load
|
|
59
|
+
- deformation-free
|
|
60
|
+
detail: "Three tried rigid-rotation variants for the crouch pose (rigid roll on the wrist line,
|
|
61
|
+
elbow-solved roll, weapon-only roll) scored 125.5/80.9 degrees, 108.4/56.8, and 108.5/39.5
|
|
62
|
+
wrist load respectively — the weapon-only pivot exactly reproduced the idle's own wrist load,
|
|
63
|
+
and the wrist-line pivot was the one that \"tore the arms in game\". Also measured at roll 75:
|
|
64
|
+
wrap-to-palm unchanged at 0.0631/0.0492, blade tip elevation -57.3 -> +8.8 degrees, hang 0.901
|
|
65
|
+
-> 0.083 m. Status is inferred, not verified: these are offline measurements. The chosen ANGLE
|
|
66
|
+
was picked in game (cp2077.anims.authoring.crouch-roll-value-chosen-in-game); no note records
|
|
67
|
+
the user separately confirming in game that the weapon-only pivot left the hands unmoved."
|
|
68
|
+
- id: cp2077.anims.authoring.crouch-roll-value-chosen-in-game
|
|
69
|
+
claim: CROUCH_ROLL = 75 degrees (a rotation of the weapon alone about the line through both palms)
|
|
70
|
+
was chosen live in game by cycling candidate values with a CET console tool rather than by
|
|
71
|
+
offline preview alone; 75 was picked over the geometrically "flattest" option (60, dead level)
|
|
72
|
+
because it carries the blade tips slightly up, matching that a crouched player's enemies are
|
|
73
|
+
above them.
|
|
74
|
+
status: verified
|
|
75
|
+
source: ModWright field verification
|
|
76
|
+
tags:
|
|
77
|
+
- crouch-roll
|
|
78
|
+
- live-tuning
|
|
79
|
+
- cet-console
|
|
80
|
+
- user-decision
|
|
81
|
+
detail: The measured sweep (offline, no build needed) showed roll 60 as dead level (blade hangs 0.04
|
|
82
|
+
m below grip) and roll 0 as hanging 0.91 m below; 75 sits between the crouch's own 60-degree
|
|
83
|
+
"level" candidate and a fully raised guard.
|
|
84
|
+
- id: cp2077.anims.authoring.engine-limit-fpp-additive-ignores-spine-and-shoulders
|
|
85
|
+
claim: The FPP additive sway layer only honours LeftArm/RightArm and below plus the gun-space chain;
|
|
86
|
+
Spine3 and both shoulders are IGNORED by the engine at runtime. A build that authored the
|
|
87
|
+
entire ambient sway correction onto Spine3 (a geometrically elegant choice, since both
|
|
88
|
+
shoulders and the whole gun-space chain hang off Spine3 while the FPP camera does not)
|
|
89
|
+
measured a perfect zero-slip result offline (Blender reproduced the vanilla weapon path to
|
|
90
|
+
0.09 mm) but rendered completely MOTIONLESS in game — idle, walk, crouch and block all dead
|
|
91
|
+
still.
|
|
92
|
+
status: verified
|
|
93
|
+
source: ModWright field verification
|
|
94
|
+
tags:
|
|
95
|
+
- engine-limit
|
|
96
|
+
- spine3
|
|
97
|
+
- fpp-additive
|
|
98
|
+
- sway
|
|
99
|
+
- launch-cost
|
|
100
|
+
detail: "Confirmed structurally by `_addbones.py`: in every vanilla additive, the first moving bone
|
|
101
|
+
in each arm chain is the upper arm, and Spine3/LeftShoulder/RightShoulder are exactly zero in
|
|
102
|
+
every one — the vanilla animators never used the spine because the additive layer cannot reach
|
|
103
|
+
it. The build was updated to gate every touched sway clip on
|
|
104
|
+
Spine3/Spine2/Spine1/Spine/Hips/LeftShoulder/RightShoulder staying at identity."
|
|
105
|
+
- id: cp2077.anims.authoring.no-base-independent-fix-for-full-ambient-sway
|
|
106
|
+
claim: Because the ambient-sway additive layer only reaches the arms (which form two separate
|
|
107
|
+
kinematic chains once the shoulders above them are unreachable), no single additive that keeps
|
|
108
|
+
the two arms perfectly moving together as one unit can serve every base pose without the
|
|
109
|
+
correction being conjugated by each base's own arm transform — meaning full pre-encoder-fix
|
|
110
|
+
sway amplitude and full base-independence are mutually exclusive, not a tuning failure to be
|
|
111
|
+
solved with more iteration.
|
|
112
|
+
status: inferred
|
|
113
|
+
source: ModWright research
|
|
114
|
+
tags:
|
|
115
|
+
- sway
|
|
116
|
+
- base-independence
|
|
117
|
+
- arm-chain
|
|
118
|
+
- structural-limit
|
|
119
|
+
detail: This structural conclusion predates and is independent of the later encoder root-cause
|
|
120
|
+
discovery (SWAY_GUNROT_CONST); it concerns the authored-signal side of the sway problem, not
|
|
121
|
+
the encoder-noise side.
|
|
122
|
+
- id: cp2077.anims.authoring.sway-damp-gain-tuning-superseded
|
|
123
|
+
claim: Before the encoder root cause was found, the sway defect was mitigated by tuning SWAY_DAMP
|
|
124
|
+
(uniformly scaling the vanilla arm-local sway; slip scales exactly with it, a pure trade) to
|
|
125
|
+
0.85 and SWAY_GAIN (a left-arm-only rotation correction solved on the idle base, exact only on
|
|
126
|
+
that one base) to 0.25, calibrated so the idle's measured slip matched the level the user
|
|
127
|
+
already called correct on the block (0.0320 m) rather than reaching zero.
|
|
128
|
+
status: contradicted
|
|
129
|
+
source: ModWright research
|
|
130
|
+
tags:
|
|
131
|
+
- sway-damp
|
|
132
|
+
- sway-gain
|
|
133
|
+
- tuning
|
|
134
|
+
- dead-approach
|
|
135
|
+
detail: "Explicitly retired once the real root cause (encoder rotation noise on gun-space/IK bones)
|
|
136
|
+
was found and fixed: \"do NOT re-tune gain/damp, that trade is dead\" (a project's own notes).
|
|
137
|
+
See cp2077.anims.encoder.sway-gunrot-const-fix-verified-in-game for the superseding fix."
|
|
138
|
+
- id: cp2077.anims.authoring.crouch-still-softness-open
|
|
139
|
+
claim: After the sway root-cause fix, the crouch-still pose (which settles into melee_safepose, not
|
|
140
|
+
melee_crouchpose) still measures about 15.8 mm of slip versus 4 mm or less everywhere else,
|
|
141
|
+
because the sway's left-arm rotation correction is solved against ADDITIVE_BASE =
|
|
142
|
+
melee_idlepose and over-corrects on other bases; the prescribed fix, if the eye catches it, is
|
|
143
|
+
to re-pin the sway solve against melee_safepose (a new SWAY_BASE constant) and re-measure,
|
|
144
|
+
explicitly NOT to re-tune gain/damp.
|
|
145
|
+
status: unverified
|
|
146
|
+
source: ModWright research
|
|
147
|
+
tags:
|
|
148
|
+
- crouch-still
|
|
149
|
+
- melee_safepose
|
|
150
|
+
- sway-base
|
|
151
|
+
- open-item
|
|
152
|
+
detail: Left as an open item pending whether the user's eye ever catches it in normal play; not yet
|
|
153
|
+
re-pinned or re-measured as of the source's writing.
|
|
154
|
+
- id: cp2077.anims.authoring.wrist-budget-values-and-metric
|
|
155
|
+
claim: The calibrated per-side wrist load budget (bend plus twist) used to gate every authored grip
|
|
156
|
+
and pose is right hand <= 108.5 degrees, left hand <= 50.7 degrees, calibrated on static poses
|
|
157
|
+
already confirmed good in game. Palm-to-palm angle PARITY is explicitly NOT a valid grip
|
|
158
|
+
similarity metric — two confirmed-good shipped grips sit at 124 degrees apart from each other
|
|
159
|
+
— judge a grip only by palm-to-marker distance and wrist load.
|
|
160
|
+
status: inferred
|
|
161
|
+
source: ModWright research
|
|
162
|
+
tags:
|
|
163
|
+
- wrist-budget
|
|
164
|
+
- palm-parity
|
|
165
|
+
- grip-metric
|
|
166
|
+
- check-wrists
|
|
167
|
+
detail: Repeated across multiple authoring documents as a standing rule ("NEVER palm parity") after
|
|
168
|
+
being independently re-derived more than once.
|
|
169
|
+
- id: cp2077.anims.authoring.wrist-budget-untested-for-transient-loads
|
|
170
|
+
claim: The 108.5/50.7 degree wrist load budget was calibrated on four STATIC poses; its validity for
|
|
171
|
+
fast, transient mid-swing loads (as opposed to held poses) has never been confirmed in game,
|
|
172
|
+
and was deliberately left as a warning rather than a hard build failure on transient frames,
|
|
173
|
+
pending a launch verdict.
|
|
174
|
+
status: unverified
|
|
175
|
+
source: ModWright research
|
|
176
|
+
tags:
|
|
177
|
+
- wrist-budget
|
|
178
|
+
- transient-load
|
|
179
|
+
- static-vs-dynamic
|
|
180
|
+
- open-item
|
|
181
|
+
detail: "The stated policy: gate the plateaus (held poses) hard on this budget, warn-only on fast
|
|
182
|
+
transients, and let the launch judge whether the budget is too conservative for motion."
|
|
183
|
+
- id: cp2077.anims.authoring.grip-carry-wrist-configuration-closed-form
|
|
184
|
+
claim: "The transferable arm content of a grip that must move a hand while preserving its wrist feel
|
|
185
|
+
is the WRIST CONFIGURATION W = ForeArm^-1 @ Hand, reproduced per frame with two
|
|
186
|
+
hand-preserving, CLOSED-FORM degrees of freedom: forearm axial roll (about the elbow-to-wrist
|
|
187
|
+
line) and elbow swing (about the shoulder-to-hand line) — neither requires a per-frame search,
|
|
188
|
+
avoiding the jitter a discrete load-minimizing search produces (one documented search-based
|
|
189
|
+
approach moved the elbow 4.9 to 19.0 to 15.4 cm on three consecutive frames, jumping between
|
|
190
|
+
near-equal-error minima)."
|
|
191
|
+
status: inferred
|
|
192
|
+
source: ModWright research
|
|
193
|
+
tags:
|
|
194
|
+
- grip-carry
|
|
195
|
+
- wrist-configuration
|
|
196
|
+
- closed-form
|
|
197
|
+
- forearm-roll
|
|
198
|
+
- elbow-swing
|
|
199
|
+
detail: "Validation (offline): an offline grip-carry check recovers the Phase 1 katana relax EXACTLY
|
|
200
|
+
from its raw capture — residual 0.0000 degrees, elbow match 0.0000 m — with both a known-good
|
|
201
|
+
and a known-bad case exercised. This resolved what had been framed as a false dichotomy
|
|
202
|
+
between \"carry the donor's arm values\" (re-derives a documented failure: an earlier
|
|
203
|
+
GRIP_DELTA experiment that carried forearm values pushed hold grips to 0.566-0.640 m span
|
|
204
|
+
against an approved 0.509 m) and \"re-run a load-minimizing search per frame\" (inherits
|
|
205
|
+
jitter)."
|
|
206
|
+
- id: cp2077.anims.authoring.fingers-derived-never-carried
|
|
207
|
+
claim: Finger/hand-subtree bones must always be DERIVED fresh from the FINAL placed hand transform
|
|
208
|
+
on every frame, never carried through an intermediate rotation step; a routine that reorients
|
|
209
|
+
the hand after its children were already positioned orphans the fingers from the palm — the
|
|
210
|
+
general fix pattern is to rebuild the hand's children rigidly from the final hand transform
|
|
211
|
+
every time, which regrip_frame() already did and which fixed an adjacent defect in
|
|
212
|
+
solve_two_bone()'s hand-reorientation step.
|
|
213
|
+
status: inferred
|
|
214
|
+
source: ModWright research
|
|
215
|
+
tags:
|
|
216
|
+
- finger-derivation
|
|
217
|
+
- hand-subtree
|
|
218
|
+
- rebuild-from-final-hand
|
|
219
|
+
- builder-rule
|
|
220
|
+
detail: The specific defect found (relax_wrist rotating the hand's own subtree instead of excluding
|
|
221
|
+
it) was confirmed to be DEAD code in the shipping configuration at the time it was found, and
|
|
222
|
+
to never have perturbed actual weapon placement — only measurement diagnostics and finger
|
|
223
|
+
cosmetics were affected.
|
|
224
|
+
- id: cp2077.anims.authoring.sway-slip-proportional-to-turn-times-span
|
|
225
|
+
claim: The geometric law behind the ambient sway defect is slip is approximately proportional to
|
|
226
|
+
weapon_turn times grip_span; because the custom weapon's hands sit roughly 0.51 m apart versus
|
|
227
|
+
the donor katana's 0.093 m, the identical ambient sway rotation drags roughly 5-6 times more
|
|
228
|
+
haft length through the off hand than it does on the weapon the sway was originally authored
|
|
229
|
+
for.
|
|
230
|
+
status: inferred
|
|
231
|
+
source: ModWright research
|
|
232
|
+
tags:
|
|
233
|
+
- sway
|
|
234
|
+
- weapon-turn
|
|
235
|
+
- grip-span
|
|
236
|
+
- geometric-law
|
|
237
|
+
detail: "Measured comparison table (span in meters, slip per meter of span): katana base+add
|
|
238
|
+
0.093/0.193, hammer base+add 0.473/0.012, the custom weapon 0.513/0.120 — the katana's own
|
|
239
|
+
sway is proportionally far worse but invisible only because its span is tiny."
|
|
240
|
+
- id: cp2077.anims.authoring.right-arm-repose-is-the-turn-amplifier
|
|
241
|
+
claim: Rebuilding a custom weapon's base pose from the donor one bone group at a time isolated the
|
|
242
|
+
weapon-turn increase under the shared ambient additive (3.66 to 5.22 degrees) entirely to the
|
|
243
|
+
RIGHT arm re-pose, not to the wrist changes or the left arm re-pose.
|
|
244
|
+
status: inferred
|
|
245
|
+
source: ModWright research
|
|
246
|
+
tags:
|
|
247
|
+
- right-arm
|
|
248
|
+
- weapon-turn
|
|
249
|
+
- isolation
|
|
250
|
+
- sway-source
|
|
251
|
+
detail: "Isolation table: donor arms + our wrists (turn 3.66), + our left arm (turn 3.66,
|
|
252
|
+
unchanged), + our right arm (turn 5.22 — the whole jump)."
|
|
253
|
+
- id: cp2077.anims.authoring.no-vanilla-clip-carries-lunge-travel
|
|
254
|
+
claim: Across a sweep of 1166 player-FPP-melee clips, root_excursion_m measures 0.0000 on every
|
|
255
|
+
single one — 58 clips do move some torso or leg bone by more than 1 mm, but none of that
|
|
256
|
+
displaces the body; the best-looking forward-hand-travel candidates were either camera-frame
|
|
257
|
+
artifacts (measured hand travel of +0.81 to +0.95 m collapses to +0.15/+0.17 m once measured
|
|
258
|
+
in the live per-frame camera basis instead of a frame-0-fixed basis, because the camera itself
|
|
259
|
+
travels 0.836 m during those clips) or monotonic pose-transition drift rather than a genuine
|
|
260
|
+
thrust-and-return; a custom finisher's forward lunge travel therefore has to be supplied by
|
|
261
|
+
the engine (record/script side), with the clip supplying only the arm and blade extension.
|
|
262
|
+
status: inferred
|
|
263
|
+
source: ModWright research
|
|
264
|
+
tags:
|
|
265
|
+
- lunge
|
|
266
|
+
- root-motion
|
|
267
|
+
- camera-frame-artifact
|
|
268
|
+
- no-clip-travel
|
|
269
|
+
detail: Exactly one attack-family clip in the whole census showed a genuine forward-out-and-back
|
|
270
|
+
drive above 0.25 m (default_melee_weapon/final_attack_03, +0.288 m at frame 9 of 46, returning
|
|
271
|
+
to net 0.000), and even that is an arm extension, not a lunge.
|
|
272
|
+
- id: cp2077.anims.authoring.entry-transition-and-terminal-pose-both-constrain-authoring
|
|
273
|
+
claim: "Because the Attack state's entry transition is a hard, zero-duration cut and the whole state
|
|
274
|
+
machine terminates attack clips exactly on melee_idlepose frame 0, every custom-authored swing
|
|
275
|
+
has a symmetric requirement: frame 0 must equal the CURRENT (re-posed) idle's grip exactly,
|
|
276
|
+
and the final frame must equal melee_idlepose frame 0 exactly, with a near-static, cut-safe
|
|
277
|
+
plateau covering the whole mapped cut window in between."
|
|
278
|
+
status: inferred
|
|
279
|
+
source: ModWright research
|
|
280
|
+
tags:
|
|
281
|
+
- entry-transition
|
|
282
|
+
- terminal-pose
|
|
283
|
+
- cut-safe-plateau
|
|
284
|
+
- authoring-constraint
|
|
285
|
+
detail: "Both live defects this constraint was written to fix were measured concretely before the
|
|
286
|
+
fix: a 0.42 m instantaneous hand snap on attack entry, and a 403.5 mm / 98.0 degree gap
|
|
287
|
+
between the re-posed idle and the vanilla idle every attack clip terminates onto."
|
|
288
|
+
- id: cp2077.anims.authoring.blade-rides-right-hand-not-palm-line-for-attacks
|
|
289
|
+
claim: "For authored ATTACK clips (as opposed to static holds), deriving the blade transform from a
|
|
290
|
+
fitted palm line between both hands is the wrong model: the fit becomes numerically
|
|
291
|
+
ill-conditioned at a stacked/katana-style grip (a 0.108 m span measured about 4.3x
|
|
292
|
+
ill-conditioned) and is UNDEFINED whenever the left hand is off the haft mid-regrip, which
|
|
293
|
+
every authored swing does at some point. The adopted model instead rigs the blade rigidly to
|
|
294
|
+
the RIGHT hand (X(t) = H_R(t) @ rel_R, with rel_R captured once from the END-grip reference),
|
|
295
|
+
then solves the LEFT hand onto the blade per a per-swing grip timeline."
|
|
296
|
+
status: inferred
|
|
297
|
+
source: ModWright research
|
|
298
|
+
tags:
|
|
299
|
+
- blade-placement
|
|
300
|
+
- right-hand-rigid
|
|
301
|
+
- palm-line
|
|
302
|
+
- ill-conditioned
|
|
303
|
+
- grip-timeline
|
|
304
|
+
detail: This is the design underlying build_attack2r.py; it removes a conditioning problem entirely
|
|
305
|
+
rather than mitigating it, and it matches how the engine itself composes a held weapon
|
|
306
|
+
(WeaponRight is a child bone of RightHand).
|
|
307
|
+
- id: cp2077.anims.authoring.regrip-windows-must-be-authored-in-state-time
|
|
308
|
+
claim: Because the record's three-segment retimer stretches each authored Phase segment
|
|
309
|
+
independently and by different factors per swing (e.g. one swing's startup plays at 2.67x,
|
|
310
|
+
another swing's recover at 2.63x), a release/regrip window or contact frame authored as a
|
|
311
|
+
fixed FRACTION of clip time can play up to about 3x faster or slower on screen than in the
|
|
312
|
+
Blender preview; regrip windows and contact frames must instead be expressed in state time
|
|
313
|
+
(seconds actually on screen) and mapped through each swing's own record durations into clip
|
|
314
|
+
frames at build time.
|
|
315
|
+
status: inferred
|
|
316
|
+
source: ModWright research
|
|
317
|
+
tags:
|
|
318
|
+
- regrip-window
|
|
319
|
+
- state-time
|
|
320
|
+
- clip-fraction
|
|
321
|
+
- retimer
|
|
322
|
+
- authoring-rule
|
|
323
|
+
detail: "Corollary: the authored contact frame goes at 0.899 of the startup segment when the retimer
|
|
324
|
+
engages (per cp2077.anims.graph.gameplay-hit-lands-near-active-phase-event), also expressed
|
|
325
|
+
through this same time mapping."
|
|
326
|
+
- id: cp2077.anims.authoring.boundary-grip-design-end-everywhere
|
|
327
|
+
claim: The project's boundary-grip design question — whether each chain-linked swing should open and
|
|
328
|
+
close on a shared END grip with its own out-and-back regrip inside the clip, versus carrying a
|
|
329
|
+
grip across chain links for a prettier but more fragile join — was resolved by the user in
|
|
330
|
+
favor of END-EVERYWHERE, on the grounds that opening and closing every swing at the same
|
|
331
|
+
END-grip pose is robust to every cut timing and entry path; chain-carried grips were offered
|
|
332
|
+
and declined.
|
|
333
|
+
status: contradicted
|
|
334
|
+
source: ModWright research
|
|
335
|
+
tags:
|
|
336
|
+
- boundary-grip
|
|
337
|
+
- end-grip
|
|
338
|
+
- chain-carried-grip
|
|
339
|
+
- user-decision
|
|
340
|
+
- dead-belief
|
|
341
|
+
detail: "Kept as the decision of 2026-08-23. REVERSED the same evening by the launch verdict on
|
|
342
|
+
build a4214cda: \"Vanilla chains ALTERNATE stroke direction (R->L, L->R, R->L...) and do NOT
|
|
343
|
+
return to baseline between chained swings. REVERSES the END-boundary decision.\" Superseded by
|
|
344
|
+
cp2077.anims.authoring.chain-links-open-on-predecessor-park. Its original consequence — each
|
|
345
|
+
swing's regrip authored entirely inside its own clip (END-CENTRE-END, END-KATANA-END) — no
|
|
346
|
+
longer holds past swing 0."
|
|
347
|
+
- id: cp2077.anims.authoring.chain-links-open-on-predecessor-park
|
|
348
|
+
claim: "Vanilla melee chains ALTERNATE stroke direction (right-to-left, then left-to-right, then
|
|
349
|
+
right-to-left) and do NOT return to a baseline pose between chained swings: each clip opens on
|
|
350
|
+
its predecessor's PARK pose, strokes through the screen-centre hit dot, parks on the far side
|
|
351
|
+
(which becomes the successor's cut-in window), and only its RECOVERY tail — played when the
|
|
352
|
+
chain stops — returns grip and pose to the idle. Entry to the first swing from the idle stays
|
|
353
|
+
a hard cut."
|
|
354
|
+
status: inferred
|
|
355
|
+
supersedes: cp2077.anims.authoring.boundary-grip-design-end-everywhere
|
|
356
|
+
source: ModWright research
|
|
357
|
+
tags:
|
|
358
|
+
- chain-join
|
|
359
|
+
- park-pose
|
|
360
|
+
- stroke-alternation
|
|
361
|
+
- cut-window
|
|
362
|
+
- authoring-rule
|
|
363
|
+
detail: 'Two companion rules were adopted from the same verdict: every melee swing must land on the
|
|
364
|
+
screen-centre hit dot (strokes are authored in CAMERA space), and ONE CLIP = ONE STROKE — a
|
|
365
|
+
windup-plus-strike-plus-return packed into a single clip fought the record retimer and read as
|
|
366
|
+
unreadable noise (user on the rejected build: swings 1 and 2 were "so fast I can perceive no
|
|
367
|
+
details"). Vanilla clips read fine at the same retime because their content is a single
|
|
368
|
+
stroke. The measured screen-space consequence of the park convention is
|
|
369
|
+
cp2077.anims.authoring.vanilla-swing-parks-off-screen-between-chain-links.'
|
|
370
|
+
- id: cp2077.anims.authoring.swing0-composite-donor-approved-in-game
|
|
371
|
+
claim: Swing 0 (combo_attack_01, the light-chain opener) shipped as a from-scratch AUTHORED forward
|
|
372
|
+
thrust rather than adopting a single donor whole, because no single vanilla clip on disk is a
|
|
373
|
+
genuine forward thrust; the closest composite reference blended pwa_knife combo_attack_03's
|
|
374
|
+
forward drive (the largest single-frame forward displacement measured in the whole shortlist)
|
|
375
|
+
with pwa_katana safe_attack's extension and held finish. Both hands stay on the END grips
|
|
376
|
+
throughout. The user approved this swing's pose and extension in game.
|
|
377
|
+
status: verified
|
|
378
|
+
source: ModWright field verification
|
|
379
|
+
tags:
|
|
380
|
+
- swing0
|
|
381
|
+
- donor-composite
|
|
382
|
+
- forward-thrust
|
|
383
|
+
- approved-in-game
|
|
384
|
+
detail: pwa_katana combo_attack_01 (rank 1 by record data) was explicitly rejected on inspection —
|
|
385
|
+
its arc is a descending diagonal chop, not a thrust in any component, and its shape was
|
|
386
|
+
reassigned to swing 2's spec instead.
|
|
387
|
+
- id: cp2077.anims.authoring.vanilla-swing-parks-off-screen-between-chain-links
|
|
388
|
+
claim: A screen-space trace of the vanilla katana clip occupying the swing-1 slot (combo_attack_02)
|
|
389
|
+
showed the clip parks the blade AND both hands fully OFF-SCREEN to the right (in-frame
|
|
390
|
+
fraction 0.00 through the whole cut window) after a roughly three-frame full-viewport
|
|
391
|
+
crossing, entering from off-screen left in its own windup; the chain's next link
|
|
392
|
+
(combo_attack_03) opens at that same off-right position and sweeps back to park off-screen
|
|
393
|
+
left, i.e. vanilla combos alternate off-screen parks rather than ending each swing framed in
|
|
394
|
+
view.
|
|
395
|
+
status: inferred
|
|
396
|
+
source: ModWright research
|
|
397
|
+
tags:
|
|
398
|
+
- screen-space-trace
|
|
399
|
+
- off-screen-park
|
|
400
|
+
- chain-alternation
|
|
401
|
+
- vanilla-reference
|
|
402
|
+
detail: This directly overturned five earlier rejected parametric builds of the corresponding custom
|
|
403
|
+
swing, all of which had ended the sweep framed fully in view — exactly what a real swing never
|
|
404
|
+
does, and what the user's rejections ("half way", "back in front") were describing.
|
|
405
|
+
- id: cp2077.anims.authoring.rigid-transform-of-prior-park-cannot-reach-off-screen-park
|
|
406
|
+
claim: "An exhaustive offline sweep of about 2.5 million candidate placements (5 degrees of freedom
|
|
407
|
+
across 6 tested grip widths) for a chained swing's parked pose, modeled as a rigid transform
|
|
408
|
+
of the PREDECESSOR swing's own park (yaw about the eye, forward push, lateral drift, pitch,
|
|
409
|
+
roll), found ZERO placements satisfying the measured vanilla park's screen geometry at any
|
|
410
|
+
tested grip width. The structural cause: the custom weapon's two hands sit roughly 0.5 m apart
|
|
411
|
+
on the haft (half-sword) versus the katana's roughly 0.15 m, so where vanilla parks its two
|
|
412
|
+
hands about 4 cm apart in depth, the equivalent half-sword grip would need about 31 cm of hand
|
|
413
|
+
depth separation, which no rigid transform of a single prior pose can produce."
|
|
414
|
+
status: inferred
|
|
415
|
+
source: ModWright research
|
|
416
|
+
tags:
|
|
417
|
+
- park-pose
|
|
418
|
+
- rigid-transform
|
|
419
|
+
- exhaustive-sweep
|
|
420
|
+
- half-sword-grip
|
|
421
|
+
- structural-limit
|
|
422
|
+
detail: "Confirmed the fallback predicted in advance by the project's own standing rule (\"if the
|
|
423
|
+
user rejects the v6 parametric attempt, do not tune parameters again — hand it to the user\"):
|
|
424
|
+
the park needed a free, hand-posed placement rather than a parametric one."
|
|
425
|
+
- id: cp2077.anims.authoring.one-hand-posed-frame-beat-five-parametric-iterations
|
|
426
|
+
claim: Across this authoring effort, a single hand-posed correction (the swing-0 "EXTEND" grip,
|
|
427
|
+
posed once by the user) landed correctly on the first attempt, and the correction it produced
|
|
428
|
+
turned out to be rotation-dominant (33 mm plus 40.8 degrees on the right hand, 73 mm plus 38.8
|
|
429
|
+
degrees on the left) — a shape no translation-focused parameter search would have found —
|
|
430
|
+
while five successive parametric iterations of a different swing's spec all failed against the
|
|
431
|
+
same user's rejections.
|
|
432
|
+
status: verified
|
|
433
|
+
source: ModWright field verification
|
|
434
|
+
tags:
|
|
435
|
+
- hand-posed
|
|
436
|
+
- parametric-tuning
|
|
437
|
+
- extend-grip
|
|
438
|
+
- authoring-strategy
|
|
439
|
+
detail: "The standing rule this produced: after one parametric attempt against a corrected, measured
|
|
440
|
+
specification, if the user still rejects it, switch to a user-hand-posed reference pose rather
|
|
441
|
+
than continuing to tune parameters."
|
|
442
|
+
- id: cp2077.anims.authoring.heavy-attack-phase-proportions
|
|
443
|
+
claim: "A heavy attack's phase proportions, measured from the vanilla katana heavy_attack_01 (42
|
|
444
|
+
frames) and used as a SHAPE reference (not a timing reference, since the vanilla clip's own
|
|
445
|
+
record retimes it) for a custom heavy swing: roughly 1 part chamber (a slow wind-up), 0.5 part
|
|
446
|
+
strike (a very fast few-frame swing), 2 parts dwell (a long, nearly frozen follow-through). An
|
|
447
|
+
early rejected draft had the dwell but built the chamber and the strike out of two
|
|
448
|
+
interpolated poses, and read as \"a slide rather than a swing\" specifically because it lacked
|
|
449
|
+
this proportion."
|
|
450
|
+
status: inferred
|
|
451
|
+
source: ModWright research
|
|
452
|
+
tags:
|
|
453
|
+
- heavy-attack
|
|
454
|
+
- phase-proportion
|
|
455
|
+
- chamber-strike-dwell
|
|
456
|
+
- katana-reference
|
|
457
|
+
detail: The interpolated draft was rejected by the user on its preview GIF ("really not working"),
|
|
458
|
+
not in game, which is why this is inferred. Vanilla's own katana heavy does not strike at the
|
|
459
|
+
record's stock attackEffectDelay frame (about frame 9 in a naive 1:1 mapping) — it strikes
|
|
460
|
+
around frame 13 of its own clip, because the katana's strong record carries nonzero
|
|
461
|
+
startup/active/recover durations that retime the whole clip; a heavy authored to play 1:1 (no
|
|
462
|
+
retimer) needs its own record durations reconsidered if the vanilla clip's shape is reused
|
|
463
|
+
as-is.
|
|
464
|
+
- id: cp2077.anims.authoring.heavy-attacks-hand-authored-by-user-on-ik-handle-rig
|
|
465
|
+
claim: After a pose-interpolation approach for a heavy attack was rejected on the preview GIF, the
|
|
466
|
+
heavy attacks were switched to direct user hand-authoring on a rig exposing 7 keyframeable IK
|
|
467
|
+
handles (HAND_L/R, ELBOW_L/R, SHOULDER_L/R, and a blade-carrying weapon-adjust handle that
|
|
468
|
+
also drags both hand handles along with it), overlaid with two animated reference skeletons
|
|
469
|
+
(vanilla katana and machete heavies) for shape comparison; the tooling samples the resulting
|
|
470
|
+
pose EVERY frame regardless of how sparsely the user keys, and the user later confirmed all
|
|
471
|
+
heavy attacks were done.
|
|
472
|
+
status: inferred
|
|
473
|
+
source: ModWright research
|
|
474
|
+
tags:
|
|
475
|
+
- heavy-attack
|
|
476
|
+
- hand-authoring
|
|
477
|
+
- ik-handle-rig
|
|
478
|
+
- reference-skeleton
|
|
479
|
+
- user-authored
|
|
480
|
+
detail: Because the user is the sole ground truth for a hand-authored path, the screen-geometry
|
|
481
|
+
gates run report-only (non-blocking) on this content rather than failing the build. The user
|
|
482
|
+
reported the work complete ("heavy attacks are all done", 2026-08-26); that is a statement
|
|
483
|
+
about authoring progress, not an in-game engine observation, so this fact is inferred rather
|
|
484
|
+
than verified.
|
|
485
|
+
- id: cp2077.anims.authoring.blade-rotation-cheap-translation-expensive-for-heavy-authoring
|
|
486
|
+
claim: On the heavy-attack hand-authoring rig, a 90-degree blade ROTATION about the grip axis left
|
|
487
|
+
both palms within about 2 cm of their reference markers (nearly free), while a 0.30 m blade
|
|
488
|
+
TRANSLATION put the far hand 0.83 m from its shoulder, saturating the arm's IK and pulling the
|
|
489
|
+
palm 16-22 cm off the grip; a heavy swing's visible travel should therefore come from rotating
|
|
490
|
+
the blade about the grip rather than translating it through space, matching how the vanilla
|
|
491
|
+
katana heavy's own 0.87 m stroke is mostly the weapon swinging about the hands rather than the
|
|
492
|
+
hands themselves travelling.
|
|
493
|
+
status: inferred
|
|
494
|
+
source: ModWright research
|
|
495
|
+
tags:
|
|
496
|
+
- blade-rotation
|
|
497
|
+
- blade-translation
|
|
498
|
+
- reach-limit
|
|
499
|
+
- heavy-authoring
|
|
500
|
+
detail: 'Stated as a rule of thumb for the user during hand-authoring: "if the arms straighten and
|
|
501
|
+
the hands visibly leave the haft, you are past the reach limit — pull the blade back in and
|
|
502
|
+
get the travel from rotation instead."'
|
|
503
|
+
- id: cp2077.anims.authoring.clip-coverage-audit-donor-grip-vs-authored-grip
|
|
504
|
+
claim: A full-set audit measuring hand span and each hand's distance from the WeaponRight bone axis
|
|
505
|
+
across all 97 clips in the shipped set found 47 of 72 non-additive clips fully re-authored
|
|
506
|
+
onto the custom weapon's own wide (0.18-0.58 m) half-sword grip, and 25 clips still holding
|
|
507
|
+
the donor katana's narrow (0.092-0.114 m) two-hands-together grip; of those 25, 16 are
|
|
508
|
+
reachable in normal gameplay (crouch/jump/equip attacks, weapon slide, block-deflect, being
|
|
509
|
+
parried) and are real outstanding work items, while 9 are structurally unreachable at the
|
|
510
|
+
shipped AttacksNumber setting and require no work unless that setting is later raised.
|
|
511
|
+
status: inferred
|
|
512
|
+
source: ModWright research
|
|
513
|
+
tags:
|
|
514
|
+
- clip-coverage-audit
|
|
515
|
+
- donor-grip
|
|
516
|
+
- reachable-clips
|
|
517
|
+
- unreachable-clips
|
|
518
|
+
detail: "Open contradiction the audit itself flags: the user reported the crouch attack looks GOOD
|
|
519
|
+
in play despite crouch_attack still measuring a donor-grip span, so either the melee state
|
|
520
|
+
machine leaves the crouch state before an attack actually plays that clip, or the defect
|
|
521
|
+
simply has not yet been seen — this needs settling before authoring effort is spent there."
|
|
522
|
+
- id: cp2077.anims.authoring.donor-pick-falling-slash-swing
|
|
523
|
+
claim: For a chain design's falling-slash swing, pwa_one_handed_blunt combo_attack_01 was picked
|
|
524
|
+
over other candidates as the only genuine top-right-to-bottom-left diagonal cut among the
|
|
525
|
+
shortlisted donors (40 degrees below horizontal), with the tighter, cleaner HOLD pose (0.014
|
|
526
|
+
to 0.062 m of wobble in the weapon frame) borrowed from pwa_katana heavy_attack_01 or
|
|
527
|
+
combo_attack_03 instead. pwa_katana heavy_attack_01 was explicitly rejected as a donor for the
|
|
528
|
+
ARC despite having the cleanest hold, because 10 of its 12 sampled first-person tiles show no
|
|
529
|
+
blade on screen at all.
|
|
530
|
+
status: inferred
|
|
531
|
+
source: ModWright research
|
|
532
|
+
tags:
|
|
533
|
+
- donor-pick
|
|
534
|
+
- falling-slash
|
|
535
|
+
- first-person-visibility
|
|
536
|
+
- contact-sheet
|
|
537
|
+
detail: "Picked by the user on 2026-08-23 from a 12-donor contact-sheet index — an offline preview
|
|
538
|
+
choice, not an in-game observation, hence inferred. General lesson recorded alongside this
|
|
539
|
+
pick: a donor's record name does not describe its actual arc (Phase 0's own warning,
|
|
540
|
+
reconfirmed here), and first-person BLADE VISIBILITY, not arc quality alone, is a hard filter
|
|
541
|
+
on donor viability."
|
|
542
|
+
- id: cp2077.anims.authoring.vanilla-light-chain-shared-swing-grammar
|
|
543
|
+
claim: "A comparative per-frame speed and rotation measurement of the katana, machete and hammer
|
|
544
|
+
vanilla light-attack chains found a shared grammar for a satisfying swing: a short
|
|
545
|
+
rotation-or-translation-led ANTICIPATION before the stroke that scales with weapon weight
|
|
546
|
+
(measured: 3 frames / 357 mm for a katana combo versus 10 frames / 651 mm for a hammer combo),
|
|
547
|
+
a 1-3 frame WHIP that peaks in speed exactly AT the contact frame (never decelerating into
|
|
548
|
+
contact), a multi-frame POST-IMPACT DWELL (longest on the finisher, 9 frames measured), and a
|
|
549
|
+
RECOVERY that always tapers toward near-zero speed over its last 3-5 frames rather than
|
|
550
|
+
arriving at the idle pose at speed."
|
|
551
|
+
status: inferred
|
|
552
|
+
source: ModWright research
|
|
553
|
+
tags:
|
|
554
|
+
- swing-grammar
|
|
555
|
+
- anticipation
|
|
556
|
+
- whip
|
|
557
|
+
- dwell
|
|
558
|
+
- recovery
|
|
559
|
+
- vanilla-reference
|
|
560
|
+
detail: The project's own earlier swing-2/swing-3 builds used a single decelerating smoothstep with
|
|
561
|
+
no rotation-led coil and no proportionate dwell, and were redesigned specifically to match
|
|
562
|
+
this measured grammar after the user asked for a pass studying "anticipation and pauses."
|
|
563
|
+
- id: cp2077.anims.authoring.mounted-vehicle-path-unaffected-by-lunge-record-change
|
|
564
|
+
claim: "The finisher's move-to-target lunge fix (enabling enableAdjustingPlayerPositionToTarget on
|
|
565
|
+
the finisher's attack record) does not affect bike or vehicle melee combat: the
|
|
566
|
+
mounted-vehicle path runs a distinct event class (MeleeMountedFinalAttackEvents) whose four
|
|
567
|
+
MountedStrongAttackAbstract records all explicitly set that field to false, and the mod's own
|
|
568
|
+
anim-steering script already early-returns for that mounted event class — though nothing
|
|
569
|
+
enforces this relationship if the finisher record is ever reparented away from its current
|
|
570
|
+
base."
|
|
571
|
+
status: inferred
|
|
572
|
+
source: ModWright research
|
|
573
|
+
tags:
|
|
574
|
+
- mounted-vehicle
|
|
575
|
+
- meleemountedfinalattackevents
|
|
576
|
+
- lunge
|
|
577
|
+
- risk
|
|
578
|
+
detail: Flagged specifically as a fragile-but-currently-safe invariant, not a structurally
|
|
579
|
+
guaranteed one, in case the finisher record's inheritance chain changes in a future edit.
|