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,179 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: toolchain.divine
|
|
3
|
+
title: Divine.exe toolchain and core operations
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.toolchain.divine-core-tool
|
|
6
|
+
claim: divine.exe (LSLib, in Packed/Tools/) is the core modding tool for BG3. It packs/unpacks .pak
|
|
7
|
+
files, converts .lsf↔.lsx, lists packages, extracts single files, and handles GR2 resources.
|
|
8
|
+
status: verified
|
|
9
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
10
|
+
source: ModWright field verification
|
|
11
|
+
tags:
|
|
12
|
+
- toolchain
|
|
13
|
+
- divine
|
|
14
|
+
- lsx
|
|
15
|
+
- lsf
|
|
16
|
+
detail: "Core commands: list-package, extract-package, create-package, convert-resource,
|
|
17
|
+
extract-single-file. The official Toolkit is incompatible with Script Extender, so the
|
|
18
|
+
hand-authored + divine pipeline is the SE-compatible path."
|
|
19
|
+
- id: bg3.toolchain.divine-requires-absolute-paths
|
|
20
|
+
claim: divine.exe convert-resource requires ABSOLUTE Windows paths (C:\...) for both source and
|
|
21
|
+
destination. Relative or MSYS-style paths cause "[FATAL] Cannot proceed without absolute
|
|
22
|
+
path".
|
|
23
|
+
status: verified
|
|
24
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
25
|
+
source: ModWright field verification
|
|
26
|
+
tags:
|
|
27
|
+
- divine
|
|
28
|
+
- convert-resource
|
|
29
|
+
- paths
|
|
30
|
+
- windows-only
|
|
31
|
+
detail: 'Command: divine.exe -g bg3 -a convert-resource -i lsx -o lsf -s <ABS_SRC> -d <ABS_DST>. A
|
|
32
|
+
separate failure mode: a malformed path makes divine write nothing and still exit 0 — silent
|
|
33
|
+
no-op, no stderr. Build Windows paths with cygpath -m and forward slashes; in bash "$D\$var"
|
|
34
|
+
collapses to a literal $var with the backslash eaten. See bg3.audio.divine-silent-failure.'
|
|
35
|
+
- id: bg3.toolchain.divine-staging-required
|
|
36
|
+
claim: "divine.exe create-package requires staging first: copy only Mods/ + Public/ (+ Generated/
|
|
37
|
+
for custom models) into a clean temp directory, never point it at a repo root."
|
|
38
|
+
status: verified
|
|
39
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
40
|
+
source: ModWright field verification
|
|
41
|
+
tags:
|
|
42
|
+
- divine
|
|
43
|
+
- create-package
|
|
44
|
+
- pak
|
|
45
|
+
- staging
|
|
46
|
+
detail: "create-package at a repo root will pack docs, PNGs, source files, and other junk.
|
|
47
|
+
Generated/ is required if the mod has custom GR2 models — omitting it ships a pak whose
|
|
48
|
+
VisualBank dangles and the model is missing (a regression seen in a class mod). PowerShell
|
|
49
|
+
pattern: Copy-Item -Recurse into $stage, then divine -g bg3 -a create-package -s $stage -d
|
|
50
|
+
output.pak."
|
|
51
|
+
- id: bg3.toolchain.pak-deployment
|
|
52
|
+
claim: Deploy the finished pak to %LOCALAPPDATA%\Larian Studios\Baldur's Gate 3\Mods\<Mod>.pak. The
|
|
53
|
+
game must be fully closed first — paks lock while BG3 runs ("Device or resource busy").
|
|
54
|
+
status: verified
|
|
55
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
56
|
+
source: ModWright field verification
|
|
57
|
+
tags:
|
|
58
|
+
- pak
|
|
59
|
+
- deployment
|
|
60
|
+
- game-lock
|
|
61
|
+
detail: "Reliable pattern: build to a scratch path, then a background watcher polls tasklist | grep
|
|
62
|
+
bg3_dx11.exe and copies the pak once the process exits. The player has to restart to load a
|
|
63
|
+
new pak anyway."
|
|
64
|
+
- id: bg3.toolchain.extract-single-file
|
|
65
|
+
claim: Extract one file from a game pak using divine.exe -g bg3 -a extract-single-file -s <game>.pak
|
|
66
|
+
-f "Public/.../file.lsf" -d <out.lsf>. List available paths first with list-package (grep the
|
|
67
|
+
output).
|
|
68
|
+
status: verified
|
|
69
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
70
|
+
source: ModWright field verification
|
|
71
|
+
tags:
|
|
72
|
+
- divine
|
|
73
|
+
- extract-single-file
|
|
74
|
+
- pak
|
|
75
|
+
detail: "The weapon STAT tells you which mod dir a RootTemplate lives in — e.g. Shadow Blade's
|
|
76
|
+
WPN_ShadowBlade is in GustavDev, so its template is Gustav.pak:
|
|
77
|
+
Public/GustavDev/RootTemplates/_merged.lsf. Convert lsf→lsx to read/edit."
|
|
78
|
+
- id: bg3.toolchain.loca-compilation
|
|
79
|
+
claim: Localization .xml must be compiled to binary .loca; the .loca is required at runtime and is
|
|
80
|
+
what ships in the pak. Compile with divine.exe -g bg3 -a convert-loca -s <src>.xml -d
|
|
81
|
+
<out>.loca. Multitool 0.10.6 does NOT do this step for you, and Vortex's stripped divine.exe
|
|
82
|
+
cannot — use LSLib's full divine.exe.
|
|
83
|
+
status: verified
|
|
84
|
+
source: ModWright field verification
|
|
85
|
+
tags:
|
|
86
|
+
- localization
|
|
87
|
+
- loca
|
|
88
|
+
- divine
|
|
89
|
+
- xml
|
|
90
|
+
detail: "Recorded as a hard-won lesson from an earlier mod's build loop. The same convert-loca
|
|
91
|
+
action reads the other way for vanilla text: Localization/English.pak → english.loca → divine
|
|
92
|
+
-a convert-loca → a 34 MB grep-able XML."
|
|
93
|
+
- id: bg3.toolchain.divine-dot-directory-empty-package
|
|
94
|
+
claim: divine.exe create-package silently produces an empty 48-byte package (exit 0, "[INFO] Package
|
|
95
|
+
created successfully.") when any directory anywhere in the -s source path has a dot-prefixed
|
|
96
|
+
name, whether -s itself is the dot directory or is nested inside one.
|
|
97
|
+
status: verified
|
|
98
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
99
|
+
source: ModWright field verification
|
|
100
|
+
tags:
|
|
101
|
+
- divine
|
|
102
|
+
- create-package
|
|
103
|
+
- paths
|
|
104
|
+
- silent-failure
|
|
105
|
+
detail: 'Repro: identical content packed from a deep path with no dot segment gives a 5.3 MB pak;
|
|
106
|
+
from ".x/" or from ".x/inner/" it gives 48 bytes. Stage BG3 packages under a path with no
|
|
107
|
+
dot-prefixed segments (ModWright: build.staging, e.g. "build/stage") and treat a pak smaller
|
|
108
|
+
than its largest input as failed.'
|
|
109
|
+
- id: bg3.toolchain.divine-game-flag-required-no-default
|
|
110
|
+
claim: divine.exe's -g/--game argument is required (Optional = false, DefaultValue = null in the CLI
|
|
111
|
+
argument definition) — there is no implicit game and omitting -g fails argument parsing rather
|
|
112
|
+
than falling back to a default target.
|
|
113
|
+
status: verified
|
|
114
|
+
source: "Norbyte/lslib@6f5f698 Divine/CLI/CommandLineArguments.cs:25-32 (the -g/--game
|
|
115
|
+
EnumeratedValueArgument: DefaultValue = null, Optional = false)"
|
|
116
|
+
tags:
|
|
117
|
+
- divine
|
|
118
|
+
- cli
|
|
119
|
+
- game-flag
|
|
120
|
+
- required
|
|
121
|
+
detail: "Checked against the source (2026-09-08): `verified_on` removed — read from LSLib's source,
|
|
122
|
+
which names no game version."
|
|
123
|
+
- id: bg3.toolchain.divine-game-flag-cli-allowed-values-excludes-unset
|
|
124
|
+
claim: The -g/--game argument's own AllowedValues list is exactly "dos;dosee;dos2;dos2de;bg3" — five
|
|
125
|
+
values. LSLib's internal GetGameByString switch statement also recognizes a sixth string,
|
|
126
|
+
"unset" (mapping to Game.Unset), but "unset" is absent from the CLI argument's AllowedValues,
|
|
127
|
+
so divine.exe itself rejects -g unset before that switch statement is ever reached; "unset" is
|
|
128
|
+
only reachable by code that calls into LSLib directly, not through the divine.exe CLI.
|
|
129
|
+
status: verified
|
|
130
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineArguments.cs:28 (AllowedValues); :226-257
|
|
131
|
+
(GetGameByString switch, including the "unset" case at :250-253 unreachable from the CLI's own
|
|
132
|
+
allow-list)
|
|
133
|
+
tags:
|
|
134
|
+
- divine
|
|
135
|
+
- cli
|
|
136
|
+
- game-flag
|
|
137
|
+
- unset
|
|
138
|
+
- unreachable-code
|
|
139
|
+
- id: bg3.toolchain.lslib.gr2-max-four-influences
|
|
140
|
+
claim: divine -a convert-model dae->gr2 fails with "GR2 only supports at most 4 vertex influences".
|
|
141
|
+
Blender's vertex_group_smooth can add a fifth influence AFTER vertex_group_limit_total(4) has
|
|
142
|
+
run, so cap the influences again as the last step before the COLLADA export.
|
|
143
|
+
status: verified
|
|
144
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
145
|
+
source: ModWright field verification
|
|
146
|
+
tags:
|
|
147
|
+
- divine
|
|
148
|
+
- gr2
|
|
149
|
+
- collada
|
|
150
|
+
- blender
|
|
151
|
+
- vertex-groups
|
|
152
|
+
- skinning
|
|
153
|
+
- export
|
|
154
|
+
detail: "Order that works: weight transfer, vertex_group_limit_total(4), vertex_group_smooth, then
|
|
155
|
+
vertex_group_limit_total(4) again immediately before export. The GR2 writer rejects the file
|
|
156
|
+
rather than truncating influences, so the failure is loud, unlike most of the worn-mesh
|
|
157
|
+
pipeline."
|
|
158
|
+
- id: bg3.toolchain.lslib.dae-mesh-order-is-gr2-mesh-index
|
|
159
|
+
claim: divine numbers the GR2's meshes in <library_geometries> order of the source COLLADA, and a
|
|
160
|
+
VisualBank ObjectID is "<GR2>.<meshname>.<index>". Blender's COLLADA exporter does not order
|
|
161
|
+
geometries by name (it put a second mesh first), so when the index matters, reorder the
|
|
162
|
+
<geometry> and matching <controller> blocks in the .dae before converting.
|
|
163
|
+
status: verified
|
|
164
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
165
|
+
source: ModWright field verification
|
|
166
|
+
tags:
|
|
167
|
+
- divine
|
|
168
|
+
- gr2
|
|
169
|
+
- collada
|
|
170
|
+
- blender
|
|
171
|
+
- mesh-order
|
|
172
|
+
- objectid
|
|
173
|
+
- visualbank
|
|
174
|
+
related:
|
|
175
|
+
- id: bg3.items.visualbank.gr2-mesh-name-must-match-objectid
|
|
176
|
+
detail: That fact fixes the middle segment of the ObjectID; this one fixes the trailing index.
|
|
177
|
+
- id: bg3.items.visualbank.objectid-mesh-order-vs-lod
|
|
178
|
+
detail: Check offline with divine -g bg3 -a convert-model gr2->dae and read the geometry order back;
|
|
179
|
+
no ModWright validator reads GR2 binaries, so this stays on the mesh-export checklist.
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: toolchain.lslib-formats
|
|
3
|
+
title: LSLib resource format internals (LSF/LSX/PAK versions, Divine CLI action set, .loca binary layout)
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.toolchain.lslib-formats.divine-full-action-enumeration
|
|
6
|
+
claim: "divine.exe's --action argument accepts exactly these values: create-package, list-package,
|
|
7
|
+
extract-single-file, extract-package, extract-packages, convert-model, convert-models,
|
|
8
|
+
convert-resource, convert-resources, convert-loca, build-vt — any other value is rejected by
|
|
9
|
+
the argument parser's AllowedValues list."
|
|
10
|
+
status: verified
|
|
11
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineArguments.cs:85 (the Action argument's
|
|
12
|
+
AllowedValues)
|
|
13
|
+
tags:
|
|
14
|
+
- divine
|
|
15
|
+
- cli
|
|
16
|
+
- actions
|
|
17
|
+
- lslib
|
|
18
|
+
detail: "Checked against the source (2026-09-08): `verified_on` removed. The claim was read out of
|
|
19
|
+
LSLib's source, which names no game version; recording it against a BG3 build number would
|
|
20
|
+
have implied an in-engine observation that did not happen. The same applies to every other
|
|
21
|
+
source-read fact in this file."
|
|
22
|
+
related:
|
|
23
|
+
- id: bg3.toolchain.divine-core-tool
|
|
24
|
+
detail: Sharpens the existing "list-package, extract-package, create-package, convert-resource,
|
|
25
|
+
extract-single-file" summary with the complete, exact action-name enumeration read from
|
|
26
|
+
the argument parser's own allow-list, including convert-loca and the plural batch forms.
|
|
27
|
+
- id: bg3.toolchain.lslib-formats.batch-actions-need-explicit-formats
|
|
28
|
+
claim: The three batch actions are extract-packages, convert-models and convert-resources. For
|
|
29
|
+
convert-models/convert-resources a missing --input-format is a fatal argument error with the
|
|
30
|
+
message "Cannot perform batch action without --input-format and --output-format arguments";
|
|
31
|
+
--output-format is also read for those two (but not for extract-packages).
|
|
32
|
+
status: verified
|
|
33
|
+
verified_on: LSLib divine build dated 2026-01-24 (no --version flag), 2026-09-09
|
|
34
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineActions.cs:41-45 (batchActions list), :72-90
|
|
35
|
+
(validation)
|
|
36
|
+
tags:
|
|
37
|
+
- divine
|
|
38
|
+
- cli
|
|
39
|
+
- batch
|
|
40
|
+
- convert-resources
|
|
41
|
+
detail: 'Checked against the source (2026-09-08): an earlier wording generalised the error path. The
|
|
42
|
+
guard at :74-79 only logs that fatal message when the action is NOT extract-packages;
|
|
43
|
+
`GetResourceFormatByString(args.InputFormat)` is then called unconditionally at :81, so
|
|
44
|
+
`extract-packages` with no --input-format instead throws "Unknown resource format" from
|
|
45
|
+
CommandLineArguments.cs. Both mean --input-format is required in practice; only one of them
|
|
46
|
+
produces the quoted message. Machine run 2026-09-09: `divine -g bg3 -a extract-packages -s
|
|
47
|
+
<dir> -d <dir>` with no --input-format printed `Unhandled exception. System.ArgumentException:
|
|
48
|
+
Unknown resource format: ""` with a stack through
|
|
49
|
+
`CommandLineArguments.GetResourceFormatByString` and `CommandLineActions.SetUpAndValidate`,
|
|
50
|
+
exit code 127 — the extract-packages branch exactly as the review predicted. (`--input-format
|
|
51
|
+
pak` is rejected the same way, `Unknown resource format: "pak"`: the accepted values are
|
|
52
|
+
resource formats, not package formats.)'
|
|
53
|
+
- id: bg3.toolchain.lslib-formats.resource-format-enum-values
|
|
54
|
+
claim: divine.exe's --input-format/--output-format values are exactly lsb, lsf, lsj, lsx (case names
|
|
55
|
+
as matched by the CLI argument parser's switch statement).
|
|
56
|
+
status: contradicted
|
|
57
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineArguments.cs:62-75, :262-290
|
|
58
|
+
tags:
|
|
59
|
+
- divine
|
|
60
|
+
- cli
|
|
61
|
+
- resource-format
|
|
62
|
+
- lsx
|
|
63
|
+
- lsf
|
|
64
|
+
- lsj
|
|
65
|
+
- lsb
|
|
66
|
+
detail: "Checked against the source (2026-09-08): citation does not support the claim: the cited
|
|
67
|
+
switch (`GetResourceFormatByString`, :262-290) is only the resource-format helper; the
|
|
68
|
+
--input-format and --output-format arguments themselves declare AllowedValues =
|
|
69
|
+
\"dae;glb;gltf;gr2;lsv;pak;lsj;lsx;lsb;lsf\" (:65 and :75), ten values, so the CLI accepts six
|
|
70
|
+
more than this fact says. Superseded by
|
|
71
|
+
bg3.toolchain.lslib-formats.format-flags-accept-ten-values; kept per the format's rule that a
|
|
72
|
+
wrong belief stays recorded."
|
|
73
|
+
- id: bg3.toolchain.lslib-formats.format-flags-accept-ten-values
|
|
74
|
+
claim: divine.exe's -i/--input-format and -o/--output-format arguments each accept ten values — dae,
|
|
75
|
+
glb, gltf, gr2, lsv, pak, lsj, lsx, lsb, lsf — covering model formats (dae/glb/gltf/gr2),
|
|
76
|
+
package formats (lsv/pak) and resource formats (lsj/lsx/lsb/lsf). Only the four resource
|
|
77
|
+
formats are convertible by `GetResourceFormatByString`, which is what the batch/convert
|
|
78
|
+
actions call; any of the other six passed there throws "Unknown resource format".
|
|
79
|
+
status: verified
|
|
80
|
+
supersedes: bg3.toolchain.lslib-formats.resource-format-enum-values
|
|
81
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineArguments.cs:62-75 (both AllowedValues),
|
|
82
|
+
:262-290 (GetResourceFormatByString)
|
|
83
|
+
tags:
|
|
84
|
+
- divine
|
|
85
|
+
- cli
|
|
86
|
+
- resource-format
|
|
87
|
+
- input-format
|
|
88
|
+
- output-format
|
|
89
|
+
- id: bg3.toolchain.lslib-formats.package-compression-enum-values
|
|
90
|
+
claim: divine.exe create-package's compression argument — spelled `-c` / `--compression-method` on
|
|
91
|
+
the CLI, not `--compression` — accepts exactly zlibfast, zlib, lz4, lz4hc, or none; any other
|
|
92
|
+
string is rejected up front by the CLI argument parser and no package is written.
|
|
93
|
+
status: verified
|
|
94
|
+
verified_on: LSLib divine build dated 2026-01-24 (no --version flag), 2026-09-09
|
|
95
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineArguments.cs:90-97 (the --compression argument's
|
|
96
|
+
AllowedValues = "zlib;zlibfast;lz4;lz4hc;none")
|
|
97
|
+
tags:
|
|
98
|
+
- divine
|
|
99
|
+
- cli
|
|
100
|
+
- compression
|
|
101
|
+
- create-package
|
|
102
|
+
detail: "Checked against the source (2026-09-08): citation corrected. The originally cited lines are
|
|
103
|
+
`GetCompressionOptions`'s switch, which does NOT reject an unknown string — its `case
|
|
104
|
+
\"none\": default:` arm silently maps anything unrecognised to CompressionMethod.None. The
|
|
105
|
+
rejection the claim describes happens earlier, at the argument declaration's AllowedValues
|
|
106
|
+
list, which is now what this fact cites. Machine run 2026-09-09: the flag is `-c,
|
|
107
|
+
--compression-method` (`divine --help`); `--compression bogus` fails as `[FATAL] Unknown
|
|
108
|
+
argument found: compression.` before the value is even looked at, and `-c bogus` fails as
|
|
109
|
+
`[FATAL] Value bogus is not allowed for argument c(compression-method)`, exit 1, with no
|
|
110
|
+
output file. `-c none` (946 bytes for a two-file tree), `-c lz4`, `-c lz4hc`, `-c zlib` and
|
|
111
|
+
`-c zlibfast` each wrote a package. An earlier wording's `--compression` spelling was the
|
|
112
|
+
review's shorthand, not the CLI's; corrected in the claim."
|
|
113
|
+
- id: bg3.toolchain.lslib-formats.bg3-uses-lsx-v4-and-lsf-verbg3patch3
|
|
114
|
+
claim: For Game.BaldursGate3, LSLib's own per-game version tables select LSXVersion.V4 (the LSX
|
|
115
|
+
schema variant that "Replaces type IDs with type names") and LSFVersion.VerBG3Patch3 (0x07) —
|
|
116
|
+
both distinct from the D:OS 2 values (LSXVersion.V3 = 3; LSFVersion.VerExtendedNodes = 0x03)
|
|
117
|
+
that Divine would pick for -g dos2 or -g dos2de instead of -g bg3.
|
|
118
|
+
status: verified
|
|
119
|
+
source: Norbyte/lslib@6f5f698 LSLib/LS/Enums/Game.cs:33-44 (LSFVersion switch) and :46-62
|
|
120
|
+
(LSXVersion switch); LSLib/LS/Enums/LSFVersion.cs:51-62 (LSXVersion V3/V4 with the "Replaces
|
|
121
|
+
type IDs with type names" comment), :18-38 (VerExtendedNodes 0x03 through VerBG3Patch3 0x07)
|
|
122
|
+
tags:
|
|
123
|
+
- divine
|
|
124
|
+
- lsx
|
|
125
|
+
- lsf
|
|
126
|
+
- version
|
|
127
|
+
- bg3
|
|
128
|
+
- lslib
|
|
129
|
+
detail: LSFVersion.VerBG3Patch3 is described in the enum's own doc comment as "BG3 Patch 3 version
|
|
130
|
+
with unknown additions" — LSLib's own author does not know what changed in that revision, only
|
|
131
|
+
that BG3's current release build needs it. MaxReadVersion and MaxWriteVersion are also both
|
|
132
|
+
0x07 in this LSLib checkout, so this is the newest LSF revision the tool can produce.
|
|
133
|
+
- id: bg3.toolchain.lslib-formats.bg3-release-pak-is-packageversion-v18
|
|
134
|
+
claim: "Divine's -g bg3 selects PackageVersion.V18 (\"BG3 Release\") for create-package, distinct
|
|
135
|
+
from the BG3 Early Access versions the same enum also names: V15 (\"BG3 EA\") and V16 (\"BG3
|
|
136
|
+
EA Patch4\")."
|
|
137
|
+
status: verified
|
|
138
|
+
source: Norbyte/lslib@6f5f698 LSLib/LS/Enums/PackageVersion.cs:5-12 (enum comments);
|
|
139
|
+
LSLib/LS/Enums/Game.cs:28 (PAKVersion switch, BaldursGate3 -> V18)
|
|
140
|
+
tags:
|
|
141
|
+
- divine
|
|
142
|
+
- pak
|
|
143
|
+
- packageversion
|
|
144
|
+
- bg3
|
|
145
|
+
detail: "Inference, not in the source: a pak built with an EA-era divine.exe or against the wrong -g
|
|
146
|
+
value would therefore carry a different package-version header. The enum and the switch are
|
|
147
|
+
all the cited source shows."
|
|
148
|
+
- id: bg3.toolchain.lslib-formats.pak-max-size-4gb-at-v16-plus
|
|
149
|
+
claim: LSLib's own MaxPackageSize table caps a package at 0x40000000 (1 GiB) for PackageVersion V15
|
|
150
|
+
and below, but 0x100000000 (4 GiB) for V16 and above — since BG3's release paks are V18 (see
|
|
151
|
+
bg3.toolchain.lslib-formats.bg3-release-pak-is-packageversion-v18), a single BG3 pak's
|
|
152
|
+
practical ceiling in this tool is 4 GiB, not 1 GiB.
|
|
153
|
+
status: verified
|
|
154
|
+
source: Norbyte/lslib@6f5f698 LSLib/LS/Enums/PackageVersion.cs:9-11,20-30 (MaxPackageSize)
|
|
155
|
+
tags:
|
|
156
|
+
- divine
|
|
157
|
+
- pak
|
|
158
|
+
- packageversion
|
|
159
|
+
- size-limit
|
|
160
|
+
- packaging
|
|
161
|
+
detail: "Merged 2026-09-08 from the duplicate bg3.paks.practical-size-ceiling-is-4gib-not-1gib
|
|
162
|
+
(deleted), which restated this for the packaging topic: relevant when deciding whether a large
|
|
163
|
+
asset set (many high-res textures, several custom meshes) needs splitting across multiple
|
|
164
|
+
paks, and what ceiling ModWright's own pak-size validation should use for BG3."
|
|
165
|
+
- id: bg3.toolchain.lslib-formats.package-crc-only-v10-through-v16
|
|
166
|
+
claim: LSLib's HasCrc predicate is true only for PackageVersion V10 through V16 inclusive — BG3's
|
|
167
|
+
release package version (V18) is outside that range, so a BG3 release pak carries no per-file
|
|
168
|
+
CRC the way a D:OS 2 or BG3 EA pak would.
|
|
169
|
+
status: verified
|
|
170
|
+
source: Norbyte/lslib@6f5f698 LSLib/LS/Enums/PackageVersion.cs:9-11 (V18 = BG3 Release), :15-18
|
|
171
|
+
(HasCrc)
|
|
172
|
+
tags:
|
|
173
|
+
- divine
|
|
174
|
+
- pak
|
|
175
|
+
- crc
|
|
176
|
+
- packageversion
|
|
177
|
+
- integrity
|
|
178
|
+
- packaging
|
|
179
|
+
detail: "Merged 2026-09-08 from the duplicate bg3.paks.release-pak-carries-no-per-file-crc
|
|
180
|
+
(deleted). Its extra consequence is this project's own conclusion, not something the enum
|
|
181
|
+
states: a corruption check on a BG3 release pak cannot rely on a per-file checksum stored in
|
|
182
|
+
the package and must compare against an external manifest (e.g. ModWright's build manifest) or
|
|
183
|
+
re-read the pak's listing."
|
|
184
|
+
- id: bg3.toolchain.lslib-formats.loca-binary-layout
|
|
185
|
+
claim: The compiled .loca binary format is a 12-byte header (Signature uint32 'LOCA' = 0x41434f4c,
|
|
186
|
+
NumEntries uint32, TextsOffset uint32) followed by one fixed-size entry record per handle (a
|
|
187
|
+
64-byte Key buffer, then a uint16 Version, then a uint32 Length), with the actual text bytes
|
|
188
|
+
stored afterward starting at TextsOffset. LSLib's reader throws "Incorrect signature in
|
|
189
|
+
localization file" if the magic doesn't match.
|
|
190
|
+
status: verified
|
|
191
|
+
source: Norbyte/lslib@6f5f698 LSLib/LS/Localization.cs:5-13 (LocaHeader), :16-42 (LocaEntry), :75-80
|
|
192
|
+
(signature check)
|
|
193
|
+
tags:
|
|
194
|
+
- localization
|
|
195
|
+
- loca
|
|
196
|
+
- binary-format
|
|
197
|
+
- lslib
|
|
198
|
+
related:
|
|
199
|
+
- id: bg3.loca.xml-location-and-format
|
|
200
|
+
detail: Adds the binary layout underneath the already-verified .xml-to-.loca compile step; explains
|
|
201
|
+
why the 64-byte Key field below matters.
|
|
202
|
+
- id: bg3.toolchain.lslib-formats.loca-key-64-byte-buffer
|
|
203
|
+
claim: A .loca entry's Key field is a fixed 64-byte buffer (KeyString reads it back up to the first
|
|
204
|
+
NUL and writes it by copying the UTF-8 bytes into a freshly zeroed 64-byte array); the setter
|
|
205
|
+
performs no length check, so a handle whose UTF-8 encoding exceeds 64 bytes makes convert-loca
|
|
206
|
+
throw and leaves a truncated .loca behind. A handle of exactly 64 bytes round-trips intact.
|
|
207
|
+
status: verified
|
|
208
|
+
verified_on: LSLib divine build dated 2026-01-24 (no --version flag), 2026-09-09
|
|
209
|
+
source: Norbyte/lslib@6f5f698 LSLib/LS/Localization.cs:16-42 (LocaEntry.Key, KeyString getter/setter)
|
|
210
|
+
tags:
|
|
211
|
+
- localization
|
|
212
|
+
- loca
|
|
213
|
+
- handle
|
|
214
|
+
- buffer-limit
|
|
215
|
+
detail: "Inferred from the struct layout ([MarshalAs ... SizeConst = 64]) and the setter's
|
|
216
|
+
unconditional `Array.Copy(bytes, Key, bytes.Length)`. Checked against the source (2026-09-08):
|
|
217
|
+
an earlier wording said such a handle \"will be silently truncated or corrupted\". Nothing in
|
|
218
|
+
the source supports \"silently\" — an over-long copy into a 64-byte destination is the case
|
|
219
|
+
.NET's Array.Copy raises on, so a throw is at least as likely as truncation. Machine run
|
|
220
|
+
2026-09-09 settled it: `divine -g bg3 -a convert-loca` on an XML whose contentuid is 65 ASCII
|
|
221
|
+
characters prints `[FATAL] Failed to convert localization file: Destination array was not long
|
|
222
|
+
enough. Check the destination index, length, and the array's lower bounds. (Parameter
|
|
223
|
+
'destinationArray')`, exit code 102, and leaves a 12-byte .loca (header only) at the
|
|
224
|
+
destination — a throw, not silent truncation, but the partial output file is still written. 63
|
|
225
|
+
and 64 characters both convert (90-byte .loca) and read back with the full handle, so the
|
|
226
|
+
boundary is \"more than 64 bytes\", not \"reaches 64\". A standard BG3 handle (\"h\" +
|
|
227
|
+
UUID-with-g-separators, 33 characters) is far under the limit; the risk is only a
|
|
228
|
+
hand-authored non-standard handle name."
|
|
229
|
+
- id: bg3.toolchain.lslib-formats.build-vt-uses-source-not-destination
|
|
230
|
+
claim: For divine.exe's build-vt action, the --source argument is read as the virtual-texture config
|
|
231
|
+
path and a separate --vt-root argument supplies the VT root path; unlike every other action,
|
|
232
|
+
build-vt does not read a --destination argument at all (DestinationPath is only assigned when
|
|
233
|
+
the action is not list-package or build-vt).
|
|
234
|
+
status: verified
|
|
235
|
+
source: Norbyte/lslib@6f5f698 Divine/CLI/CommandLineActions.cs:100-104 (build-vt reads args.Source
|
|
236
|
+
and args.VTRoot), :131-135 (SourcePath always; DestinationPath only when the action is neither
|
|
237
|
+
list-package nor build-vt)
|
|
238
|
+
tags:
|
|
239
|
+
- divine
|
|
240
|
+
- cli
|
|
241
|
+
- build-vt
|
|
242
|
+
- virtual-texture
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: toolkit.levels
|
|
3
|
+
title: Level creation in the Toolkit — GUI-only scope boundary
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.toolkit.levels.screen-archery-scope-not-gameplay-levels
|
|
6
|
+
claim: 'The most complete community-tested level-creation tutorial is explicitly scoped to virtual
|
|
7
|
+
photography: "It is written for virtual photography / screen archery in mind, and it will not
|
|
8
|
+
cover things you need to know to create actual gameplay levels."'
|
|
9
|
+
status: community
|
|
10
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level §Creating a New Level (opening
|
|
11
|
+
scope note)
|
|
12
|
+
tags:
|
|
13
|
+
- toolkit
|
|
14
|
+
- level
|
|
15
|
+
- scope-boundary
|
|
16
|
+
- gui-only
|
|
17
|
+
detail: ModWright's own reading of that gap — that new level geometry is Toolkit-GUI-only with no
|
|
18
|
+
text/LSX-first path documented the way there is for stats or dialogue, so levels are
|
|
19
|
+
validate-only rather than authorable — comes from ModWright research (its "Level (Toolkit)"
|
|
20
|
+
coverage row), not a claim the tutorial makes.
|
|
21
|
+
- id: bg3.toolkit.levels.roottemplate-required-before-placement
|
|
22
|
+
claim: An object cannot be dragged directly from the Resource Manager onto a level — it must first
|
|
23
|
+
exist as a RootTemplate (either an existing one, or a new one built for it) before it can be
|
|
24
|
+
placed; Resource Manager resources and RootTemplates are related but distinct, and only
|
|
25
|
+
RootTemplates ("Objects" in the level-building sense) are placeable.
|
|
26
|
+
status: community
|
|
27
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level
|
|
28
|
+
tags:
|
|
29
|
+
- toolkit
|
|
30
|
+
- level
|
|
31
|
+
- roottemplate
|
|
32
|
+
- gui-only
|
|
33
|
+
- id: bg3.toolkit.levels.local-template-vs-root-template
|
|
34
|
+
claim: Once a RootTemplate is placed in a level it becomes a "local template" — an override that can
|
|
35
|
+
carry per-instance changes (a unique face, armor, or stats) while still inheriting from the
|
|
36
|
+
shared root; editing the root modifies every local instance that inherits from it and hasn't
|
|
37
|
+
overridden that field itself.
|
|
38
|
+
status: community
|
|
39
|
+
source: docs.baldursgate3.game/index.php?title=Editor:_Navigation §Editing Templates
|
|
40
|
+
tags:
|
|
41
|
+
- toolkit
|
|
42
|
+
- level
|
|
43
|
+
- roottemplate
|
|
44
|
+
- local-template
|
|
45
|
+
- id: bg3.toolkit.levels.override-in-active-mod-required-before-edit
|
|
46
|
+
claim: 'A vanilla resource must be right-clicked and set to "Override in the Active Mod..." before
|
|
47
|
+
it becomes editable and is assigned to your mod; when asked "Do you want to keep the same
|
|
48
|
+
package structure?", select "Yes". Resource properties are then edited through their own
|
|
49
|
+
resource editors, not the Sidebar: "Properties of resources are not editable through the
|
|
50
|
+
Sidebar, but through special resource editors."'
|
|
51
|
+
status: community
|
|
52
|
+
source: docs.baldursgate3.game/index.php?title=Editor:_Navigation §Resources
|
|
53
|
+
tags:
|
|
54
|
+
- toolkit
|
|
55
|
+
- level
|
|
56
|
+
- override
|
|
57
|
+
- gui-only
|
|
58
|
+
- id: bg3.toolkit.levels.uuid-preferred-over-name-for-lookup
|
|
59
|
+
claim: Finding objects by UUID (copied via right-click "Copy Value to Clipboard" on a Sidebar
|
|
60
|
+
property) is preferred over searching by name in the Toolkit's Root Template Manager /
|
|
61
|
+
Resource Manager, since many unrelated objects can share the same display name while UUIDs are
|
|
62
|
+
always unique.
|
|
63
|
+
status: community
|
|
64
|
+
source: docs.baldursgate3.game/index.php?title=Editor:_Navigation §Editing Templates ("It's usually
|
|
65
|
+
better to find objects by UUID rather than by name, since many objects can share the same name
|
|
66
|
+
but their UUIDs will always be different")
|
|
67
|
+
tags:
|
|
68
|
+
- toolkit
|
|
69
|
+
- level
|
|
70
|
+
- uuid
|
|
71
|
+
- workflow
|
|
72
|
+
- id: bg3.toolkit.levels.distant-vs-local-light-probes
|
|
73
|
+
claim: "A LightProbe is one of two kinds: a Distant probe captures far-away sun/sky lighting and
|
|
74
|
+
applies to everything within the same LightingResources (a level needs at least one Distant
|
|
75
|
+
probe); a Local probe only captures nearby lights/objects within its own defined area, any
|
|
76
|
+
number of which can be placed (including nested inside another probe's area), with the
|
|
77
|
+
smallest probe's lighting always taking priority where areas overlap."
|
|
78
|
+
status: community
|
|
79
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level
|
|
80
|
+
tags:
|
|
81
|
+
- toolkit
|
|
82
|
+
- level
|
|
83
|
+
- lightprobe
|
|
84
|
+
- lighting
|
|
85
|
+
- id: bg3.toolkit.levels.lightprobe-render-requires-save-and-toggle
|
|
86
|
+
claim: "A LightProbe's baked HDRI lighting only updates after selecting the LightProbe and toggling
|
|
87
|
+
\"Infinite Capture\" or \"Enabled\" off and back on (\"I haven't figure out a better
|
|
88
|
+
consistent way\"), and the rendered HDRI maps are only written when the level itself is saved:
|
|
89
|
+
\"Whenever you make changes with a probe, you need to save your level in order for the
|
|
90
|
+
LightProbe to save the rendered HDRI maps\"."
|
|
91
|
+
status: community
|
|
92
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level
|
|
93
|
+
tags:
|
|
94
|
+
- toolkit
|
|
95
|
+
- level
|
|
96
|
+
- lightprobe
|
|
97
|
+
- save
|
|
98
|
+
- gui-only
|
|
99
|
+
- id: bg3.toolkit.levels.every-lightprobe-renders-per-lightingresource
|
|
100
|
+
claim: Every LightProbe in a level renders its HDRI capture once per LightingResource referenced by
|
|
101
|
+
the level's LightingTrigger, so a level with many probes and many LightingResources takes
|
|
102
|
+
proportionally longer to render — the guide recommends focusing on 1-4 LightingResources while
|
|
103
|
+
iterating, and only adding additional ones for the final render pass.
|
|
104
|
+
status: community
|
|
105
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level
|
|
106
|
+
tags:
|
|
107
|
+
- toolkit
|
|
108
|
+
- level
|
|
109
|
+
- lightprobe
|
|
110
|
+
- performance
|
|
111
|
+
- id: bg3.toolkit.levels.game-mode-photo-mode-combination-hangs-editor
|
|
112
|
+
claim: Switching between Game Mode and Editor Mode while Photo Mode is enabled makes the game window
|
|
113
|
+
unresponsive and forces a level reload; the in-game Main Menu button or loading a savegame
|
|
114
|
+
while in Game Mode inside the Toolkit similarly forces a force-quit-and-restart of the
|
|
115
|
+
Toolkit.
|
|
116
|
+
status: community
|
|
117
|
+
source: "docs.baldursgate3.game/index.php?title=Editor:_Navigation §Testing While Playing in the
|
|
118
|
+
Editor (\"Doing so causes the game window to become unresponsive and you'll have to reload the
|
|
119
|
+
level\"; using the in-game Main Menu button or loading a savegame: \"you'll end up having to
|
|
120
|
+
force-quit and restart the Toolkit\")"
|
|
121
|
+
tags:
|
|
122
|
+
- toolkit
|
|
123
|
+
- level
|
|
124
|
+
- game-mode
|
|
125
|
+
- photo-mode
|
|
126
|
+
- crash
|
|
127
|
+
- gui-only
|
|
128
|
+
- id: bg3.toolkit.levels.editor-camera-escapes-void-spawn
|
|
129
|
+
claim: A level offset from the world origin can spawn the player character in the void in Game Mode;
|
|
130
|
+
the documented recovery is switching to the Editor Camera (usable while in Game Mode), flying
|
|
131
|
+
to the level visually or via known coordinates, then pressing Ctrl+T over walkable terrain to
|
|
132
|
+
teleport the player character there.
|
|
133
|
+
status: community
|
|
134
|
+
source: docs.baldursgate3.game/index.php?title=Editor:_Navigation §Testing While Playing in the
|
|
135
|
+
Editor ("Remember how the level was offset a bit from the world origin? Well, now we've
|
|
136
|
+
spawned in the middle of the void and cannot move." — then fly with WASD and "When you've
|
|
137
|
+
found a bit of good, walkable terrain, hover your cursor over it and press Ctrl+T")
|
|
138
|
+
tags:
|
|
139
|
+
- toolkit
|
|
140
|
+
- level
|
|
141
|
+
- game-mode
|
|
142
|
+
- teleport
|
|
143
|
+
- workflow
|
|
144
|
+
- id: bg3.toolkit.levels.large-levels-slow-to-load-prefer-smaller
|
|
145
|
+
claim: Some levels contain many smaller sub-areas nested inside them (e.g. WLD_Main_A bundles the
|
|
146
|
+
Crashsite, Emerald Grove, Goblin Camp, Underdark, and more) and take proportionally longer to
|
|
147
|
+
load; loading a smaller, specifically-scoped level (e.g. WLD_Crashsite_D) instead saves
|
|
148
|
+
loading time while testing.
|
|
149
|
+
status: community
|
|
150
|
+
source: docs.baldursgate3.game/index.php?title=Editor:_Navigation §Loading a Level
|
|
151
|
+
tags:
|
|
152
|
+
- toolkit
|
|
153
|
+
- level
|
|
154
|
+
- load-time
|
|
155
|
+
- workflow
|
|
156
|
+
- id: bg3.toolkit.levels.terrain-console-teleport-command
|
|
157
|
+
claim: The console command TeleportPartiesToLevelWithMovie("YourLevelName","","") is the quickest
|
|
158
|
+
way to jump directly to a specific level for testing, where YourLevelName is the level's own
|
|
159
|
+
name, not the Toolkit project's name.
|
|
160
|
+
status: community
|
|
161
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level
|
|
162
|
+
tags:
|
|
163
|
+
- toolkit
|
|
164
|
+
- level
|
|
165
|
+
- console-command
|
|
166
|
+
- workflow
|
|
167
|
+
- id: bg3.toolkit.levels.removing-terrain-material-removes-all-painted-instances
|
|
168
|
+
claim: '"Removing a material from the terrain panel will remove all instances of that painted
|
|
169
|
+
material from the terrain" — the removal is retroactive over everything already painted, not
|
|
170
|
+
just a change to what you can paint next.'
|
|
171
|
+
status: community
|
|
172
|
+
source: wiki.bg3.community/en/Tutorials/Toolkit/Creating-a-new-level
|
|
173
|
+
tags:
|
|
174
|
+
- toolkit
|
|
175
|
+
- level
|
|
176
|
+
- terrain
|
|
177
|
+
- gotcha
|