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,209 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: mesh.blender
|
|
3
|
+
title: blender mesh authoring and export for Cyberpunk 2077
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.mesh.vertex-cap-65535
|
|
6
|
+
claim: The engine enforces a hard cap of 65,535 vertices per submesh; exceeding this produces a
|
|
7
|
+
silently invalid mesh that may render incompletely or fail to load.
|
|
8
|
+
status: verified
|
|
9
|
+
verified_on: "2.31"
|
|
10
|
+
source: ModWright field verification
|
|
11
|
+
tags:
|
|
12
|
+
- vertex
|
|
13
|
+
- limit
|
|
14
|
+
- submesh
|
|
15
|
+
- cap
|
|
16
|
+
- rendering
|
|
17
|
+
detail: "The trigger was double-siding: the export script's comment reads \"gunmetal CANNOT be
|
|
18
|
+
doubled wholesale: 2x 47k verts exceeds the engine's 65535-per-submesh limit\". The fix was
|
|
19
|
+
NOT to split into more submeshes — only the black submesh is duplicated and normal-flipped (in
|
|
20
|
+
the exporter script), and inward-facing gunmetal faces are repaired at the source in Blender
|
|
21
|
+
instead."
|
|
22
|
+
- id: cp2077.mesh.join-by-material-submesh-order
|
|
23
|
+
claim: When exporting a kitbashed mesh with multiple materials, join geometry by material slot to
|
|
24
|
+
create fixed submesh indices; wolvenkit import expects submesh order to match the material
|
|
25
|
+
assignment sequence.
|
|
26
|
+
status: inferred
|
|
27
|
+
source: ModWright research
|
|
28
|
+
tags:
|
|
29
|
+
- mesh
|
|
30
|
+
- material
|
|
31
|
+
- submesh
|
|
32
|
+
- join
|
|
33
|
+
- export
|
|
34
|
+
detail: 'The current export produces FOUR submeshes, in this fixed order: submesh_00 gunmetal body,
|
|
35
|
+
submesh_01 red grip, submesh_02 ink lettering, submesh_03 black parts. The script comment
|
|
36
|
+
explains the ordering rule — "00..02 keep their old indices, black appends as 03 so existing
|
|
37
|
+
chunkMaterials stay valid" — and grouping is by MATERIAL, not object name, "so face-level
|
|
38
|
+
edits carry over". The earlier an earlier exporter produced three.'
|
|
39
|
+
- id: cp2077.mesh.glb-triangulation-required
|
|
40
|
+
claim: glb export from blender must have all faces triangulated; n-gons or quads produce invalid
|
|
41
|
+
mesh data at import time.
|
|
42
|
+
status: verified
|
|
43
|
+
source: ModWright field verification
|
|
44
|
+
tags:
|
|
45
|
+
- glb
|
|
46
|
+
- blender
|
|
47
|
+
- triangulation
|
|
48
|
+
- faces
|
|
49
|
+
- n-gons
|
|
50
|
+
detail: The export script triangulates every joined submesh with
|
|
51
|
+
bpy.ops.mesh.quads_convert_to_tris(quad_method='BEAUTY', ngon_method='BEAUTY') before export.
|
|
52
|
+
The sources state the requirement; the exact failure mode when it is skipped is not recorded,
|
|
53
|
+
so do not quote one. In-game verified_on/verified_by removed — this is a WolvenKit import
|
|
54
|
+
requirement, not an engine observation.
|
|
55
|
+
- id: cp2077.mesh.glb-tangent-vectors-required
|
|
56
|
+
claim: glb export must include tangent vectors baked for each vertex; missing tangents cause
|
|
57
|
+
incorrect normal mapping and lighting at import.
|
|
58
|
+
status: verified
|
|
59
|
+
source: ModWright field verification
|
|
60
|
+
tags:
|
|
61
|
+
- glb
|
|
62
|
+
- blender
|
|
63
|
+
- tangent
|
|
64
|
+
- normal-mapping
|
|
65
|
+
- export
|
|
66
|
+
detail: Tangents are requested explicitly in the glTF export call, not baked automatically by the
|
|
67
|
+
add-on. The lighting consequence in the claim is reasoning, not something the sources record.
|
|
68
|
+
- id: cp2077.mesh.glb-uv-layers-required
|
|
69
|
+
claim: glb export must include uv layers named correctly; missing or incorrectly named uv layers
|
|
70
|
+
cause material mapping failures.
|
|
71
|
+
status: verified
|
|
72
|
+
source: ModWright field verification
|
|
73
|
+
tags:
|
|
74
|
+
- glb
|
|
75
|
+
- uv
|
|
76
|
+
- blender
|
|
77
|
+
- layers
|
|
78
|
+
- material-mapping
|
|
79
|
+
detail: 'The exact requirement the script enforces: every mesh gets exactly ONE uv layer, named
|
|
80
|
+
UVMap (capital U, V, M). Meshes with none are smart-projected (angle_limit=1.15,
|
|
81
|
+
island_margin=0.02); extra layers are removed. The earlier version of this fact spelled the
|
|
82
|
+
layer "uvMap", which is wrong.'
|
|
83
|
+
- id: cp2077.mesh.cyberpunk-io-suite-exporter
|
|
84
|
+
claim: blender 5.1 with Cyberpunk IO Suite 2.0.0 add-on installed provides the export function for
|
|
85
|
+
glb files compatible with wolvenkit cli; the exporter handles triangulation, tangent baking,
|
|
86
|
+
and format conformance.
|
|
87
|
+
status: inferred
|
|
88
|
+
source: ModWright research
|
|
89
|
+
tags:
|
|
90
|
+
- blender
|
|
91
|
+
- cyberpunk-io-suite
|
|
92
|
+
- exporter
|
|
93
|
+
- glb
|
|
94
|
+
- add-on
|
|
95
|
+
detail: "Correction to the claim's second half: the export script does the triangulation, uv
|
|
96
|
+
normalisation and tangent request itself through plain bpy/glTF calls (the exporter script),
|
|
97
|
+
so those are not services of the add-on. What the add-on supplies is the import side for the
|
|
98
|
+
vanilla game meshes the kitbash is built from. build.ps1 -Export invokes blender --background
|
|
99
|
+
--python on the exporter script."
|
|
100
|
+
- id: cp2077.mesh.kitbash-donor-transfer
|
|
101
|
+
claim: When kitbashing (combining parts from multiple source meshes), preserve material assignments
|
|
102
|
+
and uv from donor meshes if possible; copying materials between donors can create mismatches
|
|
103
|
+
that require post-import fixing.
|
|
104
|
+
status: inferred
|
|
105
|
+
source: ModWright research
|
|
106
|
+
tags:
|
|
107
|
+
- kitbash
|
|
108
|
+
- material
|
|
109
|
+
- donor
|
|
110
|
+
- uv
|
|
111
|
+
- transfer
|
|
112
|
+
detail: One weapon mod's kitbash is imported over the Malorian 3516 mesh as donor, then materials
|
|
113
|
+
are reassigned by index with a mesh-materials script. Its notes record the resulting
|
|
114
|
+
chunkMaterials as [pasted__malorian_ml_base, malorian_ml_handle2 (red grip),
|
|
115
|
+
pasted__malorian_ml_base]. The "preserve if possible / mismatches need fixing" advice is the
|
|
116
|
+
author's generalisation.
|
|
117
|
+
- id: cp2077.mesh.material-pasting-convention
|
|
118
|
+
claim: When a material is copied from a donor mesh during kitbashing, it may be pasted with a
|
|
119
|
+
"pasted__" prefix in the name; these pasted materials are distinct from the original and allow
|
|
120
|
+
local overrides.
|
|
121
|
+
status: inferred
|
|
122
|
+
source: ModWright research
|
|
123
|
+
tags:
|
|
124
|
+
- material
|
|
125
|
+
- pasted
|
|
126
|
+
- naming
|
|
127
|
+
- convention
|
|
128
|
+
- override
|
|
129
|
+
detail: 'Only the names are sourced: pasted__malorian_ml_base for body/fittings and
|
|
130
|
+
malorian_ml_handle2 for the red grip. What the "pasted__" prefix means to the engine or to
|
|
131
|
+
WolvenKit is not stated anywhere in the sources; the "allows local overrides" reading is an
|
|
132
|
+
inference.'
|
|
133
|
+
- id: cp2077.mesh.chunk-materials-array-order
|
|
134
|
+
claim: The chunkMaterials array in a .mesh file specifies material assignments by index; the order
|
|
135
|
+
must match the submesh indices created during glb join-by-material.
|
|
136
|
+
status: inferred
|
|
137
|
+
source: ModWright research
|
|
138
|
+
tags:
|
|
139
|
+
- chunk
|
|
140
|
+
- material
|
|
141
|
+
- array
|
|
142
|
+
- index
|
|
143
|
+
- order
|
|
144
|
+
detail: One weapon mod's mesh-materials script keeps one appearance named "default" and writes three
|
|
145
|
+
chunkMaterials entries — index 0 pasted__malorian_ml_base, 1 malorian_ml_handle2, 2
|
|
146
|
+
pasted__malorian_ml_base — matching its three-submesh export script. A later four-submesh
|
|
147
|
+
export deliberately appends black as index 03 "so existing chunkMaterials stay valid", and the
|
|
148
|
+
shipped mod adds its own materials (mod\<mod>\materials\blackmetal.mi, <mod>_gunmetal.mi).
|
|
149
|
+
- id: cp2077.mesh.serialize-edit-deserialize-pattern
|
|
150
|
+
claim: "Complex mesh edits (material reassignment, submesh tweaks) are performed via: cli serialize
|
|
151
|
+
(binary to json) → Python script edit → cli deserialize (json to binary). This allows
|
|
152
|
+
programmatic mesh modification without gui interaction."
|
|
153
|
+
status: verified
|
|
154
|
+
source: ModWright field verification
|
|
155
|
+
tags:
|
|
156
|
+
- serialize
|
|
157
|
+
- deserialize
|
|
158
|
+
- mesh
|
|
159
|
+
- json
|
|
160
|
+
- edit
|
|
161
|
+
detail: "This is the pattern behind every scripted asset in the project (mesh materials, case entity
|
|
162
|
+
and app, sector, localization). In-game verified_on/verified_by removed: it is a WolvenKit CLI
|
|
163
|
+
workflow, not an engine observation."
|
|
164
|
+
- id: cp2077.mesh.donor-mesh-replacement
|
|
165
|
+
claim: When importing a custom glb over a donor mesh path, wolvenkit preserves the donor mesh's
|
|
166
|
+
material structure and embedded metadata; custom geometry replaces only the vertex/face data.
|
|
167
|
+
status: inferred
|
|
168
|
+
source: ModWright research
|
|
169
|
+
tags:
|
|
170
|
+
- donor
|
|
171
|
+
- mesh
|
|
172
|
+
- import
|
|
173
|
+
- replacement
|
|
174
|
+
- metadata
|
|
175
|
+
detail: The pipeline copies the donor mesh next to the glb and imports with --keep (-k in
|
|
176
|
+
build.ps1). That the donor's material structure and metadata survive is an inference from the
|
|
177
|
+
pipeline's shape and from the material-editing script having donor materialEntries to print;
|
|
178
|
+
no source states it directly.
|
|
179
|
+
- id: cp2077.mesh.phys-chunk-colliders
|
|
180
|
+
claim: Custom meshes used in lootable entities require a meshMeshParamPhysics chunk with box
|
|
181
|
+
colliders set to both Simple and Complex filter types; missing physics prevents interact
|
|
182
|
+
prompts.
|
|
183
|
+
status: verified
|
|
184
|
+
verified_on: "2.31"
|
|
185
|
+
source: ModWright field verification
|
|
186
|
+
tags:
|
|
187
|
+
- mesh
|
|
188
|
+
- physics
|
|
189
|
+
- collider
|
|
190
|
+
- box
|
|
191
|
+
- filter
|
|
192
|
+
- loot
|
|
193
|
+
detail: Applies to cache_case_top.mesh and cache_case_bottom.mesh. The prompt only appeared once the
|
|
194
|
+
physics param was grafted in, which is why this is listed among the late-stage lessons of the
|
|
195
|
+
completed build.
|
|
196
|
+
- id: cp2077.mesh.headless-blender-render
|
|
197
|
+
claim: Headless blender renders are used in the pipeline for icon generation (an icon-render script)
|
|
198
|
+
and visual QA; blender is launched with --background --python <script> to render without gui.
|
|
199
|
+
status: verified
|
|
200
|
+
source: ModWright field verification
|
|
201
|
+
tags:
|
|
202
|
+
- blender
|
|
203
|
+
- headless
|
|
204
|
+
- render
|
|
205
|
+
- script
|
|
206
|
+
- icon
|
|
207
|
+
detail: Four headless render scripts ship with the mod. README names the newer icon render as the
|
|
208
|
+
current inventory-icon render (moody top-lit pass + gamma curve); the older icon render is its
|
|
209
|
+
predecessor. In-game verified_on/verified_by removed — nothing here is observed in the engine.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: nativedb.dump
|
|
3
|
+
title: cp2077-nativedb's RTTI dump generation and the shape of its reddump JSON files
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.nativedb.dump.generation-pipeline
|
|
6
|
+
claim: "NativeDB's RTTI dump assets are generated by installing the separate `RED4.RTTIDumper`
|
|
7
|
+
RED4ext plugin, running the game until loading blocks and then closing it, and copying four
|
|
8
|
+
files from `<game>\\bin\\x64\\dumps\\nativedb\\json` into the NativeDB project's
|
|
9
|
+
`src/assets/reddump/` folder: `enums.json`, `bitfields.json`, `classes.json` and
|
|
10
|
+
`globals.json`."
|
|
11
|
+
status: community
|
|
12
|
+
source: rayshader/cp2077-nativedb@b5d29af README.md:12-24, section "Setup"
|
|
13
|
+
tags:
|
|
14
|
+
- nativedb
|
|
15
|
+
- rttidumper
|
|
16
|
+
- dump
|
|
17
|
+
- generation
|
|
18
|
+
- reddump
|
|
19
|
+
- id: cp2077.nativedb.dump.readme-pinned-versions
|
|
20
|
+
claim: The snapshot of rayshader/cp2077-nativedb read for this intake badges itself as NativeDB
|
|
21
|
+
version 2.1.0, targeting Cyberpunk 2077 game version 2.31.
|
|
22
|
+
status: verified
|
|
23
|
+
verified_on: "2.31"
|
|
24
|
+
source: rayshader/cp2077-nativedb@b5d29af README.md:2-4, badge row at the top
|
|
25
|
+
tags:
|
|
26
|
+
- nativedb
|
|
27
|
+
- version
|
|
28
|
+
detail: Verified only as a literal reading of the two badges ("version - 2.1.0", "game - 2.31").
|
|
29
|
+
`verified_on` records the game version the README itself names, on the game's marketing axis;
|
|
30
|
+
nothing here was observed in-engine.
|
|
31
|
+
- id: cp2077.nativedb.dump.json-files-are-flat-lists-of-minified-records
|
|
32
|
+
claim: Each of the four `reddump/*.json` files is a flat top-level JSON array (not a nested tree
|
|
33
|
+
keyed by name); every element is an object whose field names are single lowercase letters
|
|
34
|
+
(`a`, `b`, `c`, ...) rather than descriptive names — the real field meanings are only
|
|
35
|
+
documented in NativeDB's own TypeScript AST types, not in the dump files themselves.
|
|
36
|
+
status: verified
|
|
37
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/{enums,bitfields,classes,globals}.json
|
|
38
|
+
(structure only; no dump content transcribed beyond single illustrative records) and the
|
|
39
|
+
field-name comments in src/shared/red-ast/red-enum.ast.ts and red-class.ast.ts
|
|
40
|
+
tags:
|
|
41
|
+
- nativedb
|
|
42
|
+
- reddump
|
|
43
|
+
- json-shape
|
|
44
|
+
- minified-keys
|
|
45
|
+
- id: cp2077.nativedb.dump.enum-and-bitfield-record-shape
|
|
46
|
+
claim: In `enums.json` and `bitfields.json`, each record has field `a` (the enum/bitfield name),
|
|
47
|
+
optional `b` (an alias name) and `c` (an array of member objects); each member object has
|
|
48
|
+
exactly one key, the member's name, whose value is its numeric value (for an enum) or bit
|
|
49
|
+
index (for a bitfield).
|
|
50
|
+
status: verified
|
|
51
|
+
source: 'rayshader/cp2077-nativedb@b5d29af src/shared/red-ast/red-enum.ast.ts, the
|
|
52
|
+
`RedEnumJson`/`RedEnumMemberJson` interfaces (:4-12, the member interface commented "name:
|
|
53
|
+
value OR name: bit")'
|
|
54
|
+
tags:
|
|
55
|
+
- nativedb
|
|
56
|
+
- reddump
|
|
57
|
+
- enum
|
|
58
|
+
- bitfield
|
|
59
|
+
- schema
|
|
60
|
+
- id: cp2077.nativedb.dump.class-record-shape
|
|
61
|
+
claim: "In `classes.json`, each record has optional field `a` (parent class name), required `b` (the
|
|
62
|
+
class's own name), optional `c` (an alias name), required `d` (a numeric class-flags bitmask),
|
|
63
|
+
optional `e` (an array of property records) and optional `f` (an array of function records);
|
|
64
|
+
an optional `g: true` marks the record as a struct rather than a class."
|
|
65
|
+
status: verified
|
|
66
|
+
source: rayshader/cp2077-nativedb@b5d29af src/shared/red-ast/red-class.ast.ts, the `RedClassJson`
|
|
67
|
+
interface (:9-17)
|
|
68
|
+
tags:
|
|
69
|
+
- nativedb
|
|
70
|
+
- reddump
|
|
71
|
+
- class
|
|
72
|
+
- struct
|
|
73
|
+
- schema
|
|
74
|
+
- id: cp2077.nativedb.dump.property-and-function-record-shape
|
|
75
|
+
claim: A property record (inside a class's `e` array) has field `a` (a nested type descriptor),
|
|
76
|
+
optional `b` (the property name), optional `c` (a numeric flags value) and optional `d` (the
|
|
77
|
+
byte offset within the containing struct/class). A function record (inside a class's `f`
|
|
78
|
+
array, or a top-level entry in `globals.json`) has field `a` (the function's full/mangled
|
|
79
|
+
name), optional `b` (a short display name), optional `c` (the return type descriptor) and
|
|
80
|
+
required `d` (a numeric flags value); a function's parameters, when present, are an array of
|
|
81
|
+
property-shaped records under key `e`.
|
|
82
|
+
status: verified
|
|
83
|
+
source: rayshader/cp2077-nativedb@b5d29af src/shared/red-ast/red-property.ast.ts, the
|
|
84
|
+
`RedPropertyJson` interface (:6-11); and src/shared/red-ast/red-function.ast.ts, the
|
|
85
|
+
`RedFunctionJson` interface (:9-15)
|
|
86
|
+
tags:
|
|
87
|
+
- nativedb
|
|
88
|
+
- reddump
|
|
89
|
+
- property
|
|
90
|
+
- function
|
|
91
|
+
- offset
|
|
92
|
+
- flags
|
|
93
|
+
- schema
|
|
94
|
+
detail: 'Checked against the source (2026-09-08): an earlier detail said the sampled `globals.json`
|
|
95
|
+
entries carried only `a` and `d`. The first records in the file disprove that —
|
|
96
|
+
`AIInstantiateObject` is `{"a":...,"d":12}`, but `AT_AddATID` also carries `e` (parameters)
|
|
97
|
+
and `Abs` carries both `c` (return type) and `e`. All four keys occur in globals; only `a` and
|
|
98
|
+
`d` are non-optional.'
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: npc.appearance
|
|
3
|
+
title: NPC appearance patching in WolvenKit and AMM custom appearances
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.npc.appearance.component-prefix-naming
|
|
6
|
+
claim: "Component names in an NPC's `.app` are prefaced by a body-location code: \"t=torso (t0 is
|
|
7
|
+
usually the body mesh, t1 is usually clothes), l=legs, h=head, s=shoe\". Vik's default
|
|
8
|
+
appearance, for example, has `t0_001_ma_body__ripper_doc6245` (body mesh) and
|
|
9
|
+
`t1_001_ma_full__ripper_doc1487` (shirt)."
|
|
10
|
+
status: community
|
|
11
|
+
source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", section
|
|
12
|
+
"Understanding the .app file" (info hint)
|
|
13
|
+
tags:
|
|
14
|
+
- npc
|
|
15
|
+
- appearance
|
|
16
|
+
- app
|
|
17
|
+
- component-prefix
|
|
18
|
+
- naming
|
|
19
|
+
detail: The page hedges with "usually" and points at the canonical list under
|
|
20
|
+
garment-support-how-does-it-work#component-prefixes; the same prefixes are what garment
|
|
21
|
+
support scores against, which is why the dynamic-variants guide warns not to strip them when
|
|
22
|
+
renaming components. Page title and section name corrected 2026-09-07.
|
|
23
|
+
- id: cp2077.npc.appearance.edit-is-export-blender-reimport
|
|
24
|
+
claim: "Editing an NPC's mesh is a round trip, not a direct `.app` edit: check the mesh in
|
|
25
|
+
WolvenKit's Export Tool and \"Export Selected\"; in Blender (with the WolvenKit Blender IO
|
|
26
|
+
Suite installed) use \"File>Import>Cyberpunk GLTF\", edit, then export as a Cyberpunk GLB over
|
|
27
|
+
the same file; back in WolvenKit use \"Tools>Import Tool\" and \"import selected\"; finally
|
|
28
|
+
replace the component's \"mesh\" path in the `.app` with the new mesh's relative path
|
|
29
|
+
(right-click the mesh in the project explorer, \"copy relative path\")."
|
|
30
|
+
status: community
|
|
31
|
+
source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", sections
|
|
32
|
+
"Modifying the Body Mesh" and "Modifying the Clothes"
|
|
33
|
+
tags:
|
|
34
|
+
- npc
|
|
35
|
+
- appearance
|
|
36
|
+
- blender
|
|
37
|
+
- export
|
|
38
|
+
- import
|
|
39
|
+
- workflow
|
|
40
|
+
- id: cp2077.npc.appearance.edits-are-per-appearance-not-per-npc
|
|
41
|
+
claim: "Edits land on the one `appearances` array entry that was modified: \"since we didn't copy
|
|
42
|
+
the mesh and use a custom path, this mod would not display the other two appearances
|
|
43
|
+
correctly. You would have to modify the other clothes.\""
|
|
44
|
+
status: community
|
|
45
|
+
source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", section
|
|
46
|
+
"Modifying the Clothes" (closing warning hint)
|
|
47
|
+
tags:
|
|
48
|
+
- npc
|
|
49
|
+
- appearance
|
|
50
|
+
- gotcha
|
|
51
|
+
- multiple-appearances
|
|
52
|
+
detail: Vik has three appearances; the guide edits only the default one and says "the process is the
|
|
53
|
+
same for all of them". Section name corrected 2026-09-07 (there is no "Known Limitations &
|
|
54
|
+
Gotchas" heading).
|
|
55
|
+
- id: cp2077.npc.appearance.duplicated-mesh-needs-dependency-path-updated
|
|
56
|
+
claim: "\"Note that if you did copy the mesh and created a custom path, you would have to also
|
|
57
|
+
replace the path under 'AppearanceVisualController>appearanceDependancy' for the component to
|
|
58
|
+
appear correctly.\""
|
|
59
|
+
status: community
|
|
60
|
+
source: wiki.redmodding.org "Altering Appearances within Wolvenkit - Full Workflow", section
|
|
61
|
+
"Modifying the Clothes" (closing warning hint)
|
|
62
|
+
tags:
|
|
63
|
+
- npc
|
|
64
|
+
- appearance
|
|
65
|
+
- appearancevisualcontroller
|
|
66
|
+
- dependency
|
|
67
|
+
- gotcha
|
|
68
|
+
detail: "The field really is spelled `appearanceDependancy` in the engine data. Corrected
|
|
69
|
+
2026-09-07: the page says the component will not \"appear correctly\"; the previous claim's
|
|
70
|
+
\"silently keeps the old dependency resolved\" was unsourced."
|
|
71
|
+
- id: cp2077.npc.appearance.amm-collab-file-layout
|
|
72
|
+
claim: "An AMM custom-appearance Collab is two files in two different places: the Lua at
|
|
73
|
+
`bin/x64/plugins/cyber_engine_tweaks/mods/AppearanceMenuMod/Collabs/Custom
|
|
74
|
+
Appearances/your_custom_file.lua` inside the WolvenKit project's Resources directory, and a
|
|
75
|
+
`your_project_name.archive.xl` created DIRECTLY in that Resources directory, not alongside the
|
|
76
|
+
Lua."
|
|
77
|
+
status: community
|
|
78
|
+
source: 'wiki.redmodding.org "AMM: Custom NPC appearances", sections "The .lua file" (folder tree)
|
|
79
|
+
and "The .xl file > 1. Create the file"'
|
|
80
|
+
tags:
|
|
81
|
+
- npc
|
|
82
|
+
- amm
|
|
83
|
+
- collab
|
|
84
|
+
- file-structure
|
|
85
|
+
- cet
|
|
86
|
+
detail: "Corrected 2026-09-07: the previous claim placed the `.xl` \"in that same folder\" as the
|
|
87
|
+
Lua, which the page contradicts — \"Directly in your project's Resources directory, create an
|
|
88
|
+
empty text file called `your_project_name.archive.xl`\"."
|
|
89
|
+
- id: cp2077.npc.appearance.amm-lua-required-fields
|
|
90
|
+
claim: An AMM Collab Lua returns a table with `modder`, `unique_identifier`, `entity_id` and
|
|
91
|
+
`appearances`. `unique_identifier` "must be UNIQUE so be creative! NO SPACES OR SYMBOLS
|
|
92
|
+
ALLOWED"; `entity_id` is a string such as `"0xF43B2B48, 18"` that "You can find... using AMM's
|
|
93
|
+
Swap tab and looking at the NPC".
|
|
94
|
+
status: community
|
|
95
|
+
source: 'wiki.redmodding.org "AMM: Custom NPC appearances", section "The .lua file" (the example Lua
|
|
96
|
+
and its comments)'
|
|
97
|
+
tags:
|
|
98
|
+
- npc
|
|
99
|
+
- amm
|
|
100
|
+
- lua
|
|
101
|
+
- entity-id
|
|
102
|
+
- naming
|
|
103
|
+
- required-field
|
|
104
|
+
detail: The page links a dedicated finding-files-amm-npcs guide for locating the entity ID. Section
|
|
105
|
+
name corrected 2026-09-07 (there is no "Required Fields (.lua file)" heading).
|
|
106
|
+
- id: cp2077.npc.appearance.amm-delivered-as-resourcepatch
|
|
107
|
+
claim: "Community page confirms and extends cp2077.archivexl.manifest-top-level-keys. The Collab's
|
|
108
|
+
`.xl` uses a `resource:` / `patch:` block mapping the modder's own file to the vanilla file it
|
|
109
|
+
adds to — `path\\to\\your\\app_file.app: -
|
|
110
|
+
base\\characters\\appearances\\main_npc\\goro_takemura.app` and `path\\to\\your\\ent_file.ent:
|
|
111
|
+
- base\\quest\\primary_characters\\takemura.ent` — because \"Do not overwrite an NPC's
|
|
112
|
+
original files! This will cause compatibility issues for every single modder out there, and
|
|
113
|
+
risk breaking the NPC with every game update.\""
|
|
114
|
+
status: community
|
|
115
|
+
source: 'wiki.redmodding.org "AMM: Custom NPC appearances", danger hint under "Summary" and sections
|
|
116
|
+
"The .xl file > 1. Create the file", "2. Adjust the .app file path" and "3. Adjusting the .ent
|
|
117
|
+
file path"'
|
|
118
|
+
tags:
|
|
119
|
+
- npc
|
|
120
|
+
- amm
|
|
121
|
+
- archivexl
|
|
122
|
+
- resourcepatch
|
|
123
|
+
- compatibility
|
|
124
|
+
detail: Names cp2077.archivexl.manifest-top-level-keys
|
|
125
|
+
(knowledge/cyberpunk2077/archivexl.manifest.yaml), an inferred fact that lists `localization`,
|
|
126
|
+
`factories` and `streaming` as the three top-level `.xl` keys while explicitly saying that is
|
|
127
|
+
only what one weapon-mod manifest uses, not the whole schema. This page documents a fourth
|
|
128
|
+
top-level key, `resource`, with a `patch` sub-key — the same mechanism as
|
|
129
|
+
cp2077.clothing.refits.body-patch-lists-gendered-player-ents and
|
|
130
|
+
cp2077.anims.sets.resourcepatch-mounting-route. Both replaced paths are "relative paths"
|
|
131
|
+
copied from WolvenKit via `Copy Relative Path`.
|
|
132
|
+
- id: cp2077.npc.appearance.amm-appearance-names-must-match-exactly
|
|
133
|
+
claim: The Lua's `appearances` array is "a list of appearances you added" and "It has to be the
|
|
134
|
+
exact name you added to the entity file".
|
|
135
|
+
status: community
|
|
136
|
+
source: 'wiki.redmodding.org "AMM: Custom NPC appearances", section "The .lua file" (comments in the
|
|
137
|
+
example Lua)'
|
|
138
|
+
tags:
|
|
139
|
+
- npc
|
|
140
|
+
- amm
|
|
141
|
+
- appearance-name
|
|
142
|
+
- exact-match
|
|
143
|
+
- gotcha
|
|
144
|
+
detail: 'Corrected 2026-09-07: "character-for-character including case" and the stated consequence
|
|
145
|
+
were trimmed — the page says "exact name" without spelling out case handling or the failure
|
|
146
|
+
mode.'
|
|
147
|
+
- id: cp2077.npc.appearance.yaml-indentation-strictness
|
|
148
|
+
claim: "The `.xl` block is indentation-sensitive: \"Do not change the indent (number of spaces at
|
|
149
|
+
the beginning of each line)\", and \"If your custom appearances aren't working, run your .xl
|
|
150
|
+
file through yamllint and fix any mistakes.\""
|
|
151
|
+
status: community
|
|
152
|
+
source: 'wiki.redmodding.org "AMM: Custom NPC appearances", info hint under "The .xl file > 1.
|
|
153
|
+
Create the file" and section "4. Optional: Fixing that damn indent"'
|
|
154
|
+
tags:
|
|
155
|
+
- npc
|
|
156
|
+
- amm
|
|
157
|
+
- yaml
|
|
158
|
+
- indentation
|
|
159
|
+
- gotcha
|
|
160
|
+
detail: "The body-mods page gives the same advice for its own `.xl`/`.yaml`: \"Double-check your
|
|
161
|
+
`.yaml` via yamllint and make sure you don't have syntax errors (indent matters)\". Section
|
|
162
|
+
names corrected 2026-09-07."
|
|
163
|
+
- id: cp2077.npc.appearance.world-androids-use-the-2-0-templates
|
|
164
|
+
claim: "The game's android character records resolve, almost all of them, to two Phantom Liberty-era
|
|
165
|
+
templates: ep1/characters/entities/corpo/corpo__ep1_android_ma.ent (62 records: the Arasaka,
|
|
166
|
+
Militech, NCPD, security, Kang Tao and Sixth Street androids with their district variants) and
|
|
167
|
+
ep1/characters/entities/gang/gang__ep1_android_ma.ent (19: Maelstrom, Wraiths, Scavengers).
|
|
168
|
+
Only Character.android_guards resolves to the base game's
|
|
169
|
+
base/characters/entities/corpo/corpo__android_ma.ent. Both 2.0 templates use man_base.rig,
|
|
170
|
+
carry Item_Attachment_Slot with Head, and draw their looks from the base game's
|
|
171
|
+
corpo__android_ma.app (6 appearances on the corpo template) and gang__android_ma.app (22 on
|
|
172
|
+
the gang one), under entity-level names prefixed corpo__android_ma_ / gang__android_ma_."
|
|
173
|
+
status: verified
|
|
174
|
+
verified_on: "2.31"
|
|
175
|
+
source: ModWright field verification
|
|
176
|
+
tags:
|
|
177
|
+
- android
|
|
178
|
+
- npc
|
|
179
|
+
- template
|
|
180
|
+
- appearance
|
|
181
|
+
- archivexl
|
|
182
|
+
- patch
|
|
183
|
+
detail: A mod that patches NPC templates by path (an ArchiveXL resource.patch list) and lists only
|
|
184
|
+
the base-game android templates misses every world android; a quickhack mod's camera patch did
|
|
185
|
+
until v0.12.22.
|
|
186
|
+
- id: cp2077.npc.appearance.spawning-a-default-appearance-record-can-render-nothing
|
|
187
|
+
claim: "exEntitySpawner.SpawnRecord of Character.maelstrom_android_android2_copperhead_ma (the
|
|
188
|
+
gang__ep1_android_ma.ent template) with no appearance argument gave an android with no
|
|
189
|
+
rendered body: only its marker and weak points. GetCurrentAppearanceName read \"default\". The
|
|
190
|
+
same call with gang__android_ma_maelstrom_droid__lvl2_01 as the third argument rendered. The
|
|
191
|
+
corpo template's Arasaka record, spawned the same way without an appearance, rendered in
|
|
192
|
+
corpo__android_ma_arasaka_droid__lvl2_01."
|
|
193
|
+
status: verified
|
|
194
|
+
verified_on: "2.31"
|
|
195
|
+
source: ModWright field verification
|
|
196
|
+
tags:
|
|
197
|
+
- spawn
|
|
198
|
+
- appearance
|
|
199
|
+
- android
|
|
200
|
+
- codeware
|
|
201
|
+
- bridge
|
|
202
|
+
- id: cp2077.npc.appearance.the-distance-proxy-mesh-is-the-engines
|
|
203
|
+
claim: "An NPC appearance carries an AppearanceProxyMesh (an entSkinnedMeshComponent), the
|
|
204
|
+
low-detail stand-in the engine switches on and off with the viewer's distance. Script that
|
|
205
|
+
switches every visual component off and later restores each one's saved on/off state forces
|
|
206
|
+
the proxy back on if it was on at the save (the NPC far away then). Once the viewer is close,
|
|
207
|
+
the NPC renders only its weapon: its meshes are on, their masks right, and an off-on of every
|
|
208
|
+
component does not help. It rendered again by itself later."
|
|
209
|
+
status: verified
|
|
210
|
+
verified_on: "2.31"
|
|
211
|
+
source: ModWright field verification
|
|
212
|
+
tags:
|
|
213
|
+
- appearance
|
|
214
|
+
- lod
|
|
215
|
+
- proxy
|
|
216
|
+
- mesh
|
|
217
|
+
- npc
|
|
218
|
+
- take
|
|
219
|
+
related:
|
|
220
|
+
- cp2077.npc.appearance.world-androids-use-the-2-0-templates
|
|
221
|
+
- id: cp2077.npc.appearance.a-changed-mask-draws-after-an-off-on
|
|
222
|
+
claim: A visual component's chunkMask change is drawn only once the component re-registers (Toggle
|
|
223
|
+
off then on); this holds for the AppearanceProxyMesh too. Hiding an NPC by zeroing masks and
|
|
224
|
+
restoring them later leaves meshes the engine re-enables afterwards drawing nothing (every
|
|
225
|
+
mask right, every mesh on) until an off-on; one off-on of every enabled visual component, a
|
|
226
|
+
second and three seconds after the restore, makes it visible. Toggling a component the engine
|
|
227
|
+
owns (the proxy) to a remembered state is what
|
|
228
|
+
cp2077.npc.appearance.the-distance-proxy-mesh-is-the-engines warns against; an off-on only
|
|
229
|
+
when it is on now keeps the engine's state.
|
|
230
|
+
status: verified
|
|
231
|
+
verified_on: "2.31"
|
|
232
|
+
source: ModWright field verification
|
|
233
|
+
tags:
|
|
234
|
+
- appearance
|
|
235
|
+
- mask
|
|
236
|
+
- proxy
|
|
237
|
+
- toggle
|
|
238
|
+
- npc
|
|
239
|
+
- hide
|
|
240
|
+
related:
|
|
241
|
+
- cp2077.npc.appearance.the-distance-proxy-mesh-is-the-engines
|
|
242
|
+
- id: cp2077.npc.appearance.effect-spawners-are-visual-components
|
|
243
|
+
claim: "entEffectSpawnerComponent is an entIVisualComponent: a hide that toggles every visual
|
|
244
|
+
component off also disables the NPC's effect spawners. Disabling a spawner does not stop an
|
|
245
|
+
effect already playing, and an entKillEffectEvent queued in the same frame then fails to stop
|
|
246
|
+
it: the 2.0 android's eye scan (\"scan\", on ScanEffectSpawner) hung in the air. Left enabled,
|
|
247
|
+
the kill by name works (with a second kill at the freeze half a second later, the scan went)."
|
|
248
|
+
status: inferred
|
|
249
|
+
verified_on: "2.31"
|
|
250
|
+
source: ModWright research
|
|
251
|
+
tags:
|
|
252
|
+
- effects
|
|
253
|
+
- spawner
|
|
254
|
+
- kill
|
|
255
|
+
- hide
|
|
256
|
+
- npc
|
|
257
|
+
- id: cp2077.npc.appearance.a-human-looks-head-group
|
|
258
|
+
claim: "A human NPC look's meshes name their slot by prefix; the head group is h0_ (the head), ht_
|
|
259
|
+
(teeth), he_ (eyes), heb_ (eyebrows), hh_ (hair), hx_ (makeup), h1_ (hats, masks, kerchiefs)
|
|
260
|
+
and h2_ (helmets); the body is t0_/t1_/t2_ (torso layers), a0_ (arms; \"_big\" variants on the
|
|
261
|
+
strong looks), l1_ (legs), s1_ (shoes), g1_ (gloves), i1_ (items, slots, chokers). An NPC
|
|
262
|
+
template carries no meshes itself: its looks are entries naming an .app appearance
|
|
263
|
+
(gang__ep1_maelstrom_ma.ent: 38 entity-level looks, all from gang__maelstrom_ma.app, on
|
|
264
|
+
man_base.rig, the strong looks included)."
|
|
265
|
+
status: verified
|
|
266
|
+
verified_on: "2.31"
|
|
267
|
+
source: ModWright field verification
|
|
268
|
+
tags:
|
|
269
|
+
- appearance
|
|
270
|
+
- mesh
|
|
271
|
+
- human
|
|
272
|
+
- head
|
|
273
|
+
- fpp
|
|
274
|
+
related:
|
|
275
|
+
- cp2077.npc.appearance.world-androids-use-the-2-0-templates
|