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,144 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: origins.companions
|
|
3
|
+
title: Custom origin creation (manual/non-Toolkit method)
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.origins.companions.moderate-difficulty-manual-method
|
|
6
|
+
claim: "\"This tutorial is considered moderate difficulty–you are expected to already be familiar
|
|
7
|
+
with code editing and searching BG3's files for the info you need.\" It documents the manual
|
|
8
|
+
(non-Toolkit) method; a separate page, \"Creating Custom Origins In Toolkit\", covers the
|
|
9
|
+
Toolkit route."
|
|
10
|
+
status: community
|
|
11
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
12
|
+
tags:
|
|
13
|
+
- origin
|
|
14
|
+
- difficulty
|
|
15
|
+
- toolkit
|
|
16
|
+
- manual-method
|
|
17
|
+
- id: bg3.origins.companions.regenerate-uuid-find-replace-warning
|
|
18
|
+
claim: The custom-origin template repeatedly marks placeholder UUIDs with "Regenerate this!"
|
|
19
|
+
comments; the recommended fix is VS Code's "Replace in Files" to replace every occurrence of a
|
|
20
|
+
given UUID across the whole template at once, specifically to avoid UUIDs that don't link up
|
|
21
|
+
between files, which the guide calls out as a cause of crashes.
|
|
22
|
+
status: community
|
|
23
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
24
|
+
tags:
|
|
25
|
+
- origin
|
|
26
|
+
- uuid
|
|
27
|
+
- crash
|
|
28
|
+
- find-replace
|
|
29
|
+
- id: bg3.origins.companions.origins-lsx-tag-must-be-a-real-origin-tag
|
|
30
|
+
claim: The default origin tags in the template are fine for a Tav-like origin; "If you want a Durge
|
|
31
|
+
origin, you'll have to swap in the REALLY_DARK_URGE tag". Origins.lsx's ReallyTags must name a
|
|
32
|
+
tag that exists — an existing origin's tag works ("Heck, you could even put in another
|
|
33
|
+
origin's tag if you wanted, but it probably wouldn't make a lot of narrative sense").
|
|
34
|
+
status: community
|
|
35
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
36
|
+
tags:
|
|
37
|
+
- origin
|
|
38
|
+
- origins-lsx
|
|
39
|
+
- tags
|
|
40
|
+
- id: bg3.origins.companions.cc-body-race-swap-causes-floating-heads
|
|
41
|
+
claim: Making a custom origin's body type or race editable in character creation doesn't work
|
|
42
|
+
reliably with the template's setup and produces symptoms like floating heads; the tutorial
|
|
43
|
+
author states they hadn't found a fix for this as of writing.
|
|
44
|
+
status: community
|
|
45
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
46
|
+
tags:
|
|
47
|
+
- origin
|
|
48
|
+
- character-creation
|
|
49
|
+
- floating-heads
|
|
50
|
+
- known-bug
|
|
51
|
+
- id: bg3.origins.companions.cc-editable-scar-resets-to-default
|
|
52
|
+
claim: If a custom origin is made editable in character creation, any scar preset baked into its
|
|
53
|
+
Character Visuals resets to "no scar" and the player has to reselect it manually; scars are
|
|
54
|
+
fine only when the origin's appearance is kept locked (not editable).
|
|
55
|
+
status: community
|
|
56
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
57
|
+
tags:
|
|
58
|
+
- origin
|
|
59
|
+
- character-creation
|
|
60
|
+
- scars
|
|
61
|
+
- character-visuals
|
|
62
|
+
- known-bug
|
|
63
|
+
- id: bg3.origins.companions.custom-colors-need-mergedinto-on-race
|
|
64
|
+
claim: Custom eye/hair/skin colors on an origin reset in character creation when the game can't find
|
|
65
|
+
them as part of the race's defaults — "If the game can't find their custom colors as part of
|
|
66
|
+
the race defaults, it'll reset to the first color in the race's list" — and the fix is to add
|
|
67
|
+
those colors to the origin's race using MergedInto.
|
|
68
|
+
status: community
|
|
69
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
70
|
+
tags:
|
|
71
|
+
- origin
|
|
72
|
+
- character-creation
|
|
73
|
+
- mergedinto
|
|
74
|
+
- colors
|
|
75
|
+
- silent-failure
|
|
76
|
+
- id: bg3.origins.companions.crash-without-worldcharacter-equivalent-file
|
|
77
|
+
claim: The custom-origin template includes a file that defines the character in the world itself
|
|
78
|
+
(separate from the origin-list entry and the CC-preset template); the tutorial author reports
|
|
79
|
+
the game crashed when that file was omitted, even though its exact necessity for an origin
|
|
80
|
+
wasn't fully understood.
|
|
81
|
+
status: community
|
|
82
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
83
|
+
tags:
|
|
84
|
+
- origin
|
|
85
|
+
- crash
|
|
86
|
+
- world-character
|
|
87
|
+
- id: bg3.origins.companions.vanilla-tav-voice-uuids
|
|
88
|
+
claim: A custom origin can be pinned to a single fixed voice by building a custom voice table
|
|
89
|
+
containing only one of the vanilla Tav voice UUIDs — voice 1
|
|
90
|
+
24247531-c432-4f0f-8f35-6c90c4844aa8, voice 2 869248f0-468a-4747-82d7-e8efc3bbcacf, voice 3
|
|
91
|
+
4df6dba0-8574-4704-a9fb-a500da38e1e1, voice 4 3347e417-d7ad-4088-bdd6-d5565efcd815, voice 5
|
|
92
|
+
f5b335b2-9cd9-4b38-a4c1-458b846ab499, voice 6 b9b26a44-943b-4427-9890-d81c7e81a75b, voice 7
|
|
93
|
+
2d206fda-0d4f-457f-b4ea-0fc18866f5dd, voice 8 fb6b5353-8d14-4507-9222-ceaec990fce9 — set into
|
|
94
|
+
a table's SpeakerUUID field and assigned back in Origins.lsx.
|
|
95
|
+
status: community
|
|
96
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
97
|
+
tags:
|
|
98
|
+
- origin
|
|
99
|
+
- voice
|
|
100
|
+
- uuid
|
|
101
|
+
- id: bg3.origins.companions.pickable-voice-table-uuid
|
|
102
|
+
claim: To let the player pick a voice for a custom origin in character creation (instead of a fixed
|
|
103
|
+
one), Origins.lsx's voice table field should be set back to the vanilla pickable-voice table
|
|
104
|
+
UUID 5ee56242-d07c-482e-9260-24529d1473a3.
|
|
105
|
+
status: community
|
|
106
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
107
|
+
tags:
|
|
108
|
+
- origin
|
|
109
|
+
- voice
|
|
110
|
+
- uuid
|
|
111
|
+
- id: bg3.origins.companions.custom-portrait-requires-generator-trigger
|
|
112
|
+
claim: A custom generated portrait for a custom origin requires setting up a trigger/camera-trigger
|
|
113
|
+
pair that fires on game start and level up, positioned using in-game coordinates (obtained
|
|
114
|
+
e.g. via the Script Extender console command "_P(Osi.GetPosition(GetHostCharacter()))"); it
|
|
115
|
+
only affects the origin-selection icon, and the pose used is whatever the origin's
|
|
116
|
+
race/bodytype default pose is.
|
|
117
|
+
status: community
|
|
118
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
119
|
+
tags:
|
|
120
|
+
- origin
|
|
121
|
+
- portrait
|
|
122
|
+
- trigger
|
|
123
|
+
- camera
|
|
124
|
+
- id: bg3.origins.companions.starting-equipment-file-defines-gear
|
|
125
|
+
claim: A custom origin's starting equipment (armor, camp clothes, other items) is defined in its own
|
|
126
|
+
equipment file; the recommended way to find an item's real stats name from its in-game display
|
|
127
|
+
is to look it up on a wiki, then paste the UUID into the Multitool or NorbSearch to resolve
|
|
128
|
+
the actual stats entry name.
|
|
129
|
+
status: community
|
|
130
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
131
|
+
tags:
|
|
132
|
+
- origin
|
|
133
|
+
- starting-equipment
|
|
134
|
+
- multitool
|
|
135
|
+
- id: bg3.origins.companions.dependencies-recommended-for-releases
|
|
136
|
+
claim: A custom origin that relies on other mods should declare them as dependencies — described as
|
|
137
|
+
"especially important if you'd be releasing your custom origin" — via the general
|
|
138
|
+
mod-dependencies process, not a custom-origin-specific one.
|
|
139
|
+
status: community
|
|
140
|
+
source: wiki.bg3.community/en/Tutorials/General/Custom-Origin-Creation
|
|
141
|
+
tags:
|
|
142
|
+
- origin
|
|
143
|
+
- dependencies
|
|
144
|
+
- meta-lsx
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: osiris.signatures
|
|
3
|
+
title: Osiris call/query/event signatures, confirmed against the generated LaughingLeader stubs
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.osiris.signatures.setflag-has-three-overloads
|
|
6
|
+
claim: "Osi.SetFlag has three overloads shorter than its full four-parameter form: fun(flag),
|
|
7
|
+
fun(flag, object), and fun(flag, object, dialogInstance); the full form is SetFlag(flag:FLAG,
|
|
8
|
+
object:GUIDSTRING, dialogInstance:integer, sendFlagSetEventIfChanged:integer)."
|
|
9
|
+
status: verified
|
|
10
|
+
source: LaughingLeader/BG3ModdingTools/generated/Osi.lua:4074-4080
|
|
11
|
+
tags:
|
|
12
|
+
- osiris
|
|
13
|
+
- setflag
|
|
14
|
+
- overload
|
|
15
|
+
- signature
|
|
16
|
+
related:
|
|
17
|
+
- id: bg3.dialogue.flags-guid-definitions
|
|
18
|
+
detail: Confirms the existing fact's two-argument Osi.SetFlag("Name_GUID", char) usage is the
|
|
19
|
+
documented fun(flag, object) overload, not an ad hoc shorthand.
|
|
20
|
+
- id: bg3.osiris.signatures.getflag-is-two-param-query
|
|
21
|
+
claim: Osi.GetFlag is a two-parameter query, GetFlag(flag:FLAG, object:GUIDSTRING) returning an
|
|
22
|
+
integer flagState — the object parameter is required, there is no zero- or one-argument
|
|
23
|
+
overload the way SetFlag has.
|
|
24
|
+
status: verified
|
|
25
|
+
source: LaughingLeader/BG3ModdingTools/generated/Osi.lua:914-918
|
|
26
|
+
tags:
|
|
27
|
+
- osiris
|
|
28
|
+
- getflag
|
|
29
|
+
- query
|
|
30
|
+
- signature
|
|
31
|
+
related:
|
|
32
|
+
- id: bg3.se.osi-queries-broken-actions-work
|
|
33
|
+
detail: Records GetFlag's real signature only — does not contradict the existing verified finding
|
|
34
|
+
that Osi.GetFlag itself is unreliable on this SE build; this fact is purely about arity,
|
|
35
|
+
not correctness.
|
|
36
|
+
- id: bg3.osiris.signatures.requestdelete-single-item-param
|
|
37
|
+
claim: Osi.RequestDelete takes exactly one parameter, an ITEM, with no overloads in the generated
|
|
38
|
+
stub file — RequestDeleteTemporary(character:CHARACTER) is a distinct, separate call for
|
|
39
|
+
temporary summons, not an overload of RequestDelete.
|
|
40
|
+
status: verified
|
|
41
|
+
source: LaughingLeader/BG3ModdingTools/generated/Osi.lua:3747-3752
|
|
42
|
+
tags:
|
|
43
|
+
- osiris
|
|
44
|
+
- requestdelete
|
|
45
|
+
- signature
|
|
46
|
+
related:
|
|
47
|
+
- id: bg3.se.corpse-removal
|
|
48
|
+
detail: Confirms the existing fact's Osi.RequestDelete(obj) call shape exactly, arity 1.
|
|
49
|
+
- id: bg3.osiris.signatures.usespell-guidstring-caster-and-target-types
|
|
50
|
+
claim: "Osi.UseSpell's canonical five-parameter form types caster and target/target2 as GUIDSTRING
|
|
51
|
+
(not CHARACTER), spellID as a plain string, and withoutMove as an integer:
|
|
52
|
+
UseSpell(caster:GUIDSTRING, spellID:string, target:GUIDSTRING, target2:GUIDSTRING,
|
|
53
|
+
withoutMove:integer); the two shorter forms are declared as @overload annotations (fun(caster,
|
|
54
|
+
spellID, target) and fun(caster, spellID, target, target2)), confirming there is no overload
|
|
55
|
+
that takes a spell level."
|
|
56
|
+
status: verified
|
|
57
|
+
source: LaughingLeader/BG3ModdingTools/generated/Osi.lua:4770-4779
|
|
58
|
+
tags:
|
|
59
|
+
- osiris
|
|
60
|
+
- usespell
|
|
61
|
+
- overload
|
|
62
|
+
- signature
|
|
63
|
+
related:
|
|
64
|
+
- id: bg3.se.use-spell-forced-cast
|
|
65
|
+
detail: Sharpens the existing verified fact's "3/4/5 args, NO level parameter" claim with the exact
|
|
66
|
+
generated-stub parameter types and confirms the two shorter forms are annotated @overload
|
|
67
|
+
rather than independently declared functions.
|
|
68
|
+
- id: bg3.osiris.signatures.query-functions-flagged-broken-have-real-signatures
|
|
69
|
+
claim: "The specific query functions recorded as unreliable on one SE build all have ordinary,
|
|
70
|
+
single-form signatures in the generated stub file: GetEquippedItem(character:CHARACTER,
|
|
71
|
+
slotName:EQUIPMENTSLOTNAME):ITEM; HasActiveStatus(target, status):integer; HasPassive(entity,
|
|
72
|
+
passiveID:string):integer (return named boolHasPassive); IsDead(character):integer;
|
|
73
|
+
IsEnemy(character, otherCharacter):integer; IsPlayer(character):integer;
|
|
74
|
+
GetDistanceTo(object1, object2):number. None of the seven carries an @overload annotation."
|
|
75
|
+
status: verified
|
|
76
|
+
source: LaughingLeader/BG3ModdingTools/generated/Osi.lua:878-884 (GetDistanceTo), :893-897
|
|
77
|
+
(GetEquippedItem), :1340-1345 (HasActiveStatus), :1391-1392 (HasPassive), :1532 (IsDead),
|
|
78
|
+
:1556 (IsEnemy), :1764 (IsPlayer)
|
|
79
|
+
tags:
|
|
80
|
+
- osiris
|
|
81
|
+
- query
|
|
82
|
+
- signature
|
|
83
|
+
- arity
|
|
84
|
+
related:
|
|
85
|
+
- id: bg3.se.osi-queries-broken-actions-work
|
|
86
|
+
detail: Records the exact signature of every query function named as broken on that SE build. This
|
|
87
|
+
fact states arity/typing only and does not claim these queries return correct values — it
|
|
88
|
+
neither contradicts nor rehabilitates the "do not trust them" finding.
|
|
89
|
+
- id: bg3.osiris.signatures.gethostcharacter-getmaxhitpoints-arity
|
|
90
|
+
claim: Osi.GetHostCharacter() takes no parameters and Osi.GetMaxHitpoints(entity) takes exactly one
|
|
91
|
+
— confirming the two calls used by an Osiris-health probe resolve to real, single-form
|
|
92
|
+
generated stubs rather than overloaded or ambiguous names.
|
|
93
|
+
status: verified
|
|
94
|
+
source: LaughingLeader/BG3ModdingTools/generated/Osi.lua:974,1048
|
|
95
|
+
tags:
|
|
96
|
+
- osiris
|
|
97
|
+
- gethostcharacter
|
|
98
|
+
- getmaxhitpoints
|
|
99
|
+
- signature
|
|
100
|
+
- id: bg3.osiris.signatures.questupdate-family-signatures
|
|
101
|
+
claim: The generated stub declares QuestUpdate(character, questID, stateID) as a three-parameter
|
|
102
|
+
call with one `@overload fun(questID:string, stateID:string)` annotation (not a separately
|
|
103
|
+
declared function); QuestAdd(character, questID) and QuestClose(questID) are separate,
|
|
104
|
+
unrelated calls with different arities (2 and 1); the events QuestUpdateUnlocked(character,
|
|
105
|
+
topLevelQuestID, stateID) and QuestClosed(questID) are 3- and 1-parameter respectively.
|
|
106
|
+
status: verified
|
|
107
|
+
source: LaughingLeader/BG3ModdingTools@ab343b6 generated/Osi.lua:3547,3550,3570-3574 (QuestAdd,
|
|
108
|
+
QuestClose, QuestUpdate with its @overload line at :3570); generated/Osi.Events.lua:867,877
|
|
109
|
+
(QuestClosed, QuestUpdateUnlocked)
|
|
110
|
+
tags:
|
|
111
|
+
- osiris
|
|
112
|
+
- questupdate
|
|
113
|
+
- questadd
|
|
114
|
+
- questclose
|
|
115
|
+
- signature
|
|
116
|
+
detail: "Checked against the source (2026-09-08): an earlier wording said the two-argument form \"is
|
|
117
|
+
not itself a separately generated function — it is documented as 'overloading the engine
|
|
118
|
+
call'\". The first half is right, but the quoted phrase is unattributed and the generated file
|
|
119
|
+
does carry the annotation, so the claim now states what the file shows. Note the annotation
|
|
120
|
+
drops the LEADING parameter (character), a second counterexample to the trailing-drop rule —
|
|
121
|
+
see bg3.osiris.signatures.use-overload-is-a-counterexample-to-the-trailing-drop-rule."
|
|
122
|
+
related:
|
|
123
|
+
- id: bg3.journal.quests.questupdate-requires-parent-quest-id
|
|
124
|
+
detail: Adds the exact generated-stub parameter list underneath the community wiki's semantic claim
|
|
125
|
+
about which quest ID QuestUpdate expects.
|
|
126
|
+
- id: bg3.journal.quests.questadd-questclose-should-be-avoided
|
|
127
|
+
detail: Confirms QuestAdd and QuestClose are real, separately declared calls (2- and 1-parameter)
|
|
128
|
+
rather than aliases of QuestUpdate, consistent with the community advice to prefer
|
|
129
|
+
QuestUpdate over either.
|
|
130
|
+
- id: bg3.osiris.signatures.equip-overloads-confirm-trailing-drop-rule
|
|
131
|
+
claim: Osi.Equip's three shorter @overload forms — fun(character, item), fun(character, item,
|
|
132
|
+
addToMainInventoryOnFail), and fun(character, item, addToMainInventoryOnFail,
|
|
133
|
+
showNotification) — each drop parameters only from the end of the full 5-parameter form,
|
|
134
|
+
confirming the community guide's general Osiris rule that "overloaded calls cannot change the
|
|
135
|
+
order of the parameters" and that supplying a non-default value for a late parameter requires
|
|
136
|
+
supplying every parameter before it too.
|
|
137
|
+
status: community
|
|
138
|
+
source: bg3-community/Tutorials/Osiris/Understanding-Osiris-Actions.md:111, §Overloaded Calls
|
|
139
|
+
("overloaded calls cannot change the order of the parameters."); cross-checked against
|
|
140
|
+
LaughingLeader/BG3ModdingTools@ab343b6 generated/Osi.lua:2960-2966 (Equip)
|
|
141
|
+
tags:
|
|
142
|
+
- osiris
|
|
143
|
+
- overload
|
|
144
|
+
- calling-convention
|
|
145
|
+
- equip
|
|
146
|
+
detail: "Checked against the source (2026-09-08): quotation trimmed to one sentence (the page states
|
|
147
|
+
no licence). The page's next sentence makes the same point for the caller's side: supplying a
|
|
148
|
+
non-default value for a late parameter means supplying every parameter before it."
|
|
149
|
+
related:
|
|
150
|
+
- id: bg3.osiris.signatures.use-overload-is-a-counterexample-to-the-trailing-drop-rule
|
|
151
|
+
detail: Disagrees in the general case. Equip's own three overloads do only drop trailing parameters,
|
|
152
|
+
but Osi.Use's generated overload does not, so the community guide's rule must not be
|
|
153
|
+
applied to an arbitrary call without checking that call's own @overload lines.
|
|
154
|
+
- id: bg3.osiris.signatures.use-overload-is-a-counterexample-to-the-trailing-drop-rule
|
|
155
|
+
claim: "Osi.Use's generated 3-parameter @overload, fun(character, item, event), is NOT a
|
|
156
|
+
trailing-drop overload of its full form Use(character, item, useItem, isInteraction, event):
|
|
157
|
+
it omits the two MIDDLE parameters (useItem, isInteraction) while keeping the LAST one (event)
|
|
158
|
+
— the opposite shape from Equip's overloads. This contradicts the community guide's stated
|
|
159
|
+
general rule that overloaded calls only ever drop trailing parameters; at least one real
|
|
160
|
+
generated overload breaks that rule, and the three-argument form dispatches and acts at
|
|
161
|
+
runtime."
|
|
162
|
+
status: verified
|
|
163
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
164
|
+
source: LaughingLeader/BG3ModdingTools@ab343b6 generated/Osi.lua:4764-4770 (the `@overload
|
|
165
|
+
fun(character:CHARACTER, item:ITEM, event:string)` line at :4764 above `function
|
|
166
|
+
Osi.Use(character, item, useItem, isInteraction, event)` at :4770); contrasted with the
|
|
167
|
+
general rule stated in bg3-community/Tutorials/Osiris/Understanding-Osiris-Actions.md:111,
|
|
168
|
+
§Overloaded Calls
|
|
169
|
+
tags:
|
|
170
|
+
- osiris
|
|
171
|
+
- overload
|
|
172
|
+
- calling-convention
|
|
173
|
+
- use
|
|
174
|
+
- disagreement
|
|
175
|
+
detail: "Observed in game 2026-09-09 (SE console, save loaded): the two-argument
|
|
176
|
+
Osi.QuestUpdate(\"NoSuchQuest\", \"NoSuchState\") returned to the prompt with no arity error
|
|
177
|
+
and no output, so a shorter overload of QuestUpdate dispatches (with fake ids nothing
|
|
178
|
+
observable happens, which is the expected no-op). The Use three-argument form was then tried
|
|
179
|
+
with a real item guid the same night: it dispatches and has the item's Use effect, and the
|
|
180
|
+
five-argument form dispatches too. Side observation: Use on an equipped armor piece toggles it
|
|
181
|
+
(first call unequips, the next equips), and a malformed item id produces no error at all, so a
|
|
182
|
+
silent return is not proof the call did anything."
|
|
183
|
+
related:
|
|
184
|
+
- id: bg3.osiris.signatures.equip-overloads-confirm-trailing-drop-rule
|
|
185
|
+
detail: "Direct counterexample to the trailing-drop generalization that fact draws from the
|
|
186
|
+
community guide — do not assume every Osiris overload only omits trailing parameters;
|
|
187
|
+
check the specific @overload line in the generated file before calling a shorter form. A
|
|
188
|
+
second counterexample in the same file drops a LEADING parameter: QuestUpdate's `@overload
|
|
189
|
+
fun(questID, stateID)` (Osi.lua:3570), recorded in
|
|
190
|
+
bg3.osiris.signatures.questupdate-family-signatures. Neither this fact nor the Equip one
|
|
191
|
+
is verified beyond what the annotations literally say; what the engine does with a short
|
|
192
|
+
form at runtime was not observed."
|
|
193
|
+
- id: bg3.osiris.signatures.applystatus-lands-after-the-calling-chunk
|
|
194
|
+
claim: "Osi.ApplyStatus(target, status, duration, force) does not apply the status synchronously:
|
|
195
|
+
Osi.HasActiveStatus(target, status) in the same Lua chunk, right after the call, returns 0,
|
|
196
|
+
and a read one request later (fourteen seconds) returns 1. A read-back belongs in a separate
|
|
197
|
+
probe or a later tick, not in the chunk that applies."
|
|
198
|
+
status: verified
|
|
199
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
200
|
+
source: ModWright field verification
|
|
201
|
+
tags:
|
|
202
|
+
- osiris
|
|
203
|
+
- applystatus
|
|
204
|
+
- hasactivestatus
|
|
205
|
+
- timing
|
|
206
|
+
- eval
|
|
207
|
+
detail: GetStatusTurns read -1 in the same chunk as the indefinite (-1.0) application; it was not
|
|
208
|
+
read again in the later request, so only HasActiveStatus is attested across the gap. The
|
|
209
|
+
earlier 12.0-second application had expired on its own out of combat before its first read 27
|
|
210
|
+
seconds later (HasActiveStatus 0, GetStatusTurns 0), so a short duration masks this timing
|
|
211
|
+
rather than exposing it.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: packaging.meta
|
|
3
|
+
title: meta.lsx ModuleInfo schema, dependency/conflict declaration, and header versioning
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.packaging.meta.moduleinfo-fields-read-by-mod-manager
|
|
6
|
+
claim: "LaughingLeader's BG3 Mod Manager parses a mod's meta.lsx ModuleInfo node for these
|
|
7
|
+
attributes: UUID, Name, Author, Version (via Version64 falling back to Version — see
|
|
8
|
+
bg3.packaging.meta.version64-preferred-with-version-fallback), Folder, Description, MD5, Type,
|
|
9
|
+
PublishHandle, and FileSize, plus the root <version major minor revision build> element read
|
|
10
|
+
separately as the file's own header version."
|
|
11
|
+
status: verified
|
|
12
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:222-235
|
|
13
|
+
tags:
|
|
14
|
+
- meta-lsx
|
|
15
|
+
- moduleinfo
|
|
16
|
+
- required-fields
|
|
17
|
+
- bg3modmanager
|
|
18
|
+
- id: bg3.packaging.meta.version64-preferred-with-version-fallback
|
|
19
|
+
claim: BG3 Mod Manager reads a mod's version from meta.lsx by checking two attribute names in order
|
|
20
|
+
— "Version64" first, then the legacy "Version" — via a two-element fallback array, not by
|
|
21
|
+
assuming Version64 is always present.
|
|
22
|
+
status: verified
|
|
23
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:32
|
|
24
|
+
tags:
|
|
25
|
+
- meta-lsx
|
|
26
|
+
- version64
|
|
27
|
+
- version
|
|
28
|
+
- fallback
|
|
29
|
+
related:
|
|
30
|
+
- id: bg3.ui.mcm.dependency-version64-should-pin-dev-version
|
|
31
|
+
detail: Independently confirms "Version64" as the real meta.lsx attribute name MCM's own
|
|
32
|
+
dependency-version advice refers to, and adds that a mod manager reading a dependency's
|
|
33
|
+
version falls back to the older "Version" attribute if Version64 is absent.
|
|
34
|
+
- id: bg3.packaging.meta.moduletype-attribute-marked-deprecated-in-source
|
|
35
|
+
claim: BG3 Mod Manager's own source comments the ModuleInfo "Type" attribute as "// Deprecated?" at
|
|
36
|
+
the point it is read into ModType — the mod manager still reads and stores the field, but its
|
|
37
|
+
own maintainer considers its meaning uncertain or obsolete going forward. GustavDev and
|
|
38
|
+
GustavX are hardcoded to ModType "Adventure" regardless of what their meta.lsx actually
|
|
39
|
+
contains, overriding whatever Type value those two specific UUIDs carry.
|
|
40
|
+
status: inferred
|
|
41
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:229,237-241
|
|
42
|
+
tags:
|
|
43
|
+
- meta-lsx
|
|
44
|
+
- moduletype
|
|
45
|
+
- deprecated
|
|
46
|
+
- gustavdev
|
|
47
|
+
- hardcoded
|
|
48
|
+
detail: Inferred from the source comment and the special-cased UUID check, not from documentation
|
|
49
|
+
stating the field is deprecated outright — treat a meta.lsx Type value as advisory rather than
|
|
50
|
+
load-bearing.
|
|
51
|
+
- id: bg3.packaging.meta.tags-attribute-is-semicolon-delimited
|
|
52
|
+
claim: A meta.lsx ModuleInfo node's Tags attribute is a single string of semicolon-separated tag
|
|
53
|
+
names, which the mod manager reads with `tagsText.Split(';')` into a tag list.
|
|
54
|
+
status: verified
|
|
55
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:242-246
|
|
56
|
+
tags:
|
|
57
|
+
- meta-lsx
|
|
58
|
+
- tags
|
|
59
|
+
- moduleinfo
|
|
60
|
+
detail: "Checked against the source (2026-09-08): an earlier wording also asserted \"there is no
|
|
61
|
+
separate child Tags node the way a ClassDescription's race/class Tags reference works\". A
|
|
62
|
+
parser that does not read such a node is not evidence that none exists, so that half has been
|
|
63
|
+
dropped rather than promoted."
|
|
64
|
+
- id: bg3.packaging.meta.dependencies-node-holds-moduleshortdesc-children
|
|
65
|
+
claim: A meta.lsx's Dependencies node (a sibling of ModuleInfo, found by searching for a node whose
|
|
66
|
+
id equals "Dependencies") contains one child node per dependency with id "ModuleShortDesc",
|
|
67
|
+
each carrying its own Folder, MD5, Name, UUID, and Version(64) attributes.
|
|
68
|
+
status: verified
|
|
69
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:251-273
|
|
70
|
+
tags:
|
|
71
|
+
- meta-lsx
|
|
72
|
+
- dependencies
|
|
73
|
+
- moduleshortdesc
|
|
74
|
+
detail: "Checked against the source (2026-09-08): an earlier wording added that this is \"the same
|
|
75
|
+
ModuleShortDesc shape the Compatibility Framework's config schema also uses for its per-mod
|
|
76
|
+
entries\". No fact in knowledge/baldursgate3/compatibilityframework.api.yaml mentions
|
|
77
|
+
ModuleShortDesc and the cited parser says nothing about the Compatibility Framework, so that
|
|
78
|
+
comparison has been dropped."
|
|
79
|
+
related:
|
|
80
|
+
- id: bg3.ui.mcm.dependency-recommended-in-meta-lsx
|
|
81
|
+
detail: Confirms the exact node/attribute shape ("ModuleShortDesc" under a "Dependencies" node) that
|
|
82
|
+
declaring MCM as a meta.lsx dependency actually produces, read independently from the mod
|
|
83
|
+
manager's own parser rather than from the MCM tutorial.
|
|
84
|
+
- id: bg3.packaging.meta.conflicts-node-mirrors-dependencies-shape
|
|
85
|
+
claim: meta.lsx also supports a "Conflicts" node using the identical child shape as Dependencies
|
|
86
|
+
(child nodes with id "ModuleShortDesc" carrying Folder/MD5/Name/UUID/Version), parsed into a
|
|
87
|
+
separate ModData.Conflicts list by the mod manager — a distinct declaration from Dependencies,
|
|
88
|
+
kept in a separate list. What the game or the manager then does with a declared conflict is
|
|
89
|
+
not shown by the cited parser code.
|
|
90
|
+
status: verified
|
|
91
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:278-300
|
|
92
|
+
tags:
|
|
93
|
+
- meta-lsx
|
|
94
|
+
- conflicts
|
|
95
|
+
- moduleshortdesc
|
|
96
|
+
- id: bg3.packaging.meta.bg3-header-version-is-4-0-9
|
|
97
|
+
claim: BG3 Mod Manager's own source comment records the meta.lsx root <version> element's expected
|
|
98
|
+
form for a BG3 mod as major="4" minor="0" revision="9" (with a mod-specific build number, e.g.
|
|
99
|
+
331 in the comment's example) — distinct from the D:OS Classic (3.1.3.5) and D:OS 2 DE
|
|
100
|
+
(3.6.2.0) forms the same parser also recognizes for older-game meta.lsx files.
|
|
101
|
+
status: verified
|
|
102
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:183-189
|
|
103
|
+
tags:
|
|
104
|
+
- meta-lsx
|
|
105
|
+
- header-version
|
|
106
|
+
- bg3modmanager
|
|
107
|
+
detail: The mod manager falls back to hardcoded HEADER_MAJOR/MINOR/REVISION/BUILD constants if the
|
|
108
|
+
file has no <version> element at all, rather than rejecting the meta.lsx outright — and those
|
|
109
|
+
constants (DivinityModDataLoader.cs:27-30) are 4/8/0/0, i.e. 4.8.0.0, not the 4.0.9.x form the
|
|
110
|
+
comment gives for a BG3 mod. Do not read the fallback as a second attestation of 4.0.9.
|
|
111
|
+
- id: bg3.packaging.meta.mod-manager-auto-resolves-dependency-order
|
|
112
|
+
claim: BG3 Mod Manager's own load-order builder (BuildOutputList) walks each enabled mod's declared
|
|
113
|
+
Dependencies recursively via GetDependencyMods and inserts every not-yet-added dependency into
|
|
114
|
+
the output order immediately before the mod that needs it (recursively, skipping any
|
|
115
|
+
dependency UUID that does not resolve to an indexed local mod).
|
|
116
|
+
status: verified
|
|
117
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:1400-1428
|
|
118
|
+
(GetDependencyMods), :1431-1465 (BuildOutputList)
|
|
119
|
+
tags:
|
|
120
|
+
- meta-lsx
|
|
121
|
+
- dependencies
|
|
122
|
+
- load-order
|
|
123
|
+
- bg3modmanager
|
|
124
|
+
- automatic
|
|
125
|
+
detail: "Inference, not in the source: a mod author who declares Dependencies correctly therefore
|
|
126
|
+
does not need end users to drag the dependency above it by hand — but only for orders built or
|
|
127
|
+
exported through BG3 Mod Manager with addDependencies left at its default true, and only when
|
|
128
|
+
the dependency is installed and indexed."
|
|
129
|
+
related:
|
|
130
|
+
- id: bg3.loadorder.external-guid-dependencies
|
|
131
|
+
detail: Sharpens the existing verified fact (a missing/misordered dependency CTDs at LoadModule) by
|
|
132
|
+
showing the mechanism a well-formed meta.lsx Dependencies declaration uses to avoid that
|
|
133
|
+
failure automatically, at least when the mod list is built or exported through BG3 Mod
|
|
134
|
+
Manager rather than hand-edited.
|
|
135
|
+
- id: bg3.packaging.meta.modsettings-export-is-plain-xml-write
|
|
136
|
+
claim: BG3 Mod Manager writes modsettings.lsx by generating its XML content in memory, re-indenting
|
|
137
|
+
it with a standard XmlDocument/XmlTextWriter pass (2-space indentation), and writing the UTF-8
|
|
138
|
+
bytes to Path.Combine(folder, "modsettings.lsx") with FileMode.Create and FileShare.None.
|
|
139
|
+
status: verified
|
|
140
|
+
source: LaughingLeader/BG3ModManager@fc35358 src/Core/Util/DivinityModDataLoader.cs:1331-1352
|
|
141
|
+
tags:
|
|
142
|
+
- meta-lsx
|
|
143
|
+
- modsettings
|
|
144
|
+
- bg3modmanager
|
|
145
|
+
- file-locking
|
|
146
|
+
detail: "Inference, not in the source: FileShare.None means no other process may hold the file open
|
|
147
|
+
during the write, so a write attempted while the game (or a second manager instance) has
|
|
148
|
+
modsettings.lsx open should fail — the code catches and logs exceptions there rather than
|
|
149
|
+
describing that case."
|
|
150
|
+
related:
|
|
151
|
+
- id: bg3.loadorder.modsettings-not-durable
|
|
152
|
+
detail: "Adds a mechanism note to the existing fact about hand-edited modsettings.lsx entries being
|
|
153
|
+
overwritten: the mod manager's own writer does a full regenerate-and-overwrite, not an
|
|
154
|
+
in-place patch, which is why any hand-added entry outside its own model does not survive a
|
|
155
|
+
re-export."
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: packaging.paks
|
|
3
|
+
title: PAK file packaging, load precedence, and locking behavior
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.paks.same-uuid-precedence
|
|
6
|
+
claim: A packed mod of the same UUID in the profile Mods\ folder WINS over a junctioned/loose copy.
|
|
7
|
+
A stale same-UUID pak silently overrides your loose edits — the classic "why aren't my changes
|
|
8
|
+
showing" trap.
|
|
9
|
+
status: verified
|
|
10
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
11
|
+
source: ModWright field verification
|
|
12
|
+
tags:
|
|
13
|
+
- pak
|
|
14
|
+
- precedence
|
|
15
|
+
- loose-mods
|
|
16
|
+
- uuid
|
|
17
|
+
- load-order
|
|
18
|
+
detail: Loose+junctioned mods are also NOT reliably visible in the in-game mod manager list in this
|
|
19
|
+
environment; a present .pak is what the list shows. For real testing beyond SE Lua / stats
|
|
20
|
+
hot-reload, rebuild and deploy the pak. If edits "don't take", check the pak's timestamp
|
|
21
|
+
before debugging further.
|
|
22
|
+
- id: bg3.paks.every-same-uuid-pak-is-opened
|
|
23
|
+
claim: When several .pak files in the profile Mods folder carry the same module UUID, the running
|
|
24
|
+
game holds every one of them open (a rename of any of them fails with "being used by another
|
|
25
|
+
process" until the game exits), even though Ext.Mod.GetMod(uuid).Info.Directory names only one
|
|
26
|
+
module folder as bound.
|
|
27
|
+
status: verified
|
|
28
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
29
|
+
source: ModWright field verification
|
|
30
|
+
tags:
|
|
31
|
+
- pak
|
|
32
|
+
- uuid
|
|
33
|
+
- duplicate
|
|
34
|
+
- file-lock
|
|
35
|
+
- deploy
|
|
36
|
+
detail: "Consequence for deploy: retiring a duplicate pak needs the game closed, the same as
|
|
37
|
+
replacing the bound one. Which copy the engine binds among duplicates was the sideloaded .pak
|
|
38
|
+
in every launch that day regardless of launch path or the mod-management screen; the rule
|
|
39
|
+
behind that choice is still not characterised."
|
|
40
|
+
- id: bg3.paks.paks-lock-while-running
|
|
41
|
+
claim: PAKs lock while the game is running. You cannot overwrite the profile pak while BG3 is open
|
|
42
|
+
("Device or resource busy").
|
|
43
|
+
status: verified
|
|
44
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
45
|
+
source: ModWright field verification
|
|
46
|
+
tags:
|
|
47
|
+
- pak
|
|
48
|
+
- locking
|
|
49
|
+
- game-process
|
|
50
|
+
detail: "Reliable pattern: build to a scratch path, then a background watcher polls tasklist | grep
|
|
51
|
+
bg3_dx11.exe and copies the pak once the process exits (the player has to restart to load a
|
|
52
|
+
new pak anyway)."
|
|
53
|
+
- id: bg3.paks.profile-pak-directory
|
|
54
|
+
claim: Deploy by copying the built pak to %LOCALAPPDATA%\Larian Studios\Baldur's Gate
|
|
55
|
+
3\Mods\<Mod>.pak (the user profile, not the game directory).
|
|
56
|
+
status: verified
|
|
57
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
58
|
+
source: ModWright field verification
|
|
59
|
+
tags:
|
|
60
|
+
- pak
|
|
61
|
+
- deployment
|
|
62
|
+
- profile
|
|
63
|
+
detail: The profile Mods folder is where packed mods load from and what the in-game manager lists.
|
|
64
|
+
The game's own Data\Mods / Data\Public tree is used for the loose junctioned dev loop and for
|
|
65
|
+
loose dialog overrides, not for shipping a pak.
|
|
66
|
+
- id: bg3.paks.stats-spell-load-fresh
|
|
67
|
+
claim: Stat/spell/loca changes load fresh from the pak on game load — they apply to existing SAVES
|
|
68
|
+
(no new game needed). But anything baked at a moment in time (a summoned item's stats, a
|
|
69
|
+
granted progression feature) needs a re-trigger (re-summon; respec).
|
|
70
|
+
status: verified
|
|
71
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
72
|
+
source: ModWright field verification
|
|
73
|
+
tags:
|
|
74
|
+
- pak
|
|
75
|
+
- reloading
|
|
76
|
+
- save-compatibility
|
|
77
|
+
- progression
|
|
78
|
+
detail: A common source of "my change isn't showing on this save". Progressions partially bake into
|
|
79
|
+
saves once loaded, so always test progression changes on a fresh save or respec with Withers.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: process.launch
|
|
3
|
+
title: Launching Baldur's Gate 3 from a script
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.process.steam-intercepts-direct-exe-launch
|
|
6
|
+
claim: Launching `bin\\bg3_dx11.exe --skip-launcher` directly, bypassing `steam://rungameid`, makes
|
|
7
|
+
Steam show its own confirmation dialog that a person must click before the game starts.
|
|
8
|
+
status: verified
|
|
9
|
+
source: ModWright field verification
|
|
10
|
+
tags:
|
|
11
|
+
- process
|
|
12
|
+
- launch
|
|
13
|
+
- steam
|
|
14
|
+
- unattended
|
|
15
|
+
detail: Whether a Steam setting suppresses the dialog, or whether the `steam://rungameid` route with
|
|
16
|
+
`--skip-launcher` set as a Steam launch option avoids it, is not yet established. Until it is,
|
|
17
|
+
a scripted BG3 launch cannot run unattended.
|
|
18
|
+
- id: bg3.process.launched-pid-is-not-the-game-pid
|
|
19
|
+
claim: After Steam's confirmation, the game runs under a different process id than the one
|
|
20
|
+
`Start-Process` returned for `bg3_dx11.exe`; the approved launch is re-spawned through Steam's
|
|
21
|
+
own wrapper.
|
|
22
|
+
status: verified
|
|
23
|
+
source: ModWright field verification
|
|
24
|
+
tags:
|
|
25
|
+
- process
|
|
26
|
+
- launch
|
|
27
|
+
- steam
|
|
28
|
+
- pid
|
|
29
|
+
- lock
|
|
30
|
+
related:
|
|
31
|
+
- bg3.process.steam-intercepts-direct-exe-launch
|
|
32
|
+
detail: Anything that waits on, or kills, "the game process" by the launched pid will miss the real
|
|
33
|
+
one. Find the game by executable name or by the handle holding the pak, as ModWright's deploy
|
|
34
|
+
lock check already does.
|