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,182 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: audio.voice
|
|
3
|
+
title: Voice-line filename conventions, replacement workflow, and Wwise limits
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.audio.voice.wwise-free-tier-200-asset-cap
|
|
6
|
+
claim: '"The Free Trial version of Wwise allows you to create a project for non-commercial use only
|
|
7
|
+
and is limited to 200 media assets in the Wwise SoundBanks" — a hard ceiling on how many lines
|
|
8
|
+
one voice-replacement or new-voice-line mod can carry without a paid Wwise licence.'
|
|
9
|
+
status: community
|
|
10
|
+
source: wiki.bg3.community/en/Information/Sound/Summary
|
|
11
|
+
tags:
|
|
12
|
+
- audio
|
|
13
|
+
- wwise
|
|
14
|
+
- asset-cap
|
|
15
|
+
- licensing
|
|
16
|
+
- id: bg3.audio.voice.no-way-to-add-new-soundbanks-or-events
|
|
17
|
+
claim: 'There is no way to add new soundbanks or new audio events to BG3 — "The only option is to
|
|
18
|
+
replace existing sound files (.wem format) so that an event plays your replaced track in place
|
|
19
|
+
of the original." Both pages date-stamp the claim (Summary: "as of May 6, 2024";
|
|
20
|
+
Replace-Sound: "as of May 11th 2024").'
|
|
21
|
+
status: community
|
|
22
|
+
source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound;
|
|
23
|
+
wiki.bg3.community/en/Information/Sound/Summary
|
|
24
|
+
tags:
|
|
25
|
+
- audio
|
|
26
|
+
- wwise
|
|
27
|
+
- soundbank
|
|
28
|
+
- scope-limit
|
|
29
|
+
detail: "This is the authoring boundary around the verified read-side facts in audio.wwise.yaml
|
|
30
|
+
(bg3.audio.fnv-1-hash-resolution, bg3.audio.wem-extraction-and-decode): resolving an existing
|
|
31
|
+
event to its .wem and decoding it is solved there; minting a new event is not possible from
|
|
32
|
+
the mod side."
|
|
33
|
+
- id: bg3.audio.voice.audio-events-not-editable-as-data
|
|
34
|
+
claim: Wwise-authored audio events can be viewed as data in .lsf(x) files, but their actual playback
|
|
35
|
+
instructions (which files, durations, triggers) come from Wwise itself and cannot be edited
|
|
36
|
+
through normal data editing — inspecting the event data doesn't let a modder change what it
|
|
37
|
+
plays.
|
|
38
|
+
status: community
|
|
39
|
+
source: wiki.bg3.community/en/Information/Sound/Summary
|
|
40
|
+
tags:
|
|
41
|
+
- audio
|
|
42
|
+
- wwise
|
|
43
|
+
- events
|
|
44
|
+
- scope-limit
|
|
45
|
+
- id: bg3.audio.voice.replacement-wem-must-match-format-exactly
|
|
46
|
+
claim: A replacement .wem must be converted through Wwise's conversion settings to match the
|
|
47
|
+
original file's channel count, sample rate, and format exactly (identified beforehand with
|
|
48
|
+
vgmstream-cli -m on the original .wem); a format mismatch is the documented cause of the
|
|
49
|
+
replacement producing no sound in game at all.
|
|
50
|
+
status: community
|
|
51
|
+
source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Getting Metadata, §Converting to .wem
|
|
52
|
+
with Wwise ("If you end up with no sound in game for the event, the format is probably wrong")
|
|
53
|
+
tags:
|
|
54
|
+
- audio
|
|
55
|
+
- wem
|
|
56
|
+
- format
|
|
57
|
+
- silent-failure
|
|
58
|
+
- id: bg3.audio.voice.replacement-clip-truncated-to-original-length
|
|
59
|
+
claim: A replacement sound plays only up to the original clip's duration — inserting audio longer
|
|
60
|
+
than the original file it replaces wastes the extra runtime, since playback is cut off at the
|
|
61
|
+
original's length, not extended to the new file's length.
|
|
62
|
+
status: community
|
|
63
|
+
source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Editing Your Audio ("If the original
|
|
64
|
+
clip is 18 seconds and you insert a 2 minute clip, it will only play the first 18 seconds")
|
|
65
|
+
tags:
|
|
66
|
+
- audio
|
|
67
|
+
- wem
|
|
68
|
+
- duration
|
|
69
|
+
- gotcha
|
|
70
|
+
- id: bg3.audio.voice.wwise-output-filename-must-match-source-1to1
|
|
71
|
+
claim: "Wwise's conversion output adds extra characters to the converted .wem's filename: \"Wwise
|
|
72
|
+
added some junk to your filename, make sure to rename it. It needs to match 1-to-1 with the
|
|
73
|
+
source .wem file.\""
|
|
74
|
+
status: community
|
|
75
|
+
source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Converting to .wem with Wwise
|
|
76
|
+
tags:
|
|
77
|
+
- audio
|
|
78
|
+
- wem
|
|
79
|
+
- filename
|
|
80
|
+
- id: bg3.audio.voice.non-voice-sounds-vs-voice-lines-different-paths
|
|
81
|
+
claim: Replaced non-voice sounds (music, sound effects) go under Public/Shared/Assets/Sound/ in the
|
|
82
|
+
mod's own workspace, while story voice lines (location and quest remarks, dialogue) and
|
|
83
|
+
repeated point-and-click reaction lines are placed under
|
|
84
|
+
Data/Mods/Gustav/Localization/English/Soundbanks/ instead — the two categories are not
|
|
85
|
+
interchangeable paths.
|
|
86
|
+
status: community
|
|
87
|
+
source: wiki.bg3.community/en/Tutorials/Sound/Replace-Sound §Placing Your File, §Voice Lines
|
|
88
|
+
tags:
|
|
89
|
+
- audio
|
|
90
|
+
- voice
|
|
91
|
+
- file-path
|
|
92
|
+
- id: bg3.audio.voice.character-voice-lines-are-four-plus-file-types
|
|
93
|
+
claim: "A character voice line is assembled from several files: \"A character voicebank .lsf file, A
|
|
94
|
+
.wem audio file, A .GR2 animation file for the character's gestures during the line, A
|
|
95
|
+
.ffxanim file for lipsyncing. And .ffxactor and .ffxbones files for the character to use those
|
|
96
|
+
lipsyncing files.\" They \"are referenced within the DialogBinary files via a text handle,
|
|
97
|
+
which is also used to call to the captions in the localization files.\""
|
|
98
|
+
status: community
|
|
99
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines
|
|
100
|
+
tags:
|
|
101
|
+
- audio
|
|
102
|
+
- voice
|
|
103
|
+
- voicebank
|
|
104
|
+
- ffxanim
|
|
105
|
+
- structure
|
|
106
|
+
- id: bg3.audio.voice.voicebank-filename-is-character-uuid-no-hyphens
|
|
107
|
+
claim: A character's voicebank .lsf file is named after that character's Root/GlobalTemplate UUID
|
|
108
|
+
with all hyphens removed; the same (hyphenated) UUID also appears inside the file under
|
|
109
|
+
VoiceSpeakerMetaData, which is how you confirm you have the right voicebank for a character.
|
|
110
|
+
status: community
|
|
111
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines
|
|
112
|
+
tags:
|
|
113
|
+
- audio
|
|
114
|
+
- voicebank
|
|
115
|
+
- uuid
|
|
116
|
+
- naming-convention
|
|
117
|
+
- id: bg3.audio.voice.wem-filename-convention
|
|
118
|
+
claim: A new voice line's audio filename follows the pattern v<character voicebank ID>_<text
|
|
119
|
+
handle>.wem — the voicebank ID is the character UUID with hyphens stripped, and the handle
|
|
120
|
+
keeps its leading "h" — and the same v<id>_<handle> stem is reused with an "MC_" prefix for
|
|
121
|
+
the mocap .GR2 and an "FX_" prefix for the lipsync .ffxanim.
|
|
122
|
+
status: community
|
|
123
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines
|
|
124
|
+
tags:
|
|
125
|
+
- audio
|
|
126
|
+
- wem
|
|
127
|
+
- naming-convention
|
|
128
|
+
- ffxanim
|
|
129
|
+
detail: "Worked example: character UUID 1323c4b6-92f7-4fda-8bad-6a96b8ddbc73 (voicebank ID
|
|
130
|
+
1323c4b692f74fda8bad6a96b8ddbc73) and text handle h580e6615c3364b05843d7575309ad942e568 give
|
|
131
|
+
v1323c4b692f74fda8bad6a96b8ddbc73_h580e6615c3364b05843d7575309ad942e568.wem, with mocap
|
|
132
|
+
MC_v1323c4b692f74fda8bad6a96b8ddbc73_h580e6615c3364b05843d7575309ad942e568.GR2 and lipsync
|
|
133
|
+
FX_v1323c4b692f74fda8bad6a96b8ddbc73_h580e6615c3364b05843d7575309ad942e568.ffxanim."
|
|
134
|
+
- id: bg3.audio.voice.ffxactor-ffxbones-unique-per-character
|
|
135
|
+
claim: .ffxactor and .ffxbones lipsync files are unique per character and a lipsync .ffxanim can
|
|
136
|
+
only be used by the character whose matching .ffxactor/.ffxbones pair is present in that
|
|
137
|
+
character's Localization/English/Animation/FaceFXActors folder; a custom character with no
|
|
138
|
+
such files can borrow another character's pair by renaming a duplicated copy to the custom
|
|
139
|
+
character's own UUID.
|
|
140
|
+
status: community
|
|
141
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines §A note about mocap and lipsync
|
|
142
|
+
tags:
|
|
143
|
+
- audio
|
|
144
|
+
- ffxactor
|
|
145
|
+
- ffxbones
|
|
146
|
+
- lipsync
|
|
147
|
+
detail: 'The pair must stay together: "Mixing and matching them will result in horrors beyond
|
|
148
|
+
imagination." Cloning is explicitly allowed — "you can clone them and use them for your own
|
|
149
|
+
characters, without affecting the original!"'
|
|
150
|
+
- id: bg3.audio.voice.dialog-priority-levels
|
|
151
|
+
claim: A VoiceTextMetaData entry's dialog priority level should be set to one of P1_StoryDialog
|
|
152
|
+
(cutscene/conversation dialog), P2_VoiceBark_AD (combat/overworld voicebarks),
|
|
153
|
+
P3_StoryDialog_AD (story-related overworld automatic dialog), or P4_RepeatingDialog_AD
|
|
154
|
+
(repeating/ambient overworld automatic dialog) matching the kind of line being added.
|
|
155
|
+
status: community
|
|
156
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines
|
|
157
|
+
tags:
|
|
158
|
+
- audio
|
|
159
|
+
- voicetextmetadata
|
|
160
|
+
- priority
|
|
161
|
+
- enum
|
|
162
|
+
- id: bg3.audio.voice.mocap-gr2-not-required-to-match-bodytype
|
|
163
|
+
claim: Any character's mocap .GR2 animation can be reused as the gesture animation for a different
|
|
164
|
+
character's voice line — it does not have to match the target character's body type — as long
|
|
165
|
+
as the filename follows the required naming pattern for that line.
|
|
166
|
+
status: community
|
|
167
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines §A note about mocap and lipsync
|
|
168
|
+
tags:
|
|
169
|
+
- audio
|
|
170
|
+
- gr2
|
|
171
|
+
- mocap
|
|
172
|
+
- reuse
|
|
173
|
+
- id: bg3.audio.voice.bg3-target-audio-level-around-minus-12db
|
|
174
|
+
claim: BG3's voice lines sit around -12 to -18db, noticeably quieter than the -6 to -9db typical of
|
|
175
|
+
other media's voice audio; a replacement/new voice line should be normalized to roughly -12db
|
|
176
|
+
and checked against an audio meter, not by ear, since speaker setups vary.
|
|
177
|
+
status: community
|
|
178
|
+
source: wiki.bg3.community/en/Tutorials/new-voice-lines
|
|
179
|
+
tags:
|
|
180
|
+
- audio
|
|
181
|
+
- volume
|
|
182
|
+
- normalization
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: audio.wwise
|
|
3
|
+
title: Wwise audio banks, sound event resolution, and FNV-1 hashing
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.audio.sound-numbering-unnamed
|
|
6
|
+
claim: "BG3 sounds are Wwise. Nothing is named on disk — SharedSounds.pak is 105,402 files called
|
|
7
|
+
Public/Shared/Assets/Sound/<numeric-id>.wem. The names only exist as FNV-1 hashes inside the
|
|
8
|
+
banks. Resolution chain: stats field → event name → hash → bank lookup → wem id → decode."
|
|
9
|
+
status: verified
|
|
10
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
11
|
+
source: ModWright field verification
|
|
12
|
+
tags:
|
|
13
|
+
- audio
|
|
14
|
+
- wwise
|
|
15
|
+
- sound
|
|
16
|
+
- fnv-1
|
|
17
|
+
- banks
|
|
18
|
+
detail: This is why there is no "find the sound file" UI — the lookup is table-driven via hashing.
|
|
19
|
+
- id: bg3.audio.event-names-from-stats
|
|
20
|
+
claim: "Get event names from the stats: CastSound / TargetSound / PrepareSound / SoundLoop /
|
|
21
|
+
SoundStop carry readable Wwise event names, e.g., Spell_Cast_Damage_Fireball_L5."
|
|
22
|
+
status: verified
|
|
23
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
24
|
+
source: ModWright field verification
|
|
25
|
+
tags:
|
|
26
|
+
- audio
|
|
27
|
+
- wwise
|
|
28
|
+
- events
|
|
29
|
+
- stats
|
|
30
|
+
detail: These are the entry points for sound lookup. Not every event is declared (e.g., Fireball
|
|
31
|
+
declares CastSound but not the detonation or charge-up).
|
|
32
|
+
- id: bg3.audio.wwise-bnk-extraction
|
|
33
|
+
claim: Wwise banks are in Data/SharedSoundBanks.pak (43 MB, 133 .bnk files). Extract with Divine.exe
|
|
34
|
+
-a extract-package. Spells are in SPELLS.bnk; status loops in STATUS.bnk.
|
|
35
|
+
status: verified
|
|
36
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
37
|
+
source: ModWright field verification
|
|
38
|
+
tags:
|
|
39
|
+
- audio
|
|
40
|
+
- wwise
|
|
41
|
+
- banks
|
|
42
|
+
- divine
|
|
43
|
+
detail: The .bnk files are binary; they need a hash walker to resolve event names to wem IDs.
|
|
44
|
+
- id: bg3.audio.fnv-1-hash-resolution
|
|
45
|
+
claim: "Resolve event name to wem id: hash the name (FNV-1 32-bit, LOWERCASED, multiply-then-xor),
|
|
46
|
+
find the Event in the HIRC, and walk Event → Action (only actionType 0x04xx = Play) →
|
|
47
|
+
container → CAkSound → source wem ids. Tool: tools/wwise_bnk.py <bank1;bank2> <EventName...>."
|
|
48
|
+
status: verified
|
|
49
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
50
|
+
source: ModWright field verification
|
|
51
|
+
tags:
|
|
52
|
+
- audio
|
|
53
|
+
- wwise
|
|
54
|
+
- fnv-1
|
|
55
|
+
- hash
|
|
56
|
+
detail: "The name must be LOWERCASED before hashing. Most events resolve to 4 wems (random-container
|
|
57
|
+
variants). Container child lists are found heuristically (NodeBaseParams is version-dependent
|
|
58
|
+
and variable-length): scan the payload for a u32 count followed by count u32s that are all
|
|
59
|
+
known object ids in the bank."
|
|
60
|
+
- id: bg3.audio.wem-extraction-and-decode
|
|
61
|
+
claim: 'Pull the wem from SharedSounds.pak: Divine.exe -a extract-single-file -s SharedSounds.pak -f
|
|
62
|
+
"Public/Shared/Assets/Sound/<id>.wem" -d out.wem (~0.2 s each). Decode: vgmstream-cli -o
|
|
63
|
+
out.wav in.wem. The wems are Wwise Vorbis (plugin=0x00040001, RIFF fmt size 0x42). ffmpeg
|
|
64
|
+
cannot decode them, and neither can Audacity without a plugin.'
|
|
65
|
+
status: verified
|
|
66
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
67
|
+
source: ModWright field verification
|
|
68
|
+
tags:
|
|
69
|
+
- audio
|
|
70
|
+
- wwise
|
|
71
|
+
- vorbis
|
|
72
|
+
- vgmstream
|
|
73
|
+
- decode
|
|
74
|
+
detail: ~0.2 s per extraction even against the 10.8 GB pak. The wem files are proprietary Wwise
|
|
75
|
+
Vorbis, not standard Vorbis.
|
|
76
|
+
- id: bg3.audio.event-guessing-convention
|
|
77
|
+
claim: Not every event is declared in stats. For undeclared events, guess from the convention
|
|
78
|
+
Spell_<Cast|Prepare|Impact|Loop|Status>_<VerbalIntent>_<SpellName>_<L#> and probe the hash.
|
|
79
|
+
The script prints NOT FOUND with the id if the guess misses.
|
|
80
|
+
status: verified
|
|
81
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
82
|
+
source: ModWright field verification
|
|
83
|
+
tags:
|
|
84
|
+
- audio
|
|
85
|
+
- wwise
|
|
86
|
+
- events
|
|
87
|
+
- conventions
|
|
88
|
+
detail: "Example: Fireball declares CastSound but not the detonation
|
|
89
|
+
(Spell_Impact_Damage_Fireball_L5) or charge-up (Spell_Prepare_Damage_Fireball_L5) — these
|
|
90
|
+
exist in the bank but appear in no txt. The convention is a guessing heuristic: an individual
|
|
91
|
+
guessed event name is unproven until the hash probe finds it."
|
|
92
|
+
- id: bg3.audio.divine-silent-failure
|
|
93
|
+
claim: Divine.exe writes nothing if a path is malformed and still exits 0 — silent no-op, no stderr.
|
|
94
|
+
Build Windows paths with cygpath -m and forward slashes. In bash, "$D\$var" collapses to a
|
|
95
|
+
literal $var with the backslash eaten.
|
|
96
|
+
status: verified
|
|
97
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
98
|
+
source: ModWright field verification
|
|
99
|
+
tags:
|
|
100
|
+
- audio
|
|
101
|
+
- divine
|
|
102
|
+
- paths
|
|
103
|
+
- windows
|
|
104
|
+
detail: This cost an hour in the audio session. No output, no error, just a missing file.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: charactercreation.heads-hair
|
|
3
|
+
title: Head/hair mesh import, CC slot registration, and the GLTF/Collada exporter split
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.character-creation.heads-hair.gr2-extension-must-be-uppercase
|
|
6
|
+
claim: A hair/head mesh's SourceFile path in the _merged.lsf.lsx VisualBank entry must point at a
|
|
7
|
+
file named with an uppercase ".GR2" extension — a mesh saved as ".gr2" (lowercase) will not
|
|
8
|
+
load, and the path separators must be "/" (Windows Explorer's copy-path default of "\" must be
|
|
9
|
+
corrected).
|
|
10
|
+
status: community
|
|
11
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
12
|
+
tags:
|
|
13
|
+
- character-creation
|
|
14
|
+
- hair
|
|
15
|
+
- gr2
|
|
16
|
+
- case-sensitivity
|
|
17
|
+
- silent-failure
|
|
18
|
+
- id: bg3.character-creation.heads-hair.needsskeletonremap-toggles-autosnap
|
|
19
|
+
claim: "The VisualBank Resource attribute NeedsSkeletonRemap is what tells the game whether a hair
|
|
20
|
+
is autosnapping or not: True = autosnapping (the mesh reshapes to fit different body types),
|
|
21
|
+
False = non-autosnapping (fixed to one body type, requiring a separate mesh per body type
|
|
22
|
+
supported)."
|
|
23
|
+
status: community
|
|
24
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
25
|
+
tags:
|
|
26
|
+
- character-creation
|
|
27
|
+
- hair
|
|
28
|
+
- autosnapping
|
|
29
|
+
- needsskeletonremap
|
|
30
|
+
- id: bg3.character-creation.heads-hair.ccav-vs-ccsv-compatibility-tradeoff
|
|
31
|
+
claim: CharacterCreationAppearanceVisuals.lsx (CCAV) and CharacterCreationSharedVisuals.lsx (CCSV)
|
|
32
|
+
both register a new CC slot entry. "CCSV is a lot easier to set up, file-wise. However, it is
|
|
33
|
+
incompatible with other mods that edit the same files. Unless you plan on using Compatibility
|
|
34
|
+
Framework, we recommend sticking with CCAV for both types of hair."
|
|
35
|
+
status: community
|
|
36
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
37
|
+
tags:
|
|
38
|
+
- character-creation
|
|
39
|
+
- ccav
|
|
40
|
+
- ccsv
|
|
41
|
+
- compatibility
|
|
42
|
+
- id: bg3.character-creation.heads-hair.ccav-ccsv-must-stay-lsx
|
|
43
|
+
claim: CharacterCreationAppearanceVisuals and CharacterCreationSharedVisuals files must stay in .lsx
|
|
44
|
+
format, not .lsf or .lsf.lsx — converting them to .lsf (as the multitool does by default for
|
|
45
|
+
that naming pattern) makes the game unable to read them.
|
|
46
|
+
status: community
|
|
47
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
48
|
+
tags:
|
|
49
|
+
- character-creation
|
|
50
|
+
- ccav
|
|
51
|
+
- ccsv
|
|
52
|
+
- lsx
|
|
53
|
+
- silent-failure
|
|
54
|
+
- id: bg3.character-creation.heads-hair.autosnapping-can-use-either-ccav-or-ccsv
|
|
55
|
+
claim: An autosnapping hair/CC asset can register its slot through either
|
|
56
|
+
CharacterCreationAppearanceVisuals or CharacterCreationSharedVisuals; a non-autosnapping asset
|
|
57
|
+
can only use CharacterCreationAppearanceVisuals.
|
|
58
|
+
status: community
|
|
59
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
60
|
+
tags:
|
|
61
|
+
- character-creation
|
|
62
|
+
- ccav
|
|
63
|
+
- ccsv
|
|
64
|
+
- autosnapping
|
|
65
|
+
- id: bg3.character-creation.heads-hair.ccav-uuid-must-match-merged-id
|
|
66
|
+
claim: A CharacterCreationAppearanceVisual node's VisualResource attribute must equal the ID
|
|
67
|
+
attribute set on the corresponding VisualBank Resource in the asset's own _merged.lsf.lsx
|
|
68
|
+
file, or the CC slot entry won't resolve to any mesh.
|
|
69
|
+
status: community
|
|
70
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
71
|
+
tags:
|
|
72
|
+
- character-creation
|
|
73
|
+
- ccav
|
|
74
|
+
- uuid-linkage
|
|
75
|
+
- visualresource
|
|
76
|
+
- id: bg3.character-creation.heads-hair.invisible-after-selection-means-path-mismatch
|
|
77
|
+
claim: A hair that appears as a selectable CC slot but is invisible once selected almost always
|
|
78
|
+
indicates a mismatch between the _merged file's SourceFile/Template path and the mesh's actual
|
|
79
|
+
location on disk; a slot missing entirely instead points to the CCAV/CCSV registration itself.
|
|
80
|
+
status: community
|
|
81
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
82
|
+
tags:
|
|
83
|
+
- character-creation
|
|
84
|
+
- hair
|
|
85
|
+
- troubleshooting
|
|
86
|
+
- silent-failure
|
|
87
|
+
- id: bg3.character-creation.heads-hair.scalpmaterialid-known-bug
|
|
88
|
+
claim: Some hairs in the vanilla game files ship without a ScalpMaterialId to copy — "(as of
|
|
89
|
+
24.11.23 some hairs in the game files don't have a scalp ID, larian is aware of this bug)" —
|
|
90
|
+
so a custom hair should reuse the base hair's ScalpMaterialId where one exists rather than
|
|
91
|
+
assume every vanilla hair has one.
|
|
92
|
+
status: community
|
|
93
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
94
|
+
tags:
|
|
95
|
+
- character-creation
|
|
96
|
+
- hair
|
|
97
|
+
- scalpmaterialid
|
|
98
|
+
- known-bug
|
|
99
|
+
detail: "Corrected from \"as of 24 November 2025\": the page's date stamp is 24.11.23, i.e. 24
|
|
100
|
+
November 2023."
|
|
101
|
+
- id: bg3.character-creation.heads-hair.hair-physics-needs-vanilla-skeletonresource
|
|
102
|
+
claim: Custom hair physics is only possible by borrowing a vanilla physics-enabled hair's
|
|
103
|
+
SkeletonResource UUID (set into the _merged.lsf.lsx SkeletonResource field) and weighting the
|
|
104
|
+
custom mesh to that armature — there is no way to author a new physics skeleton for hair.
|
|
105
|
+
status: community
|
|
106
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/Creating-Hair-Mesh-Blender
|
|
107
|
+
tags:
|
|
108
|
+
- character-creation
|
|
109
|
+
- hair
|
|
110
|
+
- physics
|
|
111
|
+
- skeletonresource
|
|
112
|
+
- id: bg3.character-creation.heads-hair.export-order-must-be-sequential
|
|
113
|
+
claim: "The exporter's per-mesh Export Order field must be set sequentially: \"For the first part of
|
|
114
|
+
your mesh set the export order to 1. Increase the export order number for every part you
|
|
115
|
+
have\" (with LOD Level and LOD Distance set to 0), because \"Blender will throw an error if
|
|
116
|
+
you don't have these in order.\""
|
|
117
|
+
status: community
|
|
118
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/Creating-Hair-Mesh-Blender
|
|
119
|
+
tags:
|
|
120
|
+
- character-creation
|
|
121
|
+
- export-order
|
|
122
|
+
- blender
|
|
123
|
+
- gr2
|
|
124
|
+
- id: bg3.character-creation.heads-hair.conform-required-for-multi-mesh-hair
|
|
125
|
+
claim: A hair mesh exported directly as .GR2 without conforming can look deformed or detached
|
|
126
|
+
in-game due to a skeleton mismatch; the fix is either using a hair's own "_Base" UUID as
|
|
127
|
+
SkeletonResource, or using LSLIB to conform an exported .dae to a vanilla .GR2 and copy its
|
|
128
|
+
skeleton — LSLIB's conform matches meshes by mesh DATA name (not the Blender object name), so
|
|
129
|
+
any mesh not sourced from that vanilla hair must have its mesh data name renamed to match one
|
|
130
|
+
already present in the vanilla file, or the conform export fails.
|
|
131
|
+
status: community
|
|
132
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/exporting-conforming
|
|
133
|
+
tags:
|
|
134
|
+
- character-creation
|
|
135
|
+
- hair
|
|
136
|
+
- gr2
|
|
137
|
+
- lslib
|
|
138
|
+
- conform
|
|
139
|
+
- id: bg3.character-creation.heads-hair.export-collada-requires-selected-only-and-dae-extension
|
|
140
|
+
claim: Exporting a hair mesh for LSLIB conforming must use File > Export > DOS2/BG3 Collada with the
|
|
141
|
+
extension explicitly changed to .dae and "Selected Only" chosen instead of "Visible Only,"
|
|
142
|
+
after applying all transforms (Ctrl+A > Apply > All Transforms) so the mesh doesn't fall
|
|
143
|
+
through the floor in-game due to leftover rotation.
|
|
144
|
+
status: community
|
|
145
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/exporting-conforming
|
|
146
|
+
tags:
|
|
147
|
+
- character-creation
|
|
148
|
+
- hair
|
|
149
|
+
- collada
|
|
150
|
+
- export-settings
|
|
151
|
+
- id: bg3.character-creation.heads-hair.body-shape-body-type-numeric-values
|
|
152
|
+
claim: A CharacterCreationAppearanceVisual's BodyShape attribute is 0 = Standard, 1 = Tall Muscular
|
|
153
|
+
(except Half-Orcs, which use Tall Muscular assets but must still be set to 0), and BodyType is
|
|
154
|
+
0 = Masc, 1 = Fem.
|
|
155
|
+
status: community
|
|
156
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/File-Setup
|
|
157
|
+
tags:
|
|
158
|
+
- character-creation
|
|
159
|
+
- ccav
|
|
160
|
+
- bodyshape
|
|
161
|
+
- bodytype
|
|
162
|
+
- enum
|
|
163
|
+
- id: bg3.character-creation.heads-hair.filename-is-the-in-game-asset-name
|
|
164
|
+
claim: "The filename of a hair/head mesh (e.g. HAIR_HUM_F_Braids_Short_B) is what the asset is
|
|
165
|
+
called in the game files, and is what you search for when extracting it with the Multitool:
|
|
166
|
+
\"the filename is what the hair is actually called in the game files. You'll need this when
|
|
167
|
+
extracting the hair meshes using the Multitool.\""
|
|
168
|
+
status: community
|
|
169
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/Preparing-To-Mod
|
|
170
|
+
tags:
|
|
171
|
+
- character-creation
|
|
172
|
+
- hair
|
|
173
|
+
- naming
|
|
174
|
+
- multitool
|
|
175
|
+
- id: bg3.character-creation.heads-hair.gltf-and-collada-are-both-supported-import-paths
|
|
176
|
+
claim: "The same Blender exporter add-on offers two export routes and the tutorials pick different
|
|
177
|
+
ones by asset kind: a static hair/head mesh being conformed goes out through \"File > Export >
|
|
178
|
+
DOS2/BG3 Collada\" as .dae, while an animation is exported \"using the exporter addon (the
|
|
179
|
+
'export via GLTF' option, not via Collada)\". Choose the route by whether the asset carries
|
|
180
|
+
animation, not by preference."
|
|
181
|
+
status: community
|
|
182
|
+
source: wiki.bg3.community/en/Tutorials/Visual/Creating-A-Hair-Mod/exporting-conforming
|
|
183
|
+
(Collada/.dae route); wiki.bg3.community/en/Tutorials/Animations/CustomAnimationsBlender §How
|
|
184
|
+
to correctly bake and export your animation (GLTF route)
|
|
185
|
+
tags:
|
|
186
|
+
- character-creation
|
|
187
|
+
- gltf
|
|
188
|
+
- collada
|
|
189
|
+
- exporter
|
|
190
|
+
detail: "Neither the Creating-A-Head-Mod page nor getting-started-with-3d-modding states the
|
|
191
|
+
add-on's format capabilities, so this fact cites the two pages that actually demonstrate each
|
|
192
|
+
route. Duplicates nothing: it is the selection rule;
|
|
193
|
+
bg3.animations.gr2.export-via-gltf-not-collada-for-animations is the animation half."
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: communitylibrary.shared-content
|
|
3
|
+
title: BG3 Community Library — reusing shared content as a runtime dependency
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.community-library.shared-content.reference-not-copy
|
|
6
|
+
claim: Using Community Library content does not require copying any of its files into a dependent
|
|
7
|
+
mod — a mod references a Community Library entry by its data ID (e.g. a spell or passive name)
|
|
8
|
+
from its own SpellLists.lsx/Progressions.lsx, and the actual asset stays owned by the
|
|
9
|
+
Community Library mod, which must be installed as a runtime dependency.
|
|
10
|
+
status: community
|
|
11
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
|
|
12
|
+
Using-Community-Library-Content.md ("You don't need to copy/paste any of the Community Library
|
|
13
|
+
content into your mod to make use of it. All you have to do is reference the ID of the piece
|
|
14
|
+
you want in the right spot."); dependency half from Readme.md §For Players
|
|
15
|
+
tags:
|
|
16
|
+
- community-library
|
|
17
|
+
- dependency
|
|
18
|
+
- reuse
|
|
19
|
+
detail: "This is the distinction that matters for provenance: a declared dependency, not a vendored
|
|
20
|
+
copy of the library's mesh/texture/script/data files."
|
|
21
|
+
- id: bg3.community-library.shared-content.cl-naming-prefix-convention
|
|
22
|
+
claim: Community Library content is namespaced with a "CL_" prefix on every internal Name (e.g.
|
|
23
|
+
CL_Target_WeaknessToFire, CL_STATUS_WEAKNESS_TO_FIRE, CL_Passive_Petpal), which is what a
|
|
24
|
+
dependent mod's Selectors/PassivesAdded strings must reference verbatim.
|
|
25
|
+
status: community
|
|
26
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library Included.md (all three names
|
|
27
|
+
appear in the included-content list)
|
|
28
|
+
tags:
|
|
29
|
+
- community-library
|
|
30
|
+
- naming-convention
|
|
31
|
+
- cl-prefix
|
|
32
|
+
- id: bg3.community-library.shared-content.add-spell-via-spelllist-and-addspells
|
|
33
|
+
claim: Pulling a Community Library spell into a mod's own race/class/subclass is done by (1) adding
|
|
34
|
+
a SpellList entry in Public/ModName/Lists/SpellLists.lsx whose Spells attribute names the CL_
|
|
35
|
+
spell, then (2) referencing that SpellList's UUID from a Progression's Selectors as
|
|
36
|
+
AddSpells(YOUR_SPELLLIST_UUID), then (3) putting that Progression's TableUUID into the target
|
|
37
|
+
Race/ClassDescription's ProgressionTableUUID field — three separate files must all agree.
|
|
38
|
+
status: community
|
|
39
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
|
|
40
|
+
Using-Community-Library-Content.md §Adding a spell or passive to a race or class via
|
|
41
|
+
progression
|
|
42
|
+
tags:
|
|
43
|
+
- community-library
|
|
44
|
+
- spelllists
|
|
45
|
+
- progressions
|
|
46
|
+
- uuid-linkage
|
|
47
|
+
- id: bg3.community-library.shared-content.add-passive-skips-spelllist-step
|
|
48
|
+
claim: Adding a Community Library passive (instead of a spell) skips the SpellLists.lsx step
|
|
49
|
+
entirely — the CL_ passive's name is placed directly into the target Progression's
|
|
50
|
+
PassivesAdded attribute.
|
|
51
|
+
status: community
|
|
52
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
|
|
53
|
+
Using-Community-Library-Content.md §Adding a spell or passive to a race or class via
|
|
54
|
+
progression
|
|
55
|
+
tags:
|
|
56
|
+
- community-library
|
|
57
|
+
- passivesadded
|
|
58
|
+
- progressions
|
|
59
|
+
- id: bg3.community-library.shared-content.using-clause-clones-and-overrides
|
|
60
|
+
claim: A mod can create a specialized version of a Community Library spell/passive/item/character by
|
|
61
|
+
making a new stats entry that "using"s the CL_ entry's name and then overriding only the
|
|
62
|
+
fields it wants to change — the new entry pulls in all of the CL_ entry's data first, so only
|
|
63
|
+
the differing fields need to be listed.
|
|
64
|
+
status: community
|
|
65
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library wiki,
|
|
66
|
+
Using-Community-Library-Content.md §Using a library spell, passive, or other data item as a
|
|
67
|
+
base for a more mod-specialized version
|
|
68
|
+
tags:
|
|
69
|
+
- community-library
|
|
70
|
+
- using-clause
|
|
71
|
+
- stats-inheritance
|
|
72
|
+
- id: bg3.community-library.shared-content.compat-framework-split-out-since-2-0-4-1
|
|
73
|
+
claim: As of Community Library 2.0.4.1, the Compatibility Framework is no longer bundled inside the
|
|
74
|
+
Community Library — it was split out into its own project, though the Compatibility Framework
|
|
75
|
+
still relies on Lua functions defined within the Community Library at runtime.
|
|
76
|
+
status: community
|
|
77
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md ("As of 2.0.4.1, this
|
|
78
|
+
mod no longer includes the Compatibility Framework, which has been separated out into it's own
|
|
79
|
+
project. Compatibility Framework does rely on Lua functions defined within the Community
|
|
80
|
+
Library.")
|
|
81
|
+
tags:
|
|
82
|
+
- community-library
|
|
83
|
+
- compatibility-framework
|
|
84
|
+
- version-floor
|
|
85
|
+
- dependency
|
|
86
|
+
- id: bg3.community-library.shared-content.players-only-need-it-if-a-mod-requires-it
|
|
87
|
+
claim: Community Library is not something a player needs to install proactively — it's only required
|
|
88
|
+
when another installed mod declares it as a dependency; if none of a player's mods require it,
|
|
89
|
+
the README states they "don't need to install it."
|
|
90
|
+
status: community
|
|
91
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §For Players
|
|
92
|
+
tags:
|
|
93
|
+
- community-library
|
|
94
|
+
- player-facing
|
|
95
|
+
- dependency
|
|
96
|
+
- id: bg3.community-library.shared-content.attribution-credited-in-readme
|
|
97
|
+
claim: 'The Community Library README carries a "Credits for External Content Used" section that
|
|
98
|
+
credits third-party art individually by name — "Game-Icons.net for The following Icons,
|
|
99
|
+
granted under CC 3.0", then each icon listed (Alter Weapon, Alter Weapon: Enflame, ...).
|
|
100
|
+
Attribution for externally-sourced assets inside shared content is expected to be itemised,
|
|
101
|
+
not covered by a blanket licence note.'
|
|
102
|
+
status: community
|
|
103
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §Credits for External
|
|
104
|
+
Content Used
|
|
105
|
+
tags:
|
|
106
|
+
- community-library
|
|
107
|
+
- attribution
|
|
108
|
+
- licensing
|
|
109
|
+
- id: bg3.community-library.shared-content.contribution-goes-through-fork-and-pr
|
|
110
|
+
claim: "Contributing content to the Community Library follows a fork-then-pull-request workflow on
|
|
111
|
+
GitHub: fork the repo, add and test changes, then submit a PR for the team to review, accept,
|
|
112
|
+
or explain why it wasn't accepted."
|
|
113
|
+
status: community
|
|
114
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §Independent Contribution
|
|
115
|
+
tags:
|
|
116
|
+
- community-library
|
|
117
|
+
- contribution
|
|
118
|
+
- workflow
|
|
119
|
+
- id: bg3.community-library.shared-content.recommended-load-order-top
|
|
120
|
+
claim: The Community Library's own install instructions direct players to drag it to the top of the
|
|
121
|
+
mod list in BG3 Mod Manager's left pane — the opposite end from where the (now-separate)
|
|
122
|
+
Compatibility Framework is told to load.
|
|
123
|
+
status: community
|
|
124
|
+
source: github.com/BG3-Community-Library-Team/BG3-Community-Library Readme.md §Installation > BG3
|
|
125
|
+
Mod Manager, step 6 ("Drag CommunityLibrary to the top of the Left pane"); contrast with
|
|
126
|
+
bg3.compatibility-framework.api.load-order-bottom
|
|
127
|
+
tags:
|
|
128
|
+
- community-library
|
|
129
|
+
- load-order
|