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,360 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: anims.method
|
|
3
|
+
title: working method for diagnosing custom FPP melee animation defects
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.anims.method.find-which-layer-lies-before-touching-a-knob
|
|
6
|
+
claim: "When the game contradicts the authored data, find WHICH LAYER lies before touching any knob.
|
|
7
|
+
The pipeline has (at least) five places truth can diverge, each with its own ground-truth
|
|
8
|
+
tool, to be walked in order: what was authored (the build's own gates), what the engine
|
|
9
|
+
COMPOSES (serialize the animgraphs to answer state-to-clip questions directly), what
|
|
10
|
+
post-passes run (IK/constraints — the same serialized graphs, cross referenced against
|
|
11
|
+
tools\\redmod\\scripts to see which script raises a given weight source), what survives the
|
|
12
|
+
ENCODER (a per-bone authored-GLB vs shipped-.anims diff), and what the EYE actually weighs
|
|
13
|
+
(position and rotation, per frame, in the exact frame the engine draws, split along/across the
|
|
14
|
+
relevant axis) — because a number straddling a visibility threshold can produce \"perfect
|
|
15
|
+
here, broken there\" from identical underlying data."
|
|
16
|
+
status: inferred
|
|
17
|
+
source: ModWright research
|
|
18
|
+
tags:
|
|
19
|
+
- working-method
|
|
20
|
+
- layer-diagnosis
|
|
21
|
+
- ground-truth
|
|
22
|
+
- five-layers
|
|
23
|
+
detail: "The concrete case this method was written to generalize: the sway defect was chased for a
|
|
24
|
+
week by re-measuring the authoring layer before the encoder layer was checked directly and
|
|
25
|
+
turned out to be where the truth actually diverged."
|
|
26
|
+
- id: cp2077.anims.method.believe-the-eye-over-a-green-gate
|
|
27
|
+
claim: Believe the user's own visual report over a passing automated gate, then go find the layer
|
|
28
|
+
the existing gates do not model, rather than re-measuring the layers they already cover; a
|
|
29
|
+
gate only ever sees what its underlying model sees.
|
|
30
|
+
status: inferred
|
|
31
|
+
source: ModWright research
|
|
32
|
+
tags:
|
|
33
|
+
- working-method
|
|
34
|
+
- user-report
|
|
35
|
+
- gate-limitation
|
|
36
|
+
- trust-the-eye
|
|
37
|
+
detail: "\"The gate is green and the user says it is wrong. Believe the user\" (a project's own
|
|
38
|
+
notes) is the concrete phrasing this rule generalizes."
|
|
39
|
+
- id: cp2077.anims.method.validate-a-gate-against-known-good-and-known-bad
|
|
40
|
+
claim: Before trusting any new measurement or gate, validate it against BOTH a known-good build and
|
|
41
|
+
a known-bad build; a gate that has never been observed to fail is not yet a trustworthy gate.
|
|
42
|
+
status: inferred
|
|
43
|
+
source: ModWright research
|
|
44
|
+
tags:
|
|
45
|
+
- working-method
|
|
46
|
+
- gate-validation
|
|
47
|
+
- known-good
|
|
48
|
+
- known-bad
|
|
49
|
+
detail: "This re-calibration exercise directly found two real gate bugs: a gate that flagged
|
|
50
|
+
vanilla's own correct off-screen park as a failure, and a park-position gate blind to screen Y
|
|
51
|
+
that missed a hand resting at waist height."
|
|
52
|
+
- id: cp2077.anims.method.fix-at-the-source-not-downstream-compensation
|
|
53
|
+
claim: Making the underlying authored data immune to a defect (e.g. constant rotation channels that
|
|
54
|
+
the encoder cannot damage) beats every downstream compensation that tries to hide the same
|
|
55
|
+
defect (damping, twist cancellation, gain scheduling), because those compensations scale the
|
|
56
|
+
real signal and the defect's noise together and therefore trade roughly 1:1 rather than
|
|
57
|
+
actually fixing anything.
|
|
58
|
+
status: inferred
|
|
59
|
+
source: ModWright research
|
|
60
|
+
tags:
|
|
61
|
+
- working-method
|
|
62
|
+
- fix-at-source
|
|
63
|
+
- downstream-compensation
|
|
64
|
+
- encoder
|
|
65
|
+
detail: See cp2077.anims.authoring.sway-damp-gain-tuning-superseded and
|
|
66
|
+
cp2077.anims.encoder.sway-gunrot-const-fix-verified-in-game for the concrete before/after pair
|
|
67
|
+
this rule is drawn from.
|
|
68
|
+
- id: cp2077.anims.method.never-burn-a-launch-on-what-a-render-or-graph-can-answer
|
|
69
|
+
claim: Resolve everything answerable offline — a serialized animgraph, a script measurement, or a
|
|
70
|
+
rendered preview (contact sheet or GIF) — BEFORE spending a game launch to test it; the
|
|
71
|
+
project's own sway root-cause diagnosis and fix used zero launches end to end and needed
|
|
72
|
+
exactly one launch to confirm the result.
|
|
73
|
+
status: inferred
|
|
74
|
+
source: ModWright research
|
|
75
|
+
tags:
|
|
76
|
+
- working-method
|
|
77
|
+
- offline-first
|
|
78
|
+
- launch-cost
|
|
79
|
+
- preview-render
|
|
80
|
+
detail: Preview GIFs (rendered frames composited with PIL) are cited as letting the user reject
|
|
81
|
+
choreography before the single manual WolvenKit import click that a real launch requires.
|
|
82
|
+
- id: cp2077.anims.method.record-findings-and-correct-stale-comments-immediately
|
|
83
|
+
claim: Record a finding into the project's handoff documentation the moment it is proven, log
|
|
84
|
+
rollback identifiers (archive MD5 and .anims MD5) on every deploy, and correct stale comments
|
|
85
|
+
or claims IN PLACE rather than leaving them for a later reader to trip over — a single stale
|
|
86
|
+
comment ("block never sees these additives") nearly derailed a later graph reading before it
|
|
87
|
+
was found and retracted.
|
|
88
|
+
status: inferred
|
|
89
|
+
source: ModWright research
|
|
90
|
+
tags:
|
|
91
|
+
- working-method
|
|
92
|
+
- documentation
|
|
93
|
+
- stale-comment
|
|
94
|
+
- rollback-identifier
|
|
95
|
+
detail: See cp2077.anims.graph.block-never-sees-additives-old-belief for the specific retracted
|
|
96
|
+
claim this rule is drawn from.
|
|
97
|
+
- id: cp2077.anims.method.identify-builds-by-anims-md5-never-mtime
|
|
98
|
+
claim: Identify a build by the MD5 of the shipped .anims file, never by archive file modification
|
|
99
|
+
time; the WolvenKit pack step can write a byte-different archive from logically identical
|
|
100
|
+
content, so mtime alone cannot distinguish which content is actually deployed.
|
|
101
|
+
status: inferred
|
|
102
|
+
source: ModWright research
|
|
103
|
+
tags:
|
|
104
|
+
- working-method
|
|
105
|
+
- build-identification
|
|
106
|
+
- anims-md5
|
|
107
|
+
- archive-mtime
|
|
108
|
+
detail: "Concretely burned once: a rollback labeled as \"yesterday\" turned out to be byte-identical
|
|
109
|
+
to that day's own build rather than the intended prior state, because it had been
|
|
110
|
+
distinguished only by filename/mtime. MERGED from an equivalent process fact, which dates the
|
|
111
|
+
rule to 2026-08-21 and records that the same hash-over-mtime discipline is applied
|
|
112
|
+
independently in a cache deploy script (which hash-verifies both the rollback copy and the
|
|
113
|
+
final live-archive copy) and in a build script's deploy path — a project-wide convention
|
|
114
|
+
rather than a one-off fix. See cp2077.world.loot-container.deploy-verifies-with-md5-not-mtime
|
|
115
|
+
for the cache-specific instance."
|
|
116
|
+
- id: cp2077.anims.method.copy-live-archive-to-rollback-before-every-deploy
|
|
117
|
+
claim: Always copy the currently-live game archive into a rollback folder BEFORE deploying any new
|
|
118
|
+
build, every single time; skipping this once meant there was no byte-exact "yesterday" build
|
|
119
|
+
to diff against when a user reported moved hand positions, which materially slowed diagnosis.
|
|
120
|
+
status: inferred
|
|
121
|
+
source: ModWright research
|
|
122
|
+
tags:
|
|
123
|
+
- working-method
|
|
124
|
+
- rollback
|
|
125
|
+
- deploy-discipline
|
|
126
|
+
- archive-backup
|
|
127
|
+
detail: "\"A rebuild can reproduce any past state, but only if you know which knobs were set — an
|
|
128
|
+
archive is the cheaper record\" (a project's notes). MERGED from an equivalent process fact (a
|
|
129
|
+
mesh deploy script's \"ALWAYS KEEP A ROLLBACK\" comment, dated 2026-08-21), which records the
|
|
130
|
+
same rule arising independently on the mesh side after a deploy overwrote the live archive
|
|
131
|
+
with nothing kept."
|
|
132
|
+
- id: cp2077.anims.method.measure-in-the-frame-the-engine-actually-draws
|
|
133
|
+
claim: Measure a quantity in the exact reference frame the engine uses to draw it — gun space for
|
|
134
|
+
the FPP weapon's placement, the live per-frame camera basis for on-screen hand travel — never
|
|
135
|
+
in a convenient proxy frame such as a bone the mesh happens to be parented to in the authoring
|
|
136
|
+
tool, or a frame-0-fixed camera basis.
|
|
137
|
+
status: inferred
|
|
138
|
+
source: ModWright research
|
|
139
|
+
tags:
|
|
140
|
+
- working-method
|
|
141
|
+
- reference-frame
|
|
142
|
+
- gun-space
|
|
143
|
+
- camera-basis
|
|
144
|
+
detail: "Two concrete, separately discovered instances of the same mistake: sway slip measured for
|
|
145
|
+
weeks against the wrong bone (WeaponRight instead of gun space) reported the BETTER build as
|
|
146
|
+
worse; a candidate \"lunge\" clip's measured +0.81 to +0.95 m of hand travel collapsed to
|
|
147
|
+
+0.15/+0.17 m once measured in the live camera basis instead of a frame-0-fixed one, because
|
|
148
|
+
the camera itself was moving 0.836 m during the clip."
|
|
149
|
+
- id: cp2077.anims.method.rendered-images-outrank-scalar-metrics
|
|
150
|
+
claim: When a rendered image and a scalar gate disagree, trust the rendered image. Four separately
|
|
151
|
+
documented incidents on this project involved an aggregate or proxy scalar (a bounding-box
|
|
152
|
+
corner mistaken for a real mesh vertex, a min/max range unable to distinguish "left end down"
|
|
153
|
+
from "right end up", a metric that divided by the wrong axis) hiding exactly the thing it was
|
|
154
|
+
supposed to measure, caught only by looking at the actual rendered frame.
|
|
155
|
+
status: inferred
|
|
156
|
+
source: ModWright research
|
|
157
|
+
tags:
|
|
158
|
+
- working-method
|
|
159
|
+
- rendered-image
|
|
160
|
+
- scalar-metric
|
|
161
|
+
- instrument-bug
|
|
162
|
+
detail: "\"A reviewer should weight rendered images over any scalar here\" (a project's own notes),
|
|
163
|
+
stated as a direct consequence of the four documented instrument-lying incidents."
|
|
164
|
+
- id: cp2077.anims.method.clear-matrix-basis-before-reading-a-composed-pose
|
|
165
|
+
claim: In Blender, a bone that a given action does not key retains whatever matrix_basis was last
|
|
166
|
+
written by a PRIOR script or action; reading a composed pose (for example base pose combined
|
|
167
|
+
with an additive) without first resetting every bone to identity leaks the previous
|
|
168
|
+
measurement's pose into the next one, silently producing nonsense results (one documented case
|
|
169
|
+
produced an 11-meter bone span and an infinite value).
|
|
170
|
+
status: inferred
|
|
171
|
+
source: ModWright research
|
|
172
|
+
tags:
|
|
173
|
+
- working-method
|
|
174
|
+
- blender
|
|
175
|
+
- matrix-basis
|
|
176
|
+
- pose-leak
|
|
177
|
+
- gotcha
|
|
178
|
+
detail: "Standing fix: reset all bones to identity at the top of any pose-reading helper function
|
|
179
|
+
before evaluating a composed pose."
|
|
180
|
+
- id: cp2077.anims.method.evaluated-get-is-a-live-view-not-a-snapshot
|
|
181
|
+
claim: Blender's `object.evaluated_get(depsgraph)` returns a LIVE view onto the current depsgraph
|
|
182
|
+
state, not a snapshot; reading it after mutating the rig within the same function compares a
|
|
183
|
+
pose against its own already-mutated self. This made one drift-check gate structurally
|
|
184
|
+
incapable of ever failing — it printed 0.00000 m on a blend whose arms were actually 0.18 m
|
|
185
|
+
out of place.
|
|
186
|
+
status: inferred
|
|
187
|
+
source: ModWright research
|
|
188
|
+
tags:
|
|
189
|
+
- working-method
|
|
190
|
+
- blender
|
|
191
|
+
- evaluated-get
|
|
192
|
+
- live-view
|
|
193
|
+
- gate-defect
|
|
194
|
+
detail: The fix is to snapshot the source pose BY VALUE before touching anything in the rig; three
|
|
195
|
+
separate consequences of the live-view bug were found in one blend file (a pole-angle search
|
|
196
|
+
chasing a moving target, a second arm placed from the first arm's leftover state, and the
|
|
197
|
+
incapable-of-failing drift guard).
|
|
198
|
+
- id: cp2077.anims.method.trace-rotation-metric-has-a-resolution-floor
|
|
199
|
+
claim: The common bone-rotation-difference metric acos((tr(A^T B) - 1) / 2) has an approximate
|
|
200
|
+
0.1485-degree resolution floor on a rig whose bone matrices carry a small non-unit scale
|
|
201
|
+
(measured 0.9993 to 1.0003 on this rig, which the formula assumes away); comparing a pose to a
|
|
202
|
+
re-sample of ITSELF returns 0.0000 mm position but about 0.1485 degrees rotation, so any
|
|
203
|
+
rotation reading at or below roughly 0.15 degrees in this tooling means "indistinguishable
|
|
204
|
+
from zero," not a small but real difference.
|
|
205
|
+
status: inferred
|
|
206
|
+
source: ModWright research
|
|
207
|
+
tags:
|
|
208
|
+
- working-method
|
|
209
|
+
- rotation-metric
|
|
210
|
+
- resolution-floor
|
|
211
|
+
- bone-scale
|
|
212
|
+
detail: "A related, separately fixed instrument bug: measuring the same rotation-difference metric
|
|
213
|
+
on RAW WORLD matrices inherits this ~2.4-2.5-degree floor, whereas measuring it on a
|
|
214
|
+
grip-space quantity (inv(weapon) @ hand) cancels the scale and reads cleanly — see
|
|
215
|
+
cp2077.anims.method.grip-space-metric-cancels-bone-scale."
|
|
216
|
+
- id: cp2077.anims.method.never-use-quaternion-rotation-difference-angle
|
|
217
|
+
claim: Never use Blender's `Quaternion.rotation_difference(...).angle` to compare two rotations for
|
|
218
|
+
similarity; due to quaternion double-cover it can report approximately 360 degrees for two
|
|
219
|
+
rotations that are actually identical (a sign-flipped representation of the same rotation).
|
|
220
|
+
status: inferred
|
|
221
|
+
source: ModWright research
|
|
222
|
+
tags:
|
|
223
|
+
- working-method
|
|
224
|
+
- blender
|
|
225
|
+
- quaternion
|
|
226
|
+
- rotation-difference
|
|
227
|
+
- gotcha
|
|
228
|
+
detail: Called out explicitly alongside the trace-formula resolution-floor caveat as a second,
|
|
229
|
+
independent way this project's rotation tooling can mislead if used carelessly.
|
|
230
|
+
- id: cp2077.anims.method.grip-space-metric-cancels-bone-scale
|
|
231
|
+
claim: Measuring a grip's fidelity via the grip-space quantity inv(weapon) @ hand cancels the rig's
|
|
232
|
+
small (approximately 0.999-1.0003) bone-matrix scale and reads a clean sub-degree number,
|
|
233
|
+
whereas the identical comparison performed on raw world matrices inherits the trace-formula's
|
|
234
|
+
roughly 2.4-2.5-degree resolution floor; prefer the grip-space form for any grip-fidelity
|
|
235
|
+
check.
|
|
236
|
+
status: inferred
|
|
237
|
+
source: ModWright research
|
|
238
|
+
tags:
|
|
239
|
+
- working-method
|
|
240
|
+
- grip-space-metric
|
|
241
|
+
- bone-scale
|
|
242
|
+
- resolution-floor
|
|
243
|
+
detail: With this fix applied, a family of clips that previously read a spurious ~2.4-degree
|
|
244
|
+
difference under raw-world-matrix comparison read exactly 0.0 mm / 0.0 degrees under the
|
|
245
|
+
grip-space metric.
|
|
246
|
+
- id: cp2077.anims.method.treat-engine-silence-as-a-signal
|
|
247
|
+
claim: "When authoring onto a bone or channel that no vanilla clip of the relevant TYPE ever touches
|
|
248
|
+
(for example torso rotation inside an FPP melee ambient-sway additive), treat that consistent
|
|
249
|
+
silence as the engine speaking, not as an oversight to fill in. Ignoring this once cost a full
|
|
250
|
+
game launch: a build that put the entire sway correction onto Spine3 measured a perfect result
|
|
251
|
+
in Blender and rendered completely motionless in game."
|
|
252
|
+
status: inferred
|
|
253
|
+
source: ModWright research
|
|
254
|
+
tags:
|
|
255
|
+
- working-method
|
|
256
|
+
- engine-silence
|
|
257
|
+
- torso-rotation
|
|
258
|
+
- spine3
|
|
259
|
+
- launch-cost
|
|
260
|
+
detail: See cp2077.anims.authoring.engine-limit-fpp-additive-ignores-spine-and-shoulders for the
|
|
261
|
+
full concrete case this rule is named for.
|
|
262
|
+
- id: cp2077.anims.method.additive-silence-rule-is-scoped-to-additives
|
|
263
|
+
claim: The "treat engine silence as a signal" rule is scoped specifically to ADDITIVE clips.
|
|
264
|
+
Full-body BASE attack clips (combo/heavy/final) are a different animDatabase node type
|
|
265
|
+
(convertToAdditive = 0) and the engine DOES let them move Spine and shoulder bones; vanilla
|
|
266
|
+
attack clips simply choose not to, which is confirmed evidence of a design convention, not
|
|
267
|
+
proof of a hard engine restriction — and this distinction was verified by reading the
|
|
268
|
+
serialized animgraph directly before ruling on it, rather than assuming the additive-only
|
|
269
|
+
silence finding transferred to base clips by default.
|
|
270
|
+
status: inferred
|
|
271
|
+
source: ModWright research
|
|
272
|
+
tags:
|
|
273
|
+
- working-method
|
|
274
|
+
- additive-scope
|
|
275
|
+
- base-clip
|
|
276
|
+
- torso
|
|
277
|
+
- design-convention
|
|
278
|
+
detail: This nuance exists specifically to prevent over-generalizing
|
|
279
|
+
cp2077.anims.method.treat-engine-silence-as-a-signal from the sway additive case to every
|
|
280
|
+
future silence observed in any clip type.
|
|
281
|
+
- id: cp2077.anims.method.one-parametric-attempt-then-hand-to-the-user
|
|
282
|
+
claim: After a parametric authoring approach has already failed once against a corrected, measured
|
|
283
|
+
specification, allow exactly ONE further parametric attempt; if the user rejects that attempt
|
|
284
|
+
too, switch to a user-hand-posed reference pose rather than continuing to tune parameters —
|
|
285
|
+
repeated parametric iteration against subjective adjective feedback ("half way", "back in
|
|
286
|
+
front") wastes iterations that a single hand-posed capture reliably resolves.
|
|
287
|
+
status: inferred
|
|
288
|
+
source: ModWright research
|
|
289
|
+
tags:
|
|
290
|
+
- working-method
|
|
291
|
+
- parametric-tuning
|
|
292
|
+
- hand-posed
|
|
293
|
+
- iteration-limit
|
|
294
|
+
detail: See cp2077.anims.authoring.one-hand-posed-frame-beat-five-parametric-iterations for the
|
|
295
|
+
concrete before/after this rule generalizes from.
|
|
296
|
+
- id: cp2077.anims.method.validate-screen-geometry-gates-against-vanilla-first
|
|
297
|
+
claim: Before trusting a new screen-space gate (in-frame fraction, aim-dot alignment, park screen
|
|
298
|
+
position) on a custom build, run it against the PRISTINE VANILLA clip occupying that same
|
|
299
|
+
state slot; two real gate bugs were found only this way — a gate that flagged vanilla's own
|
|
300
|
+
correct off-screen park as a failure, and a park-position gate that was blind to screen Y and
|
|
301
|
+
missed a hand resting at waist height.
|
|
302
|
+
status: inferred
|
|
303
|
+
source: ModWright research
|
|
304
|
+
tags:
|
|
305
|
+
- working-method
|
|
306
|
+
- screen-geometry-gate
|
|
307
|
+
- vanilla-calibration
|
|
308
|
+
- gate-bug
|
|
309
|
+
detail: This is the concrete application of
|
|
310
|
+
cp2077.anims.method.validate-a-gate-against-known-good-and-known-bad to screen-space rendering
|
|
311
|
+
gates specifically.
|
|
312
|
+
- id: cp2077.anims.method.instrument-the-game-dont-infer-from-screenshots
|
|
313
|
+
claim: When an in-game pose or transform is in question, read it directly with a lightweight in-game
|
|
314
|
+
logging probe (for example, logging a bone's position and axes in FPP-camera space at a fixed
|
|
315
|
+
cadence) rather than inferring it from screenshots; three separate game launches were spent
|
|
316
|
+
reading a weapon's pose off screenshots and getting the answer wrong each time, before this
|
|
317
|
+
rule was adopted.
|
|
318
|
+
status: inferred
|
|
319
|
+
source: ModWright research
|
|
320
|
+
tags:
|
|
321
|
+
- working-method
|
|
322
|
+
- runtime-probe
|
|
323
|
+
- screenshot-inference
|
|
324
|
+
- instrumentation
|
|
325
|
+
detail: The probe technique this rule refers to logs the weapon's origin and three axes in FPP
|
|
326
|
+
camera space via a direct transform call, at a fixed sample rate, over a fixed post-trigger
|
|
327
|
+
window.
|
|
328
|
+
- id: cp2077.anims.method.grep-anim-feature-source-in-redmod-scripts
|
|
329
|
+
claim: To find WHICH script raises a given animation feature's weight (for example, proving that
|
|
330
|
+
melee FPP arms are pure FK by finding who raises the ikLeftArm feature), grep
|
|
331
|
+
tools\redmod\scripts for the feature name directly rather than trying to infer the answer from
|
|
332
|
+
the animgraph's node structure alone.
|
|
333
|
+
status: inferred
|
|
334
|
+
source: ModWright research
|
|
335
|
+
tags:
|
|
336
|
+
- working-method
|
|
337
|
+
- anim-feature
|
|
338
|
+
- grep
|
|
339
|
+
- redmod-scripts
|
|
340
|
+
- ground-truth
|
|
341
|
+
detail: Concretely settled that ikLeftArm is raised only for climbing
|
|
342
|
+
(locomotionTransitions.script), confirming that the melee left-arm IK constraint node lives in
|
|
343
|
+
the Vault state and is inert in melee.
|
|
344
|
+
- id: cp2077.anims.method.gate-a-clip-against-the-specific-proven-impossible-approach
|
|
345
|
+
claim: Once an approach to a problem has been proven structurally impossible (for example, that no
|
|
346
|
+
single ambient-sway additive can serve every base pose without a base-dependent conjugation
|
|
347
|
+
once the shoulders above the arms are unreachable), encode a build-time GATE that asserts the
|
|
348
|
+
disproven approach was not silently reintroduced, rather than relying on it simply not being
|
|
349
|
+
re-attempted by memory.
|
|
350
|
+
status: inferred
|
|
351
|
+
source: ModWright research
|
|
352
|
+
tags:
|
|
353
|
+
- working-method
|
|
354
|
+
- proven-impossible
|
|
355
|
+
- regression-gate
|
|
356
|
+
- engine-limit
|
|
357
|
+
detail: 'Concrete example: the block-building script asserts that
|
|
358
|
+
Spine3/Spine2/Spine1/Spine/Hips/LeftShoulder/RightShoulder remain at identity on every touched
|
|
359
|
+
sway clip, specifically because the "sway survived" check alone (which Blender honors even on
|
|
360
|
+
Spine3) could not have caught a regression back into the disproven Spine3-carrier approach.'
|