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,146 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: audio.voicesets
|
|
3
|
+
title: NPC barks - context names, the voiceset scenes behind them, and which enemy voices carry
|
|
4
|
+
which contexts
|
|
5
|
+
facts:
|
|
6
|
+
- id: cp2077.audio.voicesets.barks-are-context-names
|
|
7
|
+
claim: "An NPC bark is requested by a context name, not by a line: GameObject.PlayVoiceOver(self,
|
|
8
|
+
voName, debugInitialContext, optional delay, answeringEntityID, canPlayInVehicle) plays a line
|
|
9
|
+
of context voName in that NPC's own voice. The AI does the same through 242
|
|
10
|
+
AISubActionPlayVoiceOver records naming 62 contexts (flats name, delay, condition, cooldown,
|
|
11
|
+
repeat, sendEventToSquadmates, setSelfAsAnsweringEntity); for example the Reboot Optics blind
|
|
12
|
+
asks for stlh_blinded out of combat and combat_blinded in it, the Cyberpsychosis quickhack's
|
|
13
|
+
squadmate reaction asks for madness_quick_hack_reaction, and surrender and panic ask for
|
|
14
|
+
fear_beg. ReactionManagerComponent.SendVOEventToSquad(owner, voEvent) plays the context on
|
|
15
|
+
every active squadmate of the owner within AIGeneralSettings.maxDistanceBattleCry, not on the
|
|
16
|
+
owner."
|
|
17
|
+
status: verified
|
|
18
|
+
verified_on: "2.31"
|
|
19
|
+
source: tools\redmod\scripts\core\entity\gameObject.script:1003 (PlayVoiceOver);
|
|
20
|
+
core\ai\actions\tweakAISubActions.script:126-140 (SendVoiceOverEvent);
|
|
21
|
+
core\components\scriptComponents\reactionComponent.script:6055-6102 (SendVOEventToSquad); the
|
|
22
|
+
vanilla index, records of type AISubActionPlayVoiceOver and their name flats
|
|
23
|
+
(StatusEffectActions.SE_BlindDefault_inline1, SE_BlindQuickhackCombat_inline1,
|
|
24
|
+
MadnessSquadmateVoiceReaction_inline2, ReactionsActions.SurrenderFearInPlace01_inline2)
|
|
25
|
+
tags:
|
|
26
|
+
- audio
|
|
27
|
+
- voiceover
|
|
28
|
+
- bark
|
|
29
|
+
- context
|
|
30
|
+
- ai
|
|
31
|
+
- squad
|
|
32
|
+
detail: "No script API tells whether a voice has a line for a context; a voice without one plays
|
|
33
|
+
nothing (inferred from the voicesets below: nothing falls back). The scripts also call about
|
|
34
|
+
40 contexts directly (fear_beg, stlh_curious_grunt, enemy_warning, stealth_ended and others)."
|
|
35
|
+
- id: cp2077.audio.voicesets.voiceset-scene-structure
|
|
36
|
+
claim: Each generic NPC voice is a .scene under base\open_world\voicesets\<category>\
|
|
37
|
+
(gangers\<gang>, security\security_<tier>, ncpd, mercs, civilian_*), with a twin under
|
|
38
|
+
versions\gold. The scene's entryPoints are named by context, usually with _var_1.._var_3
|
|
39
|
+
variants (stlh_curious, stlh_curious_var_1, ...); each leads through a scnRandomizerNode to
|
|
40
|
+
scnSectionNodes whose scnDialogLineEvents name screenplay lines, whose locstringIds are the
|
|
41
|
+
stringIds of base\localization\en-us\subtitles\open_world\voicesets\<voice>.json. So a voice's
|
|
42
|
+
lines per context can be listed from the install without the game.
|
|
43
|
+
status: verified
|
|
44
|
+
verified_on: "2.31"
|
|
45
|
+
source: basegame_4_gamedata.archive
|
|
46
|
+
base\open_world\voicesets\gangers\tiger_claws\gang_tcl_m_01_jap_20.scene and 451 further
|
|
47
|
+
voiceset scenes; lang_en_text.archive
|
|
48
|
+
base\localization\en-us\subtitles\open_world\voicesets\*.json
|
|
49
|
+
tags:
|
|
50
|
+
- audio
|
|
51
|
+
- voiceset
|
|
52
|
+
- scene
|
|
53
|
+
- subtitle
|
|
54
|
+
- entry-point
|
|
55
|
+
- extraction
|
|
56
|
+
detail: "1,062 resources sit under base\\open_world\\voicesets (1,058 scenes, most voices twice,
|
|
57
|
+
base and versions\\gold): gangers 284, the civilian sets about 550, NCPD 80, security 68,
|
|
58
|
+
mercs 20, plus 16 shared blocks under voiceset_scene_blocks. The shared blocks
|
|
59
|
+
apuc_enemies_voiceset_scene_block and apuc_enemies_missing_scene_block list context names with
|
|
60
|
+
no lines of their own."
|
|
61
|
+
- id: cp2077.audio.voicesets.enemy-context-coverage
|
|
62
|
+
claim: Across the 226 base-game enemy voicesets (gangers, security, mercs, NCPD), stlh_curious
|
|
63
|
+
(confused "huh?" and "what was that?" lines) has lines in 215 voices and danger in 225, while
|
|
64
|
+
the 2.0-era contexts apuc_stlh_blinded, apuc_combat_blinded, apuc_madness_quick_hack_reaction,
|
|
65
|
+
apuc_call_in_confusion and apuc_combat_quick_hack have lines in the same 73 voices, spread
|
|
66
|
+
over most gangs, NCPD and security. apuc_madness_quick_hack_wearoff is listed in the shared
|
|
67
|
+
template block but no enemy voice recorded a line for it, and no enemy voiceset has fear_beg.
|
|
68
|
+
The base scenes and their versions\gold twins agree.
|
|
69
|
+
status: verified
|
|
70
|
+
verified_on: "2.31"
|
|
71
|
+
source: the extraction in cp2077.audio.voicesets.voiceset-scene-structure, over
|
|
72
|
+
base\open_world\voicesets\{gangers,security,mercs,ncpd}\ (226 voices each in the base and
|
|
73
|
+
versions\gold sets)
|
|
74
|
+
tags:
|
|
75
|
+
- audio
|
|
76
|
+
- voiceset
|
|
77
|
+
- coverage
|
|
78
|
+
- enemy
|
|
79
|
+
- quickhack
|
|
80
|
+
- possession
|
|
81
|
+
detail: "The out-of-combat blind lines often have the NPC blame their own optics or implants, which
|
|
82
|
+
suits a target coming back from a takeover; the combat ones mostly name V as the attacker.
|
|
83
|
+
Voices without the 2.0 contexts include the Aldecaldos and some whole voices in every gang.
|
|
84
|
+
Phantom Liberty's voicesets (ep1 archives) were not read. A quickhack mod (v0.12.12) plays
|
|
85
|
+
stlh_curious then stlh_blinded on a target that survives a takeover, and
|
|
86
|
+
madness_quick_hack_reaction to its squad. Observed in game (2026-09-25): both of the target's
|
|
87
|
+
contexts played on a spawned Tyger Claw; the release itself waits for a human take. Also
|
|
88
|
+
observed in game: the squad send (SendVOEventToSquad) to an alerted Valentino group was
|
|
89
|
+
inconclusive, while the same context played directly on one of them was heard."
|
|
90
|
+
related:
|
|
91
|
+
- cp2077.audio.voicesets.barks-are-context-names
|
|
92
|
+
- cp2077.audio.voicesets.apuc-contexts-requested-without-the-prefix
|
|
93
|
+
- id: cp2077.audio.voicesets.apuc-contexts-requested-without-the-prefix
|
|
94
|
+
claim: The voices name their 2.0-era contexts with an apuc_ prefix (apuc_stlh_blinded,
|
|
95
|
+
apuc_madness_quick_hack_reaction), but the AI actions that play them ask for the bare names
|
|
96
|
+
(stlh_blinded, madness_quick_hack_reaction). The engine maps the bare request to the prefixed
|
|
97
|
+
entry, and a script asking for the bare name reaches the same lines.
|
|
98
|
+
status: verified
|
|
99
|
+
verified_on: "2.31"
|
|
100
|
+
source: ModWright field verification
|
|
101
|
+
tags:
|
|
102
|
+
- audio
|
|
103
|
+
- voiceset
|
|
104
|
+
- context
|
|
105
|
+
- apuc
|
|
106
|
+
detail: "The first boot with a quickhack mod's blinded-voice arm on a voice from the 73 settles it:
|
|
107
|
+
a line means the mapping holds for a script caller."
|
|
108
|
+
- id: cp2077.audio.voicesets.voice-tag-readable-through-codeware
|
|
109
|
+
claim: An NPC entity carries its voiceset in a component named VoicesetComponent
|
|
110
|
+
(scnVoicesetComponent), whose persistent state scnVoicesetComponentPS holds voiceTag,
|
|
111
|
+
gruntSetIndex and the areVoicesetLinesEnabled / areVoicesetGruntsEnabled switches; Codeware
|
|
112
|
+
declares that state class for scripts, and GameComponent.GetPS() is public, so a script can
|
|
113
|
+
read the tag. It reads None at runtime too, on a spawned Tyger Claw that speaks, so it does
|
|
114
|
+
not name the voice.
|
|
115
|
+
status: verified
|
|
116
|
+
verified_on: "2.31"
|
|
117
|
+
source: base\characters\entities\citizen\citizen__default_ma.ent and
|
|
118
|
+
base\characters\base_entities\man_base\man_base.ent (extracted with the template tool, the
|
|
119
|
+
mod's cache); Codeware 1.20.3 Codeware.Global.reds:35180;
|
|
120
|
+
tools\redmod\scripts\core\components\scriptableComponent.script:3
|
|
121
|
+
tags:
|
|
122
|
+
- audio
|
|
123
|
+
- voiceset
|
|
124
|
+
- codeware
|
|
125
|
+
- component
|
|
126
|
+
detail: So a release can't pick contexts per voice from the tag. It plays the near-universal context
|
|
127
|
+
first and the better-fitting one after it, and voices without the second stay quiet (a
|
|
128
|
+
quickhack mod, v0.12.12).
|
|
129
|
+
- id: cp2077.audio.voicesets.replacer-body-grunts-are-the-voicesets
|
|
130
|
+
claim: On a replacer body that is the player (a PlayerPuppet record inheriting V's voice tag v and
|
|
131
|
+
her PlayerVoice combat settings v_voice), the combat grunts (hit, firing, melee, falls) are
|
|
132
|
+
the entity's voiceset's and keep V's voice whatever the record's voiceTag, an injected tag
|
|
133
|
+
(entInjectVoiceTagEvent, forceInjection) or the PlayerVoice component's combatVoSettingsName
|
|
134
|
+
says. entChangeVoicesetStateEvent with enableVoicesetGrunts false silences them.
|
|
135
|
+
status: verified
|
|
136
|
+
verified_on: "2.31"
|
|
137
|
+
source: ModWright field verification
|
|
138
|
+
tags:
|
|
139
|
+
- audio
|
|
140
|
+
- voiceset
|
|
141
|
+
- replacer
|
|
142
|
+
- grunts
|
|
143
|
+
- player
|
|
144
|
+
detail: "What does choose the grunts is not read (candidates: the replacer node's
|
|
145
|
+
audioOverrideAppearanceName, the voiceset component's own state). A quickhack mod mutes them
|
|
146
|
+
until then."
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: cet.sandbox
|
|
3
|
+
title: Cyber Engine Tweaks Lua sandbox, console versus mod environments
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.cet.console-sandbox-has-no-io
|
|
6
|
+
claim: "The CET console runs in a separate, stripped sandbox: since CET 1.10 it has no `io`, `json`,
|
|
7
|
+
`dofile` or ImGui bindings. A console test of `io.open` therefore says nothing about what a
|
|
8
|
+
mod's own environment can do."
|
|
9
|
+
status: verified
|
|
10
|
+
verified_on: CET 1.10
|
|
11
|
+
source: ModWright field verification
|
|
12
|
+
tags:
|
|
13
|
+
- cet
|
|
14
|
+
- sandbox
|
|
15
|
+
- console
|
|
16
|
+
- io
|
|
17
|
+
detail: "An early in-game run read its console result as \"io does not exist at all in this CET
|
|
18
|
+
build's Lua sandbox\". That overreaches: the changelog shows the console was stripped by
|
|
19
|
+
design in 2021 while mods kept io. The decisive check for a mod is its own capability report
|
|
20
|
+
or its own log file, never a console one-liner."
|
|
21
|
+
- id: cp2077.cet.mod-sandbox-io-relative-to-mod
|
|
22
|
+
claim: Inside a mod's sandbox, `io` and `dofile` exist and every path is resolved relative to the
|
|
23
|
+
mod's own folder under `bin/x64/plugins/cyber_engine_tweaks/mods/<Mod>/`.
|
|
24
|
+
status: verified
|
|
25
|
+
verified_on: CET 1.10
|
|
26
|
+
source: 'CET changelog 1.10: "All pathing is now relative to mod (breaking change, includes all io
|
|
27
|
+
functions, dofile() and such included)"; "Introduced proper sandbox with LuaSandbox helper
|
|
28
|
+
class".'
|
|
29
|
+
tags:
|
|
30
|
+
- cet
|
|
31
|
+
- sandbox
|
|
32
|
+
- io
|
|
33
|
+
- paths
|
|
34
|
+
detail: "Not yet confirmed in-engine by ModWright on CET 1.37.1: the bridge's own capability line
|
|
35
|
+
was not captured in an early in-game run. A relative name such as \"modwright_hb.json\" is the
|
|
36
|
+
form the changelog implies; whether writes outside the mod folder are refused or silently
|
|
37
|
+
redirected is not stated."
|
|
38
|
+
- id: cp2077.cet.mod-log-files
|
|
39
|
+
claim: Each CET mod logs to its own log file, and errors raised by mod code go to the mod's log
|
|
40
|
+
rather than the console; `spdlog` is exposed so a mod can write to that log.
|
|
41
|
+
status: verified
|
|
42
|
+
verified_on: CET 1.9.1
|
|
43
|
+
source: 'CET changelog 1.9.1: "Mods will now log to their own log files, you can also use spdlog to
|
|
44
|
+
print in your log"; 1.10: "Errors that happen in Game, game class methods,... should now log
|
|
45
|
+
into proper environment (to console when executed from console, to mod log when executed from
|
|
46
|
+
mod)".'
|
|
47
|
+
tags:
|
|
48
|
+
- cet
|
|
49
|
+
- logging
|
|
50
|
+
- sandbox
|
|
51
|
+
detail: The exact file name convention is not stated in the changelog; treat "the newest .log inside
|
|
52
|
+
the mod folder" as the place to look until a real one is recorded.
|
|
53
|
+
- id: cp2077.cet-lua-is-5-1-luajit
|
|
54
|
+
claim: CET's Lua is 5.1 semantics on LuaJIT since CET 1.12.0; post-5.1 language features such as
|
|
55
|
+
bitwise operators are unavailable, and the `bit32` library is provided.
|
|
56
|
+
status: verified
|
|
57
|
+
verified_on: CET 1.12.0
|
|
58
|
+
source: "CET changelog 1.12.0: \"Lua version changed to 5.1 ... switching to LuaJIT\"; \"Added Lua's
|
|
59
|
+
bit32 library\"."
|
|
60
|
+
tags:
|
|
61
|
+
- cet
|
|
62
|
+
- lua
|
|
63
|
+
- luajit
|
|
64
|
+
detail: This is why `luac5.1 -p` is the relevant syntax check for the CET bridge (`npm run
|
|
65
|
+
bridge:lint` runs 5.1 first).
|
|
66
|
+
- id: cp2077.cet.os-rename-remove-available
|
|
67
|
+
claim: '`os.remove` and `os.rename` exist in the CET mod sandbox; CET 1.12.0 fixed them after they
|
|
68
|
+
"were not working properly".'
|
|
69
|
+
status: verified
|
|
70
|
+
verified_on: CET 1.12.0
|
|
71
|
+
source: 'CET changelog 1.12.0, "Fixes: os.remove and os.rename were not working properly."'
|
|
72
|
+
tags:
|
|
73
|
+
- cet
|
|
74
|
+
- sandbox
|
|
75
|
+
- io
|
|
76
|
+
- atomic-write
|
|
77
|
+
detail: Makes a write-temp-then-rename commit possible for the bridge's result files; unconfirmed
|
|
78
|
+
in-engine on 1.37.1.
|
|
79
|
+
- id: cp2077.cet.json-in-mod-sandbox
|
|
80
|
+
claim: A `json` library is available to CET mods (added in CET 1.9.2) but is stripped from the
|
|
81
|
+
console sandbox (CET 1.10).
|
|
82
|
+
status: verified
|
|
83
|
+
verified_on: CET 1.10
|
|
84
|
+
source: CET changelog 1.9.2 "Added json support to Lua"; 1.10 console-strip line.
|
|
85
|
+
tags:
|
|
86
|
+
- cet
|
|
87
|
+
- json
|
|
88
|
+
- sandbox
|
|
89
|
+
- id: cp2077.cet.require-uses-slashes-mod-relative
|
|
90
|
+
claim: In CET mods `require` resolves paths relative to the mod folder and uses "/" as the
|
|
91
|
+
separator, not "."; the require cache is reset on "Reload all mods"; Lua bytecode cannot be
|
|
92
|
+
loaded; `dofile` is deprecated since CET 1.9.1 but was kept working.
|
|
93
|
+
status: verified
|
|
94
|
+
verified_on: CET 1.10
|
|
95
|
+
source: "CET changelog 1.10: \"require does not support '.' instead of '/' now\"; \"require cache is
|
|
96
|
+
reset on Reload all mods now\"; \"Bytecode cannot be loaded now\"; 1.9.1: \"dofile is now
|
|
97
|
+
deprecated, use only mods please\"; 1.12.0: \"Fixed dofile, loadfile and loadstring\"."
|
|
98
|
+
tags:
|
|
99
|
+
- cet
|
|
100
|
+
- lua
|
|
101
|
+
- require
|
|
102
|
+
- modules
|
|
103
|
+
- id: cp2077.cet.getmod-only-after-oninit
|
|
104
|
+
claim: "`GetMod()` and every type or function that relies on RTTI are only available after the
|
|
105
|
+
`onInit` event; calling them earlier is unsupported."
|
|
106
|
+
status: verified
|
|
107
|
+
verified_on: CET 1.14.0
|
|
108
|
+
source: 'CET changelog 1.14.0: "The GetMod() is only available after onInit as there is no guarantee
|
|
109
|
+
that the required mod will be loaded before this event. Types and functions that rely on RTTI
|
|
110
|
+
are only available after onInit event".'
|
|
111
|
+
tags:
|
|
112
|
+
- cet
|
|
113
|
+
- lifecycle
|
|
114
|
+
- oninit
|
|
115
|
+
- getmod
|
|
116
|
+
- id: cp2077.cet.per-mod-sqlite-db
|
|
117
|
+
claim: Each CET mod is implicitly assigned a SQLite database, reachable from Lua as the `db` object.
|
|
118
|
+
status: verified
|
|
119
|
+
verified_on: CET 1.10
|
|
120
|
+
source: 'CET changelog 1.10: "Each mod is (right now) assigned sqlite3 database implicitly,
|
|
121
|
+
accessible through db lua object"; 1.9.1: SQLite3 support added.'
|
|
122
|
+
tags:
|
|
123
|
+
- cet
|
|
124
|
+
- sqlite
|
|
125
|
+
- storage
|
|
126
|
+
detail: A possible alternative transport for the verification bridge (ModWright reads SQLite through
|
|
127
|
+
sql.js), noted but not designed; concurrent writers from two processes would need care.
|
|
128
|
+
- id: cp2077.cet.current-version-and-game-support
|
|
129
|
+
claim: "CET's Nexus page shows version 1.37.1, last updated 2025-09-29, with \"Supported version:
|
|
130
|
+
2.31\" as the game build named on the page; it was run in game on build 3.0.80.51928
|
|
131
|
+
(2026-09-08)."
|
|
132
|
+
status: verified
|
|
133
|
+
verified_on: CET 1.37.1
|
|
134
|
+
source: ModWright field verification
|
|
135
|
+
tags:
|
|
136
|
+
- cet
|
|
137
|
+
- version
|
|
138
|
+
- compat
|
|
139
|
+
detail: The page's stated supported game version lags the build it was run on; check_compat's CET
|
|
140
|
+
floor should be read against the actual release notes, not this page line.
|
|
141
|
+
- id: cp2077.cet.mod-sandbox-has-no-global-table
|
|
142
|
+
claim: "Inside a CET mod's Lua environment `_G` is nil: the environment is a fresh table that falls
|
|
143
|
+
back to a whitelisted copy of the globals, and `_G` is not on the whitelist. Code that
|
|
144
|
+
discovers capabilities through `_G[name]` sees nothing; a free global name resolved through
|
|
145
|
+
the environment is the only lookup that works."
|
|
146
|
+
status: verified
|
|
147
|
+
verified_on: CET 1.37.1
|
|
148
|
+
source: ModWright field verification
|
|
149
|
+
tags:
|
|
150
|
+
- cet
|
|
151
|
+
- sandbox
|
|
152
|
+
- lua
|
|
153
|
+
- capabilities
|
|
154
|
+
- bridge
|
|
155
|
+
detail: The ModWright CET bridge's capability probe used `_G[name]` and therefore reported io absent
|
|
156
|
+
and ran log-only in an early in-game run. Fixed to reference globals by name.
|
|
157
|
+
- id: cp2077.cet.mod-sandbox-io-path-rules
|
|
158
|
+
claim: The sandboxed `io.open` resolves a path against the mod's root and refuses absolute paths and
|
|
159
|
+
any path containing `..`; a missing file is allowed when opening for write. The sandbox also
|
|
160
|
+
provides `io.lines`, `os.rename`, `os.remove`, a per-mod `db` at `db.sqlite3`, `dir()`, and a
|
|
161
|
+
curated `os` with clock, date, difftime and time.
|
|
162
|
+
status: verified
|
|
163
|
+
verified_on: CET 1.37.1
|
|
164
|
+
source: "CyberEngineTweaks/src/scripting/LuaSandbox.cpp InitializeIOForSandbox (io table:
|
|
165
|
+
open/lines/read/write/close/type/input/output), GetLuaPath (rejects absolute and `..`),
|
|
166
|
+
src/Utils.cpp GetAbsolutePath (acAllowNonExisting), LuaSandbox.cpp:53-61 (os copy)."
|
|
167
|
+
tags:
|
|
168
|
+
- cet
|
|
169
|
+
- sandbox
|
|
170
|
+
- io
|
|
171
|
+
- paths
|
|
172
|
+
detail: Every candidate prefix the bridge tries resolves under the same mod root; only the empty
|
|
173
|
+
prefix (the mod folder itself) is meaningful, and a prefix naming a missing subfolder fails
|
|
174
|
+
because io.open does not create directories.
|
|
175
|
+
- id: cp2077.cet.mod-log-file-name
|
|
176
|
+
claim: Each CET mod's own log file is `<ModFolderName>.log` inside the mod's folder, created by the
|
|
177
|
+
sandbox logger; `spdlog.info(...)` and errors from mod code land there.
|
|
178
|
+
status: verified
|
|
179
|
+
verified_on: CET 1.37.1
|
|
180
|
+
source: CyberEngineTweaks/src/scripting/LuaSandbox.cpp:638 `CreateLogger(GetAbsolutePath(acName +
|
|
181
|
+
".log", cSBRootPath, true), acName)`.
|
|
182
|
+
tags:
|
|
183
|
+
- cet
|
|
184
|
+
- logging
|
|
185
|
+
- sandbox
|
|
186
|
+
detail: For the ModWright bridge that is bin/x64/plugins/cyber_engine_tweaks/mods/ModWrightBridge/
|
|
187
|
+
ModWrightBridge.log, the first file the log-polling transport reads.
|
|
188
|
+
- id: cp2077.cet.log-truncated-at-initializetweakdbmetadata-is-cosmetic
|
|
189
|
+
claim: "`cyber_engine_tweaks.log` ending mid-string at an `InitializeTweakDBMetadata(...)` call
|
|
190
|
+
signature is not by itself evidence of a TweakDB initialisation hang; the same truncated last
|
|
191
|
+
line appears on a normal launch that reaches the main menu with TweakXL fully loaded."
|
|
192
|
+
status: verified
|
|
193
|
+
verified_on: "2.31"
|
|
194
|
+
source: ModWright field verification
|
|
195
|
+
tags:
|
|
196
|
+
- cet
|
|
197
|
+
- log
|
|
198
|
+
- tweakdb
|
|
199
|
+
- hang
|
|
200
|
+
- stall
|
|
201
|
+
- diagnostics
|
|
202
|
+
detail: "A stall detector needs a positive completion signal instead: TweakXL.log's own
|
|
203
|
+
import-completed line, or a bounded wait on the main menu. An earlier intermittent stall may
|
|
204
|
+
still be real; this fact only retires the log truncation as its marker."
|
|
205
|
+
- id: cp2077.cet.sandbox.observeafter-attaches-mid-session
|
|
206
|
+
claim: "CET's ObserveAfter(class, method, fn) can be registered mid-session from a bridge eval chunk
|
|
207
|
+
(not only in onInit) and fires on the next calls: an observer on
|
|
208
|
+
NPCPuppet.DamagePipelineFinalized caught every NPC hit with its instigator, computed damage
|
|
209
|
+
and hit flags, which a redscript log could not (a null in its attack-record chain aborted
|
|
210
|
+
it)."
|
|
211
|
+
status: verified
|
|
212
|
+
verified_on: 2.31 (CET 1.x, 2026-09)
|
|
213
|
+
source: ModWright field verification
|
|
214
|
+
tags:
|
|
215
|
+
- cet
|
|
216
|
+
- observe
|
|
217
|
+
- hook
|
|
218
|
+
- debugging
|
|
219
|
+
- bridge
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: clothing.garments
|
|
3
|
+
title: ArchiveXL dynamic appearances, visual tags and substitution syntax
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.clothing.garments.dynamic-variant-name-syntax
|
|
6
|
+
claim: In a dynamic appearance name, everything after the `!` arrives in the mesh entity under the
|
|
7
|
+
key `variant`; adding `+` splits it into parts reachable as `variant.1` and `variant.2`. A raw
|
|
8
|
+
variant of `$(base_color)+$(secondary)` resolving to `black+samurai` gives `variant` =
|
|
9
|
+
`black+samurai`, `variant.1` = `black`, `variant.2` = `samurai`; without the `+`,
|
|
10
|
+
`$(base_color)$(secondary)` yields `blacksamurai` as `variant.1` and nothing for `variant.2`.
|
|
11
|
+
status: community
|
|
12
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", section "Step 2: Connecting the
|
|
13
|
+
decal (and understanding variants)" (the "Examples" table)'
|
|
14
|
+
tags:
|
|
15
|
+
- archivexl
|
|
16
|
+
- dynamic-appearance
|
|
17
|
+
- variant
|
|
18
|
+
- substitution
|
|
19
|
+
- syntax
|
|
20
|
+
detail: "Used in a path as `{variant.2}` — the guide's worked step is \"In the mesh depot path,
|
|
21
|
+
replace `samurai.mesh` with `{variant.2}.mesh`\". Section names corrected 2026-09-07: the page
|
|
22
|
+
has no \"Key YAML/Manifest Syntax\" or \"Substitution Placeholders\" headings."
|
|
23
|
+
- id: cp2077.clothing.garments.substitution-path-requires-star-prefix
|
|
24
|
+
claim: ArchiveXL only substitutes `{placeholder}` inside a mesh entity component's depot path when
|
|
25
|
+
the path starts with `*`, e.g.
|
|
26
|
+
`*manavortex/equipment/torso_inner/my_custom_shirt/meshes/t1_079_p{gender}a_tshirt_casual.mesh`.
|
|
27
|
+
A path written without the leading `*` is not substituted.
|
|
28
|
+
status: community
|
|
29
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", sections "Summary" (TL;DR box,
|
|
30
|
+
"To enable substitution in mesh depot paths, make sure they start with `*`") and "Safely
|
|
31
|
+
changing mesh paths"; corroborated by "ArchiveXL: Suffixes and Substitutions", section "Which
|
|
32
|
+
substitutions exist?" ("Substitution will only become active if the property name starts with
|
|
33
|
+
an asterisk (`*`)")'
|
|
34
|
+
tags:
|
|
35
|
+
- archivexl
|
|
36
|
+
- dynamic-appearance
|
|
37
|
+
- depotpath
|
|
38
|
+
- substitution
|
|
39
|
+
- syntax
|
|
40
|
+
detail: The generator's default paths also carry the `Soft` flag alongside the `*`. WolvenKit's
|
|
41
|
+
DepotPath box has a right-click "Convert to dynamic" action that adds the `*` to a pasted
|
|
42
|
+
plain path.
|
|
43
|
+
- id: cp2077.clothing.garments.dynamic-appearance-placeholders
|
|
44
|
+
claim: ArchiveXL's substitution placeholders and what they resolve to are `{camera}` -> `fpp` or
|
|
45
|
+
`tpp`; `{gender}` -> `m` or `w`; `{body}` -> `base_body` or the body mod name in snake case;
|
|
46
|
+
`{arms}` -> `base_arms`, `mantis_blades`, `monowire`, `projectile_launcher`; `{feet}` ->
|
|
47
|
+
`flat`, `lifted`, `high_heels`, `flat_shoes` (empty for mascV); `{sleeves}` -> `full`, `part`;
|
|
48
|
+
`{skin_color}`; `{hair_color}`. They are usable inside mesh-entity component `name`,
|
|
49
|
+
`depotPath` and `appearance` fields and in an `.app` appearance's `name` field.
|
|
50
|
+
status: community
|
|
51
|
+
source: 'wiki.redmodding.org "ArchiveXL: Suffixes and Substitutions", section "Which substitutions
|
|
52
|
+
exist?" (placeholder table)'
|
|
53
|
+
tags:
|
|
54
|
+
- archivexl
|
|
55
|
+
- dynamic-appearance
|
|
56
|
+
- placeholder
|
|
57
|
+
- gender
|
|
58
|
+
- body-tag
|
|
59
|
+
detail: "Corrected 2026-09-07: `{gender}` resolves to `m`/`w`, NOT to `pwa`/`pma` — the vanilla path
|
|
60
|
+
shape is `p{gender}a`, which is what produces `pwa`/`pma`. Substitutions have existed since
|
|
61
|
+
ArchiveXL 1.8.0. The wiki warns its table can lag the implementation and links the
|
|
62
|
+
authoritative source, cp2077-archive-xl src/App/Extensions/GarmentOverride/Dynamic.cpp."
|
|
63
|
+
- id: cp2077.clothing.garments.root-entity-single-blank-appearance
|
|
64
|
+
claim: For a dynamic appearance, the ROOT ENTITY keeps exactly one entry in its `appearances` array,
|
|
65
|
+
named like the `entityName` in the yaml, with `appearanceName` left blank; the `.app` likewise
|
|
66
|
+
keeps one entry with that same name, has all its components deleted, and points at the mesh
|
|
67
|
+
entity. All variant logic then lives in the mesh entity file.
|
|
68
|
+
status: community
|
|
69
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", section "Summary" (TL;DR box) and
|
|
70
|
+
"How is this better than the old approach?" ("Dynamic variants put the logic into the `mesh
|
|
71
|
+
entity` file")'
|
|
72
|
+
tags:
|
|
73
|
+
- archivexl
|
|
74
|
+
- dynamic-appearance
|
|
75
|
+
- root-entity
|
|
76
|
+
- appearancename
|
|
77
|
+
detail: "Corrected 2026-09-07: the blank `appearanceName` belongs to the ROOT ENTITY, not to the
|
|
78
|
+
`.app` as previously recorded. \"Exactly one\" is the default shape, not a hard rule — the
|
|
79
|
+
page's \"_app: Three decals, one appearance, partsOverrides\" variant deliberately registers
|
|
80
|
+
three appearances in the root .ent and three in the .app."
|
|
81
|
+
- id: cp2077.clothing.garments.dynamicappearance-tag-required
|
|
82
|
+
claim: An appearance is declared dynamic by adding the `DynamicAppearance` tag to the visual tags in
|
|
83
|
+
its root entity — "You define an appearance as dynamic by adding the `DynamicAppearance` tag
|
|
84
|
+
to the visual tags in its root entity."
|
|
85
|
+
status: community
|
|
86
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", section "Prerequisites" (closing
|
|
87
|
+
paragraph) and section "Summary" (TL;DR box, root_entity step 1)'
|
|
88
|
+
tags:
|
|
89
|
+
- archivexl
|
|
90
|
+
- dynamic-appearance
|
|
91
|
+
- visual-tag
|
|
92
|
+
- required-field
|
|
93
|
+
detail: The page states the tag is how an appearance is declared dynamic; it does not separately
|
|
94
|
+
state what happens when the tag is omitted, so the previously recorded consequence
|
|
95
|
+
("substitution logic is not applied") was removed on 2026-09-07 as unsourced.
|
|
96
|
+
- id: cp2077.clothing.garments.unvalidated-variant-crashes
|
|
97
|
+
claim: '"The game will crash if you tell it to load a mesh that does not exist" — a dynamic mesh
|
|
98
|
+
path substituted from a yaml value the user can edit is therefore a crash risk. The two
|
|
99
|
+
documented mitigations are to put all appearances in one `.mesh` and switch only
|
|
100
|
+
`meshAppearance`, or to keep separate meshes and hide the unwanted ones from the `.app` with
|
|
101
|
+
`partsOverrides` containing `componentOverrides` that set `chunkMask` to `0` and
|
|
102
|
+
`meshAppearance` to an empty string.'
|
|
103
|
+
status: community
|
|
104
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", section "Exercise 1: Other options"'
|
|
105
|
+
tags:
|
|
106
|
+
- archivexl
|
|
107
|
+
- dynamic-appearance
|
|
108
|
+
- crash
|
|
109
|
+
- silent-failure
|
|
110
|
+
- gotcha
|
|
111
|
+
detail: "Symptom: entering `semurai` instead of `samurai` in the yaml makes the game look for
|
|
112
|
+
`manavortex\\equipment\\torso_inner\\my_custom_shirt\\meshes\\t1_079_pwa_tshirt__casual_dec_s\
|
|
113
|
+
emurai.mesh` and crash. Corrected 2026-09-07: the crash comes from any single unresolvable
|
|
114
|
+
value, not from an invalid COMBINATION of values as previously recorded, and the page does not
|
|
115
|
+
frame it as a validation gap. `partsOverrides` can only hide components, never show them."
|
|
116
|
+
- id: cp2077.clothing.garments.dynamic-appearance-version-floors
|
|
117
|
+
claim: The dynamic-appearances guide's stated minimum tool versions are WolvenKit >= 8.11.0, TweakXL
|
|
118
|
+
>= 1.4.4, ArchiveXL >= 1.5.0 and Red4ext >= 1.17.0, plus Cyber Engine Tweaks for spawning
|
|
119
|
+
items. Dynamic variants themselves were added in ArchiveXL 1.13.
|
|
120
|
+
status: contradicted
|
|
121
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", section "Prerequisites" (bullet
|
|
122
|
+
list) and section "Summary" (opening paragraph, "via ArchiveXL (added in 1.13)") =
|
|
123
|
+
CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
124
|
+
modding-guides/items-equipment/adding-new-items/archivexl-dynamic-variants/README.md:12,61'
|
|
125
|
+
tags:
|
|
126
|
+
- archivexl
|
|
127
|
+
- dynamic-appearance
|
|
128
|
+
- version-floor
|
|
129
|
+
- wolvenkit
|
|
130
|
+
- tweakxl
|
|
131
|
+
- red4ext
|
|
132
|
+
detail: "Checked against the source (2026-09-08): the last sentence is wrong and the fact is retired
|
|
133
|
+
for it. The page contradicts itself — line 12 says dynamic variants were \"added in 1.13\"
|
|
134
|
+
while line 61 of the same page's Prerequisites lists \"ArchiveXL >= 1.5.0\". ArchiveXL's own
|
|
135
|
+
repository settles it: the dynamic appearance implementation
|
|
136
|
+
(src/App/Extensions/GarmentOverride/Dynamic.cpp, carrying DynamicAppearanceTag, the `!`
|
|
137
|
+
variant marker, the `&` condition marker and the gender/camera/body/feet attributes) is absent
|
|
138
|
+
at tag v1.4.1 and present at tag v1.5.0. Superseded by
|
|
139
|
+
cp2077.clothing.garments.dynamic-appearance-prerequisites, which keeps the prerequisite list
|
|
140
|
+
without the 1.13 figure; the version itself is
|
|
141
|
+
cp2077.archivexl.dynamic-appearances.introduced-in-1.5.0. These are framework versions on
|
|
142
|
+
their own numbering, not a game version, so no `verified_on` is set on either."
|
|
143
|
+
- id: cp2077.clothing.garments.dynamic-appearance-prerequisites
|
|
144
|
+
claim: The dynamic-appearances guide's stated minimum tool versions are WolvenKit >= 8.11.0, TweakXL
|
|
145
|
+
>= 1.4.4, ArchiveXL >= 1.5.0 and Red4ext >= 1.17.0, plus Cyber Engine Tweaks for spawning
|
|
146
|
+
items.
|
|
147
|
+
status: community
|
|
148
|
+
supersedes: cp2077.clothing.garments.dynamic-appearance-version-floors
|
|
149
|
+
source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
150
|
+
modding-guides/items-equipment/adding-new-items/archivexl-dynamic-variants/README.md:61,
|
|
151
|
+
section "Prerequisites" (bullet list) — rendered as wiki.redmodding.org "ItemAdditions:
|
|
152
|
+
Dynamic Appearances"'
|
|
153
|
+
tags:
|
|
154
|
+
- archivexl
|
|
155
|
+
- dynamic-appearance
|
|
156
|
+
- version-floor
|
|
157
|
+
- wolvenkit
|
|
158
|
+
- tweakxl
|
|
159
|
+
- red4ext
|
|
160
|
+
detail: Framework versions on their own numbering, not a game version, so no `verified_on` is set.
|
|
161
|
+
The page spells it "Red4ext" and says to "get the most recent" rather than pinning these exact
|
|
162
|
+
builds. Replaces cp2077.clothing.garments.dynamic-appearance-version-floors, which added the
|
|
163
|
+
page's own contradictory "added in 1.13" sentence.
|
|
164
|
+
related:
|
|
165
|
+
- id: cp2077.archivexl.dynamic-appearances.introduced-in-1.5.0
|
|
166
|
+
detail: "Agrees: the prerequisite floor of 1.5.0 on this page is the version at which ArchiveXL's
|
|
167
|
+
repository actually gains the dynamic-appearance implementation."
|
|
168
|
+
- id: cp2077.clothing.garments.gendered-appearance-name-suffix
|
|
169
|
+
claim: To support only one body gender without crashing for the other, each entry in the `.app`'s
|
|
170
|
+
`appearances` array gets `&gender=w` or `&gender=m` appended to its `name` field, making it a
|
|
171
|
+
conditional appearance.
|
|
172
|
+
status: community
|
|
173
|
+
source: 'wiki.redmodding.org "ItemAdditions: Dynamic Appearances", section "1.2 Removing a body
|
|
174
|
+
gender" (steps 3-4)'
|
|
175
|
+
tags:
|
|
176
|
+
- archivexl
|
|
177
|
+
- dynamic-appearance
|
|
178
|
+
- gender
|
|
179
|
+
- appearance-name
|
|
180
|
+
- syntax
|
|
181
|
+
detail: "The reason given is that once the unsupported gender's meshes are deleted and its component
|
|
182
|
+
paths de-dynamised, \"the game will crash if the item is equipped by the unsupported body
|
|
183
|
+
gender\". Conditional appearance names outrank plainer ones: \"ArchiveXL: Suffixes and
|
|
184
|
+
Substitutions\" ranks `my_item!variant&camera=tpp` (1) above `my_item!variant` (2) above
|
|
185
|
+
`my_item&gender=w&camera=tpp` (3) above `my_item` (5)."
|
|
186
|
+
- id: cp2077.clothing.garments.visual-tags-are-case-sensitive
|
|
187
|
+
claim: Visual tags are applied by adding them to the `visualTags` property of an appearance
|
|
188
|
+
definition or to the `visualTagsSchema` of a root entity template, and "Tags are
|
|
189
|
+
case-sensitive!".
|
|
190
|
+
status: community
|
|
191
|
+
source: 'wiki.redmodding.org "ArchiveXL: Tags", section "What do tags do?" (warning and danger hints)'
|
|
192
|
+
tags:
|
|
193
|
+
- archivexl
|
|
194
|
+
- visual-tags
|
|
195
|
+
- case-sensitive
|
|
196
|
+
- silent-failure
|
|
197
|
+
detail: The page states case sensitivity as a rule; it does not describe the failure mode, so the
|
|
198
|
+
previously recorded "silently does not apply" was removed on 2026-09-07.
|
|
199
|
+
- id: cp2077.clothing.garments.vanilla-hide-tags-by-slot
|
|
200
|
+
claim: "The base-game hide tags hide the ITEM in a named equipment slot, not the body part:
|
|
201
|
+
`hide_H1` (Head), `hide_F1` (Eyes), `hide_T1` (Chest), `hide_T2` (Torso), `hide_L1` (Legs),
|
|
202
|
+
`hide_S1` (Feet). Alongside them, `hide_Hair` hides hair, `hide_Genitals` hides genitals in
|
|
203
|
+
uncensored mode and underwear in censored mode, and `hide_T1part` toggles the partial suffix
|
|
204
|
+
(`&Full` -> `&Part`) when applied to a `Torso` item."
|
|
205
|
+
status: community
|
|
206
|
+
source: 'wiki.redmodding.org "ArchiveXL: Tags", section "Base game tags" (tag table)'
|
|
207
|
+
tags:
|
|
208
|
+
- visual-tags
|
|
209
|
+
- hide-tag
|
|
210
|
+
- slot
|
|
211
|
+
- base-game
|
|
212
|
+
detail: 'Corrected 2026-09-07: the previous claim wrote the set as a contiguous "hide_H1 through
|
|
213
|
+
hide_S1" range over head/eyes/chest/torso/legs/feet and omitted the actual tag names
|
|
214
|
+
`hide_F1`, `hide_T1`, `hide_T2` and `hide_L1`; it also described them as hiding body parts.
|
|
215
|
+
`hide_T1part` pairs with `itemsFactoryAppearanceSuffix.Partial`, which searches the root
|
|
216
|
+
entity for `&Full` or `&Part`.'
|
|
217
|
+
- id: cp2077.clothing.garments.archivexl-fine-grained-hide-tags
|
|
218
|
+
claim: "ArchiveXL adds body-region hide tags beyond the vanilla slot set: `hide_Head`, `hide_Torso`
|
|
219
|
+
(0, 1, 2), `hide_LowerAbdomen` (3), `hide_UpperAbdomen` (2), `hide_CollarBone` (1),
|
|
220
|
+
`hide_Arms` (whole arms including hands), `hide_Thighs` (4), `hide_Calves` (5), `hide_Ankles`
|
|
221
|
+
(6), `hide_Feet` (7), `hide_Legs` (entire legs including feet, 4, 5, 6, 7). The same table
|
|
222
|
+
carries `AppearanceParts`, which goes into the .app file and enables `partsValues` for
|
|
223
|
+
non-player-equipment."
|
|
224
|
+
status: community
|
|
225
|
+
source: 'wiki.redmodding.org "ArchiveXL: Tags", section "ArchiveXL tags" (tag table)'
|
|
226
|
+
tags:
|
|
227
|
+
- archivexl
|
|
228
|
+
- visual-tags
|
|
229
|
+
- hide-tag
|
|
230
|
+
- appearanceparts
|
|
231
|
+
detail: There is no tag for partially hiding default arms or cyberarms; the page points at
|
|
232
|
+
chunkmasks or custom tags for that. Section name corrected 2026-09-07 (the heading is
|
|
233
|
+
"ArchiveXL tags", not "ArchiveXL Visual Tags").
|
|
234
|
+
- id: cp2077.clothing.garments.custom-tag-declared-in-xl-not-yaml
|
|
235
|
+
claim: "A custom tag's effect on component chunk masks is declared \"in your `.xl` file (not in your
|
|
236
|
+
`.yaml`!)\" as `overrides: tags: <tag_name>: <component_name>: {show: [0, 1, 2, 3]}` (or
|
|
237
|
+
`{hide: [...]}`), and the tag is then added to the appearance's tags array. Unique component
|
|
238
|
+
names are mandatory for this, since the override matches on component name alone."
|
|
239
|
+
status: community
|
|
240
|
+
source: 'wiki.redmodding.org "ArchiveXL: Tags", sections "Adding Custom tags" (danger hint) and
|
|
241
|
+
"Adding Custom tags > Registering the tag" / "Connecting the tag with the item"'
|
|
242
|
+
tags:
|
|
243
|
+
- archivexl
|
|
244
|
+
- visual-tags
|
|
245
|
+
- manifest
|
|
246
|
+
- xl
|
|
247
|
+
- custom-tag
|
|
248
|
+
detail: "The page's stated reason for custom tags over `partsOverrides` is that partsOverrides can
|
|
249
|
+
only hide components, never un-hide them. Its own example pairs `my_custom_unhiding_tag` with
|
|
250
|
+
`{show: ...}` and `my_HideSeamfix` on `t0_000_pma_base__full_seamfix` with `{hide: ...}`.
|
|
251
|
+
Advice for uniqueness: include your modder name in component names."
|
|
252
|
+
- id: cp2077.clothing.garments.heel-state-tags-need-foot-base
|
|
253
|
+
claim: "`HighHeels` turns the current (shoe) item into high heels and `FlatShoes` turns it into flat
|
|
254
|
+
shoes; `force_FlatFeet` forces female V's feet to be flat. All three require a foot item as
|
|
255
|
+
the `$base` in the item's `.yaml`."
|
|
256
|
+
status: community
|
|
257
|
+
source: 'wiki.redmodding.org "ArchiveXL: Tags", section "ArchiveXL tags" (`HighHeels`, `FlatShoes`)
|
|
258
|
+
and section "Root entity tags" (`force_FlatFeet`)'
|
|
259
|
+
tags:
|
|
260
|
+
- archivexl
|
|
261
|
+
- visual-tags
|
|
262
|
+
- footwear
|
|
263
|
+
- high-heels
|
|
264
|
+
- root-entity
|
|
265
|
+
detail: 'Split out of a combined footwear+hair fact on 2026-09-07, and the previous wording
|
|
266
|
+
"suppresses the heel-posture animation regardless of equipped footwear" corrected — the tag is
|
|
267
|
+
gated on a foot `$base`. Gotcha the page flags: `force_FlatFeet` turns feet INVISIBLE for
|
|
268
|
+
mascV unless the user has switch feet installed, so apply it to a conditional appearance in
|
|
269
|
+
the .app (`&gender=m`). `HighHeels`/`FlatShoes` sit in the ArchiveXL tag table, not under
|
|
270
|
+
"Root entity tags".'
|
|
271
|
+
- id: cp2077.clothing.garments.force-hair-tag
|
|
272
|
+
claim: Head items turn hair invisible by default; adding `force_Hair` to the root entity overrides
|
|
273
|
+
that and forces hair to show up while a head item is worn.
|
|
274
|
+
status: community
|
|
275
|
+
source: 'wiki.redmodding.org "ArchiveXL: Tags", section "Root entity tags"'
|
|
276
|
+
tags:
|
|
277
|
+
- archivexl
|
|
278
|
+
- visual-tags
|
|
279
|
+
- hair
|
|
280
|
+
- root-entity
|
|
281
|
+
detail: 'Split out of a combined footwear+hair fact on 2026-09-07. The same section lists
|
|
282
|
+
footstep-sound tags for the root entity — `Boots`, `Heels`, `Sneakers`, `Stilettos`,
|
|
283
|
+
`Metal_feet` — under "Footsteps: Setting footwear sounds".'
|