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,176 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: compatibilityframework.api
|
|
3
|
+
title: Compatibility Framework injection API (Selectors, Strings, Subclasses)
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.compatibility-framework.api.purpose-inject-not-overwrite
|
|
6
|
+
claim: The Compatibility Framework's stated purpose is letting Script-Extender-enabled mods "insert
|
|
7
|
+
values into Progressions and Spell/Skill/PassiveLists at Runtime", so a mod "can inject their
|
|
8
|
+
mod's data into existing Progressions or Lists without overwriting data, allowing for total
|
|
9
|
+
compatibility." It was "Initially designed for Subclass Compatibility".
|
|
10
|
+
status: community
|
|
11
|
+
source: github.com/BG3-Community-Library-Team/BG3-Compatibility-Framework Readme.md (opening paragraph)
|
|
12
|
+
tags:
|
|
13
|
+
- compatibility-framework
|
|
14
|
+
- purpose
|
|
15
|
+
- overwrite
|
|
16
|
+
- progressions
|
|
17
|
+
detail: "Why this is the default scaffold shape rather than raw list edits is ModWright's own
|
|
18
|
+
conclusion, not the README's: ModWright research calls raw overwrites \"the single most common
|
|
19
|
+
cross-mod incompatibility in this category.\""
|
|
20
|
+
- id: bg3.compatibility-framework.api.load-order-bottom
|
|
21
|
+
claim: The Compatibility Framework should be loaded at the bottom of a mod list, per its own
|
|
22
|
+
installation instructions.
|
|
23
|
+
status: community
|
|
24
|
+
source: github.com/BG3-Community-Library-Team/BG3-Compatibility-Framework Readme.md §Installation >
|
|
25
|
+
Load Order ("Compatibility Framework should be loaded at the bottom of your mods list.")
|
|
26
|
+
tags:
|
|
27
|
+
- compatibility-framework
|
|
28
|
+
- load-order
|
|
29
|
+
- id: bg3.compatibility-framework.api.config-file-location
|
|
30
|
+
claim: "The Compatibility Framework reads a per-mod config from either
|
|
31
|
+
Mods/ModName/ScriptExtender/CompatibilityFrameworkConfig.yaml or
|
|
32
|
+
Mods/ModName/ScriptExtender/CompatibilityFrameworkConfig.json, as an alternative to calling
|
|
33
|
+
its Lua API directly; every entry starts with FileVersion: 1, and YAML is the recommended form
|
|
34
|
+
as of v2.8.0.0."
|
|
35
|
+
status: community
|
|
36
|
+
source: BG3-Compatibility-Framework wiki, _Class-Module.md ("You may do this with a
|
|
37
|
+
CompatibilityFrameworkConfig.json or CompatibilityFrameworkConfig.yaml file placed in your
|
|
38
|
+
Mods/ModName/ScriptExtender/ folder"), _Selector-API.md and _Boosts-and-Passives.md (both
|
|
39
|
+
headed "YAML Configuration (Recommended - v2.8.0.0)")
|
|
40
|
+
tags:
|
|
41
|
+
- compatibility-framework
|
|
42
|
+
- config-file
|
|
43
|
+
- scriptextender
|
|
44
|
+
detail: 'Confirmed against the repo itself:
|
|
45
|
+
CompatibilityFramework/Mods/SubclassCompatibilityFramework/
|
|
46
|
+
ScriptExtender/Lua/ConfigLayer/_ConfigLoader.lua builds its path from
|
|
47
|
+
"Mods/%s/ScriptExtender/CompatibilityFrameworkConfig." and tries both extensions.'
|
|
48
|
+
- id: bg3.compatibility-framework.api.selectors-target-progression-or-feat-by-uuid
|
|
49
|
+
claim: A Selectors config entry lives inside a Progressions or Feats list entry (identified by UUID
|
|
50
|
+
or, for multiple targets at once, UUIDs) and has required fields Action ("Insert" or "Remove")
|
|
51
|
+
and Function (one of SelectSpells, AddSpells, SelectSkills, SelectAbilities,
|
|
52
|
+
SelectAbilityBonus, SelectEquipment, SelectSkillsExpertise, or SelectPassives); Insert
|
|
53
|
+
additionally requires Params, Remove requires the target list's UUID instead.
|
|
54
|
+
status: community
|
|
55
|
+
source: BG3-Compatibility-Framework wiki, _Selector-API.md §Selector fields reference (Action /
|
|
56
|
+
Function / Params / UUID rows)
|
|
57
|
+
tags:
|
|
58
|
+
- compatibility-framework
|
|
59
|
+
- selectors
|
|
60
|
+
- config-schema
|
|
61
|
+
- id: bg3.compatibility-framework.api.target-uuid-must-not-point-at-mergedinto-data
|
|
62
|
+
claim: A Selectors/Strings/Subclasses config entry's target UUID or UUIDs must never point at data
|
|
63
|
+
carrying a MergedInto attribute — it should point at the data that MergedInto data merges into
|
|
64
|
+
instead, or the injection targets the wrong (superseded) entry.
|
|
65
|
+
status: community
|
|
66
|
+
source: 'BG3-Compatibility-Framework wiki, _Selector-API.md, _Boosts-and-Passives.md,
|
|
67
|
+
_Class-Module.md (all three: "The target UUID or UUIDs should never point to data that has a
|
|
68
|
+
MergedInto attribute. Instead, you should point them to the data that they merge into.")'
|
|
69
|
+
tags:
|
|
70
|
+
- compatibility-framework
|
|
71
|
+
- mergedinto
|
|
72
|
+
- gotcha
|
|
73
|
+
- id: bg3.compatibility-framework.api.replacepassives-read-as-selectpassives
|
|
74
|
+
claim: The game engine reads a ReplacePassives selector as SelectPassives internally; when using the
|
|
75
|
+
Compatibility Framework to manipulate what looks like a ReplacePassives selector, it may need
|
|
76
|
+
to be targeted as a SelectPassives selector instead.
|
|
77
|
+
status: community
|
|
78
|
+
source: 'BG3-Compatibility-Framework wiki, _Selector-API.md (opening note: "The game reads
|
|
79
|
+
ReplacePassives as SelectPassives - when manipulating a ReplacePassives selector, you may need
|
|
80
|
+
to make it a SelectPassives selector instead")'
|
|
81
|
+
tags:
|
|
82
|
+
- compatibility-framework
|
|
83
|
+
- replacepassives
|
|
84
|
+
- selectpassives
|
|
85
|
+
- gotcha
|
|
86
|
+
- id: bg3.compatibility-framework.api.modguid-makes-entry-conditional
|
|
87
|
+
claim: Adding a modGuid field to a Selectors/Strings config entry makes that specific insertion
|
|
88
|
+
conditional on another mod being loaded — the entry is skipped entirely if the named mod (by
|
|
89
|
+
its meta.lsx UUID) is not present.
|
|
90
|
+
status: community
|
|
91
|
+
source: BG3-Compatibility-Framework wiki, _Selector-API.md and _Boosts-and-Passives.md fields
|
|
92
|
+
references ("modGuid | No | UUID of a required mod; entry is skipped if that mod is not
|
|
93
|
+
loaded")
|
|
94
|
+
tags:
|
|
95
|
+
- compatibility-framework
|
|
96
|
+
- modguid
|
|
97
|
+
- conditional
|
|
98
|
+
- id: bg3.compatibility-framework.api.strings-type-covers-four-fields
|
|
99
|
+
claim: A Strings config entry (for inserting/removing values on a Progression or Feat) requires
|
|
100
|
+
Action ("Insert" or "Remove") and Type, where Type must be one of Boosts, PassivesAdded,
|
|
101
|
+
PassivesRemoved, or Requirements — the same YAML/JSON entry shape and the same underlying API
|
|
102
|
+
call handle all four Types.
|
|
103
|
+
status: community
|
|
104
|
+
source: 'BG3-Compatibility-Framework wiki, _Boosts-and-Passives.md §Fields reference (Type row:
|
|
105
|
+
"Boosts, PassivesAdded, PassivesRemoved, or Requirements") and §API ("Behind the scenes, these
|
|
106
|
+
all work in the same way, so the same API call can be used for all of them")'
|
|
107
|
+
tags:
|
|
108
|
+
- compatibility-framework
|
|
109
|
+
- strings
|
|
110
|
+
- boosts
|
|
111
|
+
- passivesadded
|
|
112
|
+
- requirements
|
|
113
|
+
- id: bg3.compatibility-framework.api.subclass-addition-fully-automatic-since-2-6-5-8
|
|
114
|
+
claim: As of Compatibility Framework 2.6.5.8, adding a subclass requires no explicit registration
|
|
115
|
+
call at all — any valid ClassDescription entry with a ParentGuid pointing at its parent
|
|
116
|
+
class's ClassDescription is picked up automatically.
|
|
117
|
+
status: community
|
|
118
|
+
source: BG3-Compatibility-Framework wiki, _Class-Module.md §Subclass Addition ("Adding subclasses is
|
|
119
|
+
now automatic as of 2.6.5.8, and requires no action on a mod author's part")
|
|
120
|
+
tags:
|
|
121
|
+
- compatibility-framework
|
|
122
|
+
- subclass
|
|
123
|
+
- version-floor
|
|
124
|
+
- automatic
|
|
125
|
+
- id: bg3.compatibility-framework.api.subclass-removal-requires-explicit-config-since-2-7-0-0
|
|
126
|
+
claim: "Removing a subclass from a Progression (added in Compatibility Framework 2.7.0.0) is not
|
|
127
|
+
automatic and must be done explicitly, either via a Progressions/Subclasses config entry
|
|
128
|
+
(Action: Remove, the subclass's ClassDescription UUID) or by calling the Api.RemoveSubClasses
|
|
129
|
+
Lua endpoint directly."
|
|
130
|
+
status: community
|
|
131
|
+
source: 'BG3-Compatibility-Framework wiki, _Class-Module.md §Subclass Removal ("To Remove Subclasses
|
|
132
|
+
from a Progression (Implemented in 2.7.0.0), you have two options: The Config Method or
|
|
133
|
+
directly calling the API")'
|
|
134
|
+
tags:
|
|
135
|
+
- compatibility-framework
|
|
136
|
+
- subclass
|
|
137
|
+
- removal
|
|
138
|
+
- version-floor
|
|
139
|
+
- id: bg3.compatibility-framework.api.removesubclasses-class-param-accepts-name-or-uuid
|
|
140
|
+
claim: Api.RemoveSubClasses's per-entry "class" field accepts either the lowercase name of the
|
|
141
|
+
parent class (one of barbarian, bard, cleric, druid, fighter, monk, paladin, ranger, rogue,
|
|
142
|
+
sorcerer, warlock, wizard) or the UUID of the Progression at which subclass options for that
|
|
143
|
+
class become available.
|
|
144
|
+
status: community
|
|
145
|
+
source: 'BG3-Compatibility-Framework wiki, _Class-Module.md §API > Api.RemoveSubClasses (the "class"
|
|
146
|
+
field: "The lower-case name of your classes Parent class" or "The UUID of the Progression at
|
|
147
|
+
which the subclass options for the parent class become available")'
|
|
148
|
+
tags:
|
|
149
|
+
- compatibility-framework
|
|
150
|
+
- api
|
|
151
|
+
- removesubclasses
|
|
152
|
+
- id: bg3.compatibility-framework.api.insert-remove-boost-passive-endpoints
|
|
153
|
+
claim: Api.InsertBoosts, Api.InsertPassives, and Api.InsertPassivesForRemoval all route to the same
|
|
154
|
+
underlying logic and take the same payload shape (modGuid, Target, FileType, Type, Strings);
|
|
155
|
+
the mirrored removal endpoints Api.RemoveBoosts, Api.RemovePassives, and
|
|
156
|
+
Api.RemovePassivesForRemoval work the same way in reverse.
|
|
157
|
+
status: community
|
|
158
|
+
source: BG3-Compatibility-Framework wiki, _Boosts-and-Passives.md §API > Adding Strings, > Removing
|
|
159
|
+
Strings
|
|
160
|
+
tags:
|
|
161
|
+
- compatibility-framework
|
|
162
|
+
- api
|
|
163
|
+
- insertboosts
|
|
164
|
+
- insertpassives
|
|
165
|
+
- id: bg3.compatibility-framework.api.yaml-anchors-share-selector-definitions
|
|
166
|
+
claim: The YAML config format supports standard YAML anchors and aliases to reuse one
|
|
167
|
+
Selectors/Strings definition across multiple Progression/Feat targets; each alias produces an
|
|
168
|
+
independent deep copy, so editing one applied instance does not affect the others.
|
|
169
|
+
status: community
|
|
170
|
+
source: 'BG3-Compatibility-Framework wiki, _Selector-API.md §YAML Anchors & Aliases and
|
|
171
|
+
_Boosts-and-Passives.md §YAML Anchors & Aliases (both: "Each alias produces an independent
|
|
172
|
+
deep copy.")'
|
|
173
|
+
tags:
|
|
174
|
+
- compatibility-framework
|
|
175
|
+
- yaml
|
|
176
|
+
- anchors
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: crash.causes
|
|
3
|
+
title: Crash and freeze causes found in production
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.crash.islinkedspellcontainer-unlinked
|
|
6
|
+
claim: The SpellFlags value IsLinkedSpellContainer without any linked spells is an instant
|
|
7
|
+
null-deref crash. Use vanilla-proven flags (e.g. SpellFlags
|
|
8
|
+
"HasSomaticComponent;HasVerbalComponent") instead.
|
|
9
|
+
status: verified
|
|
10
|
+
source: ModWright field verification
|
|
11
|
+
tags:
|
|
12
|
+
- crash
|
|
13
|
+
- spells
|
|
14
|
+
- flags
|
|
15
|
+
- spellflags
|
|
16
|
+
detail: "Symptom on an earlier mod: CTD in the SYS_CC_I character-creation level when the origin was
|
|
17
|
+
selected; bin\\network.*.log showed that no level transition to TUT_Avernus_C ever started.
|
|
18
|
+
Fixed by swapping the flag for HasSomaticComponent;HasVerbalComponent. A later mod's dev-loop
|
|
19
|
+
notes carry it as rule 3 of the five rules that caused CTDs on that earlier mod."
|
|
20
|
+
- id: bg3.crash.spell-missing-spellanimation
|
|
21
|
+
claim: 'Never author a spell without a SpellAnimation, or a `using` parent that has one. Without it
|
|
22
|
+
the CastTextEvent "Cast" keyframe never fires: the spell "casts" but never resolves (eyes
|
|
23
|
+
glow, nothing happens).'
|
|
24
|
+
status: verified
|
|
25
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
26
|
+
source: ModWright field verification
|
|
27
|
+
tags:
|
|
28
|
+
- crash
|
|
29
|
+
- spells
|
|
30
|
+
- spellanimation
|
|
31
|
+
- silent-failure
|
|
32
|
+
detail: 'No error is logged; the entry loads fine and only misbehaves in-engine. "This bit us hard."
|
|
33
|
+
Fix: give every spell an explicit SpellAnimation or a `using` parent that carries one.'
|
|
34
|
+
- id: bg3.crash.dangling-tag-guid
|
|
35
|
+
claim: A custom tag GUID used in Origins.lsx ReallyTags must have a Tags.lsx definition; an
|
|
36
|
+
undefined tag UUID is believed to null-deref in tag lookup when the character is selected. Use
|
|
37
|
+
vanilla tags or define your own.
|
|
38
|
+
status: unverified
|
|
39
|
+
source: ModWright research
|
|
40
|
+
tags:
|
|
41
|
+
- crash
|
|
42
|
+
- tags
|
|
43
|
+
- origins
|
|
44
|
+
- references
|
|
45
|
+
detail: The source lists this among "likely crash causes ... not yet tested" — it was fixed at the
|
|
46
|
+
end of the final session on an earlier mod and the fix was never run. The dev-loop notes of a
|
|
47
|
+
later class mod restate it as one of the five rules that caused CTDs on that earlier mod, but
|
|
48
|
+
no passage records an isolated in-engine test.
|
|
49
|
+
- id: bg3.crash.dangling-spelllist-reference
|
|
50
|
+
claim: A SpellLists.lsx entry naming a spell that was removed from Spells.txt is a dangling
|
|
51
|
+
reference and is believed to cause a null lookup. SpellLists.lsx must stay in sync with
|
|
52
|
+
Spells.txt.
|
|
53
|
+
status: unverified
|
|
54
|
+
source: ModWright research
|
|
55
|
+
tags:
|
|
56
|
+
- crash
|
|
57
|
+
- spells
|
|
58
|
+
- spelllists
|
|
59
|
+
- references
|
|
60
|
+
detail: "Same status as the dangling tag GUID: fixed at the end of the final session on an earlier
|
|
61
|
+
mod, never tested. A later class mod's dev-loop notes restate it as a rule. A reference
|
|
62
|
+
checker (a script that cross-checks SpellLists.lsx against Spells.txt) catches it before
|
|
63
|
+
packing regardless."
|
|
64
|
+
- id: bg3.crash.arearadius-hp-budget-targeting
|
|
65
|
+
claim: AreaRadius / HP-budget targeting spells (e.g., Target_Sleep) FREEZE the game if reskinned to
|
|
66
|
+
single-target with a huge MaximumTotalTargetHP — the target-preview scan chokes.
|
|
67
|
+
status: verified
|
|
68
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
69
|
+
source: ModWright field verification
|
|
70
|
+
tags:
|
|
71
|
+
- crash
|
|
72
|
+
- spells
|
|
73
|
+
- targeting
|
|
74
|
+
- ui-freeze
|
|
75
|
+
detail: For a single-target no-save effect, base the spell on a clean single-target spell such as
|
|
76
|
+
Target_CrownOfMadness instead of reskinning an AreaRadius/HP-budget base.
|
|
77
|
+
- id: bg3.crash.xml-comments-loca-parse
|
|
78
|
+
claim: NEVER put XML comments (<!-- -->) in a Localization .xml — the loca parser CTDs the game
|
|
79
|
+
whenever the owning module is ACTIVE. Module inactive = no crash (the loca never parses).
|
|
80
|
+
status: verified
|
|
81
|
+
verified_on: 4.73.98.727 (Patch 8)
|
|
82
|
+
source: ModWright field verification
|
|
83
|
+
tags:
|
|
84
|
+
- crash
|
|
85
|
+
- localization
|
|
86
|
+
- xml
|
|
87
|
+
- comments
|
|
88
|
+
detail: 'Symptom timing varies with WHEN the module activates: pre-menu (module pre-enabled at boot)
|
|
89
|
+
or ~67% of save-load (module enabled via the save screen Mod Verification checkbox). The
|
|
90
|
+
"module inactive = no crash" behaviour is what makes this maddening to bisect.'
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: dialogue.dialogbank
|
|
3
|
+
title: Non-override dialogue editing via DialogBank and TimelineBank resource headers
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.dialogue.dialogbank.isolated-lsx-header-for-dialogbank-edits
|
|
6
|
+
claim: To retarget a single Dialog Assets Resource Bank entry without an override mod, create a
|
|
7
|
+
standalone .lsx containing only that one edited resource, with the exact header `<region
|
|
8
|
+
id="DialogBank"><node id="DialogBank"><children>...</children></node></region>` inside a
|
|
9
|
+
`<save><version major="4" minor="0" revision="9" build="0"
|
|
10
|
+
lslib_meta="v1,bswap_guids,lsf_adjacency" />` wrapper — not the full vanilla file with every
|
|
11
|
+
other bank entry included.
|
|
12
|
+
status: community
|
|
13
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:159-172, §Creating Dialog Mods With
|
|
14
|
+
Compatibility In Mind (DialogBank header code block)
|
|
15
|
+
tags:
|
|
16
|
+
- dialogue
|
|
17
|
+
- dialogbank
|
|
18
|
+
- lsx
|
|
19
|
+
- header
|
|
20
|
+
- non-override
|
|
21
|
+
- id: bg3.dialogue.dialogbank.timelinebank-header-for-generateddialogtimelines-edits
|
|
22
|
+
claim: The equivalent isolated-.lsx technique for a GeneratedDialogTimelines entry uses a
|
|
23
|
+
`TimelineBank` region/node instead of `DialogBank`, with the same save/version wrapper
|
|
24
|
+
attributes — a distinct region id per bank type, not a shared one.
|
|
25
|
+
status: community
|
|
26
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:176-190, §Creating Dialog Mods With
|
|
27
|
+
Compatibility In Mind (TimelineBank header code block)
|
|
28
|
+
tags:
|
|
29
|
+
- dialogue
|
|
30
|
+
- timelinebank
|
|
31
|
+
- generateddialogtimelines
|
|
32
|
+
- lsx
|
|
33
|
+
- header
|
|
34
|
+
- id: bg3.dialogue.dialogbank.repoint-by-editing-sourcefile-path-only
|
|
35
|
+
claim: The recommended non-override technique is to leave a DialogBank/TimelineBank resource's other
|
|
36
|
+
fields untouched and only change its file-path attribute to point into the mod's own folder
|
|
37
|
+
instead of the original Gustav/GustavDev/Shared/SharedDev path, then move the actual edited
|
|
38
|
+
file to that new path — not to duplicate or rename the resource entry itself.
|
|
39
|
+
status: community
|
|
40
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:196, §Creating Dialog Mods With
|
|
41
|
+
Compatibility In Mind ("You'll then want to update the file path for these resources,
|
|
42
|
+
replacing the original Gustav/GustavDev/Shared/SharedDev folder in the file path with your mod
|
|
43
|
+
folder name."; the next sentence adds moving the edited files to that new path)
|
|
44
|
+
tags:
|
|
45
|
+
- dialogue
|
|
46
|
+
- dialogbank
|
|
47
|
+
- repoint
|
|
48
|
+
- non-override
|
|
49
|
+
related:
|
|
50
|
+
- id: bg3.dialogue.dialogbank-namespaced-pattern
|
|
51
|
+
detail: Generalizes the existing verified fact's mod-specific recipe (byte-for-byte copies of
|
|
52
|
+
vanilla Resource nodes with only SourceFile re-pointed) into the community tutorial's
|
|
53
|
+
stated general technique for any DialogBank/TimelineBank entry, independent of the
|
|
54
|
+
specific example.
|
|
55
|
+
- id: bg3.dialogue.dialogbank.only-include-resources-actually-being-edited
|
|
56
|
+
claim: A non-override DialogBank/TimelineBank/GeneratedDialogTimelines .lsx should contain only the
|
|
57
|
+
resource entries actually being changed, never a full copy of the vanilla bank — "you should
|
|
58
|
+
only include the entries for the dialog timelines you're editing in your mods," since these
|
|
59
|
+
vanilla files are described as "huge."
|
|
60
|
+
status: community
|
|
61
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:125-133, §Generated Dialog Timelines and
|
|
62
|
+
§Dialog Assets Resource Banks
|
|
63
|
+
tags:
|
|
64
|
+
- dialogue
|
|
65
|
+
- dialogbank
|
|
66
|
+
- generateddialogtimelines
|
|
67
|
+
- minimal-diff
|
|
68
|
+
- id: bg3.dialogue.dialogbank.dialogbank-sourcefile-repoints-to-lsj-path
|
|
69
|
+
claim: A DialogBank Resource node's file-path attribute must be repointed to a .lsj path
|
|
70
|
+
(Mods\<mod>\Story\ Dialogs\<rel>.lsj) even when the mod ships no .lsj file at all — the engine
|
|
71
|
+
follows that .lsj-shaped path and resolves through it to the actual DialogsBinary .lsf, which
|
|
72
|
+
is why a working DialogBank entry can reference a file that does not exist on disk in that
|
|
73
|
+
exact form.
|
|
74
|
+
status: community
|
|
75
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:143-145, §What Goes Into Dialog... "A
|
|
76
|
+
note" callout ("Even entirely new modded dialog files can be referenced without an .lsj file,
|
|
77
|
+
even when the file path is set to look for an .lsj file."; the same callout states the banks
|
|
78
|
+
refer to the .lsj paths and that the game resolves the corresponding DialogsBinary .lsf
|
|
79
|
+
through them)
|
|
80
|
+
tags:
|
|
81
|
+
- dialogue
|
|
82
|
+
- dialogbank
|
|
83
|
+
- lsj
|
|
84
|
+
- lsf
|
|
85
|
+
- resolution
|
|
86
|
+
related:
|
|
87
|
+
- id: bg3.dialogue.dialogbank-namespaced-pattern
|
|
88
|
+
detail: Explains the mechanism behind the existing fact's "SourceFile re-pointed to
|
|
89
|
+
Mods/<mod>/Story/Dialogs/<rel>.lsj" step — that .lsj path resolves to the accompanying
|
|
90
|
+
.lsf even with no .lsj physically present, which is why the namespaced pattern needs no
|
|
91
|
+
.lsj to ship.
|
|
92
|
+
- id: bg3.dialogue.dialogbank.timeline-and-scene-must-move-together
|
|
93
|
+
claim: When repointing a GeneratedDialogTimelines entry, the Dialog Timeline and its paired Dialog
|
|
94
|
+
Scene file must both be relocated into the new (mod-namespaced) file path together — "if
|
|
95
|
+
they're not in the same file path, the game will reference the vanilla files, instead of your
|
|
96
|
+
edited ones."
|
|
97
|
+
status: community
|
|
98
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:198, §Creating Dialog Mods With
|
|
99
|
+
Compatibility In Mind ("If they're not in the same file path, the game will reference the
|
|
100
|
+
vanilla files, instead of your edited ones."; the preceding sentence is the bolded instruction
|
|
101
|
+
to place them together)
|
|
102
|
+
tags:
|
|
103
|
+
- dialogue
|
|
104
|
+
- timeline
|
|
105
|
+
- dialog-scene
|
|
106
|
+
- silent-failure
|
|
107
|
+
- id: bg3.dialogue.dialogbank.nested-dialogue-eases-compat-over-timeline-edits
|
|
108
|
+
claim: Nested Dialog files (separate dialogue files linked from a parent DialogsBinary, e.g.
|
|
109
|
+
companion romance content) are explicitly recommended over editing a shared Dialog Timeline
|
|
110
|
+
for compatibility, because "editing the DialogsBinary files to link to nested dialogue is much
|
|
111
|
+
simpler, and will allow for much easier compatibility patching between mods" than merging two
|
|
112
|
+
mods' edits to the same Timeline file.
|
|
113
|
+
status: community
|
|
114
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:365-370, §How To Edit > "Linking Nested
|
|
115
|
+
Dialogue"
|
|
116
|
+
tags:
|
|
117
|
+
- dialogue
|
|
118
|
+
- nested-dialog
|
|
119
|
+
- compatibility
|
|
120
|
+
- timeline
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
game: baldursgate3
|
|
2
|
+
topic: dialogue.files
|
|
3
|
+
title: The five dialogue file types, their locations, and non-override editing headers
|
|
4
|
+
facts:
|
|
5
|
+
- id: bg3.dialogue.files.five-dialogue-specific-file-types
|
|
6
|
+
claim: "A BG3 scene is built from five distinct dialogue-specific file types: DialogsBinary files,
|
|
7
|
+
Dialog Timeline files, Dialog Scene files, GeneratedDialogTimelines files, and Dialog (Assets
|
|
8
|
+
Resource Bank) files. The tutorial calls the first three \"most likely what you'll be
|
|
9
|
+
editing\" and the last two \"what help the game reference the first three files.\""
|
|
10
|
+
status: community
|
|
11
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md §What Goes Into Dialog in Baldur's Gate 3?
|
|
12
|
+
tags:
|
|
13
|
+
- dialogue
|
|
14
|
+
- file-types
|
|
15
|
+
- overview
|
|
16
|
+
- id: bg3.dialogue.files.scene-lsf-not-lsx-is-the-real-file
|
|
17
|
+
claim: Extracting a Dialog Scene produces both a .lsf and a same-named .lsx; the .lsf is the one the
|
|
18
|
+
tutorial says to edit. Those .lsx files (and the Dialogs .lsj files alongside them) are
|
|
19
|
+
described as what Larian's engine uses to generate the DialogsBinary and Dialog Scene .lsf
|
|
20
|
+
files.
|
|
21
|
+
status: community
|
|
22
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:54-58, §What Goes Into Dialog... ("The
|
|
23
|
+
Dialog Scene files with the .lsf file extension are what you'll want to edit, NOT the .lsx
|
|
24
|
+
files")
|
|
25
|
+
tags:
|
|
26
|
+
- dialogue
|
|
27
|
+
- dialog-scene
|
|
28
|
+
- lsf
|
|
29
|
+
- lsx
|
|
30
|
+
- gotcha
|
|
31
|
+
detail: 'Checked against the source (2026-09-08): an earlier wording ended "and editing it has no
|
|
32
|
+
effect on the shipped scene". The same paragraph says the opposite for the .lsj half of that
|
|
33
|
+
pair — "the Dialogs .lsj files can be edited and included in your mod without an accompanying
|
|
34
|
+
DialogsBinary .lsf file, and create a working scene" — so the no-effect clause has been
|
|
35
|
+
removed. The page does not say what shipping an edited Scene .lsx alone does.'
|
|
36
|
+
- id: bg3.dialogue.files.timeline-and-dialogsbinary-paths
|
|
37
|
+
claim: Dialog Timeline files live under Data\Public\<Module>\Timeline\Generated (Gustav, GustavDev,
|
|
38
|
+
and sometimes Shared/SharedDev); DialogsBinary files live under
|
|
39
|
+
Data\Mods\<Module>\Story\DialogsBinary (Gustav, GustavDev), further split into subfolders by
|
|
40
|
+
game section (e.g. Act 3, Tutorial, Companion dialog).
|
|
41
|
+
status: community
|
|
42
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md §A Summary of Dialog Timeline Files, and
|
|
43
|
+
the DialogsBinary paragraph immediately after it
|
|
44
|
+
tags:
|
|
45
|
+
- dialogue
|
|
46
|
+
- file-paths
|
|
47
|
+
- timeline
|
|
48
|
+
- dialogsbinary
|
|
49
|
+
- id: bg3.dialogue.files.scene-dialogsbinary-timeline-share-filename
|
|
50
|
+
claim: For a given scene, the DialogsBinary, Dialog Timeline, and Dialog Scene files all share the
|
|
51
|
+
same base file name; the Dialog Scene file's name is that same base name with the literal word
|
|
52
|
+
"Scene" appended.
|
|
53
|
+
status: community
|
|
54
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md §Dialog Scene files ("will all have the
|
|
55
|
+
same file name, with the Dialogue Scene files just appending the word Scene to that same file
|
|
56
|
+
name")
|
|
57
|
+
tags:
|
|
58
|
+
- dialogue
|
|
59
|
+
- naming-convention
|
|
60
|
+
- dialog-scene
|
|
61
|
+
- id: bg3.dialogue.files.default-scene-inheritance-path
|
|
62
|
+
claim: A Dialog Scene file can inherit camera/lighting/character-presence settings from a base scene
|
|
63
|
+
file, most commonly the default one at Public\Shared\Timeline\Scenes\Default\, "often linked
|
|
64
|
+
at the bottom of the file."
|
|
65
|
+
status: community
|
|
66
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md §Dialog Scene files
|
|
67
|
+
tags:
|
|
68
|
+
- dialogue
|
|
69
|
+
- dialog-scene
|
|
70
|
+
- inheritance
|
|
71
|
+
- default-scene
|
|
72
|
+
- id: bg3.dialogue.files.resource-bank-still-points-at-lsj-even-for-lsf-only-mods
|
|
73
|
+
claim: "A Dialog Assets Resource Bank entry's file path always names the Dialogs .lsj file, never
|
|
74
|
+
the DialogsBinary .lsf directly — even when a mod ships only a new/modified .lsf and no .lsj
|
|
75
|
+
at all, the engine still resolves through that .lsj-shaped path to find the .lsf. Pointing a
|
|
76
|
+
Resource Bank entry at the .lsf path instead breaks the scene: \"the game won't be able to
|
|
77
|
+
play the scene.\""
|
|
78
|
+
status: community
|
|
79
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:143-145, §What Goes Into Dialog..., "A
|
|
80
|
+
note" callout ("If you refer to the DialogsBinary .lsf file instead in these resources, the
|
|
81
|
+
game won't be able to play the scene!"; the surrounding paragraph states the banks still name
|
|
82
|
+
the .lsj paths and that the game resolves the .lsf through them, even with no .lsj present)
|
|
83
|
+
tags:
|
|
84
|
+
- dialogue
|
|
85
|
+
- dialog-assets-resource-bank
|
|
86
|
+
- lsj
|
|
87
|
+
- lsf
|
|
88
|
+
- gotcha
|
|
89
|
+
related:
|
|
90
|
+
- id: bg3.dialogue.dialogbank.dialogbank-sourcefile-repoints-to-lsj-path
|
|
91
|
+
detail: Both facts independently describe the same lsj-path-even-without-an-lsj-file resolution
|
|
92
|
+
behavior; this one is the general statement from the dialogue-files tutorial, the other is
|
|
93
|
+
the specific DialogBank Resource-node header this general rule applies to.
|
|
94
|
+
- id: bg3.dialogue.files.override-mods-invisible-to-igmm-and-unordered
|
|
95
|
+
claim: A dialogue override mod (files placed at the exact vanilla path) shows with an orange
|
|
96
|
+
background in BG3 Mod Manager but never appears in Larian's in-game mod manager at all, and
|
|
97
|
+
cannot be reliably reordered relative to other override mods even inside BG3 Mod Manager —
|
|
98
|
+
"which override mod takes priority seems to be random."
|
|
99
|
+
status: community
|
|
100
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:205, §Creating Dialog Mods With
|
|
101
|
+
Compatibility In Mind ("Which override mod takes priority seems to be random, which means
|
|
102
|
+
override mods also can't be reliably patched for compatibility."; the two preceding sentences
|
|
103
|
+
state that override mods do not appear in the IGMM and cannot be reliably ordered in BGMM)
|
|
104
|
+
tags:
|
|
105
|
+
- dialogue
|
|
106
|
+
- override
|
|
107
|
+
- load-order
|
|
108
|
+
- compatibility
|
|
109
|
+
related:
|
|
110
|
+
- id: bg3.dialogue.override-packing-rule-was-wrong
|
|
111
|
+
detail: Complements the existing verified fact (that dialog overrides CAN be packed and don't CTD)
|
|
112
|
+
with a separate, still-open caveat from the community side about override load-order being
|
|
113
|
+
unpredictable — packing safely and ordering predictably are different problems.
|
|
114
|
+
- id: bg3.dialogue.files.compat-patch-needs-unique-mod-folder-name
|
|
115
|
+
claim: When patching two dialogue mods for compatibility by merging their edits into one shared
|
|
116
|
+
file, the patch's own mod folder name must be unique — "mods that use the same mod folder name
|
|
117
|
+
can cause your mod load order to reset."
|
|
118
|
+
status: community
|
|
119
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md §Creating Dialog Mod Compatibility
|
|
120
|
+
Patches ("The mod folder for the patch should be unique; mods that use the same mod folder
|
|
121
|
+
name can cause your mod load order to reset")
|
|
122
|
+
tags:
|
|
123
|
+
- dialogue
|
|
124
|
+
- compatibility-patch
|
|
125
|
+
- mod-folder
|
|
126
|
+
- load-order
|
|
127
|
+
- gotcha
|
|
128
|
+
- id: bg3.dialogue.files.eleven-dialogue-node-types
|
|
129
|
+
claim: "The tutorial documents 11 DialogsBinary node types: TagGreeting, TagAnswer, TagQuestion,
|
|
130
|
+
TagCinematic, ActiveRoll, PassiveRoll, RollResult, Alias, Jump, Nested Dialog, and RootNodes —
|
|
131
|
+
more than the subset already recorded (TagGreeting, TagQuestion, TagAnswer, ActiveRoll,
|
|
132
|
+
RollResult, Jump, Alias), adding TagCinematic, PassiveRoll, Nested Dialog, and RootNodes."
|
|
133
|
+
status: community
|
|
134
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:236-294, §Documentation (node type list
|
|
135
|
+
and per-type entries)
|
|
136
|
+
tags:
|
|
137
|
+
- dialogue
|
|
138
|
+
- node-graph
|
|
139
|
+
- node-types
|
|
140
|
+
detail: "The page hedges its own list: 11 types are \"all I've found at this point\", with an
|
|
141
|
+
explicit \"There might be something I've missed\" — treat it as the largest attested list, not
|
|
142
|
+
a closed set."
|
|
143
|
+
related:
|
|
144
|
+
- id: bg3.dialogue.node-structure
|
|
145
|
+
detail: Extends the existing verified fact's node-type list with four additional documented node
|
|
146
|
+
types not previously recorded (TagCinematic, PassiveRoll, Nested Dialog, RootNodes).
|
|
147
|
+
- id: bg3.dialogue.files.jump-jumptargetpoint-1-vs-2
|
|
148
|
+
claim: "A Jump node's jumptargetpoint attribute controls whether the jump lands ON the target line
|
|
149
|
+
or skips past it: jumptargetpoint 1 takes you to the target line itself, jumptargetpoint 2
|
|
150
|
+
skips over it — used specifically to bypass a PassiveRoll node \"which will keep retriggering
|
|
151
|
+
unless they're bypassed by a Jump node.\""
|
|
152
|
+
status: community
|
|
153
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md §Jump ("a jumptargetpoint of 1 will take
|
|
154
|
+
you to the line, while a jumptargetpoint of 2 will skip over it")
|
|
155
|
+
tags:
|
|
156
|
+
- dialogue
|
|
157
|
+
- jump
|
|
158
|
+
- jumptargetpoint
|
|
159
|
+
related:
|
|
160
|
+
- id: bg3.dialogue.node-structure
|
|
161
|
+
detail: "Confirms the existing verified fact's shorthand (\"jumptargetpoint: 2 = target's
|
|
162
|
+
children\") by spelling out both values (1 = land on the line, 2 = skip over it) and the
|
|
163
|
+
PassiveRoll use case that motivates using 2."
|
|
164
|
+
- id: bg3.dialogue.files.checkflags-usage-type-by-flag-kind
|
|
165
|
+
claim: "A dialogue flag's usage type corresponds to which kind of flag it is: Global flags are
|
|
166
|
+
\"often given usage type 5\"; HasMet-style flags (whether one character has met another) are
|
|
167
|
+
\"usually given usage type 6,\" corresponding to the \"Dialog\" flag type seen in
|
|
168
|
+
DialogsBinary files. Matching the usage type to an existing same-kind flag when authoring a
|
|
169
|
+
new custom flag keeps the convention consistent."
|
|
170
|
+
status: community
|
|
171
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:354-356, §How To Edit > "Making custom
|
|
172
|
+
game flags" (usage type 6 for HasMet flags, usage type 5 for Global flags, and the advice to
|
|
173
|
+
copy the usage type from an existing flag of the same type)
|
|
174
|
+
tags:
|
|
175
|
+
- dialogue
|
|
176
|
+
- checkflags
|
|
177
|
+
- flags
|
|
178
|
+
- usage-type
|
|
179
|
+
detail: The page hedges the meaning of the Dialog flag type itself ("I believe this flag type is
|
|
180
|
+
used to mark flags that are tested in dialog specifically... but I'm not entirely sure yet"),
|
|
181
|
+
so treat the type-to-usage mapping as a convention to copy, not a rule the engine is known to
|
|
182
|
+
enforce.
|
|
183
|
+
- id: bg3.dialogue.files.flag-scope-kinds-tag-global-local-object
|
|
184
|
+
claim: "checkflags/setflags distinguish four flag scopes: Tag flags test what tags a character has;
|
|
185
|
+
Global flags are true/false for the whole game, not per-character; Local flags \"seem to be\"
|
|
186
|
+
set on the player character specifically (the page's own hedge); Object flags test whether the
|
|
187
|
+
specific character being spoken to has a flag set — Object flags are \"distinct from tags;
|
|
188
|
+
flags are conditional, and are usually set during gameplay, as opposed to tags, which are used
|
|
189
|
+
to determine different qualities of a character.\""
|
|
190
|
+
status: community
|
|
191
|
+
source: bg3-community/Tutorials/dialogue-files-tutorial.md:344, §How To Edit > "Checking game flags"
|
|
192
|
+
tags:
|
|
193
|
+
- dialogue
|
|
194
|
+
- checkflags
|
|
195
|
+
- flag-scope
|
|
196
|
+
- tag
|
|
197
|
+
- global
|
|
198
|
+
- local
|
|
199
|
+
- object
|
|
200
|
+
- id: bg3.dialogue.files.scriptflags-lsx-must-stay-lsx
|
|
201
|
+
claim: Script flags (for testing OR/NOR combinations of conditions that plain checkflags AND/NOT
|
|
202
|
+
logic cannot express) are declared in Mods\<Mod>\Story\Dialogs\ScriptFlags\ScriptFlags.lsx;
|
|
203
|
+
this file "should be left an .lsx file, and should not be converted to .lsf in order to
|
|
204
|
+
function" — unlike DialogsBinary files, which must be .lsf.
|
|
205
|
+
status: community
|
|
206
|
+
source: bg3-community/Tutorials/Dialogue/script-flags.md §Making script flags ("This file should be
|
|
207
|
+
left an .lsx file, and should not be converted to .lsf in order to function")
|
|
208
|
+
tags:
|
|
209
|
+
- dialogue
|
|
210
|
+
- scriptflags
|
|
211
|
+
- lsx
|
|
212
|
+
- silent-failure
|
|
213
|
+
- id: bg3.dialogue.files.scriptflag-check-syntax-c-numbered-conditions
|
|
214
|
+
claim: A ScriptFlags entry lists one or more CONDITION lines, each implicitly numbered by position
|
|
215
|
+
(c1, c2, c3, ...), and a single CHECK line whose string combines them with & (AND), | (OR),
|
|
216
|
+
and parentheses for grouping — e.g. CHECK "(c1&c3)|(c2&c4)" evaluates true if either the
|
|
217
|
+
first-and-third conditions are both true, or the second-and-fourth are.
|
|
218
|
+
status: community
|
|
219
|
+
source: bg3-community/Tutorials/Dialogue/script-flags.md §Making script flags (worked example, CHECK
|
|
220
|
+
"(c1&c3)|(c2&c4)"), §Evaluating script flag conditions
|
|
221
|
+
tags:
|
|
222
|
+
- dialogue
|
|
223
|
+
- scriptflags
|
|
224
|
+
- syntax
|
|
225
|
+
- condition
|
|
226
|
+
- check
|
|
227
|
+
- id: bg3.dialogue.files.dialogvariables-lsx-path
|
|
228
|
+
claim: New dialogue variables (strings, numeric countdowns, etc. testable from script flags and
|
|
229
|
+
Osiris) are declared in Mods\<Mod>\Story\Dialogs\DialogVariables\DialogVariables.lsx,
|
|
230
|
+
referenced elsewhere by their own UUID the same way flags are.
|
|
231
|
+
status: community
|
|
232
|
+
source: bg3-community/Tutorials/Dialogue/script-flags.md §Dialog variables
|
|
233
|
+
tags:
|
|
234
|
+
- dialogue
|
|
235
|
+
- dialogvariables
|
|
236
|
+
- file-path
|