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,174 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: vfx.materials
|
|
3
|
+
title: VFX effects, MultiEffectInfo, materials, and custom models
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.vfx.spell-effect-fields-hold-mei
|
|
6
|
+
claim: Spell effect fields (PrepareEffect/CastEffect/TargetEffect/BeamEffect/…) hold a
|
|
7
|
+
MultiEffectInfo UUID, not an effect resource ID. Each MEI is its own tiny .lsf at
|
|
8
|
+
Public/<Mod>/MultiEffectInfos/<uuid>.lsf (filename = UUID); custom MEIs in a mod's own folder
|
|
9
|
+
are picked up.
|
|
10
|
+
status: verified
|
|
11
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
12
|
+
source: ModWright field verification
|
|
13
|
+
tags:
|
|
14
|
+
- vfx
|
|
15
|
+
- multieffectinfo
|
|
16
|
+
- mei
|
|
17
|
+
- spells
|
|
18
|
+
detail: Vanilla ships ~4000 MEIs in Shared.pak.
|
|
19
|
+
- id: bg3.vfx.mei-structure
|
|
20
|
+
claim: 'A MEI (region MultiEffectInfos) holds ≥1 EffectInfo child: EffectResourceGuid (the actual
|
|
21
|
+
effect), BindSourceTo/BindTargetTo (SourceEntity/TargetEntity), SourceBone/TargetBone (e.g.
|
|
22
|
+
Dummy_R_HandFX → Dummy_BodyFX), Pivot, UseDistance (drives an lsfx "Distance To Target" input
|
|
23
|
+
— this is how beams stretch caster→victim), Min/MaxDistance, DetachSource/Target.'
|
|
24
|
+
status: verified
|
|
25
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
26
|
+
source: ModWright field verification
|
|
27
|
+
tags:
|
|
28
|
+
- vfx
|
|
29
|
+
- mei
|
|
30
|
+
- structure
|
|
31
|
+
- bones
|
|
32
|
+
detail: "UseDistance snaps a beam to the source→target distance, which is a real constraint on
|
|
33
|
+
animating beam length: a class mod's roll-out attempts animated the Model's Uniform Scale keys
|
|
34
|
+
instead, and its notes record the open possibility that outward growth cannot be keyframed
|
|
35
|
+
while UseDistance drives length."
|
|
36
|
+
- id: bg3.vfx.effectresource-in-bank
|
|
37
|
+
claim: "EffectResourceGuid matches a Resource node ID in an EffectBank _merged.lsf (vanilla:
|
|
38
|
+
Public/Shared/Content/Assets/Effects/Effects/**/[PAK]_*/_merged.lsf; mods can add their own
|
|
39
|
+
bank anywhere under Public/<Mod>/Content/**/[PAK]_*/_merged.lsf). The bank node is metadata
|
|
40
|
+
only (EffectName, bounds, Duration) plus SourceFile → the .lsfx payload path inside the pak."
|
|
41
|
+
status: verified
|
|
42
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
43
|
+
source: ModWright field verification
|
|
44
|
+
tags:
|
|
45
|
+
- vfx
|
|
46
|
+
- effectbank
|
|
47
|
+
- resource
|
|
48
|
+
- metadata
|
|
49
|
+
detail: The engine merges all banks from all loaded mods globally, so GUIDs resolve cross-pak.
|
|
50
|
+
- id: bg3.vfx.lsfx-recoloring
|
|
51
|
+
claim: ".lsfx files (Effects.pak, Public/Shared/Assets/Effects/Effects_Banks/**) are plain LSF:
|
|
52
|
+
divine convert-resource round-trips lsfx↔lsx. Colours are editable fvec4 keyframes under
|
|
53
|
+
Properties (Model Appearance.Color = mesh tint multiplier, Particle.Appearance.Color =
|
|
54
|
+
particle gradient). Recolor = clone lsfx + edit fvec4s + own EffectBank entry + own MEI +
|
|
55
|
+
point the spell field at the new MEI UUID."
|
|
56
|
+
status: verified
|
|
57
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
58
|
+
source: ModWright field verification
|
|
59
|
+
tags:
|
|
60
|
+
- vfx
|
|
61
|
+
- lsfx
|
|
62
|
+
- recoloring
|
|
63
|
+
- colors
|
|
64
|
+
detail: Scale/rotation keys are editable the same way — a class mod rewrote a garrote Model's "Scale
|
|
65
|
+
And Rotation.Uniform Scale" keys (normalized time, pivot = Source hand) to change the wire's
|
|
66
|
+
retract timing, regenerating the lsfx in place with zero GUID/stat/bank changes.
|
|
67
|
+
- id: bg3.vfx.beam-effect-field
|
|
68
|
+
claim: A beam lives ONLY in the BeamEffect field — copying Prepare/Cast/Target GUIDs from a beam
|
|
69
|
+
spell (e.g. Target_ThornWhip) misses the beam entirely. Also, AttackSpellOverride basic
|
|
70
|
+
attacks run the override's mechanics but fire NONE of its cast VFX/animation; only a real cast
|
|
71
|
+
(e.g. an UnlockSpell'ed action) plays them.
|
|
72
|
+
status: verified
|
|
73
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
74
|
+
source: ModWright field verification
|
|
75
|
+
tags:
|
|
76
|
+
- vfx
|
|
77
|
+
- beam
|
|
78
|
+
- attackspelloverride
|
|
79
|
+
- animation
|
|
80
|
+
detail: This is the gotcha behind "I copied a beam spell's effects and got no beam".
|
|
81
|
+
- id: bg3.vfx.lslib-meta-headers
|
|
82
|
+
claim: Keep the same lslib_meta string (e.g. "v1,bswap_guids,…") when hand-authoring lsx for divine
|
|
83
|
+
conversion. The GUID strings displayed in lsx are the logical, game-visible GUIDs — use
|
|
84
|
+
identical strings across MEI, bank and stats and everything stays consistent.
|
|
85
|
+
status: verified
|
|
86
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
87
|
+
source: ModWright field verification
|
|
88
|
+
tags:
|
|
89
|
+
- vfx
|
|
90
|
+
- lslib
|
|
91
|
+
- meta
|
|
92
|
+
- guids
|
|
93
|
+
detail: "Practical consequence: you can copy a GUID out of one converted lsx and paste it into
|
|
94
|
+
another without worrying about byte order, as long as the meta string is preserved on the
|
|
95
|
+
round-trip."
|
|
96
|
+
- id: bg3.materials.no-custom-base-material
|
|
97
|
+
claim: "There is no standalone material registry: MaterialBank is a region inside the same
|
|
98
|
+
_merged.lsf bank files that hold VisualBank (Public/<ns>/Content/**/[PAK]_*/_merged.lsf), and
|
|
99
|
+
one merged file can hold VirtualTextureBank, PhysicsBank, MaterialBank, TextureBank and
|
|
100
|
+
VisualBank side by side. A new BASE material cannot be authored without the Toolkit, because
|
|
101
|
+
each base needs compiled per-platform shaders (.bshd/.shd) beside the .lsf — so mods recolor
|
|
102
|
+
by registering a new INSTANCE of a vanilla base."
|
|
103
|
+
status: inferred
|
|
104
|
+
source: ModWright research
|
|
105
|
+
tags:
|
|
106
|
+
- materials
|
|
107
|
+
- materialbank
|
|
108
|
+
- base
|
|
109
|
+
- instance
|
|
110
|
+
detail: "The engine merges all banks from all loaded mods globally, so GUIDs resolve
|
|
111
|
+
cross-pak/cross-mod. Worked example from the notes: MaterialID 67605e13-…
|
|
112
|
+
(WPN_HUM_Warpick_A_0) is registered in
|
|
113
|
+
Shared.pak:Public/Shared/Content/Assets/Weapons/[PAK]_Humans/_merged.lsf."
|
|
114
|
+
- id: bg3.materials.instance-recipe
|
|
115
|
+
claim: "A MaterialBank Resource node is a material INSTANCE: ID (FixedString GUID = what
|
|
116
|
+
VisualBank's MaterialID references), Name, MaterialType (uint8; copy from a vanilla instance
|
|
117
|
+
of the same base — 4 = VT weapon, 27 = Glass_Glow, 5 = GM staff), DiffusionProfileUUID,
|
|
118
|
+
SourceFile = path to a base material .lsf under Public/Shared/Assets/Materials/…, plus
|
|
119
|
+
children (ScalarParameters / Vector3Parameters / Texture2DParameters /
|
|
120
|
+
VirtualTextureParameters) that override the base's parameters (ParameterName must match the
|
|
121
|
+
base's exactly; Enabled=True to take effect)."
|
|
122
|
+
status: inferred
|
|
123
|
+
source: ModWright research
|
|
124
|
+
tags:
|
|
125
|
+
- materials
|
|
126
|
+
- instance
|
|
127
|
+
- parameters
|
|
128
|
+
- customization
|
|
129
|
+
detail: The base material .lsf contains NO GUID (region Material, no ID attribute) — the bank entry
|
|
130
|
+
is the sole GUID→file mapping. All bank IDs are FixedString, so there is no bswap_guids
|
|
131
|
+
concern.
|
|
132
|
+
- id: bg3.materials.glow-capable-bases
|
|
133
|
+
claim: "Glow-capable bases: Base_Glass_Glow (params GlowColor fvec3 + GlowIntensity, classic
|
|
134
|
+
textures) versus the *_GM_VT family (the param is Glow_Color — with an underscore — plus
|
|
135
|
+
glowmap/Gradients VT textures; this is what vanilla elemental weapons use, e.g.
|
|
136
|
+
WPN_HUM_Glaive_A_2_2G_GM_Thunder). Base_VT (the plain weapon base) has no glow params at all."
|
|
137
|
+
status: inferred
|
|
138
|
+
source: ModWright research
|
|
139
|
+
tags:
|
|
140
|
+
- materials
|
|
141
|
+
- glow
|
|
142
|
+
- bases
|
|
143
|
+
- parameters
|
|
144
|
+
detail: The parameter name differs by base family (GlowColor vs Glow_Color), and ParameterName must
|
|
145
|
+
match the base exactly for an instance override to take effect.
|
|
146
|
+
- id: bg3.materials.clone-recipe
|
|
147
|
+
claim: "Cleanest recipe for a recolour: clone a full vanilla instance node of the target base (e.g.
|
|
148
|
+
the Lathander crystal 4dd462e8-d31e-ca0d-e3db-6acf40fef4ec for Base_Glass_Glow, in
|
|
149
|
+
Assets/Puzzle/[PAK]_Lathander/_merged.lsf), keep its texture GUIDs and DiffusionProfileUUID
|
|
150
|
+
verbatim (they are globally registered), give it a fresh v4 GUID + Name, retint GlowColor,
|
|
151
|
+
then point VisualBank Objects.MaterialID (every LOD row) at the new GUID. No meta.lsx
|
|
152
|
+
dependency changes are needed — Shared.pak and Materials.pak are implicit."
|
|
153
|
+
status: unverified
|
|
154
|
+
source: ModWright research
|
|
155
|
+
tags:
|
|
156
|
+
- materials
|
|
157
|
+
- recoloring
|
|
158
|
+
- recipe
|
|
159
|
+
detail: The same clone-and-retint shape is written up in more depth for armour/gloves in a class
|
|
160
|
+
mod's research notes, also unexecuted. Treat it as the planned route, not a proven one, and
|
|
161
|
+
pair the first attempt with a diagnostic.
|
|
162
|
+
- id: bg3.materials.divine-bracket-workaround
|
|
163
|
+
claim: Divine.exe convert-resource -s chokes on literal [PAK] brackets in the source path (glob
|
|
164
|
+
expansion) — copy the file to a bracket-free path first.
|
|
165
|
+
status: verified
|
|
166
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
167
|
+
source: ModWright field verification
|
|
168
|
+
tags:
|
|
169
|
+
- materials
|
|
170
|
+
- divine
|
|
171
|
+
- paths
|
|
172
|
+
- brackets
|
|
173
|
+
detail: "Related PowerShell trap when grepping the same paths: -Path treats [PAK]-style brackets as
|
|
174
|
+
wildcards, so use -LiteralPath or [System.IO.File]::ReadAllText."
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: visuals.characterfix
|
|
3
|
+
title: Fixing invisible / default-appearance Character Visuals in the Toolkit
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.visuals.characterfix.base-dropdown-must-match-animation-set
|
|
6
|
+
claim: In the Toolkit's Character Visual editor, the "_Base" selected in the first (leftmost)
|
|
7
|
+
drop-down must be set to whatever animation-set base the character actually uses, or the
|
|
8
|
+
visual's equipment slots won't resolve correctly.
|
|
9
|
+
status: community
|
|
10
|
+
source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 1
|
|
11
|
+
tags:
|
|
12
|
+
- toolkit
|
|
13
|
+
- character-visuals
|
|
14
|
+
- invisible
|
|
15
|
+
- animation-set
|
|
16
|
+
- id: bg3.visuals.characterfix.filter-must-include-own-base-again
|
|
17
|
+
claim: 'After clicking Filter in the Character Visual editor, the "_Base" must be added a second
|
|
18
|
+
time inside the filter window itself: "search and double click to add your _Base again in the
|
|
19
|
+
first window". The outer drop-down and the filter window are separate settings, both
|
|
20
|
+
required.'
|
|
21
|
+
status: community
|
|
22
|
+
source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, steps 2-3
|
|
23
|
+
tags:
|
|
24
|
+
- toolkit
|
|
25
|
+
- character-visuals
|
|
26
|
+
- filter
|
|
27
|
+
- silent-failure
|
|
28
|
+
- id: bg3.visuals.characterfix.filters-use-naming-prefix
|
|
29
|
+
claim: Additional Filters entries in the Character Visual editor should reflect the naming prefix of
|
|
30
|
+
whatever assets you want selectable for that character — only assets whose names match an
|
|
31
|
+
active filter prefix will show up as pickable options later in the fix.
|
|
32
|
+
status: community
|
|
33
|
+
source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 4
|
|
34
|
+
tags:
|
|
35
|
+
- toolkit
|
|
36
|
+
- character-visuals
|
|
37
|
+
- filter
|
|
38
|
+
- naming-convention
|
|
39
|
+
- id: bg3.visuals.characterfix.body-gr2-goes-in-lower-right-slot
|
|
40
|
+
claim: The character's body .GR2 mesh goes into a separate field of the Filter window — "To the
|
|
41
|
+
lower right by 1, add the body gr2 by searching and double clicking" — not into the "_Base" or
|
|
42
|
+
prefix-filter entries.
|
|
43
|
+
status: community
|
|
44
|
+
source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 5
|
|
45
|
+
tags:
|
|
46
|
+
- toolkit
|
|
47
|
+
- character-visuals
|
|
48
|
+
- body-mesh
|
|
49
|
+
- id: bg3.visuals.characterfix.save-close-required-before-picking-body
|
|
50
|
+
claim: The Filter window must be saved and closed (Save & Close) before the newly filtered body
|
|
51
|
+
option becomes selectable in the Character Visual editor's lower body drop-down.
|
|
52
|
+
status: community
|
|
53
|
+
source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, steps 6-7
|
|
54
|
+
tags:
|
|
55
|
+
- toolkit
|
|
56
|
+
- character-visuals
|
|
57
|
+
- save
|
|
58
|
+
- ordering
|
|
59
|
+
- id: bg3.visuals.characterfix.missing-slots-added-with-plus
|
|
60
|
+
claim: "Any equipment slots the character is missing at the bottom of the Character Visual editor
|
|
61
|
+
must be added manually with the \"+\" button: \"At the bottom, add any slots you need and
|
|
62
|
+
don't have with the +. Anything with prefixes matching your filters and matching the slot
|
|
63
|
+
should show here now!\""
|
|
64
|
+
status: community
|
|
65
|
+
source: wiki.bg3.community/Tutorials/Toolkit/charvis-fix, step 8
|
|
66
|
+
tags:
|
|
67
|
+
- toolkit
|
|
68
|
+
- character-visuals
|
|
69
|
+
- slots
|
|
70
|
+
- filter
|
|
71
|
+
detail: "This is the fix for the symptom the page is titled after: a character showing as invisible
|
|
72
|
+
or with a default/fallback appearance because its Character Visual has no filtered, matching
|
|
73
|
+
options wired up for one or more slots."
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: animations.anims
|
|
3
|
+
title: Linking a custom .anims file into a scene's cinematic animation sets
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.animations.anims.three-part-index-linked-system
|
|
6
|
+
claim: "Playing a custom animation in a scene is \"a three-part system\": the Resource List
|
|
7
|
+
(`resourceReferences`) naming the external `.anims` files and the animations used from them;
|
|
8
|
+
the actor's \"Permissions\" (`playerActors` / `actors`) saying which animation sets it may
|
|
9
|
+
use; and the Event in the sceneGraph that plays one CName. \"The link between these three
|
|
10
|
+
parts is a simple index number (ID).\""
|
|
11
|
+
status: community
|
|
12
|
+
source: wiki.redmodding.org "Adding Animations", unheaded introduction and the "library" analogy
|
|
13
|
+
that follows it
|
|
14
|
+
tags:
|
|
15
|
+
- animation
|
|
16
|
+
- scene
|
|
17
|
+
- cinematicanimsets
|
|
18
|
+
- index-linked
|
|
19
|
+
detail: "Field-name caution for a validator: the page's introduction and \"Tying It All Together\"
|
|
20
|
+
write `resourceReferences`, while steps 1 and 2 write `resouresReferences`; the introduction's
|
|
21
|
+
spelling is the one used throughout these facts."
|
|
22
|
+
- id: cp2077.animations.anims.cinematicanimsets-depotpath-field
|
|
23
|
+
claim: A new `.anims` file is registered by adding an entry to
|
|
24
|
+
`resourceReferences.cinematicAnimSets` and setting its animation file path, "in the JSON, this
|
|
25
|
+
is `asyncAnimSet.DepotPath`". Entries are indexed from 0 upward and the index is reused in the
|
|
26
|
+
next two steps.
|
|
27
|
+
status: community
|
|
28
|
+
source: 'wiki.redmodding.org "Adding Animations", section "Step 1: Add the Animation Resource File"'
|
|
29
|
+
tags:
|
|
30
|
+
- animation
|
|
31
|
+
- scene
|
|
32
|
+
- cinematicanimsets
|
|
33
|
+
- depotpath
|
|
34
|
+
- syntax
|
|
35
|
+
detail: The page's example path is
|
|
36
|
+
`base\animations\npc\generic_characters\male_average\interactive_scene\generic_average_male_transitions.anims`.
|
|
37
|
+
- id: cp2077.animations.anims.cinematicanimnames-index-must-match
|
|
38
|
+
claim: An entry must be added to `resourceReferences.cinematicAnimNames` "at the exact same index"
|
|
39
|
+
as its `cinematicAnimSets` entry — "This is the most critical part. The index of
|
|
40
|
+
`cinematicAnimSets` and `cinematicAnimNames` must match for the same animation set." Inside
|
|
41
|
+
it, the `animationNames` array lists the CName of each animation to be called from that
|
|
42
|
+
`.anims` file.
|
|
43
|
+
status: community
|
|
44
|
+
source: 'wiki.redmodding.org "Adding Animations", section "Step 2: List the Animation Names"'
|
|
45
|
+
tags:
|
|
46
|
+
- animation
|
|
47
|
+
- scene
|
|
48
|
+
- cinematicanimnames
|
|
49
|
+
- index-match
|
|
50
|
+
- gotcha
|
|
51
|
+
- id: cp2077.animations.anims.actor-permission-is-index-only
|
|
52
|
+
claim: 'An actor is granted an animation set by adding an entry to its own animation-set array —
|
|
53
|
+
`bodyCinematicAnimSets` (full-body cinematic), `facialCinematicAnimSets` (facial expressions)
|
|
54
|
+
or `gameplayAnimSets` — where "This new entry will have a single, important field: `id`", set
|
|
55
|
+
to the shared index. The actor entry carries no resource reference of its own.'
|
|
56
|
+
status: community
|
|
57
|
+
source: "wiki.redmodding.org \"Adding Animations\", section \"Step 3: Give the Actor 'Permission' to
|
|
58
|
+
Use the Animation Set\""
|
|
59
|
+
tags:
|
|
60
|
+
- animation
|
|
61
|
+
- scene
|
|
62
|
+
- playeractors
|
|
63
|
+
- bodycinematicanimsets
|
|
64
|
+
- syntax
|
|
65
|
+
- id: cp2077.animations.anims.playeractors-vs-actors-array
|
|
66
|
+
claim: "Where to find the actor: \"if it's the player then the `playerActors`[0] or if it's a
|
|
67
|
+
specific actor, then find the entry in the `actors` array\"."
|
|
68
|
+
status: community
|
|
69
|
+
source: "wiki.redmodding.org \"Adding Animations\", section \"Step 3: Give the Actor 'Permission' to
|
|
70
|
+
Use the Animation Set\" (step 1)"
|
|
71
|
+
tags:
|
|
72
|
+
- animation
|
|
73
|
+
- scene
|
|
74
|
+
- playeractors
|
|
75
|
+
- actors
|
|
76
|
+
- syntax
|
|
77
|
+
- id: cp2077.animations.anims.rule-generalises-to-other-animset-types
|
|
78
|
+
claim: '"Although the guide specifically mentions `bodyCinematicAnimSets`, the same principle
|
|
79
|
+
applies for other animSets as well such as `lipsyncAnimSets`, `gameplayAnimSets`."'
|
|
80
|
+
status: community
|
|
81
|
+
source: wiki.redmodding.org "Adding Animations", info hint at the top of the page
|
|
82
|
+
tags:
|
|
83
|
+
- animation
|
|
84
|
+
- scene
|
|
85
|
+
- lipsyncanimsets
|
|
86
|
+
- gameplayanimsets
|
|
87
|
+
- index-match
|
|
88
|
+
- id: cp2077.animations.anims.runtime-resolution-order
|
|
89
|
+
claim: "At runtime the engine resolves a scene animation by index alone: it sees the actor is
|
|
90
|
+
playing the animation, checks the actor's `bodyCinematicAnimSets` for which animation set ids
|
|
91
|
+
it has, uses that id \"as an index to find the .anims file in
|
|
92
|
+
resourceReferences.cinematicAnimSets\", loads that file and plays the specified CName."
|
|
93
|
+
status: community
|
|
94
|
+
source: 'wiki.redmodding.org "Adding Animations", section "Tying It All Together: Playing the
|
|
95
|
+
animation"'
|
|
96
|
+
tags:
|
|
97
|
+
- animation
|
|
98
|
+
- scene
|
|
99
|
+
- runtime-resolution
|
|
100
|
+
detail: "Renamed from cp2077.animations.anims.runtime-resolution-has-no-validation on 2026-09-07:
|
|
101
|
+
the page describes the resolution order but says nothing about what a wrong index does or
|
|
102
|
+
whether WolvenKit validates it, so the previous claim's \"fails silently rather than raising a
|
|
103
|
+
WolvenKit-side validation error\" was removed as unsourced. The `scnPlaySkAnimEvent` in the
|
|
104
|
+
scene graph selects the animation by CName, e.g. `lie_ground__r_elbow_on_ground__01`."
|
|
105
|
+
- id: cp2077.animations.anims.community-anim-lookup-spreadsheet
|
|
106
|
+
claim: 'For valid animation CNames and their durations the guide points at a community Google Sheets
|
|
107
|
+
lookup: "Use this anim look up sheet to search for specific anim names, duration etc"
|
|
108
|
+
(docs.google.com/spreadsheets/d/1YxZf90FzvDfJcny94kTSed46ItH_0VyZr76rWtgEAxc).'
|
|
109
|
+
status: community
|
|
110
|
+
source: 'wiki.redmodding.org "Adding Animations", success hint under "Step 2: List the Animation
|
|
111
|
+
Names"'
|
|
112
|
+
tags:
|
|
113
|
+
- animation
|
|
114
|
+
- scene
|
|
115
|
+
- tooling
|
|
116
|
+
- community-resource
|
|
117
|
+
detail: "Corrected 2026-09-07: the previous claim's rationale, that `.anims` files are not browsable
|
|
118
|
+
by animation name from WolvenKit's scene editor, is not stated on the page."
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: anims.archivexl
|
|
3
|
+
title: ArchiveXL animation config, resource patching, and the upstream fix for custom per-weapon FPP
|
|
4
|
+
anim sets
|
|
5
|
+
facts:
|
|
6
|
+
- id: cp2077.anims.archivexl.animations-config-schema
|
|
7
|
+
claim: An ArchiveXL `animations:` .xl config entry supports `entity` (a scalar path or a list of
|
|
8
|
+
entity paths), `set` (the .anims resource path to mount), `priority` (an integer), and `vars`
|
|
9
|
+
(a list of AnimWrapper variable names gating when the set mounts).
|
|
10
|
+
status: inferred
|
|
11
|
+
source: ModWright research
|
|
12
|
+
tags:
|
|
13
|
+
- animations-config
|
|
14
|
+
- xl-schema
|
|
15
|
+
- entity
|
|
16
|
+
- set
|
|
17
|
+
- priority
|
|
18
|
+
- vars
|
|
19
|
+
detail: Described from the context of filing the two parser-bug issues below, which specifically
|
|
20
|
+
exercise the `entity`, `set`, `priority` and `vars` keys against
|
|
21
|
+
v1.27.0/v1.27.1/v1.28.0-beta.1.
|
|
22
|
+
- id: cp2077.anims.archivexl.animconfig-vars-parser-bug
|
|
23
|
+
claim: "ArchiveXL's AnimationsConfig::LoadYAML (src/App/Extensions/Animation/Config.cpp, line 82,
|
|
24
|
+
present in v1.27.0, v1.27.1 and v1.28.0-beta.1) has a parser bug: the loop over an entry's
|
|
25
|
+
`vars:` list tests `variablesNode.IsScalar()` (the SEQUENCE node) instead of
|
|
26
|
+
`variableNode.IsScalar()` (the item), so the condition is always false and entry.variables
|
|
27
|
+
stays empty — an `animations:` entry declared with `vars:` is injected with an EMPTY
|
|
28
|
+
variableNames list and mounts unconditionally instead of being variable-gated."
|
|
29
|
+
status: verified
|
|
30
|
+
verified_on: "2.3"
|
|
31
|
+
source: ModWright field verification
|
|
32
|
+
tags:
|
|
33
|
+
- archivexl
|
|
34
|
+
- parser-bug
|
|
35
|
+
- vars
|
|
36
|
+
- animwrapper-gating
|
|
37
|
+
- config-cpp
|
|
38
|
+
detail: "Practical effect for a set that overrides shared animation names: this bug leaks the
|
|
39
|
+
override to every weapon/state using those clip names, since the intended variable gate never
|
|
40
|
+
takes effect. It went unnoticed by photo-mode pose packs because they do not use `vars:`. Fix
|
|
41
|
+
(one line): test `variableNode.IsScalar()` instead of `variablesNode.IsScalar()`."
|
|
42
|
+
- id: cp2077.anims.archivexl.animconfig-entity-list-parser-bug
|
|
43
|
+
claim: "The same Config.cpp file (line 50) has a second parser bug: its `else if` branch for the
|
|
44
|
+
`entity:` field repeats the same condition as the `if` branch above it
|
|
45
|
+
(`entityNode.IsScalar()`) instead of testing `entityNode.IsSequence()`, so a LIST form of
|
|
46
|
+
`entity:` (multiple entity paths in one `animations:` entry) never parses and the whole entry
|
|
47
|
+
is rejected as malformed."
|
|
48
|
+
status: verified
|
|
49
|
+
verified_on: "2.3"
|
|
50
|
+
source: ModWright field verification
|
|
51
|
+
tags:
|
|
52
|
+
- archivexl
|
|
53
|
+
- parser-bug
|
|
54
|
+
- entity
|
|
55
|
+
- list-form
|
|
56
|
+
- config-cpp
|
|
57
|
+
detail: "Fix (one line): change the `else if` test from `entityNode.IsScalar()` to
|
|
58
|
+
`entityNode.IsSequence()`."
|
|
59
|
+
- id: cp2077.anims.archivexl.pr-merged-upstream
|
|
60
|
+
claim: A pull request fixing both Config.cpp parser bugs (the `vars` drop and the unreachable
|
|
61
|
+
list-form `entity:`) was submitted to psiberx/cp2077-archive-xl and was accepted and merged
|
|
62
|
+
into main on 2026-08-20.
|
|
63
|
+
status: inferred
|
|
64
|
+
source: ModWright research
|
|
65
|
+
tags:
|
|
66
|
+
- archivexl
|
|
67
|
+
- pull-request
|
|
68
|
+
- upstream
|
|
69
|
+
- merged
|
|
70
|
+
- animations-config
|
|
71
|
+
detail: "Downgraded from verified to community by review: the merge is an upstream repository event
|
|
72
|
+
reported by the project's own notes, not something observed in the engine here, and it has not
|
|
73
|
+
been re-checked against psiberx/cp2077-archive-xl. The mod does not depend on the fix landing
|
|
74
|
+
in a release — it ships via the ResourcePatch route instead (see
|
|
75
|
+
cp2077.anims.sets.resourcepatch-mounting-route) — but once an ArchiveXL release ships the fix,
|
|
76
|
+
`animations:` becomes a viable simpler alternative mounting method for a per-weapon FPP anim
|
|
77
|
+
set. Update 2026-09-07: both fixes are present in ArchiveXL v1.27.3 (source read, not tested
|
|
78
|
+
in engine, hence inferred). `animations:` with `vars:` and list-form `entity:` should work
|
|
79
|
+
from 1.27.3; the ResourcePatch route remains what the shipped mod uses and the only one
|
|
80
|
+
verified in game."
|
|
81
|
+
- id: cp2077.anims.archivexl.local-fix-dlls-used-for-testing
|
|
82
|
+
claim: "Before filing the upstream PR, the project built and locally tested three variant DLLs
|
|
83
|
+
against the stock v1.27.1 baseline: a stock reference build (ArchiveXL-1.27.1-stock.dll), a
|
|
84
|
+
build with only the two Config.cpp parser fixes applied (ArchiveXL-1.27.1-fix1.dll /
|
|
85
|
+
ArchiveXL-fix1-animconfig.dll), and a build additionally patching the
|
|
86
|
+
ResourcePatch/Extension.cpp header gate that was suspected (later retracted) to be a second
|
|
87
|
+
bug (ArchiveXL-1.27.1-fix2.dll / ArchiveXL-fix2-resourcepatch.dll)."
|
|
88
|
+
status: inferred
|
|
89
|
+
source: ModWright research
|
|
90
|
+
tags:
|
|
91
|
+
- archivexl
|
|
92
|
+
- local-build
|
|
93
|
+
- testing
|
|
94
|
+
- fix-dll
|
|
95
|
+
- resourcepatch
|
|
96
|
+
detail: Deploying a locally built test DLL requires backing up the original 1.27.1
|
|
97
|
+
red4ext\plugins\ArchiveXL\ArchiveXL.dll first and closing the game before overwriting it.
|
|
98
|
+
- id: cp2077.anims.archivexl.resourcepatch-header-issue-retracted
|
|
99
|
+
claim: An initially suspected ArchiveXL bug — that ResourcePatch component patches onto entity
|
|
100
|
+
templates silently skip base-game-cooked (base\) templates while applying fine to Phantom
|
|
101
|
+
Liberty (ep1\) templates, because of an early return when compiledDataHeader.IsEmpty() — was
|
|
102
|
+
investigated as a candidate "Fix 2" but the observed behavior was later found to be
|
|
103
|
+
MISTARGETING on the mod's own part, not an ArchiveXL bug; no issue was filed for it, and any
|
|
104
|
+
posted draft was to be retracted.
|
|
105
|
+
status: contradicted
|
|
106
|
+
source: ModWright research
|
|
107
|
+
tags:
|
|
108
|
+
- archivexl
|
|
109
|
+
- resourcepatch
|
|
110
|
+
- retracted
|
|
111
|
+
- mistargeting
|
|
112
|
+
- dead-belief
|
|
113
|
+
detail: The candidate bug fix (relaxing the early `if (templateHeader.IsEmpty()) return;` gate and
|
|
114
|
+
enabling a commented-out ObjectPackageReader fallback) was never submitted upstream. See
|
|
115
|
+
cp2077.anims.sets.patch-the-ep1-player-ent for the real cause (the mod's own mistargeting of
|
|
116
|
+
the base\ player entity on a Phantom Liberty install), which supersedes this.
|
|
117
|
+
- id: cp2077.anims.archivexl.animwrapper-raised-lowered-from-redscript
|
|
118
|
+
claim: The AnimWrapper variable that gates a custom per-weapon FPP anim set is raised and lowered
|
|
119
|
+
from redscript on equip/holster events, wrapping PlayerPuppet.OnItemAddedToSlot /
|
|
120
|
+
OnItemRemovedFromSlot, gated on the WeaponRight slot plus a custom weapon tag; this
|
|
121
|
+
registration technique is independent of the `animations:` ArchiveXL config feature entirely.
|
|
122
|
+
status: verified
|
|
123
|
+
source: ModWright field verification
|
|
124
|
+
tags:
|
|
125
|
+
- animwrapper
|
|
126
|
+
- redscript
|
|
127
|
+
- onitemadded
|
|
128
|
+
- equip-holster
|
|
129
|
+
- gating
|
|
130
|
+
detail: Verified in game via CET console (a mod's own debug call to disable its dev harness, then
|
|
131
|
+
holster/redraw to confirm the redscript path alone keeps the set gated correctly).
|
|
132
|
+
- id: cp2077.anims.archivexl.melee-animation-randomizer-steering-pattern
|
|
133
|
+
claim: A dissected community mod ("Melee Animation Randomizer", v4 source) demonstrated the pattern
|
|
134
|
+
of steering an animgraph's clip choice at runtime by using @wrapMethod on
|
|
135
|
+
Melee*AttackEvents.OnEnter to rewrite AnimFeature_MeleeSlotData(attackType, comboNumber) AFTER
|
|
136
|
+
the vanilla call runs, letting a mounted set play any addressable entry for any state; the
|
|
137
|
+
same mod also demonstrated a startup/active/recover speed-blend between the mechanical
|
|
138
|
+
(record) and native (visual) timing, a trailAttackSide fix, and an NPC hit-reaction fix via
|
|
139
|
+
HitReactionComponent.EvaluateHit attackDefinition swap.
|
|
140
|
+
status: community
|
|
141
|
+
source: ModWright research
|
|
142
|
+
tags:
|
|
143
|
+
- community-mod
|
|
144
|
+
- melee-animation-randomizer
|
|
145
|
+
- animsteering-pattern
|
|
146
|
+
- wrapmethod
|
|
147
|
+
detail: This dissected pattern is the direct ancestor of a melee weapon mod's own finisher redirect
|
|
148
|
+
in redscript; a mod reusing the pattern should credit the source mod.
|
|
149
|
+
- id: cp2077.anims.archivexl.archive-changes-need-restart-not-hot-reload
|
|
150
|
+
claim: "TweakXL.Reload() (the CET console hot-reload call) reloads TweakDB yaml only; ArchiveXL
|
|
151
|
+
loads and registers .xl manifest entries (animations config, resource patches, localization,
|
|
152
|
+
factories, streaming) once at game initialization and does NOT re-read them on a tweak reload
|
|
153
|
+
— any archive-side change (a repacked .anims, a changed animations: entry, a resource patch
|
|
154
|
+
edit) needs a repack, a redeploy, and a full game RESTART."
|
|
155
|
+
status: verified
|
|
156
|
+
source: ModWright field verification
|
|
157
|
+
tags:
|
|
158
|
+
- tweakxl-reload
|
|
159
|
+
- archive-restart
|
|
160
|
+
- hot-reload-asymmetry
|
|
161
|
+
- archivexl
|
|
162
|
+
detail: This asymmetry is the main cost driver of the archive-side iteration loop, distinct from and
|
|
163
|
+
slower than the yaml-side loop.
|