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,214 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: archivexl.manifest
|
|
3
|
+
title: archivexl manifest format, streaming blocks, and resource registration
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.archivexl.manifest-top-level-keys
|
|
6
|
+
claim: "archivexl .xl manifest files have three top-level keys: localization (maps language codes to
|
|
7
|
+
localization files), factories (list of factory csv paths), and streaming (defines streaming
|
|
8
|
+
blocks and other resources)."
|
|
9
|
+
status: inferred
|
|
10
|
+
source: ModWright research
|
|
11
|
+
tags:
|
|
12
|
+
- manifest
|
|
13
|
+
- .xl
|
|
14
|
+
- format
|
|
15
|
+
- schema
|
|
16
|
+
detail: Those are the three keys an example weapon-mod manifest uses, not the whole schema —
|
|
17
|
+
ArchiveXL's README also advertises submesh visibility overrides, visual tags on clothing and
|
|
18
|
+
widget spawning, which need other keys documented on its wiki. That manifest in full -
|
|
19
|
+
localization/onscreens/en-us -> mod\<mod>\en-us.json; factories ->
|
|
20
|
+
mod\<mod>\factory_parts.csv; streaming/blocks -> <mod>\all.streamingblock. Note the file
|
|
21
|
+
begins with a UTF-8 BOM.
|
|
22
|
+
- id: cp2077.archivexl.localization-onscreens-json
|
|
23
|
+
claim: The localization.onscreens section maps language codes (e.g., en-us) to json files containing
|
|
24
|
+
localization strings; these strings are registered and available throughout the game via
|
|
25
|
+
LocKey# references.
|
|
26
|
+
status: verified
|
|
27
|
+
verified_on: "2.31"
|
|
28
|
+
source: ModWright field verification
|
|
29
|
+
tags:
|
|
30
|
+
- localization
|
|
31
|
+
- onscreens
|
|
32
|
+
- json
|
|
33
|
+
- lockey
|
|
34
|
+
detail: "Keys shipped by a weapon mod: <Mod>-Name, -Description, -Mod-Description,
|
|
35
|
+
-Gameplay-Description, -Cache-Name. They are referenced as LocKey#<Mod>-Name (capital L, K)
|
|
36
|
+
from TweakDB records and from the case entity's displayName. Some TweakDB fields take the bare
|
|
37
|
+
key instead (displayName: <Mod>-Name on Items.<ModWeapon>)."
|
|
38
|
+
- id: cp2077.archivexl.factories-csv-paths
|
|
39
|
+
claim: The factories section is a list of factory csv file paths that register resource appearance
|
|
40
|
+
mappings; each csv is loaded and its records become available for appearance factory lookups
|
|
41
|
+
throughout the game.
|
|
42
|
+
status: verified
|
|
43
|
+
verified_on: "2.31"
|
|
44
|
+
source: ModWright field verification
|
|
45
|
+
tags:
|
|
46
|
+
- factory
|
|
47
|
+
- csv
|
|
48
|
+
- appearance
|
|
49
|
+
- registration
|
|
50
|
+
detail: One csv is registered, mod\<mod>\factory_parts.csv, and the weapon renders in game through
|
|
51
|
+
it. The record field is appearanceResourceName (not "appearance-resource-name").
|
|
52
|
+
- id: cp2077.archivexl.factory-csv-appearance-mapping
|
|
53
|
+
claim: Factory csv files map an appearance name to the .app resource that supplies it, one row per
|
|
54
|
+
appearance.
|
|
55
|
+
status: inferred
|
|
56
|
+
source: ModWright research
|
|
57
|
+
tags:
|
|
58
|
+
- factory
|
|
59
|
+
- csv
|
|
60
|
+
- schema
|
|
61
|
+
- appearance
|
|
62
|
+
detail: 'Answering the open question this fact used to carry ("actual csv not read"): the columns
|
|
63
|
+
are name, path, shared, and the shipped rows are <mod>_body -> mod\<mod>\<mod>_body.app ->
|
|
64
|
+
false and <Mod>_Weapon -> mod\<mod>\<mod>_weapon.app -> false. There is no "baseAppearance"
|
|
65
|
+
column as the earlier version of this fact guessed. The file is a cooked C2dArray, not plain
|
|
66
|
+
text. What the `shared` flag does is not documented in these sources.'
|
|
67
|
+
- id: cp2077.archivexl.streaming-blocks-path
|
|
68
|
+
claim: The streaming.blocks section is a list of .streamingblock file paths; each block registers
|
|
69
|
+
world sectors and determines when they are loaded during gameplay (always-loaded vs streaming
|
|
70
|
+
distance).
|
|
71
|
+
status: verified
|
|
72
|
+
verified_on: "2.31"
|
|
73
|
+
source: ModWright field verification
|
|
74
|
+
tags:
|
|
75
|
+
- streaming
|
|
76
|
+
- block
|
|
77
|
+
- sector
|
|
78
|
+
- world-placement
|
|
79
|
+
detail: The shipped block is <mod>\all.streamingblock, whose descriptor points at
|
|
80
|
+
<mod>\sectors\<mod>.streamingsector. The mod's earlier notes still name an abandoned
|
|
81
|
+
hand-authored path, mod\<mod>\<mod>.streamingblock.
|
|
82
|
+
- id: cp2077.archivexl.localization-json-format
|
|
83
|
+
claim: archivexl localization json files are not standard .json files but follow the W2RC json
|
|
84
|
+
format with cr2w serialization conventions (no BOM, enum strings as quoted values); the file
|
|
85
|
+
must be named with .json extension and placed relative to the archive root.
|
|
86
|
+
status: unverified
|
|
87
|
+
source: ModWright research
|
|
88
|
+
tags:
|
|
89
|
+
- localization
|
|
90
|
+
- json
|
|
91
|
+
- format
|
|
92
|
+
- cr2w
|
|
93
|
+
detail: "What is sourced: a mod's en-us.source.json is a CR2W json (Header WolvenKitVersion 8.20.0,
|
|
94
|
+
GameVersion 2310, DataType CR2W, ArchiveFileName mod\\<mod>\\en-us.json) holding a
|
|
95
|
+
JsonResource root with localizationPersistenceOnScreenEntries, and it is deserialized to
|
|
96
|
+
binary before packing. The BOM claim and the \"must be relative to the archive root\" claim
|
|
97
|
+
are not stated anywhere; leave unverified."
|
|
98
|
+
- id: cp2077.archivexl.double-extension-json-naming
|
|
99
|
+
claim: Localization files in archive staging are named with double .json extension (e.g.,
|
|
100
|
+
en-us.json.json); this is the convention for deserializable json intermediates in archivexl
|
|
101
|
+
packing.
|
|
102
|
+
status: inferred
|
|
103
|
+
source: ModWright research
|
|
104
|
+
tags:
|
|
105
|
+
- naming
|
|
106
|
+
- convention
|
|
107
|
+
- .json
|
|
108
|
+
- archive
|
|
109
|
+
detail: The resource inside the archive is itself named en-us.json (see the source file's
|
|
110
|
+
ArchiveFileName header), so its CR2W-json form carries a second .json that deserialize strips.
|
|
111
|
+
It is a consequence of the resource's own name, not a marker ArchiveXL looks for; the earlier
|
|
112
|
+
reading of it as a gate ("unmarked .json files in staging are not deserialized") is
|
|
113
|
+
unsupported. Fabricated in-game verified attribution removed.
|
|
114
|
+
- id: cp2077.archivexl.manifest-registers-at-init
|
|
115
|
+
claim: archivexl loads and registers all .xl manifest entries (localization, factories, streaming)
|
|
116
|
+
when the game initializes; TweakXL.Reload() does not reload them — archive changes need a
|
|
117
|
+
repack, a redeploy and a game restart.
|
|
118
|
+
status: verified
|
|
119
|
+
verified_on: "2.31"
|
|
120
|
+
source: ModWright field verification
|
|
121
|
+
tags:
|
|
122
|
+
- manifest
|
|
123
|
+
- load
|
|
124
|
+
- registration
|
|
125
|
+
- hot-reload
|
|
126
|
+
detail: 'Claim corrected: the earlier wording had ArchiveXL registering "when the game initializes
|
|
127
|
+
or when tweakxl.Reload() is called", which contradicts its own detail and the source —
|
|
128
|
+
TweakXL.Reload() reloads TweakDB yaml only. This asymmetry is the main cost of the
|
|
129
|
+
archive-side iteration loop.'
|
|
130
|
+
- id: cp2077.archivexl.streaming-block-descriptor
|
|
131
|
+
claim: A streaming block file (.streamingblock) is a json record containing descriptor entries; each
|
|
132
|
+
descriptor specifies a sector path, category, and level that determine load behavior
|
|
133
|
+
(always-loaded vs streaming distance).
|
|
134
|
+
status: inferred
|
|
135
|
+
source: ModWright research
|
|
136
|
+
tags:
|
|
137
|
+
- streaming-block
|
|
138
|
+
- descriptor
|
|
139
|
+
- sector
|
|
140
|
+
- category
|
|
141
|
+
- level
|
|
142
|
+
detail: Each descriptor carries data.DepotPath (the sector), category, level, questPrefabNodeRef and
|
|
143
|
+
streamingBox. the sector-building script starts from a vanilla AlwaysLoaded descriptor in a
|
|
144
|
+
donor block, repoints it and overwrites category to "Exterior" and level to 1. See
|
|
145
|
+
cp2077.sectors.sector-category-level for the status of that value.
|
|
146
|
+
- id: cp2077.archivexl.manifest.version-floors
|
|
147
|
+
claim: ArchiveXL's README lists its compatibility as Cyberpunk 2077 2.31 and redscript 0.5.31+, and
|
|
148
|
+
its installation step 1 requires RED4ext 1.29.0+ before extracting `ArchiveXL-x.x.x.zip` into
|
|
149
|
+
the Cyberpunk 2077 directory.
|
|
150
|
+
status: community
|
|
151
|
+
source: cp2077-archive-xl/README.md, sections "Getting Started > Compatibility" (game, redscript)
|
|
152
|
+
and "Getting Started > Installation" (RED4ext)
|
|
153
|
+
tags:
|
|
154
|
+
- archivexl
|
|
155
|
+
- version-floor
|
|
156
|
+
- redscript
|
|
157
|
+
- red4ext
|
|
158
|
+
detail: "RELATED: this is a different, later ArchiveXL release than the one
|
|
159
|
+
cp2077.archivexl.manifest-registers-at-init and its siblings were verified against (both cite
|
|
160
|
+
game 2.31, so the axis matches; no contradiction)."
|
|
161
|
+
- id: cp2077.archivexl.manifest.resource-patch-key
|
|
162
|
+
claim: A `.xl` manifest's `resource.patch` key maps a source resource file's depot path to a list of
|
|
163
|
+
target resource file depot paths; at load ArchiveXL merges the source file's content into
|
|
164
|
+
every listed target, without overwriting the target files on disk, so multiple mods can each
|
|
165
|
+
patch the same target without file conflicts.
|
|
166
|
+
status: community
|
|
167
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
168
|
+
for-mod-creators-theory/core-mods-explained/archivexl/archivexl-resource-patching/README.md,
|
|
169
|
+
sections "How do I use this?" and "Why do I need this?"
|
|
170
|
+
tags:
|
|
171
|
+
- archivexl
|
|
172
|
+
- manifest
|
|
173
|
+
- resource-patch
|
|
174
|
+
- .xl
|
|
175
|
+
detail: 'Applies to `.ent`, `.app` and `.mesh` resources ("You can patch pretty much any `.ent`,
|
|
176
|
+
`.app` or `.mesh` file!"). RELATED: this is a manifest key not covered by
|
|
177
|
+
cp2077.archivexl.manifest-top-level-keys, which only documents the
|
|
178
|
+
localization/factories/streaming keys of one weapon-mod manifest — resource is a fourth,
|
|
179
|
+
separate top-level key that manifest does not use.'
|
|
180
|
+
- id: cp2077.archivexl.manifest.resource-patch-per-filetype-limits
|
|
181
|
+
claim: "Resource patching has different field-level limits per target file type: a `.mesh` patch can
|
|
182
|
+
only replace which material an existing appearance references (materials/material definitions
|
|
183
|
+
themselves cannot be overwritten by a patch); a `.ent` patch can touch `appearances`,
|
|
184
|
+
`components`, `entity` and `visualTags`; a `.app` patch can touch `components`, `partsValues`
|
|
185
|
+
and `visualTags`, but explicitly cannot touch `partsOverrides`."
|
|
186
|
+
status: community
|
|
187
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
188
|
+
for-mod-creators-theory/core-mods-explained/archivexl/archivexl-resource-patching/README.md,
|
|
189
|
+
section "What is the minimal patching level?"
|
|
190
|
+
tags:
|
|
191
|
+
- archivexl
|
|
192
|
+
- resource-patch
|
|
193
|
+
- mesh
|
|
194
|
+
- ent
|
|
195
|
+
- app
|
|
196
|
+
- limitation
|
|
197
|
+
detail: For hiding/showing submeshes on a `.app` (which would otherwise need `partsOverrides`), the
|
|
198
|
+
page points to ArchiveXL's tag-based conditional component un/loading instead.
|
|
199
|
+
- id: cp2077.archivexl.patch-component-replaces-on-name-and-id
|
|
200
|
+
claim: When ArchiveXL applies an entity-template patch (resource.patch), each patch component whose
|
|
201
|
+
name AND CRUID id both match a component of the target replaces that component; any other
|
|
202
|
+
patch component is appended. The log line says "replaced component in" or "added to". So to
|
|
203
|
+
change a template's existing component, the patch component carries the target component's own
|
|
204
|
+
name and id.
|
|
205
|
+
status: verified
|
|
206
|
+
source: https://github.com/psiberx/cp2077-archive-xl src/App/Extensions/ResourcePatch/Extension.cpp,
|
|
207
|
+
MergeComponents (the comparison resultComponent->name == patchComponent->name &&
|
|
208
|
+
resultComponent->id.unk00 == patchComponent->id.unk00)
|
|
209
|
+
tags:
|
|
210
|
+
- archivexl
|
|
211
|
+
- resource-patch
|
|
212
|
+
- entity-template
|
|
213
|
+
- component
|
|
214
|
+
- cruid
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: audio.events
|
|
3
|
+
title: .wem/.opuspak/.bnk audio layout and the REDmod event-override model
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.audio.events.wem-holds-voiceover-and-most-music
|
|
6
|
+
claim: "\"The game stores voice-overs and most music as `.wem` files which are directly in the
|
|
7
|
+
game's `.archive`s and their exporting/importing is handled as any other asset.\""
|
|
8
|
+
status: community
|
|
9
|
+
source: wiki.redmodding.org "Audio files", section "Primary file types > WEM files"
|
|
10
|
+
tags:
|
|
11
|
+
- audio
|
|
12
|
+
- wem
|
|
13
|
+
- file-format
|
|
14
|
+
detail: Page title and section name corrected 2026-09-07 (the page is "Audio files" and has no "File
|
|
15
|
+
Types & Roles" heading).
|
|
16
|
+
- id: cp2077.audio.events.opuspak-needs-opusinfo-mapping
|
|
17
|
+
claim: '"Sound effects, grunts, and some music are packed together in files ending with `.opuspak`.
|
|
18
|
+
Those paks are mapped by a single `.opusinfo` file."'
|
|
19
|
+
status: community
|
|
20
|
+
source: wiki.redmodding.org "Audio files", section "Primary file types > Opuspaks and bnks"
|
|
21
|
+
tags:
|
|
22
|
+
- audio
|
|
23
|
+
- opuspak
|
|
24
|
+
- opusinfo
|
|
25
|
+
- file-format
|
|
26
|
+
detail: 'Note "a single `.opusinfo`" — one index covers the paks. The page links a separate
|
|
27
|
+
replacing-sound-effects guide for actually manipulating them. Corrected 2026-09-07: "an
|
|
28
|
+
individual sound cannot just be pulled from a .opuspak directly" is an inference the page does
|
|
29
|
+
not state.'
|
|
30
|
+
- id: cp2077.audio.events.bnk-describes-behavior-not-just-audio
|
|
31
|
+
claim: "Community page confirms cp2077.audio.sounds.event-name-to-wwise-id-is-a-simple-lookup.
|
|
32
|
+
\".bnk files are primarily for other purpose than storing audio. They describe how and which
|
|
33
|
+
the audio should be played.\" The playback chain is: the game sends an event to Wwise, \"those
|
|
34
|
+
are described in `eventsmetadata.json` file in the game's archives\"; the event connects to a
|
|
35
|
+
tree of nodes in `.bnk` files (random next-node selection, layering, volume modification,
|
|
36
|
+
conditional switching); the last node points at an audio file or a plugin."
|
|
37
|
+
status: community
|
|
38
|
+
source: wiki.redmodding.org "Audio files", section "How are SFX handled by the engine"; embedded
|
|
39
|
+
audio from section "Primary file types > Opuspaks and bnks"
|
|
40
|
+
tags:
|
|
41
|
+
- audio
|
|
42
|
+
- bnk
|
|
43
|
+
- wwise
|
|
44
|
+
- node-tree
|
|
45
|
+
- eventsmetadata
|
|
46
|
+
detail: "Names cp2077.audio.sounds.event-name-to-wwise-id-is-a-simple-lookup
|
|
47
|
+
(knowledge/cyberpunk2077/audio.sounds.yaml), an inferred fact that already uses
|
|
48
|
+
`base\\sound\\event\\eventsmetadata.json` as the offline event-name-to-Wwise-ID lookup; this
|
|
49
|
+
page confirms that file is where the engine's events are described. The sibling
|
|
50
|
+
cp2077.audio.sounds.event-id-to-wem-sample-is-not-a-simple-lookup is the other half — the
|
|
51
|
+
event-to-source mapping in a bank's HIRC section — and this page agrees the bank is where the
|
|
52
|
+
tree lives. Also: \"Few sounds, mostly car noises, are so-called preloaded (or embedded) in
|
|
53
|
+
`.bnk` files, they're mostly duplicated and can be found elsewhere, but some sounds are only
|
|
54
|
+
preloaded.\""
|
|
55
|
+
- id: cp2077.audio.events.some-bnk-audio-not-fully-extractable
|
|
56
|
+
claim: VGMStream "is able to extract some of them, but not all, because they differ in audio
|
|
57
|
+
format". Separately, "Some sounds ... are handled differently. For example generated (noise,
|
|
58
|
+
sine wave, etc.), or generated by CDPR's custom Wwise plugins" — those have no extractable
|
|
59
|
+
source file.
|
|
60
|
+
status: community
|
|
61
|
+
source: wiki.redmodding.org "Audio files", section "Primary file types > Opuspaks and bnks"
|
|
62
|
+
tags:
|
|
63
|
+
- audio
|
|
64
|
+
- bnk
|
|
65
|
+
- vgmstream
|
|
66
|
+
- procedural
|
|
67
|
+
- gotcha
|
|
68
|
+
detail: Section name corrected 2026-09-07 (there is no "Key Gotchas" heading).
|
|
69
|
+
- id: cp2077.audio.events.voiceover-subtitles-mapped-by-string-id
|
|
70
|
+
claim: '"Every subtitle in the game has a String ID (which is a really long number) that is
|
|
71
|
+
universal between languages. What `.wem` audio file belongs to which String ID is mapped
|
|
72
|
+
inside files starting with `voiceover` and ending in `.json`", and further `.json` files in
|
|
73
|
+
the `subtitles` folders hold the subtitle text for each String ID.'
|
|
74
|
+
status: community
|
|
75
|
+
source: wiki.redmodding.org "Audio files", section "How are voice-overs connected to subtitles"
|
|
76
|
+
tags:
|
|
77
|
+
- audio
|
|
78
|
+
- subtitle
|
|
79
|
+
- string-id
|
|
80
|
+
- localization
|
|
81
|
+
detail: Some `voiceover*.json` files cover holocall voice-overs, some the helmet-on case; the
|
|
82
|
+
subtitles folders hold "few thousands" of files, so the page recommends searching them via
|
|
83
|
+
SoundDB (sounddb.redmodding.org) instead. Same String IDs as the `locstringIds` in
|
|
84
|
+
cp2077.quests.scenes.subtitle-edit-needs-two-resources, reached from the scene side. Section
|
|
85
|
+
name corrected 2026-09-07.
|
|
86
|
+
- id: cp2077.audio.events.redmod-is-event-override-not-file-replace
|
|
87
|
+
claim: '"REDmod allows you to add new and override existing audio events... This will not override
|
|
88
|
+
`.wem` files; it will instead override audio events, which are what use `.wem` files. That
|
|
89
|
+
way, you can override events that layer or randomize between multiple sounds without manually
|
|
90
|
+
altering each sound." The cost: "any events added or overridden will use a different Wwise
|
|
91
|
+
event, removing any special parameters and Wwise logic attached (e.g. overriding a gun sound
|
|
92
|
+
event will result in it no longer receiving time-dilation effects processing)."'
|
|
93
|
+
status: community
|
|
94
|
+
source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Summary"'
|
|
95
|
+
tags:
|
|
96
|
+
- audio
|
|
97
|
+
- redmod
|
|
98
|
+
- wwise
|
|
99
|
+
- event-override
|
|
100
|
+
- gotcha
|
|
101
|
+
detail: Page title and section name corrected 2026-09-07 (there is no "Event-Override Model" heading).
|
|
102
|
+
- id: cp2077.audio.events.redmod-custom-sound-folder-layout
|
|
103
|
+
claim: '"Place raw `.wav` audio files inside `<Cyberpunk 2077>/mods/<name>/customSounds`. Include a
|
|
104
|
+
`info.json` file with your mod (`<Cyberpunk 2077>/mods/<name>/info.json`) where you sepcify
|
|
105
|
+
how to use your custom sounds. You may use nested folders with `\\`."'
|
|
106
|
+
status: community
|
|
107
|
+
source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Audio Modding - Manually"'
|
|
108
|
+
tags:
|
|
109
|
+
- audio
|
|
110
|
+
- redmod
|
|
111
|
+
- customsounds
|
|
112
|
+
- info.json
|
|
113
|
+
- file-structure
|
|
114
|
+
detail: 'The `info.json` top level carries `name`, `version` and the `customSounds` array; the
|
|
115
|
+
nested-folder example is `"file": "mysounds\\new_sound.wav"`. Section name corrected
|
|
116
|
+
2026-09-07.'
|
|
117
|
+
- id: cp2077.audio.events.info-json-required-and-optional-fields
|
|
118
|
+
claim: "A `customSounds` entry's parameters: `name` (String) \"The game audio event to override\";
|
|
119
|
+
`type` (String) the sound type; `file` (String) \"The `.wav` file to use (inside
|
|
120
|
+
`/customSounds`)\"; `gain` (Float) \"How loud the sound is; ranges from 0 to 1\"; `pitch`
|
|
121
|
+
(Float) \"The amount of pitch variance applied to the sound; ranges from 0 to 1\". `file` is
|
|
122
|
+
omitted for a `mod_skip` entry, which plays nothing."
|
|
123
|
+
status: community
|
|
124
|
+
source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Parameters" and the example
|
|
125
|
+
`info.json` under "Audio Modding - Manually > Example"'
|
|
126
|
+
tags:
|
|
127
|
+
- audio
|
|
128
|
+
- redmod
|
|
129
|
+
- info.json
|
|
130
|
+
- required-field
|
|
131
|
+
- syntax
|
|
132
|
+
detail: "Corrected 2026-09-07: the previous claim listed `file` as always required, which the page's
|
|
133
|
+
own example contradicts — its `amb_bl_eq_medical_electronics_small` and
|
|
134
|
+
`w_gun_revol_power_overture_fire_suppressor` entries carry only `name` and `type: mod_skip`."
|
|
135
|
+
- id: cp2077.audio.events.redmod-sound-type-vocabulary
|
|
136
|
+
claim: The `type` options are `mod_skip` ("Do not play this sound event"), `mod_sfx_2d` ("played
|
|
137
|
+
without any positions / attenuation"), `mod_sfx_city` ("longer attenuation... suitable for
|
|
138
|
+
city sounds"), `mod_sfx_low_occlusion` ("long attenuation that isn't occluded much e.g. a VO
|
|
139
|
+
or quest sound that you don't want to be muffled"), `mod_sfx_occlusion` ("Medium attenuation
|
|
140
|
+
with normal occlusion"), `mod_sfx_radio` ("Needs to be tuned to a broadcast channel"),
|
|
141
|
+
`mod_sfx_room` ("shorter attenuation suitable for something that can be heard across a room"),
|
|
142
|
+
`mod_sfx_street` ("medium attenuation, good for something to be heard down a street") and
|
|
143
|
+
`mod_sfx_ui` ("For menu and UI sound replacement").
|
|
144
|
+
status: community
|
|
145
|
+
source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Parameters" (the `type` bullet list)'
|
|
146
|
+
tags:
|
|
147
|
+
- audio
|
|
148
|
+
- redmod
|
|
149
|
+
- sound-type
|
|
150
|
+
- mod_skip
|
|
151
|
+
- enum
|
|
152
|
+
detail: 'Corrected 2026-09-07: "there is no custom/free-form type" was trimmed — the page presents
|
|
153
|
+
these as the options without saying the set is closed.'
|
|
154
|
+
- id: cp2077.audio.events.wolvenkit-sound-modding-tool-alternative
|
|
155
|
+
claim: "\"The REDmod sound import tool can be used in a WolvenKit project\": add the `.wav` files to
|
|
156
|
+
the project's `/customSounds` folder, click Tools > Sound Modding Tool, choose which event to
|
|
157
|
+
mod from the list of game sound events, adjust the parameters in the bottom right, and click
|
|
158
|
+
Save."
|
|
159
|
+
status: community
|
|
160
|
+
source: 'wiki.redmodding.org "Audio Modding: Redmod", section "Audio Modding - WolvenKit Integration"'
|
|
161
|
+
tags:
|
|
162
|
+
- audio
|
|
163
|
+
- redmod
|
|
164
|
+
- wolvenkit
|
|
165
|
+
- sound-modding-tool
|
|
166
|
+
detail: 'Corrected 2026-09-07: "equally valid paths to the same result" was trimmed — the page
|
|
167
|
+
documents both routes without ranking them. Section name corrected (there is no
|
|
168
|
+
"Implementation Methods" heading).'
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: audio.sounds
|
|
3
|
+
title: Weapon audio — anim-baked events vs TweakDB impact profiles
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.audio.sounds.two-independent-audio-systems-per-weapon
|
|
6
|
+
claim: "A melee weapon's audio comes from two completely independent systems that can disagree:
|
|
7
|
+
swing/handling/equip/block-ring sounds are anim events baked into the weapon's .anims clips,
|
|
8
|
+
while hit/impact/flesh/ block sounds come from the TweakDB audioWeaponConfiguration field on
|
|
9
|
+
the weapon record. Changing one has no effect on the other."
|
|
10
|
+
status: inferred
|
|
11
|
+
source: ModWright research
|
|
12
|
+
tags:
|
|
13
|
+
- audio
|
|
14
|
+
- anim-event
|
|
15
|
+
- tweakdb
|
|
16
|
+
- impact
|
|
17
|
+
- architecture
|
|
18
|
+
detail: "Discovered auditing a report that a weapon's sounds were \"just the katana\": it was worse
|
|
19
|
+
than that — the weapon played katana swings over kukri impacts, because the swing side came
|
|
20
|
+
from re-authored katana donor clips and the impact side was inherited TweakDB, and nobody had
|
|
21
|
+
touched either deliberately."
|
|
22
|
+
- id: cp2077.audio.sounds.audio-impact-profile-inherited-through-base
|
|
23
|
+
claim: A weapon's impact audio profile can be silently inherited from its $base preset chain rather
|
|
24
|
+
than set on the weapon's own record; check the full inheritance chain, not just the leaf
|
|
25
|
+
record, when auditing which profile is actually live.
|
|
26
|
+
status: inferred
|
|
27
|
+
source: ModWright research
|
|
28
|
+
tags:
|
|
29
|
+
- audio
|
|
30
|
+
- tweakdb
|
|
31
|
+
- inheritance
|
|
32
|
+
- base-record
|
|
33
|
+
detail: A melee weapon mod's record, Items.<ModWeapon> ($base Items.Preset_Machete_Default),
|
|
34
|
+
inherited audio_melee_metadata_kukri_voodoo with no explicit line anywhere in the mod's yaml
|
|
35
|
+
setting it — the audit had to trace the $base chain to find where it came from.
|
|
36
|
+
- id: cp2077.audio.sounds.audioweaponconfiguration-hot-reloads
|
|
37
|
+
claim: Changing a weapon record's audioWeaponConfiguration field is a yaml-only edit that
|
|
38
|
+
hot-reloads via TweakXL.Reload() in the CET console, with no archive rebuild and no game
|
|
39
|
+
restart required.
|
|
40
|
+
status: inferred
|
|
41
|
+
source: ModWright research
|
|
42
|
+
tags:
|
|
43
|
+
- audio
|
|
44
|
+
- tweakdb
|
|
45
|
+
- hot-reload
|
|
46
|
+
- tweakxl
|
|
47
|
+
detail: "Confirms the general tweak hot-reload path (cp2077.process.tweakxl-hot-reload) applies
|
|
48
|
+
specifically to this audio-routing field. The applied swap sets audioWeaponConfiguration:
|
|
49
|
+
audio_melee_metadata_borg_machete, deployed and hash-verified 2026-09-03; the user's ear
|
|
50
|
+
judgment on the result was still pending as of that note."
|
|
51
|
+
- id: cp2077.audio.sounds.anim-baked-events-never-hot-reload
|
|
52
|
+
claim: Renaming or changing the anim events baked into a weapon's .anims file (the
|
|
53
|
+
swing/handling/equip side of weapon audio) requires an archive repack and a full game restart,
|
|
54
|
+
because .anims assets never hot-reload the way TweakDB yaml does
|
|
55
|
+
(cp2077.anims.sets.do-not-hot-reload).
|
|
56
|
+
status: inferred
|
|
57
|
+
source: ModWright research
|
|
58
|
+
tags:
|
|
59
|
+
- audio
|
|
60
|
+
- anim-event
|
|
61
|
+
- anims
|
|
62
|
+
- hot-reload
|
|
63
|
+
- restart
|
|
64
|
+
detail: The note frames this as the reason to try the impact-profile swap (yaml-only) first as the
|
|
65
|
+
cheap A/B, since it "may be most of what you want" before paying for a repack+restart cycle on
|
|
66
|
+
the anim-event side.
|
|
67
|
+
- id: cp2077.audio.sounds.event-name-to-wwise-id-is-a-simple-lookup
|
|
68
|
+
claim: Mapping a named audio event (e.g. w_melee_katana_whoosh) to its Wwise event ID is a simple,
|
|
69
|
+
fully offline lookup via base\sound\event\eventsmetadata.json.
|
|
70
|
+
status: inferred
|
|
71
|
+
source: ModWright research
|
|
72
|
+
tags:
|
|
73
|
+
- audio
|
|
74
|
+
- wwise
|
|
75
|
+
- event-id
|
|
76
|
+
- lookup
|
|
77
|
+
detail: Table of 11 weapon-specific katana events extracted this way, e.g. w_melee_katana_whoosh ->
|
|
78
|
+
4107381959, w_melee_katana_equip -> 1337780739. 60 of the anim set's 97 clips carry audio
|
|
79
|
+
events at all; the rest are generic (block/parry/fast_whoosh) or foley (AnimEvent_FoleyAction
|
|
80
|
+
lcm_mvs_* cloth/movement, 67 uses).
|
|
81
|
+
- id: cp2077.audio.sounds.event-id-to-wem-sample-is-not-a-simple-lookup
|
|
82
|
+
claim: "Unlike event-name-to-Wwise-ID, mapping a Wwise event ID to its actual .wem audio sample is
|
|
83
|
+
NOT a simple offline lookup: weapon SFX are loose .wem files streamed by source ID, and the
|
|
84
|
+
event-to-source mapping lives in the HIRC section of a binary Wwise soundbank (init.bnk),
|
|
85
|
+
which this project's tooling cannot parse."
|
|
86
|
+
status: inferred
|
|
87
|
+
source: ModWright research
|
|
88
|
+
tags:
|
|
89
|
+
- audio
|
|
90
|
+
- wwise
|
|
91
|
+
- wem
|
|
92
|
+
- soundbank
|
|
93
|
+
- blocker
|
|
94
|
+
detail: The 201 .bnk files in audio_2_soundbanks.archive are almost all vehicles plus init.bnk. The
|
|
95
|
+
note explicitly frames hand-parsing a Wwise soundbank as exactly the kind of
|
|
96
|
+
undocumented-binary work to time-box and hand to a community tool instead — here, the
|
|
97
|
+
WolvenKit GUI audio browser (browse/play/export .wem) plus vgmstream/ww2ogg for .wem -> .wav
|
|
98
|
+
conversion.
|
|
99
|
+
- id: cp2077.audio.sounds.audio-metadata-profile-shape
|
|
100
|
+
claim: A complete per-weapon audio impact profile in
|
|
101
|
+
base\sound\metadata\cooked_metadata.audio_metadata exists as BOTH an
|
|
102
|
+
audioMeleeWeaponConfiguration entry and an audioMeleeWeaponVariations entry; a profile missing
|
|
103
|
+
either half should be treated as incomplete before assigning it to a weapon.
|
|
104
|
+
status: inferred
|
|
105
|
+
source: ModWright research
|
|
106
|
+
tags:
|
|
107
|
+
- audio
|
|
108
|
+
- tweakdb
|
|
109
|
+
- profile
|
|
110
|
+
- metadata
|
|
111
|
+
- verification
|
|
112
|
+
detail: The audit explicitly verified audio_melee_metadata_borg_machete has both shapes, "the same
|
|
113
|
+
shape as the kukri_voodoo it replaces," before applying it — treating shape-completeness as a
|
|
114
|
+
precondition, not an assumption.
|
|
115
|
+
- id: cp2077.audio.sounds.new-wem-audio-needs-redmod-sound-pipeline
|
|
116
|
+
claim: Getting modified or new audio samples into the game (as opposed to reassigning which existing
|
|
117
|
+
vanilla event/profile a weapon uses) requires REDmod's sound pipeline — a REDmod module
|
|
118
|
+
shipping .wem + info.json — not ArchiveXL; this is a deployment path the mod does not
|
|
119
|
+
currently use at all.
|
|
120
|
+
status: unverified
|
|
121
|
+
source: ModWright research
|
|
122
|
+
tags:
|
|
123
|
+
- audio
|
|
124
|
+
- redmod
|
|
125
|
+
- wem
|
|
126
|
+
- pipeline
|
|
127
|
+
- plan
|
|
128
|
+
detail: Framed explicitly as a future phase, budgeted separately, "only after Route A proves
|
|
129
|
+
insufficient." No attempt at this path is recorded.
|
|
130
|
+
- id: cp2077.audio.sounds.vanilla-family-has-deeper-whoosh-variants
|
|
131
|
+
claim: The katana audio family already ships heavier/deeper variant events for whoosh and handling
|
|
132
|
+
sounds (e.g. w_melee_katana_whoosh_large, w_melee_katana_handling_strong) that can be
|
|
133
|
+
substituted by simple rename with no new audio authoring, if a reskin needs to go further than
|
|
134
|
+
the impact-profile swap alone.
|
|
135
|
+
status: inferred
|
|
136
|
+
source: ModWright research
|
|
137
|
+
tags:
|
|
138
|
+
- audio
|
|
139
|
+
- katana
|
|
140
|
+
- whoosh
|
|
141
|
+
- variant
|
|
142
|
+
- reskin
|
|
143
|
+
detail: "w_melee_katana_whoosh -> w_melee_katana_whoosh_large (1670341267);
|
|
144
|
+
w_melee_katana_handling_soft -> w_melee_katana_handling_strong (275000592). Other whoosh
|
|
145
|
+
families available as impact-profile alternatives if borg_machete is not heavy enough: machete
|
|
146
|
+
(_heavy), blade (_normal), cut_o_matic (_low), blunt (_heavy/_low), sledgehammer,
|
|
147
|
+
boss_sledgehammer, caretaker_shovel (_heavy). None of this was applied as of the audit;
|
|
148
|
+
recorded as available inventory."
|
|
149
|
+
- id: cp2077.audio.sounds.donor-clip-anim-events-inherited-unintentionally
|
|
150
|
+
claim: When a weapon's attack animations are re-authored from a donor weapon's clips (rather than
|
|
151
|
+
newly authored), the donor's baked audio events come along for free and unintentionally — the
|
|
152
|
+
resulting weapon sounds like its animation donor, not its own identity, until someone audits
|
|
153
|
+
and reskins the events deliberately.
|
|
154
|
+
status: verified
|
|
155
|
+
source: ModWright field verification
|
|
156
|
+
tags:
|
|
157
|
+
- audio
|
|
158
|
+
- anim-event
|
|
159
|
+
- donor
|
|
160
|
+
- reskin
|
|
161
|
+
detail: The weapon's light-attack clips are re-authored katana clips (see the shared animation work,
|
|
162
|
+
out of scope here), so all of their baked audio events are still w_melee_katana_*. This is the
|
|
163
|
+
mechanism behind cp2077.audio.sounds.two-independent-audio-systems-per-weapon's swing side
|
|
164
|
+
specifically.
|