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,171 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: fx.lights
|
|
3
|
+
title: Weapon-mounted dynamic lights and thermal emissive glow
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.fx.lights.app-baked-light-component-does-not-render
|
|
6
|
+
claim: "A gameLightComponent injected directly into a weapon's .app (both the appearance's
|
|
7
|
+
components array and its compiledData RedPackage chunks) assembles correctly at runtime — it
|
|
8
|
+
is findable via FindComponentByName — but its render side never initializes: setter calls
|
|
9
|
+
(SetStrength/SetRadius/SetColor) no-op and no light is cast."
|
|
10
|
+
status: verified
|
|
11
|
+
source: ModWright field verification
|
|
12
|
+
tags:
|
|
13
|
+
- fx
|
|
14
|
+
- light
|
|
15
|
+
- weapon
|
|
16
|
+
- app
|
|
17
|
+
- silent-failure
|
|
18
|
+
detail: This was tried as the fix for runtime AddComponent crashing (see
|
|
19
|
+
cp2077.fx.lights.runtime-addcomponent-crashes-on-draw). It failed for a different reason and
|
|
20
|
+
cost a full test cycle before the project moved to spawning a separate light entity instead
|
|
21
|
+
(which does work — see cp2077.fx.lights.vanilla-spotlight-donor-strip-pattern).
|
|
22
|
+
- id: cp2077.fx.lights.runtime-addcomponent-crashes-on-draw
|
|
23
|
+
claim: Adding a gameLightComponent to a weapon entity at runtime via Codeware's AddComponent crashes
|
|
24
|
+
the game on weapon draw; this is why the reference flashlight mod spawns a separate light
|
|
25
|
+
entity and teleport-follows it instead of attaching a component to the weapon itself.
|
|
26
|
+
status: inferred
|
|
27
|
+
source: ModWright research
|
|
28
|
+
tags:
|
|
29
|
+
- fx
|
|
30
|
+
- light
|
|
31
|
+
- weapon
|
|
32
|
+
- addcomponent
|
|
33
|
+
- crash
|
|
34
|
+
detail: "Recorded as the reason a weapon mod's own CET light helper was built around
|
|
35
|
+
entity-spawn-and-follow rather than component injection at either runtime or build time. The
|
|
36
|
+
app-baked alternative was tried next and also failed, for an unrelated reason (see
|
|
37
|
+
cp2077.fx.lights.app-baked-light-component-does-not-render). Note (2026-09-07): several
|
|
38
|
+
crash-on-load cases occurred during this work, but this specific one is not recalled, so the
|
|
39
|
+
fact stays inferred rather than verified."
|
|
40
|
+
- id: cp2077.fx.lights.bare-ent-template-missing-device-structure
|
|
41
|
+
claim: 'Spawning a gameLightComponent on a bare entEntity template (no other structure) via
|
|
42
|
+
WorldFunctionalTests.SpawnEntity fails silently: the entity spawns but the light component
|
|
43
|
+
never resolves (FindComponentByName returns nothing) because a working spawnable light needs
|
|
44
|
+
the full vanilla "device" chunk structure (an ElectricLight + ElectricLightController pairing,
|
|
45
|
+
7 Sections), not just an entity wrapping the light component.'
|
|
46
|
+
status: verified
|
|
47
|
+
source: ModWright field verification
|
|
48
|
+
tags:
|
|
49
|
+
- fx
|
|
50
|
+
- light
|
|
51
|
+
- entity
|
|
52
|
+
- device-structure
|
|
53
|
+
- silent-failure
|
|
54
|
+
detail: "Diagnosed by a structural diff against the working donor: the flashlight mod's light.ent
|
|
55
|
+
turned out to BE vanilla
|
|
56
|
+
base\\gameplay\\devices\\lighting\\industrial\\spotlight\\spotlight_a.ent with
|
|
57
|
+
entMeshComponent + entColliderComponent stripped — its CRUIDs still match vanilla's, which a
|
|
58
|
+
from-scratch entity cannot replicate. See
|
|
59
|
+
cp2077.fx.lights.vanilla-spotlight-donor-strip-pattern."
|
|
60
|
+
- id: cp2077.fx.lights.wolvenkit-blank-ent-template-writes-no-entity-chunk
|
|
61
|
+
claim: A brand-new .ent file created from WolvenKit GUI's blank template writes NO entity object
|
|
62
|
+
chunk into compiledData (chunk 0 must be the entity class instance, followed by components);
|
|
63
|
+
spawning such a file crashes the game instantly, and the fix is to instantiate the root
|
|
64
|
+
`entity` handle explicitly via the GUI's add-array-item control.
|
|
65
|
+
status: verified
|
|
66
|
+
source: ModWright field verification
|
|
67
|
+
tags:
|
|
68
|
+
- fx
|
|
69
|
+
- light
|
|
70
|
+
- ent
|
|
71
|
+
- wolvenkit
|
|
72
|
+
- gui
|
|
73
|
+
- crash
|
|
74
|
+
detail: The GUI file had only the component (CruidIndex -1 vs. a working donor's 0; 6 Sections vs.
|
|
75
|
+
7). Instantiating the entity handle via the GUI's yellow (+) control removed WolvenKit's
|
|
76
|
+
"entity is null" warning and the instant crash, but the resulting plain-entEntity template
|
|
77
|
+
STILL failed to spawn a working light — see
|
|
78
|
+
cp2077.fx.lights.bare-ent-template-missing-device-structure — because the entity-chunk fix
|
|
79
|
+
alone does not supply the device structure a spawnable light needs.
|
|
80
|
+
- id: cp2077.fx.lights.vanilla-spotlight-donor-strip-pattern
|
|
81
|
+
claim: A working weapon-glow light entity can be built by taking vanilla
|
|
82
|
+
base\gameplay\devices\lighting\industrial\spotlight\spotlight_a.ent (a full,
|
|
83
|
+
correctly-structured light device) and stripping its entMeshComponent + entColliderComponent
|
|
84
|
+
from BOTH the compiledData chunks and the components array, remapping the CruidDict indices,
|
|
85
|
+
then retuning the retained gameLightComponent's fields.
|
|
86
|
+
status: verified
|
|
87
|
+
source: ModWright field verification
|
|
88
|
+
tags:
|
|
89
|
+
- fx
|
|
90
|
+
- light
|
|
91
|
+
- entity
|
|
92
|
+
- donor
|
|
93
|
+
- vanilla
|
|
94
|
+
- strip
|
|
95
|
+
detail: "This replaced an earlier version derived from a third-party flashlight mod's light.ent,
|
|
96
|
+
which had the same working structure but an open licensing question; deriving from vanilla
|
|
97
|
+
instead is covered by CDPR's fan-content policy like every other donor asset in the mod. Final
|
|
98
|
+
shipped values: LT_Point, color (255,130,30), intensity 800, radius 8, autoHideDistance 25, no
|
|
99
|
+
local shadows, turnOnByDefault flipped 0->1, isDestructible flipped 1->0 from the template
|
|
100
|
+
defaults. Confirmed working by the user after the rebuild."
|
|
101
|
+
- id: cp2077.fx.lights.spawn-entity-is-async-guard-required
|
|
102
|
+
claim: "WorldFunctionalTests.SpawnEntity is asynchronous: FindEntityByID for the new entity's ID
|
|
103
|
+
stays nil for several frames after the spawn call returns. Code that re-attempts a spawn
|
|
104
|
+
whenever the entity is not yet found (with no in-flight guard) will spawn a new entity every
|
|
105
|
+
update tick until the first one resolves, orphaning every earlier attempt."
|
|
106
|
+
status: verified
|
|
107
|
+
source: ModWright field verification
|
|
108
|
+
tags:
|
|
109
|
+
- fx
|
|
110
|
+
- light
|
|
111
|
+
- entity
|
|
112
|
+
- spawn
|
|
113
|
+
- async
|
|
114
|
+
- race-condition
|
|
115
|
+
detail: "Symptom before the guard: the light grew much brighter after several weapon draws, because
|
|
116
|
+
N stacked orphaned lights survived each weapon switch. The fix tracks every spawned ID in a
|
|
117
|
+
list and despawns all of them (not just the last tracked one) whenever the weapon is put away,
|
|
118
|
+
plus an awaitingSpawn flag with a 3.0 s timeout before allowing a retry."
|
|
119
|
+
- id: cp2077.fx.lights.emissive-material-alone-does-not-illuminate-surfaces
|
|
120
|
+
claim: An emissive material (e.g. the thermal blade glow) does not cast light onto nearby surfaces
|
|
121
|
+
under this engine's rasterized rendering; a separate dynamic light component/entity is
|
|
122
|
+
required to make the blade appear to light up its surroundings.
|
|
123
|
+
status: inferred
|
|
124
|
+
source: ModWright research
|
|
125
|
+
tags:
|
|
126
|
+
- fx
|
|
127
|
+
- light
|
|
128
|
+
- emissive
|
|
129
|
+
- material
|
|
130
|
+
- rendering
|
|
131
|
+
detail: This is the stated reason a weapon mod built a whole separate dynamic light (a CET helper
|
|
132
|
+
with its own glow_light.ent) on top of the already-working emissive blade material — the two
|
|
133
|
+
are additive, not the same effect.
|
|
134
|
+
- id: cp2077.fx.lights.light-component-runtime-tuning-api
|
|
135
|
+
claim: A spawned entity's gameLightComponent can be retuned live from redscript/Lua via
|
|
136
|
+
SetStrength(float), SetRadius(float), and SetColor(Color), looked up by FindComponentByName on
|
|
137
|
+
the entity; this is a real, working runtime API distinct from the app-baked injection route,
|
|
138
|
+
which does not respond to the same setters.
|
|
139
|
+
status: verified
|
|
140
|
+
source: ModWright field verification
|
|
141
|
+
tags:
|
|
142
|
+
- fx
|
|
143
|
+
- light
|
|
144
|
+
- component
|
|
145
|
+
- runtime
|
|
146
|
+
- api
|
|
147
|
+
detail: "Final user-tuned values for the shipped (pre-removal) light: strength 0.01 (deliberately
|
|
148
|
+
subtle), radius 0.0, color (255,130,30), weapon-local offset (0, 0.30, 0.20) rotated with the
|
|
149
|
+
weapon via a pure-Lua quaternion rotation. Contrast with
|
|
150
|
+
cp2077.fx.lights.app-baked-light-component-does-not-render, where the identical setters
|
|
151
|
+
silently do nothing on a component assembled into the .app instead of spawned as its own
|
|
152
|
+
entity."
|
|
153
|
+
- id: cp2077.fx.lights.cet-glow-light-dropped-no-functional-loss
|
|
154
|
+
claim: Removing the CET-driven weapon glow light entirely from the shipped mod has no effect on the
|
|
155
|
+
blade's emissive glow, heat haze, or tip smoke — those are independent systems living in the
|
|
156
|
+
mesh materials and the archive's effect descriptors — and doing so drops Cyber Engine Tweaks
|
|
157
|
+
from the mod's requirements entirely.
|
|
158
|
+
status: verified
|
|
159
|
+
source: ModWright field verification
|
|
160
|
+
tags:
|
|
161
|
+
- fx
|
|
162
|
+
- light
|
|
163
|
+
- cet
|
|
164
|
+
- ship-decision
|
|
165
|
+
- dependency
|
|
166
|
+
detail: The verdict after comparing both builds in game was to make the no-light version the
|
|
167
|
+
standard. The point light only added a dynamic cast onto nearby surfaces (see
|
|
168
|
+
cp2077.fx.lights.emissive-material-alone-does-not-illuminate-surfaces) and did not justify a
|
|
169
|
+
whole extra dependency. A build switch restores it; the CET light helper stays in the repo as
|
|
170
|
+
a dev harness. Shipped requirements are therefore RED4ext + redscript + TweakXL + ArchiveXL
|
|
171
|
+
only.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: hair.modding
|
|
3
|
+
title: Hair mesh/rig/animgraph triplet and vertex-color conventions
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.hair.modding.filename-triplet-must-match
|
|
6
|
+
claim: "Hair replacement replaces a set of three files that must share one base filename: \"you need
|
|
7
|
+
to rename your imported mesh to `fhair33_pt1.mesh`. If that's the case, you need to rename the
|
|
8
|
+
`.animgraph` and `.rig` to `fhair33_pt1.animgraph` and `fhair33_pt1.rig`.\""
|
|
9
|
+
status: community
|
|
10
|
+
source: wiki.redmodding.org "Basic Hairstyle Replacement Tutorial", section "Wolvenkit"
|
|
11
|
+
tags:
|
|
12
|
+
- hair
|
|
13
|
+
- mesh
|
|
14
|
+
- rig
|
|
15
|
+
- animgraph
|
|
16
|
+
- naming
|
|
17
|
+
- file-triplet
|
|
18
|
+
- gotcha
|
|
19
|
+
detail: 'Symptom, merged in from the former cp2077.hair.modding.mismatched-triplet-morphs-weirdly on
|
|
20
|
+
2026-09-07 (it is the next sentence of the same paragraph): "Having the wrong names will cause
|
|
21
|
+
your mesh to morph weirdly." The renamed triplet is moved into the `uuh4v_framework` folder,
|
|
22
|
+
replacing the original files. Section name corrected (there is no "File Triplet Structure"
|
|
23
|
+
heading).'
|
|
24
|
+
- id: cp2077.hair.modding.uuh4v-slot-filename-convention
|
|
25
|
+
claim: '`fhair33_pt1` is a UUH4V Framework slot filename, not a vanilla one: the framework ships
|
|
26
|
+
numbered file sets and you pick the one matching the character-creator hairstyle you are
|
|
27
|
+
replacing ("I want to replace FemV hairstyle 33, so I chose file 33 for FemV"). Vanilla hair
|
|
28
|
+
meshes are instead named `hh_<index>_wa__<name>` / `hh_<index>_ma__<name>` under
|
|
29
|
+
`base\characters\common\hair\`, e.g. `hh_121_wa__t_bug_common` is FemV character-creator
|
|
30
|
+
hairstyle 33.'
|
|
31
|
+
status: community
|
|
32
|
+
source: 'wiki.redmodding.org "Basic Hairstyle Replacement Tutorial", section "Wolvenkit"; vanilla
|
|
33
|
+
naming from "Cheat Sheet: Hair", section "Name of meshes by index"'
|
|
34
|
+
tags:
|
|
35
|
+
- hair
|
|
36
|
+
- naming
|
|
37
|
+
- filename
|
|
38
|
+
- convention
|
|
39
|
+
- uuh4v
|
|
40
|
+
detail: Renamed from cp2077.hair.modding.vanilla-filename-convention and corrected on 2026-09-07.
|
|
41
|
+
The previous claim, that vanilla hairstyle files follow `[gender]hair[number]_pt[partition]`,
|
|
42
|
+
is contradicted by the wiki's own hair cheat sheet; no wiki page states what `pt` stands for,
|
|
43
|
+
so "partition" was dropped as invented. To find physics-enabled vanilla hair the cheat sheet
|
|
44
|
+
suggests the WolvenKit search `base\characters\common\hair > .animgraph > _wa_`.
|
|
45
|
+
- id: cp2077.hair.modding.first-material-entry-governs-all-appearances
|
|
46
|
+
claim: "\"Unless you have multiple submeshes, only the first entry in the material matters\" — so
|
|
47
|
+
once hair submeshes are joined into one mesh, \"only the first material entry matters for
|
|
48
|
+
every appearance\", across all 35 appearances for the game's 35 hair colours. The cheap fix is
|
|
49
|
+
to copy the materials from a hairstyle that already works rather than retargeting all 35 by
|
|
50
|
+
hand."
|
|
51
|
+
status: community
|
|
52
|
+
source: wiki.redmodding.org "Basic Hairstyle Replacement Tutorial", section "Wolvenkit"
|
|
53
|
+
tags:
|
|
54
|
+
- hair
|
|
55
|
+
- material
|
|
56
|
+
- join
|
|
57
|
+
- silent-failure
|
|
58
|
+
- gotcha
|
|
59
|
+
detail: "The guide's concrete case is wanting `cards` where the first entry is `cards_top`. 35 is
|
|
60
|
+
exact, not \"roughly 35\": \"Cheat Sheet: Hair\" lists 35 colour names by index, from
|
|
61
|
+
`05_brown_liquorice` (CC slot 1) to `35_silver_rose`. Corrected 2026-09-07."
|
|
62
|
+
- id: cp2077.hair.modding.version-floors
|
|
63
|
+
claim: The hair-replacement tutorial's requirements are WolvenKit >= 8.13.0, Blender >= 4.0, the
|
|
64
|
+
WolvenKit Blender IO Suite (most recent version), and the UUH4V Framework "(To avoid conflicts
|
|
65
|
+
with spawned NPCs)".
|
|
66
|
+
status: community
|
|
67
|
+
source: wiki.redmodding.org "Basic Hairstyle Replacement Tutorial", section "Requirements"
|
|
68
|
+
tags:
|
|
69
|
+
- hair
|
|
70
|
+
- version-floor
|
|
71
|
+
- wolvenkit
|
|
72
|
+
- blender
|
|
73
|
+
- uuh4v
|
|
74
|
+
detail: "Corrected 2026-09-07: the stated reason for UUH4V is conflicts with SPAWNED NPCs, not
|
|
75
|
+
load-order conflicts with other hair mods. Tool versions are on their own numbering, so they
|
|
76
|
+
stay in the claim with no `verified_on`."
|
|
77
|
+
- id: cp2077.hair.modding.single-head-bone-weighting
|
|
78
|
+
claim: "\"Unlike clothes, most head meshes only have one bone: `Head`\" — the hair mesh is weighted
|
|
79
|
+
by selecting all vertices in Edit Mode, creating the `Head` entry in the Data tab of the
|
|
80
|
+
Properties panel and clicking `Assign`. A mesh rigged this way \"would stay on your
|
|
81
|
+
character's head like a helmet\", i.e. with no physics."
|
|
82
|
+
status: community
|
|
83
|
+
source: wiki.redmodding.org "Basic Hairstyle Replacement Tutorial", section "The Mesh > Rigging the
|
|
84
|
+
hair"
|
|
85
|
+
tags:
|
|
86
|
+
- hair
|
|
87
|
+
- rig
|
|
88
|
+
- bone
|
|
89
|
+
- weighting
|
|
90
|
+
- head-bone
|
|
91
|
+
detail: "Corrected 2026-09-07: physics do NOT come from simply pairing an `.animgraph`/`.rig`. Per
|
|
92
|
+
\"The Physics\" and \"Finding vanilla hair to replace\", you separate the parts that should
|
|
93
|
+
move into submeshes, export a vanilla hairstyle whose shape overlaps yours together with its
|
|
94
|
+
`.rig` and `.animgraph` (\"They are the physic components for the hair\"), transfer weights
|
|
95
|
+
from the vanilla mesh to yours, and parent your meshes under the vanilla armature with an
|
|
96
|
+
armature modifier. The guide's own caveat: this is \"the easiest and fastest method, but also
|
|
97
|
+
the most unreliable\", and leaving the hair static is an acceptable outcome. It names donor
|
|
98
|
+
meshes by part: `hh_081_wa__buns_02` for front/right bangs, `hh_040_wa__pixie_bob` for left
|
|
99
|
+
bangs, `hh_118_wa__gillean` or `hh_115_wa__alanah` for hair on the shoulder,
|
|
100
|
+
`hh_083_wa__ponytail_01` for ponytails."
|
|
101
|
+
- id: cp2077.hair.modding.adapt-uv-to-shared-hair-texture
|
|
102
|
+
claim: "\"If you are porting a hairstyle from another game, it is highly recommended that you just
|
|
103
|
+
adapt the UV of your hairstyle to fit CP2077's shared hair texture instead of using the
|
|
104
|
+
original texture. This will allow your hair to use the game's hair color system, as well as
|
|
105
|
+
saving you a lot of hassle when handling the materials.\""
|
|
106
|
+
status: community
|
|
107
|
+
source: wiki.redmodding.org "Basic Hairstyle Replacement Tutorial", section "The Texture"
|
|
108
|
+
tags:
|
|
109
|
+
- hair
|
|
110
|
+
- texture
|
|
111
|
+
- uv
|
|
112
|
+
- shared-texture
|
|
113
|
+
- hair-color
|
|
114
|
+
detail: Section name corrected 2026-09-07 (this is under "The Texture", not "Mesh Preparation").
|
|
115
|
+
- id: cp2077.hair.modding.vertex-color-ao-convention
|
|
116
|
+
claim: "\"Cyberpunk hair material uses the vertex colour attribute to fake ambient occlusion. They
|
|
117
|
+
are usually red at the scalp and the innermost layer of hair cards, whereas the outer layers
|
|
118
|
+
are black.\" Doing it the other way round looks bad; the page's caption states the rule as
|
|
119
|
+
\"Red is dark and dull, black is bright and shiny\"."
|
|
120
|
+
status: community
|
|
121
|
+
source: wiki.redmodding.org "Vertex Color and Hair", section "Summary"
|
|
122
|
+
tags:
|
|
123
|
+
- hair
|
|
124
|
+
- vertex-color
|
|
125
|
+
- ambient-occlusion
|
|
126
|
+
- shader
|
|
127
|
+
- gotcha
|
|
128
|
+
detail: The page does not specify which RGB channel(s) or numeric range carry this — only the
|
|
129
|
+
relative convention — so treat exact channel/value authoring as unverified beyond "red at
|
|
130
|
+
scalp and inner layers, black on outer layers". Section name corrected 2026-09-07 (there is no
|
|
131
|
+
"Ambient Occlusion (AO) Channel" heading).
|
|
132
|
+
- id: cp2077.hair.modding.flow-map-encodes-strand-direction
|
|
133
|
+
claim: Separately from vertex-colour AO, Cyberpunk mimics anisotropy "with the flow texture, which
|
|
134
|
+
acts as a tangent map in telling the shader that the hair strands run from root to tip",
|
|
135
|
+
encoding directions as colour. "The dread flow map is inverted, as the dreadlocks have strands
|
|
136
|
+
running in the opposite direction."
|
|
137
|
+
status: community
|
|
138
|
+
source: wiki.redmodding.org "Vertex Color and Hair", section "Anisotropy"
|
|
139
|
+
tags:
|
|
140
|
+
- hair
|
|
141
|
+
- flow-map
|
|
142
|
+
- shader
|
|
143
|
+
- strand-direction
|
|
144
|
+
- dreadlocks
|
|
145
|
+
detail: 'Section name corrected 2026-09-07 (there is no "Related Concept: Flow Texture" heading).'
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: items.wiring
|
|
3
|
+
title: The yaml -> csv -> root_entity.ent -> .app -> mesh_entity.ent -> .mesh chain for item additions
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.items.wiring.four-structural-files-to-add-an-item
|
|
6
|
+
claim: "Registering a new item with TweakXL/ArchiveXL requires four structural files: the TweakXL
|
|
7
|
+
`.yaml` (the item's properties), the `.xl` manifest (tells ArchiveXL which factory csv and
|
|
8
|
+
localization json to register), the factory `.csv` (maps the yaml's `entityName` to a root
|
|
9
|
+
entity file) and the localization `.json` (translated display/description strings)."
|
|
10
|
+
status: community
|
|
11
|
+
source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
12
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
13
|
+
section "Structural files: telling the game about your mod"'
|
|
14
|
+
tags:
|
|
15
|
+
- items
|
|
16
|
+
- archivexl
|
|
17
|
+
- tweakxl
|
|
18
|
+
- file-structure
|
|
19
|
+
- id: cp2077.items.wiring.yaml-four-mappings
|
|
20
|
+
claim: "A TweakXL item yaml entry performs four mappings: `entityName` points to a row in the
|
|
21
|
+
factory csv; `appearanceName` is looked up (by name, up to the first suffix) in the root
|
|
22
|
+
entity the factory resolved to; `displayName`/`localizedDescription` are keys looked up in the
|
|
23
|
+
localization json, gender-branched into `maleVariant`/`femaleVariant`; `icon` hooks up the
|
|
24
|
+
inventory preview."
|
|
25
|
+
status: community
|
|
26
|
+
source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
27
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
28
|
+
section "The control file: yourModName.yaml"'
|
|
29
|
+
tags:
|
|
30
|
+
- items
|
|
31
|
+
- yaml
|
|
32
|
+
- entityname
|
|
33
|
+
- appearancename
|
|
34
|
+
- displayname
|
|
35
|
+
- icon
|
|
36
|
+
detail: "If a language's localization entry is missing, the English one is used as fallback
|
|
37
|
+
(documented under \"The .json file (custom texts, i18n)\"). Checked against the source
|
|
38
|
+
(2026-09-08): an earlier detail had the gender fallback backwards. The page says the opposite
|
|
39
|
+
— \"If you don't need a male-specific translation, you can leave it blank — by default,
|
|
40
|
+
`femaleVariant` will be used\", i.e. it is `maleVariant` that may be left blank, and
|
|
41
|
+
`femaleVariant` is the value used when it is."
|
|
42
|
+
- id: cp2077.items.wiring.factory-csv-links-entityname-to-root-entity
|
|
43
|
+
claim: The factory `.csv` file is where ArchiveXL looks up a yaml entry's `entityName` (matched
|
|
44
|
+
against the csv's first field/header) to find the corresponding root entity `.ent` path, and
|
|
45
|
+
the `appearanceName` from the yaml is then searched for inside that root entity.
|
|
46
|
+
status: community
|
|
47
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
48
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
49
|
+
section "The .csv file (the factory)"
|
|
50
|
+
tags:
|
|
51
|
+
- items
|
|
52
|
+
- factory-csv
|
|
53
|
+
- entityname
|
|
54
|
+
- root-entity
|
|
55
|
+
detail: "RELATED: this generic mechanism is the same one cp2077.archivexl.factories-csv-paths and
|
|
56
|
+
cp2077.archivexl.factory-csv-appearance-mapping document concretely for one weapon mod's own
|
|
57
|
+
factory_parts.csv (columns name, path, shared) — this fact states the general csv-lookup
|
|
58
|
+
mechanism, that one the specific shipped file's schema."
|
|
59
|
+
- id: cp2077.items.wiring.root-entity-is-appearance-lookup-dictionary
|
|
60
|
+
claim: 'The root entity (`root_entity.ent`) is described as "a glorified lookup dictionary": for a
|
|
61
|
+
given `appearanceName` it specifies which `.app` file to load and which appearance name inside
|
|
62
|
+
that `.app` to use; when using dynamic appearances only one appearance entry is needed here
|
|
63
|
+
(matched up to the `!` variant separator), and it must carry the `DynamicAppearance` tag.'
|
|
64
|
+
status: community
|
|
65
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
66
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
67
|
+
section "root_entity.ent"
|
|
68
|
+
tags:
|
|
69
|
+
- items
|
|
70
|
+
- root-entity
|
|
71
|
+
- dynamic-appearances
|
|
72
|
+
- dynamicappearance-tag
|
|
73
|
+
- id: cp2077.items.wiring.mesh-entity-replaces-app-component-array
|
|
74
|
+
claim: "`mesh_entity.ent` holds the components (chiefly an `entGarmentSkinnedMeshComponent`) that
|
|
75
|
+
determine how the equipment renders and moves; using a separate mesh entity file replaces
|
|
76
|
+
having to duplicate that component array inline inside every appearance of the `.app` file.
|
|
77
|
+
The component's `name` is what the `.app`'s `materialOverride`/`partsOverrides` array
|
|
78
|
+
references back."
|
|
79
|
+
status: community
|
|
80
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
81
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
82
|
+
section "mesh_entity.ent"
|
|
83
|
+
tags:
|
|
84
|
+
- items
|
|
85
|
+
- mesh_entity
|
|
86
|
+
- entgarmentskinnedmeshcomponent
|
|
87
|
+
- .app
|
|
88
|
+
- id: cp2077.items.wiring.mesh-component-name-prefix-must-be-kept
|
|
89
|
+
claim: When renaming a garment mesh component inside `mesh_entity.ent`, the component-type name
|
|
90
|
+
prefix (e.g. `t1_`) must be left in place — the game uses that prefix to calculate collisions
|
|
91
|
+
— even though the rest of the component's name is otherwise a free label.
|
|
92
|
+
status: community
|
|
93
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
94
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
95
|
+
warning under "mesh_entity.ent" ("you want to leave the component prefixes (t1_) in place —
|
|
96
|
+
the game needs them to calculate collisions!")
|
|
97
|
+
tags:
|
|
98
|
+
- items
|
|
99
|
+
- mesh_entity
|
|
100
|
+
- component-prefix
|
|
101
|
+
- collision
|
|
102
|
+
- gotcha
|
|
103
|
+
- id: cp2077.items.wiring.app-component-array-must-stay-empty
|
|
104
|
+
claim: An item's `appearance.app` file's own top-level `components` array must be left empty — items
|
|
105
|
+
load their components from `mesh_entity.ent` via `partsValues` instead; a non-empty
|
|
106
|
+
`components` array on an item `.app` is explicitly called out as wrong ("this is not an NPC
|
|
107
|
+
appearance!").
|
|
108
|
+
status: community
|
|
109
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
110
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md, danger
|
|
111
|
+
hint under "appearance.app" ("The .app file's component array should be **empty:** this is not
|
|
112
|
+
an NPC appearance!")
|
|
113
|
+
tags:
|
|
114
|
+
- items
|
|
115
|
+
- .app
|
|
116
|
+
- components
|
|
117
|
+
- gotcha
|
|
118
|
+
- validator
|
|
119
|
+
- id: cp2077.items.wiring.app-partsvalues-vs-partsoverrides
|
|
120
|
+
claim: Inside an item `appearance.app` entry, `partsValues` points at the `mesh_entity.ent` file(s)
|
|
121
|
+
to load as components, while `partsOverrides` tells the referenced mesh which
|
|
122
|
+
appearance/chunkmask to use; when using dynamic appearances (a single appearance entry with
|
|
123
|
+
components ignored) only `partsValues` needs to be set — `partsOverrides`-based chunkmask
|
|
124
|
+
hiding is the non-dynamic-appearance path.
|
|
125
|
+
status: community
|
|
126
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
127
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
128
|
+
section "appearance.app"
|
|
129
|
+
tags:
|
|
130
|
+
- items
|
|
131
|
+
- .app
|
|
132
|
+
- partsvalues
|
|
133
|
+
- partsoverrides
|
|
134
|
+
- dynamic-appearances
|
|
135
|
+
- id: cp2077.items.wiring.mesh-appearance-name-links-app-to-mesh
|
|
136
|
+
claim: Inside an item's `.app` appearance's `partsOverrides`, the `componentsOverride` entry's
|
|
137
|
+
`meshAppearance` field must match the `name` of a `meshMeshAppearance` entry inside the actual
|
|
138
|
+
`.mesh` resource file; the `.app` file itself does not define materials — it only selects
|
|
139
|
+
which named appearance inside the `.mesh` to use.
|
|
140
|
+
status: community
|
|
141
|
+
source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
142
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
143
|
+
section "appearance.app: Making changes" (steps 8-9)'
|
|
144
|
+
tags:
|
|
145
|
+
- items
|
|
146
|
+
- .app
|
|
147
|
+
- .mesh
|
|
148
|
+
- meshappearance
|
|
149
|
+
- wiring
|
|
150
|
+
- id: cp2077.items.wiring.mesh-material-index-must-match-array-position
|
|
151
|
+
claim: Inside a `.mesh` resource, a new `materials` entry's `index` field must match that entry's
|
|
152
|
+
actual position in the `materials` array, and the corresponding new entry appended to
|
|
153
|
+
`localMaterialBuffer` must also be placed at the matching position, because the mesh's
|
|
154
|
+
materials and localMaterialBuffer entries are matched to each other by numeric array index
|
|
155
|
+
rather than by name.
|
|
156
|
+
status: community
|
|
157
|
+
source: "CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
158
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
159
|
+
section \"Mesh: Making changes\", step 3 (\"Drag it to the last position of the array (that's
|
|
160
|
+
important, because the materials entries match by numeric index)\")"
|
|
161
|
+
tags:
|
|
162
|
+
- items
|
|
163
|
+
- .mesh
|
|
164
|
+
- materials
|
|
165
|
+
- localmaterialbuffer
|
|
166
|
+
- index
|
|
167
|
+
- gotcha
|
|
168
|
+
- id: cp2077.items.wiring.base-parameter-selects-equipment-slot
|
|
169
|
+
claim: An item yaml record's `$base` value determines which equipment slot the item occupies;
|
|
170
|
+
different equipment slots require picking a different "right" mesh entity file for the item,
|
|
171
|
+
per a separate per-slot reference the page defers to.
|
|
172
|
+
status: community
|
|
173
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
174
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
175
|
+
section "What is it, precious? The $base parameter" ("`$base` defines which slot the item will
|
|
176
|
+
use") and section "mesh_entity.ent" ("you need to pick the right mesh entity file for each
|
|
177
|
+
equipment slot", which defers to different-equipment-slots.md)
|
|
178
|
+
tags:
|
|
179
|
+
- items
|
|
180
|
+
- $base
|
|
181
|
+
- equipment-slot
|
|
182
|
+
- mesh_entity
|
|
183
|
+
- id: cp2077.items.wiring.moving-root-entity-requires-updating-factory-csv
|
|
184
|
+
claim: Moving (renaming/relocating) the root entity `.ent` file requires manually updating the path
|
|
185
|
+
recorded for it in the factory `.csv`; moving the `.app`/appearance file requires updating the
|
|
186
|
+
path inside `root_entity.ent`; moving the mesh entity requires updating the path inside every
|
|
187
|
+
appearance in the `.app` file. Each file only knows the next file's path by an explicit string
|
|
188
|
+
reference, not a resolved relationship WolvenKit maintains automatically.
|
|
189
|
+
status: community
|
|
190
|
+
source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
191
|
+
modding-guides/items-equipment/adding-new-items/archive-xl-item-structure-explained.md,
|
|
192
|
+
sections "The .csv file (the factory) > Making changes", "Root Entity: Making Changes", "Mesh
|
|
193
|
+
Entity: Making Changes" and "Appearance: Making changes"'
|
|
194
|
+
tags:
|
|
195
|
+
- items
|
|
196
|
+
- file-structure
|
|
197
|
+
- path-reference
|
|
198
|
+
- maintenance
|
|
199
|
+
- id: cp2077.items.wiring.weapon-look-is-an-app-row-not-a-root-entity
|
|
200
|
+
claim: "A vanilla weapon record has no root entity of its own to clone: it inherits `entityName:
|
|
201
|
+
weapon_root` from Items.Base_Weapon, weapons.csv
|
|
202
|
+
(base\\gameplay\\factories\\items\\weapons\\weapons.csv) maps that name to the shared
|
|
203
|
+
base\\weapons\\weapon_root.ent, and that entity's `appearances` list is empty (components
|
|
204
|
+
only: slots, audio, stats, attachment slots, projectile spawn, status effect, vision mode,
|
|
205
|
+
gameplay role, UI slots, an effect spawner). The weapon's look is the `.app` that
|
|
206
|
+
weapons_appearances.csv maps its `appearanceResourceName` to (Preset_Kenshin_Default ->
|
|
207
|
+
base\\weapons\\firearms\\handgun\\arasaka_kenshin\\w_handgun__arasaka_kenshin.app, ten named
|
|
208
|
+
appearances of 28 to 30 components each). A weapon mod therefore ships an `.app` and a factory
|
|
209
|
+
row naming it, never a root entity: one weapon mod's shipped factory_parts.csv holds exactly
|
|
210
|
+
two rows, `<mod>_body -> mod\\<mod>\\<mod>_body.app` and `<Mod>_Weapon ->
|
|
211
|
+
mod\\<mod>\\<mod>_weapon.app`, and its archive carries no `.ent` for the weapon (only the
|
|
212
|
+
cache case's)."
|
|
213
|
+
status: verified
|
|
214
|
+
verified_on: "2.31"
|
|
215
|
+
source: ModWright field verification
|
|
216
|
+
related:
|
|
217
|
+
- cp2077.items.wiring.factory-csv-links-entityname-to-root-entity
|
|
218
|
+
- cp2077.items.wiring.root-entity-is-appearance-lookup-dictionary
|
|
219
|
+
tags:
|
|
220
|
+
- items
|
|
221
|
+
- weapons
|
|
222
|
+
- app
|
|
223
|
+
- factory
|
|
224
|
+
- root-entity
|
|
225
|
+
- appearance-resource-name
|
|
226
|
+
- scaffold
|
|
227
|
+
- id: cp2077.items.wiring.spawnitemdrop-drops-from-the-droppers-inventory
|
|
228
|
+
claim: "LootManager.SpawnItemDrop(obj, itemID, position, rotation) drops an item the object holds:
|
|
229
|
+
vanilla's vendor gives the item to the vendor object first and then drops it. Dropped from the
|
|
230
|
+
player with a seedless ItemID.FromTDBID she did not hold, it returned false; given first, it
|
|
231
|
+
returned true and a pickup appeared. A cyberdeck program has no world entity (its record chain
|
|
232
|
+
sets no entityName), so its pickup is invisible. HasItem and GetItemQuantity with a seedless
|
|
233
|
+
ItemID.FromTDBID do not see a program given or picked up (0 right after a GiveItem); match by
|
|
234
|
+
ItemID.GetTDBID over GetItemList."
|
|
235
|
+
status: verified
|
|
236
|
+
verified_on: "2.31"
|
|
237
|
+
source: ModWright field verification
|
|
238
|
+
tags:
|
|
239
|
+
- items
|
|
240
|
+
- loot
|
|
241
|
+
- drop
|
|
242
|
+
- pickup
|
|
243
|
+
- program
|
|
244
|
+
- itemid
|
|
245
|
+
detail: A drop placed at a surface point inside a dynamic prop's collision threw the prop (a
|
|
246
|
+
notebook on Nix's desk).
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: loadorder.archives
|
|
3
|
+
title: Archive load order and conflict resolution
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.loadorder.archive-conflicts-first-wins
|
|
6
|
+
claim: When two .archive files in archive\pc\mod supply the same depot path, the one that loads
|
|
7
|
+
FIRST wins. Load order is ASCII-alphabetical by filename, so the earlier-sorting archive's
|
|
8
|
+
version of the file is the one the game uses. The widely repeated "last wins" / "z-prefix
|
|
9
|
+
wins" advice is wrong.
|
|
10
|
+
status: verified
|
|
11
|
+
source: ModWright field verification
|
|
12
|
+
tags:
|
|
13
|
+
- load-order
|
|
14
|
+
- archive
|
|
15
|
+
- conflict
|
|
16
|
+
- first-wins
|
|
17
|
+
- override
|
|
18
|
+
detail: Cost a launch. A base <Mod>.archive beat a later-sorting <Mod>Black.archive and the recolour
|
|
19
|
+
never appeared, surviving a clean restart. The fix is to make the override sort BEFORE the
|
|
20
|
+
base archive; a space right after the shared stem does it cleanly ("<Mod> - Black
|
|
21
|
+
Body.archive"), because space 0x20 sorts before the "." 0x2E of "<Mod>.archive" - no ugly
|
|
22
|
+
numeric prefix needed.
|
|
23
|
+
- id: cp2077.loadorder.archive-xl-does-not-reprioritise
|
|
24
|
+
claim: A <name>.archive.xl does NOT re-mount or re-prioritise <name>.archive. ArchiveXL only loads
|
|
25
|
+
the .xl extension; the base game still loads the .archive in its normal alphabetical position.
|
|
26
|
+
Filename is therefore the only lever over archive precedence.
|
|
27
|
+
status: verified
|
|
28
|
+
source: ModWright field verification
|
|
29
|
+
tags:
|
|
30
|
+
- archivexl
|
|
31
|
+
- load-order
|
|
32
|
+
- archive
|
|
33
|
+
- precedence
|
|
34
|
+
- id: cp2077.loadorder.modlist-absent-means-alphabetical
|
|
35
|
+
claim: With no modlist.txt present, archives load in plain alphabetical order. An absent modlist is
|
|
36
|
+
not a fallback to install order or timestamp order.
|
|
37
|
+
status: inferred
|
|
38
|
+
source: ModWright research
|
|
39
|
+
tags:
|
|
40
|
+
- load-order
|
|
41
|
+
- modlist
|
|
42
|
+
- archive
|
|
43
|
+
detail: Recorded because it was eliminated as an explanation, not because it was independently
|
|
44
|
+
tested. Treat as the working assumption, not a measurement.
|
|
45
|
+
- id: cp2077.loadorder.rht-watches-hot-directory-only
|
|
46
|
+
claim: RedHotTools' live depot mount watches archive\pc\hot ONLY. Dropping a rebuilt archive
|
|
47
|
+
anywhere else - including archive\pc\mod - does not trigger a live remount.
|
|
48
|
+
status: verified
|
|
49
|
+
source: ModWright field verification
|
|
50
|
+
tags:
|
|
51
|
+
- redhottools
|
|
52
|
+
- hot-reload
|
|
53
|
+
- archive
|
|
54
|
+
- depot
|
|
55
|
+
- id: cp2077.loadorder.reskin-ships-as-override-archive
|
|
56
|
+
claim: An optional reskin or recolour ships as its own .archive containing only the overridden depot
|
|
57
|
+
paths (the mesh plus any changed textures); everything else resolves from the base archive. It
|
|
58
|
+
must be NAMED to sort before the base archive or it loses the conflict.
|
|
59
|
+
status: verified
|
|
60
|
+
source: ModWright field verification
|
|
61
|
+
tags:
|
|
62
|
+
- archive
|
|
63
|
+
- override
|
|
64
|
+
- reskin
|
|
65
|
+
- optional
|
|
66
|
+
- packaging
|
|
67
|
+
detail: Build the override mesh by editing the mesh JSON materials directly and running convert
|
|
68
|
+
deserialize, NOT by re-importing with import -k. The direct-JSON route preserves
|
|
69
|
+
boneVertexEpsilons; the import -k defect and its symptom are recorded in full at
|
|
70
|
+
cp2077.process.assetbuild.wolvenkit-import-keep-flag-wipes-bone-vertex-epsilons (which also
|
|
71
|
+
names the restore step, a restore script, and the shipped value of 3.0).
|