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,628 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: items.visualbank
|
|
3
|
+
title: Item VisualBank / MaterialBank / TextureBank UUID chain
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.items.visualbank.three-region-chain
|
|
6
|
+
claim: "An item's visual data is a three-region chain that must cross-link by UUID: a VisualBank
|
|
7
|
+
Resource's Objects/MaterialID must equal a MaterialBank Resource's ID, and that MaterialBank
|
|
8
|
+
Resource's Texture2DParameters ID must equal a TextureBank Resource's ID. All three regions
|
|
9
|
+
typically live in the same pair of .lsf.lsx files under
|
|
10
|
+
Public/<Mod>/Content/Assets/Characters/[PAK]_Armor."
|
|
11
|
+
status: community
|
|
12
|
+
source: bg3.wiki/wiki/Modding:Items §Meshes.lsx, §Materials and Texture .lsx
|
|
13
|
+
tags:
|
|
14
|
+
- items
|
|
15
|
+
- visualbank
|
|
16
|
+
- materialbank
|
|
17
|
+
- texturebank
|
|
18
|
+
- uuid
|
|
19
|
+
detail: '"[PAK]_Armor" is a literal bracketed folder name. The wiki: "If there is anything wrong
|
|
20
|
+
with the material, your item may simply refuse to show up, so it is worth double-checking
|
|
21
|
+
everything here." — the chain fails silently. Community confirmation of
|
|
22
|
+
bg3.materials.no-custom-base-material, which read the same side-by-side bank layout
|
|
23
|
+
(VisualBank / MaterialBank / TextureBank as regions of one merged bank file) straight out of
|
|
24
|
+
the Patch 8 paks.'
|
|
25
|
+
- id: bg3.items.visualbank.visualbank-id-links-roottemplate
|
|
26
|
+
claim: The VisualBank Resource's ID attribute is the UUID a RootTemplate's VisualTemplate (loot
|
|
27
|
+
appearance) or Equipment/VisualSet (equipped appearance) references to attach the mesh to an
|
|
28
|
+
item.
|
|
29
|
+
status: community
|
|
30
|
+
source: bg3.wiki/wiki/Modding:Items §Meshes.lsx ("(This UUID links up to the Roottemplate)")
|
|
31
|
+
tags:
|
|
32
|
+
- items
|
|
33
|
+
- visualbank
|
|
34
|
+
- roottemplate
|
|
35
|
+
- uuid
|
|
36
|
+
- id: bg3.items.visualbank.objectid-mesh-order-vs-lod
|
|
37
|
+
claim: "A VisualBank Objects node's ObjectID suffix (e.g. \"..._Mesh.0\") denotes mesh order (\"The
|
|
38
|
+
.0 denotes mesh order\"), which is a different number from the LOD attribute on the same node:
|
|
39
|
+
\"What level of LOD it is. This is a LOD0, so it is the highest quality mesh and the one we
|
|
40
|
+
see in cutscenes.\""
|
|
41
|
+
status: community
|
|
42
|
+
source: bg3.wiki/wiki/Modding:Items §Meshes.lsx
|
|
43
|
+
tags:
|
|
44
|
+
- items
|
|
45
|
+
- visualbank
|
|
46
|
+
- lod
|
|
47
|
+
- mesh-order
|
|
48
|
+
detail: The exporter-side number that produces the suffix is the per-mesh Export Order field — see
|
|
49
|
+
bg3.character-creation.heads-hair.export-order-must-be-sequential.
|
|
50
|
+
- id: bg3.items.visualbank.name-fields-unreferenced-but-unique
|
|
51
|
+
claim: The Name attribute on a VisualBank mesh Resource and on a MaterialBank material Resource is
|
|
52
|
+
never referenced anywhere else in the data, but should still be kept unique per mod to avoid
|
|
53
|
+
clashing with another mod's identically-named entries.
|
|
54
|
+
status: community
|
|
55
|
+
source: bg3.wiki/wiki/Modding:Items §Meshes.lsx, §Materials and Texture .lsx
|
|
56
|
+
tags:
|
|
57
|
+
- items
|
|
58
|
+
- visualbank
|
|
59
|
+
- materialbank
|
|
60
|
+
- naming
|
|
61
|
+
- id: bg3.items.visualbank.vertexcolormaskslots-hides-body-part
|
|
62
|
+
claim: Setting SupportsVertexColorMask to True on a VisualBank Resource and adding a child
|
|
63
|
+
VertexColorMaskSlots/Object node with a slot name (e.g. value="feet") makes the underlying
|
|
64
|
+
body part disappear when that item is equipped — the standard fix for boots clipping through
|
|
65
|
+
feet.
|
|
66
|
+
status: community
|
|
67
|
+
source: "bg3.wiki/wiki/Modding:Items §Meshes.lsx (\"You need this set to True if you want, say,
|
|
68
|
+
pants to vanish when boots are equipped\"; the feet example: \"This code would stop the body's
|
|
69
|
+
feet from loading in and clipping, ideal for boot items\")"
|
|
70
|
+
tags:
|
|
71
|
+
- items
|
|
72
|
+
- visualbank
|
|
73
|
+
- vertexcolormask
|
|
74
|
+
- clipping
|
|
75
|
+
- id: bg3.items.visualbank.material-shader-selection-by-filename
|
|
76
|
+
claim: "The MaterialBank Resource's SourceFile picks the shader by filename convention:
|
|
77
|
+
\"CHAR_BASE.lsf\" is a standard opaque shader; a name containing \"Alpha\" (e.g.
|
|
78
|
+
\"CHAR_BASE_AlphaTest_2S.lsf\") enables transparency and disables backface culling;
|
|
79
|
+
\"..._AlphaTest_2S_Dither\" is required for underwear to hide correctly; \"..._VertCut\" is
|
|
80
|
+
required (with SupportsVertexColorMask/VertexColorMaskSlots) to make a body part disappear; a
|
|
81
|
+
\"_VT\" suffix only works with virtual textures and is not generally useful for modding."
|
|
82
|
+
status: community
|
|
83
|
+
source: bg3.wiki/wiki/Modding:Items §Materials and Texture .lsx
|
|
84
|
+
tags:
|
|
85
|
+
- items
|
|
86
|
+
- materialbank
|
|
87
|
+
- shader
|
|
88
|
+
- transparency
|
|
89
|
+
- underwear
|
|
90
|
+
detail: "Exact wiki wording for the two load-bearing ones: \"Underwear needs to have a Dither shader
|
|
91
|
+
or it won't hide correctly\" and \"Materials with _VT at the end are less useful, as they only
|
|
92
|
+
work with virtual texture.\" Names the shader files behind bg3.materials.instance-recipe's
|
|
93
|
+
\"SourceFile = path to a base material .lsf\", which was inferred from vanilla data rather
|
|
94
|
+
than from a tutorial."
|
|
95
|
+
- id: bg3.items.visualbank.texturebank-srgb-basecolor-only
|
|
96
|
+
claim: A TextureBank Resource's SRGB attribute must be True only for the basecolor (BM) texture; the
|
|
97
|
+
normal (NM), physical (PM), and mask (MSK) maps must have SRGB set to False because they don't
|
|
98
|
+
carry color information.
|
|
99
|
+
status: community
|
|
100
|
+
source: bg3.wiki/wiki/Modding:Items §Materials and Texture .lsx
|
|
101
|
+
tags:
|
|
102
|
+
- items
|
|
103
|
+
- texturebank
|
|
104
|
+
- srgb
|
|
105
|
+
- basecolor
|
|
106
|
+
- id: bg3.items.visualbank.dds-extension-case-sensitive
|
|
107
|
+
claim: "A TextureBank Resource's SourceFile path is case-sensitive on the .DDS extension itself: a
|
|
108
|
+
texture file is expected as uppercase \".DDS\" and a lowercase \".dds\" file at the same path
|
|
109
|
+
will not load."
|
|
110
|
+
status: community
|
|
111
|
+
source: bg3.wiki/wiki/Modding:Items §Materials and Texture .lsx ("Capitalisation is IMPORTANT. Make
|
|
112
|
+
sure your texture is not named MSW_CoolCirclet_NM.dds or it won't load.")
|
|
113
|
+
tags:
|
|
114
|
+
- items
|
|
115
|
+
- texturebank
|
|
116
|
+
- dds
|
|
117
|
+
- case-sensitivity
|
|
118
|
+
- silent-failure
|
|
119
|
+
detail: "The casing rule is per file class, not global: item/character textures and .GR2 meshes are
|
|
120
|
+
uppercase (.DDS / .GR2), while an ICON ATLAS .dds is lowercase — see
|
|
121
|
+
bg3.ui.icons-atlas.atlas-path-must-match-textureatlaspath."
|
|
122
|
+
- id: bg3.items.visualbank.undersized-texture-tiles
|
|
123
|
+
claim: A TextureBank Resource's Width/Height attributes don't have to exactly match the source .DDS
|
|
124
|
+
file's real dimensions, but if the listed size is larger than the actual texture, the texture
|
|
125
|
+
tiles instead of scaling.
|
|
126
|
+
status: community
|
|
127
|
+
source: bg3.wiki/wiki/Modding:Items §Materials and Texture .lsx
|
|
128
|
+
tags:
|
|
129
|
+
- items
|
|
130
|
+
- texturebank
|
|
131
|
+
- texture-size
|
|
132
|
+
detail: "The wiki hedges it: \"These dimensions don't need to be exact. I believe if it is smaller
|
|
133
|
+
than listed, the texture will tile.\""
|
|
134
|
+
- id: bg3.items.visualbank.roottemplate-mapkey-links-stats-entry
|
|
135
|
+
claim: "A RootTemplate GameObjects node's Name and MapKey attributes both link it to the matching
|
|
136
|
+
stats entry (Armor.txt or Weapon.txt): the stats file's data \"RootTemplate\" value must equal
|
|
137
|
+
the RootTemplate's MapKey, and the stats entry name must equal the RootTemplate's Name."
|
|
138
|
+
status: community
|
|
139
|
+
source: bg3.wiki/wiki/Modding:Items §RootTemplate
|
|
140
|
+
tags:
|
|
141
|
+
- items
|
|
142
|
+
- roottemplate
|
|
143
|
+
- armor-txt
|
|
144
|
+
- weapon-txt
|
|
145
|
+
- uuid-linkage
|
|
146
|
+
- id: bg3.items.visualbank.parenttemplateid-inheritance-fallback
|
|
147
|
+
claim: Any RootTemplate attribute left unspecified (Description, Icon, EquipSound, etc.) silently
|
|
148
|
+
falls back to the value on the item's ParentTemplateId template. Using the wrong
|
|
149
|
+
ParentTemplateId for the item's real type (e.g. not a shield's parent template for a shield)
|
|
150
|
+
causes inherited-property mismatches — "a shield will not know it is a shield without this
|
|
151
|
+
ParentTemplate."
|
|
152
|
+
status: community
|
|
153
|
+
source: bg3.wiki/wiki/Modding:Items §RootTemplate
|
|
154
|
+
tags:
|
|
155
|
+
- items
|
|
156
|
+
- roottemplate
|
|
157
|
+
- parenttemplateid
|
|
158
|
+
- inheritance
|
|
159
|
+
- silent-failure
|
|
160
|
+
- id: bg3.items.visualbank.parentrace-zero-uuid-opts-out
|
|
161
|
+
claim: Githyanki, Dragonborn, Tiefling, and Half-Orc automatically fall back to HUM/HUM_STRONG body
|
|
162
|
+
meshes for an item unless a race is explicitly opted out; opting out is done with an
|
|
163
|
+
Equipment/ParentRace/Object node whose MapKey is the race's UUID and whose MapValue is the
|
|
164
|
+
all-zero UUID (00000000-0000-0000-0000-000000000000), which "zeroes the race out" of using
|
|
165
|
+
that item's race-specific mesh.
|
|
166
|
+
status: community
|
|
167
|
+
source: bg3.wiki/wiki/Modding:Items §RootTemplate
|
|
168
|
+
tags:
|
|
169
|
+
- items
|
|
170
|
+
- roottemplate
|
|
171
|
+
- parentrace
|
|
172
|
+
- race-uuid
|
|
173
|
+
- id: bg3.items.visualbank.treasuretable-i-prefix
|
|
174
|
+
claim: "TreasureTable.txt entries reference item root templates with an \"I_\" prefix on the item
|
|
175
|
+
name, in the form: object category \"I_ITEM_NAME\",1,0,0,0,0,0,0,0 — \"Make sure you don't
|
|
176
|
+
forget the I_ prefix for the item!\""
|
|
177
|
+
status: community
|
|
178
|
+
source: 'bg3.wiki/wiki/Modding:Items §TreasureTable (worked example: object category
|
|
179
|
+
"I_MY_COOL_NEW_CIRCLET",1,0,0,0,0,0,0,0)'
|
|
180
|
+
tags:
|
|
181
|
+
- items
|
|
182
|
+
- treasuretable
|
|
183
|
+
- naming-convention
|
|
184
|
+
- id: bg3.items.visualbank.weapon-loot-model-equals-item-model
|
|
185
|
+
claim: A RootTemplate's VisualTemplate is normally the dropped/examined "LOOT model," distinct from
|
|
186
|
+
the equipped VisualSet mesh — except for a weapon, where "the LOOT model and the item model
|
|
187
|
+
are the same," so a weapon RootTemplate's VisualTemplate should point at the same visual as
|
|
188
|
+
its equipped mesh.
|
|
189
|
+
status: community
|
|
190
|
+
source: bg3.wiki/wiki/Modding:Items §RootTemplate
|
|
191
|
+
tags:
|
|
192
|
+
- items
|
|
193
|
+
- weapon
|
|
194
|
+
- visualtemplate
|
|
195
|
+
- roottemplate
|
|
196
|
+
- id: bg3.items.visualbank.weapon-shares-visualbank-chain
|
|
197
|
+
claim: Weapons use the identical VisualBank/MaterialBank/TextureBank chain, folder ([PAK]_Armor),
|
|
198
|
+
and file pairing (.lsf.lsx meshes + materials/textures) as armor — the wiki's
|
|
199
|
+
Stats/Generated/Data folder listing names "Armor.txt, Object.txt, Passive.txt, Weapon.txt"
|
|
200
|
+
side by side as the stats files that reference the same RootTemplates/[PAK]_Armor content
|
|
201
|
+
tree, and the Sample Equipment Mod template is explicitly described as "for Armor and Weapon
|
|
202
|
+
modding" using one shared workflow.
|
|
203
|
+
status: community
|
|
204
|
+
source: bg3.wiki/wiki/Modding:Items §File Overview, §Sample Templates
|
|
205
|
+
tags:
|
|
206
|
+
- items
|
|
207
|
+
- weapon
|
|
208
|
+
- visualbank
|
|
209
|
+
- shared-pattern
|
|
210
|
+
detail: "Extends the armor-focused walkthrough: no separate weapon-only visual pipeline is
|
|
211
|
+
documented on the page. What the page does state weapon-specifically is the loot-model rule —
|
|
212
|
+
see bg3.items.visualbank.weapon-loot-model-equals-item-model."
|
|
213
|
+
- id: bg3.items.visualbank.texture-map-suffix-taxonomy
|
|
214
|
+
claim: "BG3's texture filenames encode their map type by suffix: BM (Basecolor), NM (Normal), PM
|
|
215
|
+
(Physical: Metallic+Roughness+AO), and MSK (Mask, material-region/dye definition) are the
|
|
216
|
+
Hardsurface set; CLEA (Cavity/Hair/Makeup/AO) and HMVY (Hemoglobin/Melanin/Vein/Yellowing) are
|
|
217
|
+
Skin-only; CTLO (Cavity/Thickness/Lips/AO, replaces CLEA) and DMSK (Decorative/Accent Mask)
|
|
218
|
+
are Dragonborn-Skin-only. NM and MSK suffixes are shared between Hardsurface and Skin but mean
|
|
219
|
+
different channel layouts in each (see
|
|
220
|
+
bg3.items.visualbank.msk-channel-meaning-differs-hardsurface-vs-skin)."
|
|
221
|
+
status: community
|
|
222
|
+
source: bg3-community/Information/Textures/texture-types.md §Texture formats > Maps (the eight-row
|
|
223
|
+
Map Type table)
|
|
224
|
+
tags:
|
|
225
|
+
- items
|
|
226
|
+
- texture
|
|
227
|
+
- suffix
|
|
228
|
+
- naming-convention
|
|
229
|
+
- msk
|
|
230
|
+
- bm
|
|
231
|
+
- nm
|
|
232
|
+
- pm
|
|
233
|
+
related:
|
|
234
|
+
- id: bg3.items.visualbank.material-shader-selection-by-filename
|
|
235
|
+
detail: Complements the existing fact's shader-selection-by-filename convention (CHAR_BASE, _Alpha,
|
|
236
|
+
_Dither, _VertCut, _VT) with the separate, orthogonal suffix system that names which
|
|
237
|
+
TEXTURE MAP TYPE a given .dds is, independent of which shader a material chooses.
|
|
238
|
+
- id: bg3.items.visualbank.hardsurface-channel-layout-and-compression
|
|
239
|
+
claim: "Hardsurface texture maps' channel layout and DDS compression: BM stores RGB color intensity
|
|
240
|
+
plus an alpha channel, compressed BC1/DXT1 Linear (and \"can be either full color or
|
|
241
|
+
grayscale\"); NM stores Y Axis Normals in Green, Z Axis Normals in Blue, and X Axis Normals in
|
|
242
|
+
Alpha with Red unused, BC3/DXT5 Linear; PM stores Metallic Intensity (Red), Roughness (Green),
|
|
243
|
+
and Ambient Occlusion (Blue) with Alpha unused, BC1/DXT1 Linear; MSK's channel makeup is
|
|
244
|
+
\"largely irrelevant\" (a colored mask for material regions) with Alpha unused, BC1/DXT1
|
|
245
|
+
Linear."
|
|
246
|
+
status: community
|
|
247
|
+
source: bg3-community/Information/Textures/texture-types.md §Objects (Hardsurface) texture map
|
|
248
|
+
breakdown
|
|
249
|
+
tags:
|
|
250
|
+
- items
|
|
251
|
+
- texture
|
|
252
|
+
- hardsurface
|
|
253
|
+
- channel-layout
|
|
254
|
+
- compression
|
|
255
|
+
- bm
|
|
256
|
+
- nm
|
|
257
|
+
- pm
|
|
258
|
+
- msk
|
|
259
|
+
- id: bg3.items.visualbank.normal-map-red-channel-relocated-to-alpha
|
|
260
|
+
claim: Converting a standard tangent-space DX normal map to BG3's NM format requires moving the Red
|
|
261
|
+
channel's data into the Alpha channel and then setting Red itself to black — BG3's NM format
|
|
262
|
+
does not use Red for X-axis normal data the way a conventional DX normal map does; X-axis data
|
|
263
|
+
instead lives in Alpha.
|
|
264
|
+
status: community
|
|
265
|
+
source: bg3-community/Information/Textures/texture-types.md §DGB texture map breakdown, NM entry
|
|
266
|
+
("To convert a 'regular' tangent DX normal map to BG3, put the Red channel into Alpha channel
|
|
267
|
+
and set Red channel to black")
|
|
268
|
+
tags:
|
|
269
|
+
- items
|
|
270
|
+
- texture
|
|
271
|
+
- normal-map
|
|
272
|
+
- dragonborn
|
|
273
|
+
- conversion
|
|
274
|
+
- gotcha
|
|
275
|
+
- id: bg3.items.visualbank.msk-channel-meaning-differs-hardsurface-vs-skin
|
|
276
|
+
claim: "The same MSK suffix means a different channel layout depending on context: a Hardsurface
|
|
277
|
+
MSK's channel makeup is stated as irrelevant (any colored region works as a material mask),
|
|
278
|
+
while a Skin MSK has a fixed meaning — Red: Non-Skin, Green: Melanin Removal, Blue: Mucous
|
|
279
|
+
Map, Alpha: Not Used — both compressed BC1/DXT1 Linear despite the different channel
|
|
280
|
+
semantics."
|
|
281
|
+
status: community
|
|
282
|
+
source: bg3-community/Information/Textures/texture-types.md §Objects (Hardsurface) texture map
|
|
283
|
+
breakdown (MSK row) and §Skin texture map breakdown (MSK row)
|
|
284
|
+
tags:
|
|
285
|
+
- items
|
|
286
|
+
- texture
|
|
287
|
+
- msk
|
|
288
|
+
- hardsurface
|
|
289
|
+
- skin
|
|
290
|
+
- channel-layout
|
|
291
|
+
- id: bg3.items.visualbank.dragonborn-ctlo-thickness-and-ao-need-adjustment-from-bakes
|
|
292
|
+
claim: Dragonborn's CTLO map's Thickness channel (Green) "is inverted compared to one from Marmoset
|
|
293
|
+
and much lighter," and its Ambient Occlusion channel (Alpha) "is much whiter then one you will
|
|
294
|
+
bake in Marmoset or Substance" — a Thickness/AO map baked in either of those tools needs
|
|
295
|
+
adjustment before it will look correct packed into BG3's CTLO layout.
|
|
296
|
+
status: community
|
|
297
|
+
source: "bg3-community/Information/Textures/texture-types.md §DGB texture map breakdown, CTLO entry
|
|
298
|
+
(Note: \"Thickness - it's inverted compared to one from Marmoset and much lighter\"; \"AO -
|
|
299
|
+
it's much whiter then one you will bake in Marmoset or Substance, so adjust them if you want
|
|
300
|
+
to mix with yours\")"
|
|
301
|
+
tags:
|
|
302
|
+
- items
|
|
303
|
+
- texture
|
|
304
|
+
- dragonborn
|
|
305
|
+
- ctlo
|
|
306
|
+
- thickness
|
|
307
|
+
- ambient-occlusion
|
|
308
|
+
- gotcha
|
|
309
|
+
- id: bg3.items.visualbank.draconic-bloodline-dmsk-replaces-dmsk-at-runtime
|
|
310
|
+
claim: A Dragonborn's DMSK (decorative/accent mask) texture is dynamically replaced by a separate
|
|
311
|
+
"Draconic Bloodline DMSK" texture at runtime if the player chose the Draconic Bloodline
|
|
312
|
+
sorcerer subclass — a mod that only authors the base DMSK will not see its accent details on a
|
|
313
|
+
Draconic Bloodline character.
|
|
314
|
+
status: community
|
|
315
|
+
source: bg3-community/Information/Textures/texture-types.md §DGB texture map breakdown, "Draconic
|
|
316
|
+
Bloodline DMSK" entry ("they will replace DMSK if gamer choose the DB subclass, keep it in
|
|
317
|
+
mind")
|
|
318
|
+
tags:
|
|
319
|
+
- items
|
|
320
|
+
- texture
|
|
321
|
+
- dragonborn
|
|
322
|
+
- dmsk
|
|
323
|
+
- draconic-bloodline
|
|
324
|
+
- subclass
|
|
325
|
+
- id: bg3.items.visualbank.illithid-msk-body-uses-stacked-uv-halves
|
|
326
|
+
claim: The Illithid MSK texture uses a 1x1 UV ratio for the head but a 1x2 (vertically stacked)
|
|
327
|
+
ratio for the body; any body UV island placed outside the top 1x1 square draws its data from
|
|
328
|
+
the second (bottom) half of the texture instead.
|
|
329
|
+
status: community
|
|
330
|
+
source: bg3-community/Information/Textures/texture-types.md:247-252, §DGB texture map breakdown,
|
|
331
|
+
"Illithid MSK" entry ("For head it is 1x1 ratio image, for body it is 1x2."; the note then
|
|
332
|
+
says UV parts outside that 1x1 take their data from the second part of the texture)
|
|
333
|
+
tags:
|
|
334
|
+
- items
|
|
335
|
+
- texture
|
|
336
|
+
- illithid
|
|
337
|
+
- msk
|
|
338
|
+
- uv-layout
|
|
339
|
+
- id: bg3.items.visualbank.mesh-needs-msk-map-to-be-dyeable
|
|
340
|
+
claim: A mesh only supports in-game dyeing if it has an MSK map; the MSK map is what "allows you to
|
|
341
|
+
set which dye parameters different areas in your mesh use." A mesh with no MSK map cannot be
|
|
342
|
+
dyed regardless of what dye/colour preset is applied to it.
|
|
343
|
+
status: community
|
|
344
|
+
source: bg3-community/Information/Textures/mskColours.md §MSK Colours (opening paragraph)
|
|
345
|
+
tags:
|
|
346
|
+
- items
|
|
347
|
+
- texture
|
|
348
|
+
- msk
|
|
349
|
+
- dye
|
|
350
|
+
- requirement
|
|
351
|
+
- id: bg3.items.visualbank.msk-twelve-parameter-armor-scheme
|
|
352
|
+
claim: "The primary armor shader's MSK map uses exactly 12 dye parameters, three each for Cloth,
|
|
353
|
+
Leather, and Metal (Primary/Secondary/Tertiary), plus Accent_Color, Custom_1, and Custom_2 —
|
|
354
|
+
each with a fixed reference sRGB/hex swatch value used to paint that region in the MSK texture
|
|
355
|
+
(e.g. Cloth_Primary = #FF8000, Leather_Primary = #8000FF, Metal_Primary = #00FF80)."
|
|
356
|
+
status: community
|
|
357
|
+
source: bg3-community/Information/Textures/mskColours.md §MSK Colours (12-parameter table)
|
|
358
|
+
tags:
|
|
359
|
+
- items
|
|
360
|
+
- texture
|
|
361
|
+
- msk
|
|
362
|
+
- dye
|
|
363
|
+
- parameters
|
|
364
|
+
- id: bg3.items.visualbank.msk-simple-three-parameter-scheme-aliases-the-twelve-parameter-one
|
|
365
|
+
claim: "Simpler meshes can use a 3-parameter MSK scheme instead (Color_01/Color_02/Color_03), but
|
|
366
|
+
the two schemes cannot be combined on the same MSK map: Color_01/02/03 use the exact same
|
|
367
|
+
reference RGB values as Cloth_Secondary, Metal_Secondary, and Leather_Secondary respectively,
|
|
368
|
+
so a value written for one scheme is indistinguishable in the raw texture from the
|
|
369
|
+
corresponding value in the other — which set of 12-or-3 meanings actually applies depends on
|
|
370
|
+
the material shader assigned to the mesh, not on the MSK texture itself."
|
|
371
|
+
status: community
|
|
372
|
+
source: bg3-community/Information/Textures/mskColours.md:36, §MSK Colours ("You cannot combine these
|
|
373
|
+
on the same MSK map as the parameters above, as you may notice they use the same values as
|
|
374
|
+
Cloth_Secondary, Metal_Secondary, and Leather_Secondary respectively."; the next sentence adds
|
|
375
|
+
that which value is used depends on the material shader)
|
|
376
|
+
tags:
|
|
377
|
+
- items
|
|
378
|
+
- texture
|
|
379
|
+
- msk
|
|
380
|
+
- dye
|
|
381
|
+
- shader-dependent
|
|
382
|
+
- gotcha
|
|
383
|
+
- id: bg3.items.visualbank.solid-colour-msk-uses-engine-msk-uuids
|
|
384
|
+
claim: For a solid-colour MSK region, a material can reference the built-in Engine_MSK colour map's
|
|
385
|
+
UUID for the desired parameter instead of authoring a new solid-color MSK texture — e.g.
|
|
386
|
+
Cloth_Primary = 01e0ce88-b357-fd26-323a-5a3577fcc35a, Metal_Primary =
|
|
387
|
+
40daac11-00dc-de43-7dcc-7cb7206fd298. The community reference itself records
|
|
388
|
+
Leather_Tertiary's UUID as "unknown" — not yet documented anywhere.
|
|
389
|
+
status: community
|
|
390
|
+
source: bg3-community/Information/Textures/mskColours.md §Solid Colour MSK (UUID table)
|
|
391
|
+
tags:
|
|
392
|
+
- items
|
|
393
|
+
- texture
|
|
394
|
+
- msk
|
|
395
|
+
- engine-msk
|
|
396
|
+
- uuid
|
|
397
|
+
- solid-color
|
|
398
|
+
detail: The community page's own gap (Leather_Tertiary = "unknown") is preserved here rather than
|
|
399
|
+
guessed at — a mod needing that specific solid parameter should extract Engine_MSK from the
|
|
400
|
+
vanilla paks directly rather than trust an invented UUID.
|
|
401
|
+
- id: bg3.items.visualbank.msk-compression-matches-basecolor-map
|
|
402
|
+
claim: "MSK maps for clothing and armor use the same compression settings as the base color (BM)
|
|
403
|
+
map: BC1/DXT1 with mipmaps enabled — not a different compression profile from the diffuse
|
|
404
|
+
texture it accompanies."
|
|
405
|
+
status: community
|
|
406
|
+
source: bg3-community/Information/Textures/mskColours.md §Compression
|
|
407
|
+
tags:
|
|
408
|
+
- items
|
|
409
|
+
- texture
|
|
410
|
+
- msk
|
|
411
|
+
- compression
|
|
412
|
+
- bc1
|
|
413
|
+
- dxt1
|
|
414
|
+
- id: bg3.items.visualbank.equipment-visuals-is-direct-child-not-in-visualset
|
|
415
|
+
claim: 'In an item RootTemplate (GameObjects, Type="item") the worn mesh comes ONLY from the
|
|
416
|
+
Equipment child node, and the body-type map node Visuals must be a DIRECT child of Equipment —
|
|
417
|
+
a sibling of Slot, VisualSet and ParentRace — never nested inside VisualSet. With Visuals
|
|
418
|
+
nested under VisualSet the engine finds no worn body map: the armor is invisible when equipped
|
|
419
|
+
on every body type, and examining it falls back to the loot VisualTemplate.'
|
|
420
|
+
status: verified
|
|
421
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
422
|
+
source: ModWright field verification
|
|
423
|
+
tags:
|
|
424
|
+
- items
|
|
425
|
+
- roottemplate
|
|
426
|
+
- equipment
|
|
427
|
+
- visuals
|
|
428
|
+
- visualset
|
|
429
|
+
- silent-failure
|
|
430
|
+
- invisible-armor
|
|
431
|
+
related:
|
|
432
|
+
- id: bg3.items.visualbank.equipment-visuals-fourteen-body-type-keys
|
|
433
|
+
detail: The keys that Visuals node must carry once it is in the right place.
|
|
434
|
+
- id: bg3.items.visualbank.parentrace-zero-uuid-opts-out
|
|
435
|
+
detail: ParentRace is the other direct child of Equipment; it is a race-remap opt-out, not a mesh
|
|
436
|
+
map.
|
|
437
|
+
detail: 'The correct shape under Equipment > children is: ParentRace (4 Object children, MapKey guid
|
|
438
|
+
-> MapValue guid, zero uuid = opt-out); Slot (attribute Object FixedString "Body"); VisualSet
|
|
439
|
+
(attributes BodySetVisual FixedString "", ShowEquipmentVisuals bool False; children
|
|
440
|
+
MaterialOverrides and RealMaterialOverrides); and Visuals, whose children are Object nodes
|
|
441
|
+
with a MapKey guid attribute (the body-type uuid) and a MapValue child whose Object
|
|
442
|
+
FixedString attribute is the VisualBank Resource ID. VisualSet is an easy trap because the
|
|
443
|
+
name sounds like where visuals go — it only carries the material-override banks. Validator
|
|
444
|
+
bg3.items.equipment-visuals-structure blocks the nested shape.'
|
|
445
|
+
- id: bg3.items.visualbank.equipment-visuals-fourteen-body-type-keys
|
|
446
|
+
claim: "There is no automatic body-type fallback in Equipment/Visuals: each race+gender body type
|
|
447
|
+
looks up its OWN MapKey, so any body type left unmapped renders the armor invisible on that
|
|
448
|
+
body. The vanilla robe maps exactly 14 keys, all with real VisualBank IDs, strictly
|
|
449
|
+
alternating male/female — MALE: 7d73f501-f65e-46af-a13b-2cacf3985d05 (HUM_M),
|
|
450
|
+
e39505f7-f576-4e70-a99e-8e29cd381a11, f07faafa-0c6f-4f79-a049-70e96b23d51b,
|
|
451
|
+
abf674d2-2ea4-4a74-ade0-125429f69f83, a933e2a8-aee1-4ecb-80d2-8f47b706f024,
|
|
452
|
+
5640e766-aa53-428d-815b-6a0b4ef95aca, 9a8bbeba-850c-402f-bac5-ff15696e6497; FEMALE:
|
|
453
|
+
71180b76-5752-4a97-b71f-911a69197f58 (HUM_F), 47c0315c-7dc6-4862-b39b-8bf3a10f8b54,
|
|
454
|
+
06aaae02-bb9e-4fa3-ac00-b08e13a5b0fa, b4a34ce7-41be-44d9-8486-938fe1472149,
|
|
455
|
+
8f00cf38-4588-433a-8175-8acdbbf33f33, c491d027-4332-4fda-948f-4a3df6772baa,
|
|
456
|
+
6d38f246-15cb-48b5-9b85-378016a7a78e."
|
|
457
|
+
status: verified
|
|
458
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
459
|
+
source: ModWright field verification
|
|
460
|
+
tags:
|
|
461
|
+
- items
|
|
462
|
+
- roottemplate
|
|
463
|
+
- equipment
|
|
464
|
+
- visuals
|
|
465
|
+
- body-type
|
|
466
|
+
- race
|
|
467
|
+
- gender
|
|
468
|
+
- invisible-armor
|
|
469
|
+
related:
|
|
470
|
+
- id: bg3.items.visualbank.parentrace-zero-uuid-opts-out
|
|
471
|
+
detail: ParentRace maps 4 of these same keys (f07faafa, 06aaae02, 9a8bbeba, 6d38f246) to the
|
|
472
|
+
all-zero UUID — a race-remap opt-out that is SEPARATE from Visuals; those 4 keys still
|
|
473
|
+
carry real meshes in Visuals.
|
|
474
|
+
detail: A mod that only maps HUM_M/HUM_F (the two keys most tutorials show) ships armor that is
|
|
475
|
+
invisible on the other 12 bodies. Validator bg3.items.equipment-visuals-structure warns on any
|
|
476
|
+
of the 14 keys missing from a Visuals map and on a MapValue with an empty Object.
|
|
477
|
+
- id: bg3.items.visualbank.worn-body-resource-needs-character-material-domain
|
|
478
|
+
claim: "A VisualBank Resource with Slot=\"Body\" (a body-skinned worn mesh) must be MaterialType 0
|
|
479
|
+
and its Objects/MaterialID material must instance a CHARACTER-domain base material
|
|
480
|
+
(Materials.pak Public/Shared/Assets/Materials/Characters/CHAR_BASE.lsf,
|
|
481
|
+
CHAR_BASE_AlphaTest.lsf or CHAR_BASE_VertCut.lsf — all declare the same Texture2D params
|
|
482
|
+
basecolor/normalmap/physicalmap). MaterialType 4 is a weapon/rigid value: a Body resource at
|
|
483
|
+
MaterialType 4 whose material's SourceFile is the generic scenery base
|
|
484
|
+
Public/Shared/Assets/Materials/Base/Base_AlphaTest.lsf gets no skinned shader permutation and
|
|
485
|
+
the mesh is invisible when worn."
|
|
486
|
+
status: verified
|
|
487
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
488
|
+
source: ModWright field verification
|
|
489
|
+
tags:
|
|
490
|
+
- items
|
|
491
|
+
- visualbank
|
|
492
|
+
- materialbank
|
|
493
|
+
- materialtype
|
|
494
|
+
- char-base
|
|
495
|
+
- base-alphatest
|
|
496
|
+
- worn-mesh
|
|
497
|
+
- invisible-armor
|
|
498
|
+
related:
|
|
499
|
+
- id: bg3.items.visualbank.material-shader-selection-by-filename
|
|
500
|
+
detail: That fact picks a shader by CHAR_BASE filename suffix; this one adds the prerequisite that
|
|
501
|
+
the base must be in the Characters/ domain at all for a worn mesh.
|
|
502
|
+
detail: Base_AlphaTest + MaterialType 4 remains correct for a rigid WEAPON (Slot="Unassigned"),
|
|
503
|
+
which is exactly why a weapon recipe copied onto an armor piece fails silently. The vanilla
|
|
504
|
+
worn robe uses MaterialType 13 + CHAR_BASE_VertCut_VT, a VirtualTexture base that lslib/divine
|
|
505
|
+
cannot bake — clone the shader FAMILY (non-VT CHAR_BASE) rather than the exact vanilla
|
|
506
|
+
material. Validator bg3.items.worn-visual-material-domain blocks a Body resource at
|
|
507
|
+
MaterialType 4 or on a Materials/Base/ material.
|
|
508
|
+
- id: bg3.items.visualbank.gr2-mesh-name-must-match-objectid
|
|
509
|
+
claim: A worn VisualBank Resource's Objects/ObjectID is "<GR2 basename>.<meshname>.<n>" and its
|
|
510
|
+
Template is "<GR2 basename>.<model root>.0"; the mesh name inside the GR2 must match the
|
|
511
|
+
ObjectID's middle segment exactly. The pipeline exports mesh "model" under root "Dummy_Root";
|
|
512
|
+
a stray Blender "model.001" datablock exported in its place silently breaks the link and the
|
|
513
|
+
mesh is invisible.
|
|
514
|
+
status: verified
|
|
515
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
516
|
+
source: ModWright field verification
|
|
517
|
+
tags:
|
|
518
|
+
- items
|
|
519
|
+
- visualbank
|
|
520
|
+
- gr2
|
|
521
|
+
- objectid
|
|
522
|
+
- mesh-name
|
|
523
|
+
- blender
|
|
524
|
+
- silent-failure
|
|
525
|
+
related:
|
|
526
|
+
- id: bg3.items.visualbank.objectid-mesh-order-vs-lod
|
|
527
|
+
detail: The trailing ".<n>" is the export-order suffix that fact describes; the middle segment is
|
|
528
|
+
the mesh name.
|
|
529
|
+
detail: Check with divine -g bg3 -a convert-model gr2->dae and read the mesh/geometry ids, or in
|
|
530
|
+
Blender confirm the object and mesh datablock are both named "model" before export. No
|
|
531
|
+
ModWright validator reads GR2 binaries, so this stays a checklist item.
|
|
532
|
+
- id: bg3.items.visualbank.worn-gr2-orientation-numeric-check
|
|
533
|
+
claim: "A Blender-exported worn GR2 whose vertices are rotated 90 degrees about X out of its own
|
|
534
|
+
skeleton frame renders in-game as a collapsed pile at the character's feet. Cause: exporting
|
|
535
|
+
after bpy.ops.object.parent_set(type='ARMATURE_NAME') leaves a non-identity
|
|
536
|
+
matrix_parent_inverse; fix: set an identity parent-inverse and identity local transform before
|
|
537
|
+
the COLLADA export. Offline numeric check: divine -g bg3 -a convert-model gr2->dae, then the
|
|
538
|
+
mesh POSITION bounding box must be tall on Y within the skeleton's height (e.g. y=[0.26,1.63]
|
|
539
|
+
with Root_M at y~1.045), as vanilla HUM_F_ARM_Robe_A_Body reads; a mesh spanning
|
|
540
|
+
z=[-1.63,-0.26] is the broken one."
|
|
541
|
+
status: verified
|
|
542
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
543
|
+
source: ModWright field verification
|
|
544
|
+
tags:
|
|
545
|
+
- items
|
|
546
|
+
- gr2
|
|
547
|
+
- blender
|
|
548
|
+
- orientation
|
|
549
|
+
- parent-inverse
|
|
550
|
+
- collada
|
|
551
|
+
- divine
|
|
552
|
+
- worn-mesh
|
|
553
|
+
detail: "This needs no engine: the dae is plain XML, so the POSITION source's min/max per axis is
|
|
554
|
+
readable with any script. Deliberately not a ModWright validator (it needs divine on the path
|
|
555
|
+
and a GR2 conversion per mesh); it belongs in the mesh-export checklist next to the mesh-name
|
|
556
|
+
check."
|
|
557
|
+
- id: bg3.items.visualbank.worn-open-garment-needs-two-sided-base
|
|
558
|
+
claim: A single-layer collar or lapel wound away from the body shows only its outer face, because
|
|
559
|
+
the engine culls backfaces on CHAR_BASE. Materials.pak ships
|
|
560
|
+
Public/Shared/Assets/Materials/Characters/CHAR_BASE_AlphaTest_2S.lsf — non-VT, two-sided, with
|
|
561
|
+
the same basecolor/normalmap/physicalmap Texture2D parameters as CHAR_BASE — and an open
|
|
562
|
+
garment should instance that base instead, keeping the basecolor alpha opaque.
|
|
563
|
+
status: unverified
|
|
564
|
+
source: ModWright research
|
|
565
|
+
tags:
|
|
566
|
+
- items
|
|
567
|
+
- visualbank
|
|
568
|
+
- materialbank
|
|
569
|
+
- char-base
|
|
570
|
+
- two-sided
|
|
571
|
+
- backface-culling
|
|
572
|
+
- worn-mesh
|
|
573
|
+
related:
|
|
574
|
+
- id: bg3.items.visualbank.worn-body-resource-needs-character-material-domain
|
|
575
|
+
detail: CHAR_BASE_AlphaTest_2S is in the Characters/ material domain that fact requires, so it stays
|
|
576
|
+
valid for a worn mesh.
|
|
577
|
+
- id: bg3.items.visualbank.material-shader-selection-by-filename
|
|
578
|
+
detail: Same parameter set means the existing MaterialBank Texture2DParameters carry over unchanged;
|
|
579
|
+
only SourceFile changes. Because it is non-VT it survives the lslib/divine bake, unlike
|
|
580
|
+
CHAR_BASE_VertCut_VT.
|
|
581
|
+
- id: bg3.items.visualbank.atlas-gutter-bleed
|
|
582
|
+
claim: "An AI-sculpt texture atlas with thousands of tiny UV islands and ~47% pixel coverage shows
|
|
583
|
+
hard-edged colour patches along triangle edges in-game, because the mipmaps average each
|
|
584
|
+
island's colour with the black gutters around it. Fix: rasterise the UV layout and dilate
|
|
585
|
+
island colour ~32 px into the gutters before making the DDS."
|
|
586
|
+
status: verified
|
|
587
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
588
|
+
source: ModWright field verification
|
|
589
|
+
tags:
|
|
590
|
+
- items
|
|
591
|
+
- textures
|
|
592
|
+
- atlas
|
|
593
|
+
- uv
|
|
594
|
+
- mipmaps
|
|
595
|
+
- gutter
|
|
596
|
+
- dds
|
|
597
|
+
- physicalmap
|
|
598
|
+
related:
|
|
599
|
+
- bg3.items.visualbank.msk-compression-matches-basecolor-map
|
|
600
|
+
detail: "A second symptom from the same atlas: a per-island metal/roughness map produces
|
|
601
|
+
per-triangle specular (each island averages to a different value). Cloth should ship a
|
|
602
|
+
near-constant physical map rather than one derived per island."
|
|
603
|
+
- id: bg3.items.visualbank.vertexcolormaskslots-underwear-fix
|
|
604
|
+
claim: "Copying the vanilla robe's seven VertexColorMaskSlots (Torso, upperarm, decolletage_02,
|
|
605
|
+
lowerarm, Shoulders, Underwear_Bra, Nipple Covers) plus SupportsVertexColorMask=True onto a
|
|
606
|
+
custom worn body VisualBank Resource stopped the underwear showing through the robe. The
|
|
607
|
+
robe's own material stayed CHAR_BASE: the mask is declared by the hiding item, and the
|
|
608
|
+
VertCut/dither shaders belong to the mesh being hidden."
|
|
609
|
+
status: verified
|
|
610
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
611
|
+
source: ModWright field verification
|
|
612
|
+
tags:
|
|
613
|
+
- items
|
|
614
|
+
- visualbank
|
|
615
|
+
- vertexcolormask
|
|
616
|
+
- underwear
|
|
617
|
+
- clipping
|
|
618
|
+
- worn-mesh
|
|
619
|
+
related:
|
|
620
|
+
- id: bg3.items.visualbank.vertexcolormaskslots-hides-body-part
|
|
621
|
+
detail: The community "feet" example generalised to a worn body — the same node hides the body and
|
|
622
|
+
underwear regions a robe covers.
|
|
623
|
+
- id: bg3.items.visualbank.material-shader-selection-by-filename
|
|
624
|
+
detail: That fact's Dither/VertCut wording applies to the HIDDEN mesh's material (vanilla underwear
|
|
625
|
+
and body), not to the garment doing the hiding.
|
|
626
|
+
detail: "Side effect to plan for: the same mask hides the arms whenever the robe is drawn, which is
|
|
627
|
+
what made a kit with two Breast-slot armors lose the arms in character creation
|
|
628
|
+
(bg3.equipment.cc-kit-one-body-item)."
|