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,203 @@
|
|
|
1
|
+
game: subnautica2
|
|
2
|
+
topic: ue5.ue4ss
|
|
3
|
+
title: UE4SS — the Unreal Engine scripting loader, its layout and its version problem
|
|
4
|
+
facts:
|
|
5
|
+
- id: subnautica2.ue4ss.live-repo-vs-archived-original
|
|
6
|
+
claim: The live UE4SS project is `UE4SS-RE/RE-UE4SS`. The similarly-named `ue4ss/ue4ss` is the
|
|
7
|
+
ARCHIVED original (archived 2023-01-02, last release 1.3.5, maximum UE 5.0) and must not be
|
|
8
|
+
cited or linked.
|
|
9
|
+
status: community
|
|
10
|
+
source: https://github.com/UE4SS-RE/RE-UE4SS and https://github.com/ue4ss/ue4ss (archive banner and
|
|
11
|
+
final release), read 2026-09-11
|
|
12
|
+
tags:
|
|
13
|
+
- ue4ss
|
|
14
|
+
- repo
|
|
15
|
+
- provenance
|
|
16
|
+
- archived
|
|
17
|
+
- generic
|
|
18
|
+
detail: Worth recording because the archived repo still ranks in search results and its
|
|
19
|
+
documentation describes an installation layout three major versions out of date.
|
|
20
|
+
- id: subnautica2.ue4ss.ue56-only-in-experimental
|
|
21
|
+
claim: UE 5.6 support exists ONLY in UE4SS's rolling `experimental-latest` prerelease. The latest
|
|
22
|
+
tagged stable, v3.0.1 (2025-02-14), descends from v3.0.0, whose notes claim support only for
|
|
23
|
+
UE 5.2 and 5.3. There has been no tagged stable release in roughly nineteen months.
|
|
24
|
+
status: community
|
|
25
|
+
source: https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/experimental-latest (notes list, as
|
|
26
|
+
separate bullets, added support for UE 5.4, 5.5, 5.6, 5.7 and 5.8; last rebuilt 2026-09-11)
|
|
27
|
+
and https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/v3.0.1, both read 2026-09-11
|
|
28
|
+
tags:
|
|
29
|
+
- ue4ss
|
|
30
|
+
- version
|
|
31
|
+
- ue5.6
|
|
32
|
+
- experimental
|
|
33
|
+
- compat
|
|
34
|
+
- generic
|
|
35
|
+
- blocker
|
|
36
|
+
detail: 'This is the single most consequential fact for any UE 5.4+ game. It has an awkward
|
|
37
|
+
consequence for a compat rule table: `experimental-latest` is a moving target under a fixed
|
|
38
|
+
tag, so there is no version to pin a `VersionRequirement` against. Model it as an `advisory:
|
|
39
|
+
true` rule with empty `requires` that fires whenever UE4SS is present — per
|
|
40
|
+
src/core/compat/types.ts, advisories exist for exactly this, "a standing reminder that should
|
|
41
|
+
show up whenever a component is present at all". A user who installed the stable release on a
|
|
42
|
+
5.6 game has a loader that cannot work, and no version comparison would have told them.'
|
|
43
|
+
- id: subnautica2.ue4ss.install-layout-stable-vs-experimental
|
|
44
|
+
claim: "The two UE4SS lines install differently. Stable 3.0.x puts `dwmapi.dll`, `UE4SS.dll`,
|
|
45
|
+
`UE4SS-settings.ini` and `Mods/` all directly in the game's `Binaries/Win64/`. Experimental
|
|
46
|
+
moves everything except the proxy DLL into a `ue4ss` subfolder: `Binaries/Win64/dwmapi.dll`
|
|
47
|
+
plus `Binaries/Win64/ue4ss/{UE4SS.dll, UE4SS-settings.ini, Mods/}`."
|
|
48
|
+
status: community
|
|
49
|
+
source: "Stable: https://docs.ue4ss.com/dev/installation-guide.html. Experimental, verbatim from the
|
|
50
|
+
release notes: \"All UE4SS files (including UE4SS.dll, settings, and mods) now reside in a
|
|
51
|
+
`ue4ss` subfolder next to your game executable. Only the proxy DLL (dwmapi.dll) remains in the
|
|
52
|
+
game's Win64 directory.\"
|
|
53
|
+
(https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/experimental-latest). Both read
|
|
54
|
+
2026-09-11."
|
|
55
|
+
tags:
|
|
56
|
+
- ue4ss
|
|
57
|
+
- install
|
|
58
|
+
- layout
|
|
59
|
+
- paths
|
|
60
|
+
- modroot
|
|
61
|
+
- generic
|
|
62
|
+
detail: A surface must offer BOTH paths as candidates and report which exists rather than assuming,
|
|
63
|
+
since the choice of path is really a choice of UE4SS line. `dwmapi.dll` became the proxy DLL
|
|
64
|
+
in v3.0.0, replacing `xinput1_3.dll`; the docs note the proxy can be "a name of any DLL that
|
|
65
|
+
is loaded by the game engine or by its dependencies", so its name is not a reliable detection
|
|
66
|
+
key on its own.
|
|
67
|
+
- id: subnautica2.ue4ss.mod-folder-and-mods-txt
|
|
68
|
+
claim: "A UE4SS mod is one directory under `Mods/`, with `Scripts/main.lua` for a Lua mod and/or
|
|
69
|
+
`dlls/main.dll` for a C++ mod. Enablement is `Mods/mods.txt`, one `ModName : 1` line per mod
|
|
70
|
+
(1 enabled, 0 disabled); an `enabled.txt` file inside a mod folder is an alternative marker."
|
|
71
|
+
status: community
|
|
72
|
+
source: "https://docs.ue4ss.com/dev/installation-guide.html (folder tree) and
|
|
73
|
+
https://docs.ue4ss.com/dev/guides/creating-a-lua-mod.html (the verbatim `MyLuaMod : 1` line
|
|
74
|
+
and the `Mods\\MyLuaMod\\scripts\\main.lua` tree), read 2026-09-11"
|
|
75
|
+
tags:
|
|
76
|
+
- ue4ss
|
|
77
|
+
- mods
|
|
78
|
+
- modstxt
|
|
79
|
+
- loadorder
|
|
80
|
+
- lua
|
|
81
|
+
- generic
|
|
82
|
+
detail: "`mods.txt` is a genuine load-order file in the `plugins.txt` mould — ordered, one name per
|
|
83
|
+
line, with an enabled flag — and each entry resolves to a real directory under the same root,
|
|
84
|
+
so a surface can set `modId` on every entry with confidence. Note the docs are inconsistent
|
|
85
|
+
about the case of the scripts subfolder (`Scripts` in the install guide, `scripts` in the mod
|
|
86
|
+
guide); it is case-insensitive on Windows. The precedence of `enabled.txt` relative to
|
|
87
|
+
`mods.txt` is not spelled out anywhere in the docs — a mod directory present but listed in
|
|
88
|
+
neither is the most common cause of a mod silently doing nothing."
|
|
89
|
+
- id: subnautica2.ue4ss.usmap-dumper-keybind
|
|
90
|
+
claim: "UE4SS can generate the `.usmap` mappings file a UE5 game needs for external asset tooling:
|
|
91
|
+
the Dumpers feature writes `Mappings.usmap` next to the `*-Shipping.exe`, bound to `Ctrl +
|
|
92
|
+
Numpad 6`."
|
|
93
|
+
status: community
|
|
94
|
+
source: https://docs.ue4ss.com/dev/feature-overview/dumpers.html, read 2026-09-11
|
|
95
|
+
tags:
|
|
96
|
+
- ue4ss
|
|
97
|
+
- usmap
|
|
98
|
+
- mappings
|
|
99
|
+
- dumper
|
|
100
|
+
- tooling
|
|
101
|
+
- generic
|
|
102
|
+
detail: 'Verbatim from the page: "By default the dump includes Blueprint-generated classes, structs
|
|
103
|
+
and enums in addition to native types." The other dumpers are UHT-compatible headers (`CTRL +
|
|
104
|
+
Numpad 9`), a C++ header generator (`CTRL + H`), `.umap` recreation (`Ctrl + Numpad 7`) and
|
|
105
|
+
`DumpAllObjects()` → `UE4SS_ObjectDump.txt` (`CTRL + J`). This matters beyond UE4SS itself:
|
|
106
|
+
generating mappings requires running a dumper against the LIVE process, which is why no
|
|
107
|
+
asset-level tooling can be built or tested without the game installed
|
|
108
|
+
(subnautica2.ue5.usmap-requires-a-running-game).'
|
|
109
|
+
- id: subnautica2.ue4ss.per-game-config-files
|
|
110
|
+
claim: Games that "have altered the engine in ways that make UE4SS not work out of the box" get a
|
|
111
|
+
`Binaries/Win64/CustomGameConfigs/<GameName>/` folder holding `UE4SS-settings.ini`,
|
|
112
|
+
`MemberVariableLayout.ini` (struct offsets), `VTableLayout.ini` (vtable index overrides) and
|
|
113
|
+
`UE4SS_Signatures/*.lua` (AOB signatures for `FName::FName`, `FName::ToString` and
|
|
114
|
+
`StaticConstructObject`).
|
|
115
|
+
status: community
|
|
116
|
+
source: https://docs.ue4ss.com/dev/custom-game-configs.html and
|
|
117
|
+
https://github.com/UE4SS-RE/RE-UE4SS/blob/main/docs/custom-game-configs.md, read 2026-09-11
|
|
118
|
+
tags:
|
|
119
|
+
- ue4ss
|
|
120
|
+
- offsets
|
|
121
|
+
- aob
|
|
122
|
+
- signatures
|
|
123
|
+
- per-game
|
|
124
|
+
- config
|
|
125
|
+
- generic
|
|
126
|
+
detail: There is NO `VersionDefinitions` file and no per-game `Config.ini` in current RE-UE4SS; that
|
|
127
|
+
naming is stale and circulates widely. The need for hand-written AOB signatures dropped
|
|
128
|
+
sharply in v3.0.0, which replaced the built-in address scans with `patternsleuth`
|
|
129
|
+
(https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/v3.0.0). A game needing no
|
|
130
|
+
CustomGameConfigs entry is the normal case now, not the exception.
|
|
131
|
+
- id: subnautica2.ue4ss.logicmods-blueprint-path
|
|
132
|
+
claim: UE4SS's bundled `BPModLoaderMod` loads blueprint mods from the game's
|
|
133
|
+
`Content/Paks/LogicMods/` directory; the pak's name must match the mod folder name used in the
|
|
134
|
+
editor, and the pak must contain a `ModActor` asset.
|
|
135
|
+
status: community
|
|
136
|
+
source: Community-documented, not on docs.ue4ss.com — the official page
|
|
137
|
+
(https://docs.ue4ss.com/dev/feature-overview/blueprint-modloader.html) is a stub pointing at a
|
|
138
|
+
video. Path and ModActor requirement from downstream modding wikis, e.g.
|
|
139
|
+
https://pwmodding.wiki/docs/developers/ue4ss-modding/logic-mods/introduction. Read 2026-09-11.
|
|
140
|
+
tags:
|
|
141
|
+
- ue4ss
|
|
142
|
+
- logicmods
|
|
143
|
+
- blueprint
|
|
144
|
+
- pak
|
|
145
|
+
- modloader
|
|
146
|
+
- generic
|
|
147
|
+
- community
|
|
148
|
+
detail: "Independently corroborated for at least one game by Nexus Mods' own Vortex extension, which
|
|
149
|
+
routes \"LogicMods\" to `Content/Paks/LogicMods/`
|
|
150
|
+
(https://github.com/Nexus-Mods/game-subnautica2). Note that the per-game shape can differ from
|
|
151
|
+
the generic description: Subnautica 2's modkit requires a FOLDER per mod inside LogicMods
|
|
152
|
+
holding the full IoStore triplet, not a bare `.pak`
|
|
153
|
+
(subnautica2.modding.logicmods-is-folder-per-mod)."
|
|
154
|
+
- id: subnautica2.ue4ss.log-and-console
|
|
155
|
+
claim: "UE4SS writes `UE4SS.log` beside its DLL, and exposes a console and a GUI console configured
|
|
156
|
+
in `UE4SS-settings.ini` under `[Debug]`: `ConsoleEnabled`, `GuiConsoleEnabled`,
|
|
157
|
+
`GuiConsoleVisible`, `GraphicsAPI` (default `opengl`; `dx11`/`d3d11` also valid) and
|
|
158
|
+
`ToggleGuiKey=O` with CTRL."
|
|
159
|
+
status: community
|
|
160
|
+
source: https://github.com/UE4SS-RE/RE-UE4SS/blob/main/assets/UE4SS-settings.ini and
|
|
161
|
+
https://docs.ue4ss.com, read 2026-09-11
|
|
162
|
+
tags:
|
|
163
|
+
- ue4ss
|
|
164
|
+
- log
|
|
165
|
+
- console
|
|
166
|
+
- settings
|
|
167
|
+
- triage
|
|
168
|
+
- generic
|
|
169
|
+
detail: "`UE4SS.log` is a natural second log source for a UE game's surface alongside the engine's
|
|
170
|
+
own `Saved/Logs` file, and is the log-line fallback transport a ModWright bridge would use if
|
|
171
|
+
file writes fail. The docs advise setting both GUI console keys to 0 for play because the GUI
|
|
172
|
+
console \"will severely impact game performance\". Other settings worth knowing: `[Overrides]
|
|
173
|
+
ModsFolderPath` / `ModsFolderPaths` relocate the Mods directory (so the mod root is not
|
|
174
|
+
guaranteed to be the default path), and `[General] EnableHotReloadSystem=1` with
|
|
175
|
+
`HotReloadKey=R` hot-reloads LUA mods only — nothing in the pak or IoStore path hot-reloads."
|
|
176
|
+
- id: subnautica2.ue4ss.shared-folder-and-enabled-txt
|
|
177
|
+
claim: "Not every folder under UE4SS's `Mods/` is a mod: `shared` is the shared Lua library a build
|
|
178
|
+
ships with, and a tool walking `Mods/` must exempt it rather than report it as a mod with no
|
|
179
|
+
entry point. Neither the Lua-mod guide nor the installation guide mentions `enabled.txt` at
|
|
180
|
+
all — the docs' only enablement mechanism is the `ModName : 1` line in `mods.txt`."
|
|
181
|
+
status: community
|
|
182
|
+
source: https://docs.ue4ss.com/dev/guides/creating-a-lua-mod.html — verbatim, "Make sure that your
|
|
183
|
+
build of UE4SS contains `Mods\shared\Types.lua` (a development build from Github releases
|
|
184
|
+
contains it)", and the enablement passage "The mod must be added and enabled in
|
|
185
|
+
`Mods\mods.txt` with a new line containing the name of your mod folder ... and `1` for
|
|
186
|
+
enabling or `0` for disabling the mod"; read 2026-09-11 together with
|
|
187
|
+
https://docs.ue4ss.com/dev/installation-guide.html, neither of which names enabled.txt
|
|
188
|
+
tags:
|
|
189
|
+
- ue4ss
|
|
190
|
+
- mods
|
|
191
|
+
- shared
|
|
192
|
+
- main.lua
|
|
193
|
+
- mods.txt
|
|
194
|
+
- enabled.txt
|
|
195
|
+
- validator
|
|
196
|
+
detail: "`subnautica2.ue4ss.mod-shape` exempts `shared`, accepts either entry point
|
|
197
|
+
(`scripts/main.lua` or `dlls/main.dll`, matched case-insensitively because the two doc pages
|
|
198
|
+
disagree on the case of `scripts` — see `subnautica2.ue4ss.mod-folder-and-mods-txt`), and
|
|
199
|
+
treats an `enabled.txt` as enabling a folder that mods.txt does not name, since ModWright
|
|
200
|
+
research recorded that convention; the docs do not back it, so if a real UE4SS build ignores
|
|
201
|
+
`enabled.txt` the rule's \"will not load\" warning is the one to revisit."
|
|
202
|
+
related:
|
|
203
|
+
- subnautica2.ue4ss.mod-folder-and-mods-txt
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
game: valheim
|
|
2
|
+
topic: bepinex.loader
|
|
3
|
+
title: BepInEx 5 as Valheim's plugin loader — folder layout, Doorstop, and the exact LogOutput.log
|
|
4
|
+
line formats
|
|
5
|
+
facts:
|
|
6
|
+
- id: valheim.bepinex.loader.folder-layout
|
|
7
|
+
claim: "A BepInEx install creates five folders under `BepInEx/`: `core` (the framework assemblies),
|
|
8
|
+
`plugins` (user plugins), `config` (per-plugin `.cfg` files), `patchers` (preloader patcher
|
|
9
|
+
plugins) and `cache`."
|
|
10
|
+
status: community
|
|
11
|
+
source: https://docs.bepinex.dev/articles/user_guide/installation/index.html
|
|
12
|
+
tags:
|
|
13
|
+
- bepinex
|
|
14
|
+
- layout
|
|
15
|
+
- plugins
|
|
16
|
+
- config
|
|
17
|
+
- patchers
|
|
18
|
+
- modroots
|
|
19
|
+
detail: "These map onto four distinct ModWright mod roots with different rules: `plugins` is
|
|
20
|
+
directory- or file-delimited and isolated, `config` is a merged tree of shared text files,
|
|
21
|
+
`patchers` is a separate load stage that runs before any plugin, and `cache` is derived state
|
|
22
|
+
that must never be deployed to."
|
|
23
|
+
- id: valheim.bepinex.loader.doorstop-files-beside-the-exe
|
|
24
|
+
claim: "On Windows x64 the loader is three files placed next to the game executable, not inside
|
|
25
|
+
`BepInEx/`: `winhttp.dll` (the Doorstop loader DLL), `doorstop_config.ini` and
|
|
26
|
+
`.doorstop_version`. On Linux and macOS the equivalent is a `run_bepinex.sh` script that must
|
|
27
|
+
be edited to name the executable and then made executable with `chmod u+x`."
|
|
28
|
+
status: community
|
|
29
|
+
source: https://docs.bepinex.dev/articles/user_guide/installation/index.html
|
|
30
|
+
tags:
|
|
31
|
+
- bepinex
|
|
32
|
+
- doorstop
|
|
33
|
+
- winhttp
|
|
34
|
+
- install
|
|
35
|
+
- detect
|
|
36
|
+
detail: Presence of `winhttp.dll` plus `doorstop_config.ini` in the game root is the cheapest "is
|
|
37
|
+
BepInEx installed at all" check available, and it needs no launch. It is also the check that
|
|
38
|
+
distinguishes a game-directory install from an r2modman profile install, where the same three
|
|
39
|
+
files live in the profile instead.
|
|
40
|
+
- id: valheim.bepinex.loader.doorstop-config-keys-renamed-at-5-4-23
|
|
41
|
+
claim: "`doorstop_config.ini`'s section and key names are not stable across BepInEx 5: up to 5.4.22
|
|
42
|
+
the file is `[UnityDoorstop]` with camelCase keys (`enabled`, `targetAssembly`,
|
|
43
|
+
`redirectOutputLog`, `ignoreDisableSwitch`, `dllSearchPathOverride`), and from 5.4.23 on it is
|
|
44
|
+
`[General]` + `[UnityMono]` with snake_case keys (`enabled`, `target_assembly`,
|
|
45
|
+
`redirect_output_log`, `boot_config_override`, `ignore_disable_switch`,
|
|
46
|
+
`dll_search_path_override`, `debug_enabled`, `debug_address`, `debug_suspend`)."
|
|
47
|
+
status: inferred
|
|
48
|
+
source: BepInEx `doorstop/doorstop_config.ini` at tags v5.4.22 and v5-lts / v5.4.23.5; the 5.4.23.2
|
|
49
|
+
release notes state it outright — "Settings in `doorstop_config.ini` were renamed, old config
|
|
50
|
+
files will no longer work" (https://github.com/BepInEx/BepInEx/releases/tag/v5.4.23.2)
|
|
51
|
+
tags:
|
|
52
|
+
- doorstop
|
|
53
|
+
- config
|
|
54
|
+
- ini
|
|
55
|
+
- version
|
|
56
|
+
- detect
|
|
57
|
+
- parser
|
|
58
|
+
detail: Both spellings are still in the wild, so a detector that greps for `target_assembly` alone
|
|
59
|
+
will silently fail to recognise an older install, and one that greps for `targetAssembly` will
|
|
60
|
+
fail on every current one. The value's whitespace is also inconsistent inside BepInEx's own
|
|
61
|
+
shipped file (`enabled = true` but `target_assembly=BepInEx\core\...`), so a parser must
|
|
62
|
+
tolerate optional spaces around `=`.
|
|
63
|
+
- id: valheim.bepinex.loader.logoutput-path-and-recreation
|
|
64
|
+
claim: BepInEx's `DiskLogListener` writes `LogOutput.log` into the BepInEx root
|
|
65
|
+
(`BepInEx/LogOutput.log`) and opens it with `FileMode.Create` unless the `AppendLog` config is
|
|
66
|
+
on — so by default the file is truncated and rewritten on every launch rather than appended
|
|
67
|
+
to.
|
|
68
|
+
status: inferred
|
|
69
|
+
source: "BepInEx v5-lts `BepInEx/Logging/DiskLogListener.cs` (the constructor's
|
|
70
|
+
`Path.Combine(Paths.BepInExRootPath, localPath)` and `appendLog ? FileMode.Append :
|
|
71
|
+
FileMode.Create`), and `BepInEx/Bootstrap/Chainloader.cs` which constructs it as `new
|
|
72
|
+
DiskLogListener(\"LogOutput.log\", ...)`"
|
|
73
|
+
tags:
|
|
74
|
+
- bepinex
|
|
75
|
+
- logoutput
|
|
76
|
+
- log
|
|
77
|
+
- run-scope
|
|
78
|
+
- truncation
|
|
79
|
+
detail: 'Good news for `core/logs` run scoping: one file per run means a plain whole-file read is
|
|
80
|
+
already run-scoped, with none of the Cyberpunk redscript `rCURRENT` in-place-truncation trap.
|
|
81
|
+
The Valheim-Modding wiki states the same behaviour in prose — the log "will be re-generated on
|
|
82
|
+
a successful startup by default".'
|
|
83
|
+
- id: valheim.bepinex.loader.logoutput-fallback-filenames
|
|
84
|
+
claim: If `LogOutput.log` cannot be opened for writing, BepInEx retries up to five times under the
|
|
85
|
+
names `LogOutput.log.1`, `LogOutput.log.2` and so on, and only then logs "Couldn't open a log
|
|
86
|
+
file for writing. Skipping log file creation" and gives up.
|
|
87
|
+
status: inferred
|
|
88
|
+
source: BepInEx v5-lts `BepInEx/Logging/DiskLogListener.cs`, the `while
|
|
89
|
+
(!Utility.TryOpenFileStream(...))` loop
|
|
90
|
+
tags:
|
|
91
|
+
- bepinex
|
|
92
|
+
- logoutput
|
|
93
|
+
- log
|
|
94
|
+
- candidates
|
|
95
|
+
- failure-mode
|
|
96
|
+
detail: "A log source for Valheim must therefore declare candidates, not one path: an antivirus or a
|
|
97
|
+
second running instance holding the handle silently moves the log to a numbered sibling. The
|
|
98
|
+
wiki's Bitdefender note is a real report of exactly this class of problem."
|
|
99
|
+
- id: valheim.bepinex.loader.log-line-format
|
|
100
|
+
claim: Every disk log line is formatted by `LogEventArgs.ToString()` as
|
|
101
|
+
`$"[{Level,-7}:{Source.SourceName,10}] {Data}"` — an opening bracket, the log level
|
|
102
|
+
left-aligned and space-padded to 7 characters, a colon, the source name right-aligned and
|
|
103
|
+
space-padded to 10 characters, a closing bracket, one space, then the message. There is no
|
|
104
|
+
timestamp.
|
|
105
|
+
status: inferred
|
|
106
|
+
source: BepInEx v5-lts `BepInEx/Logging/LogEventArgs.cs`, `ToString()`; written by
|
|
107
|
+
`DiskLogListener.LogEvent` via `LogWriter.WriteLine(eventArgs.ToString())`
|
|
108
|
+
tags:
|
|
109
|
+
- bepinex
|
|
110
|
+
- log
|
|
111
|
+
- format
|
|
112
|
+
- signature
|
|
113
|
+
- regex
|
|
114
|
+
detail: "Concretely, `[Info : BepInEx] ...`, `[Warning: HarmonyX] ...`, `[Error : Unity Log]
|
|
115
|
+
...`. Two consequences for `logSignatures`: a pattern must tolerate variable internal
|
|
116
|
+
whitespace on both sides of the colon (the padding depends on the length of the level and
|
|
117
|
+
source names, and a source name longer than 10 characters is not truncated), and **there is no
|
|
118
|
+
timestamp**, so `RunScope.since` can never be applied line-by-line for this source —
|
|
119
|
+
`SourceStatus.timestamps` will be false and scoping must fall back to file mtime plus the
|
|
120
|
+
per-run truncation above."
|
|
121
|
+
- id: valheim.bepinex.loader.preloader-banner-lines
|
|
122
|
+
claim: "The preloader writes a fixed banner at the top of every run, in order: `BepInEx <version> -
|
|
123
|
+
<ProcessName> (<exe last write time>)`, then `Running under Unity v<version>`, `CLR runtime
|
|
124
|
+
version: <version>`, `Supports SRE: <bool>`, `System platform: <platform>`, then `Preloader
|
|
125
|
+
started`, `Loaded 1 patcher method from [BepInEx.Preloader <version>]`, `<N> patcher plugin(s)
|
|
126
|
+
loaded` and `Preloader finished`."
|
|
127
|
+
status: inferred
|
|
128
|
+
source: BepInEx v5-lts `BepInEx.Preloader/Preloader.cs`, the `Logger.LogMessage` / `Logger.LogInfo`
|
|
129
|
+
calls in `Run()`
|
|
130
|
+
tags:
|
|
131
|
+
- bepinex
|
|
132
|
+
- log
|
|
133
|
+
- banner
|
|
134
|
+
- version
|
|
135
|
+
- compat
|
|
136
|
+
- signature
|
|
137
|
+
detail: These four version numbers — BepInEx's own, the game exe's, the CLR's and (from the
|
|
138
|
+
chainloader, below) the detected Unity version — are the whole raw material for a Valheim
|
|
139
|
+
`compat` surface, and all four are readable from the log with no launch beyond the first.
|
|
140
|
+
- id: valheim.bepinex.loader.unity-version-is-the-exe-file-version
|
|
141
|
+
claim: "BepInEx's \"Running under Unity v...\" line does not read a Unity marker file:
|
|
142
|
+
`Preloader.GetUnityVersion()` returns
|
|
143
|
+
`FileVersionInfo.GetVersionInfo(Paths.ExecutablePath).FileVersion`, i.e. the PE FileVersion of
|
|
144
|
+
the game executable itself."
|
|
145
|
+
status: inferred
|
|
146
|
+
source: BepInEx v5-lts `BepInEx.Preloader/Preloader.cs`, `GetUnityVersion()`
|
|
147
|
+
tags:
|
|
148
|
+
- bepinex
|
|
149
|
+
- unity
|
|
150
|
+
- version
|
|
151
|
+
- pe
|
|
152
|
+
- compat
|
|
153
|
+
- detect
|
|
154
|
+
detail: ModWright already has `core/compat/pe.ts` `readPeFileVersion`, so a Valheim surface can
|
|
155
|
+
report the same number BepInEx reports without the game ever having been launched, by reading
|
|
156
|
+
`valheim.exe` directly. Treat it as the Unity player version axis, distinct from Iron Gate's
|
|
157
|
+
own `1.0.12`-style marketing version.
|
|
158
|
+
- id: valheim.bepinex.loader.chainloader-lines
|
|
159
|
+
claim: "The chainloader's own lines are `Detected Unity version: v<version>`, `Chainloader ready`,
|
|
160
|
+
`Chainloader started`, `<N> plugin(s) to load`, one `Loading [<Name> <Version>]` per plugin,
|
|
161
|
+
and finally `Chainloader startup complete`."
|
|
162
|
+
status: inferred
|
|
163
|
+
source: BepInEx v5-lts `BepInEx/Bootstrap/Chainloader.cs` (`Logger.LogMessage` and `Logger.LogInfo`
|
|
164
|
+
calls) with `PluginInfo.ToString()` defined in `BepInEx/Contract/PluginInfo.cs` as
|
|
165
|
+
`$"{Metadata?.Name} {Metadata?.Version}"`
|
|
166
|
+
tags:
|
|
167
|
+
- bepinex
|
|
168
|
+
- log
|
|
169
|
+
- chainloader
|
|
170
|
+
- plugin-loaded
|
|
171
|
+
- signature
|
|
172
|
+
- success
|
|
173
|
+
detail: "`Loading [Jotunn 2.26.0]` is the canonical per-plugin success line, and it carries name and
|
|
174
|
+
version but **not** GUID — so a log-derived inventory is keyed on the human-facing `Name` from
|
|
175
|
+
`[BepInPlugin]`, which is explicitly allowed to change between versions. Absence of
|
|
176
|
+
`Chainloader startup complete` at the end of a run is the signal that something aborted
|
|
177
|
+
mid-load."
|
|
178
|
+
- id: valheim.bepinex.loader.bepinex-cfg-keys
|
|
179
|
+
claim: Disk logging is controlled by `BepInEx/config/BepInEx.cfg` section `[Logging.Disk]` with keys
|
|
180
|
+
`Enabled` (default true), `AppendLog` (default false), `LogLevels` (default Fatal, Error,
|
|
181
|
+
Message, Info, Warning — note Debug is excluded) and `WriteUnityLog` (default false);
|
|
182
|
+
`[Logging]` `UnityLogListening` (default true) and `[Chainloader]` `HideManagerGameObject`
|
|
183
|
+
(default false) are the other two that matter.
|
|
184
|
+
status: inferred
|
|
185
|
+
source: BepInEx v5-lts `BepInEx/Bootstrap/Chainloader.cs`, the `ConfigFile.CoreConfig.Bind(...)`
|
|
186
|
+
declarations at the end of the file
|
|
187
|
+
tags:
|
|
188
|
+
- bepinex
|
|
189
|
+
- config
|
|
190
|
+
- bepinex-cfg
|
|
191
|
+
- logging
|
|
192
|
+
- explain-missing
|
|
193
|
+
detail: "`[Logging.Disk] Enabled = false` is exactly the kind of reason `GameSurface.explainMissing`
|
|
194
|
+
exists for: it turns a missing `LogOutput.log` from \"the loader never ran\" into \"logging is
|
|
195
|
+
switched off\", and those two demand opposite next actions. `WriteUnityLog = false` by default
|
|
196
|
+
also means the game's own Unity exceptions are in `Player.log` and not in `LogOutput.log`
|
|
197
|
+
unless someone turned it on."
|
|
198
|
+
- id: valheim.bepinex.loader.bepinexpack-valheim-is-the-distribution
|
|
199
|
+
claim: "Valheim does not use a stock BepInEx build: the community standard is
|
|
200
|
+
`denikson/BepInExPack_Valheim` on Thunderstore, currently version `5.4.2350`, which ships a
|
|
201
|
+
preconfigured `BepInEx.cfg` with the console enabled and the correct Valheim entry point,
|
|
202
|
+
Linux run scripts, an edited preloader, a forced `isModded` flag and support for semantic
|
|
203
|
+
versioning in plugin versions."
|
|
204
|
+
status: community
|
|
205
|
+
source: https://thunderstore.io/c/valheim/p/denikson/BepInExPack_Valheim/
|
|
206
|
+
tags:
|
|
207
|
+
- bepinex
|
|
208
|
+
- bepinexpack
|
|
209
|
+
- thunderstore
|
|
210
|
+
- version
|
|
211
|
+
- ismodded
|
|
212
|
+
- console
|
|
213
|
+
detail: Two consequences. The pack's version (`5.4.2350`) is not a stock BepInEx version number, so
|
|
214
|
+
a compat rule comparing it against BepInEx's own releases will read as nonsense — it must be
|
|
215
|
+
treated as its own component with its own axis. And the forced `isModded` flag means a BepInEx
|
|
216
|
+
install changes how the game advertises itself on the server list, which is a user-visible
|
|
217
|
+
side effect of merely installing the loader.
|
|
218
|
+
- id: valheim.bepinexpack-valheim-install-shape
|
|
219
|
+
claim: "Manual installation of BepInExPack_Valheim is: extract the archive, then copy the *contents*
|
|
220
|
+
of the inner `BepInExPack_Valheim` folder into the Valheim game directory, after which
|
|
221
|
+
`BepInEx`, `winhttp.dll` and `doorstop_config.ini` sit in the game root."
|
|
222
|
+
status: community
|
|
223
|
+
source: https://thunderstore.io/c/valheim/p/denikson/BepInExPack_Valheim/
|
|
224
|
+
tags:
|
|
225
|
+
- bepinex
|
|
226
|
+
- install
|
|
227
|
+
- doorstop
|
|
228
|
+
- winhttp
|
|
229
|
+
- detect
|
|
230
|
+
detail: "The nested-folder step is the single most common manual-install mistake: copying the
|
|
231
|
+
archive's top folder instead of its contents produces
|
|
232
|
+
`Valheim/BepInExPack_Valheim/BepInEx/...`, where Doorstop never loads and no log is ever
|
|
233
|
+
written."
|
|
234
|
+
- id: valheim.bepinex.loader.console-and-plugins-loaded-indicator
|
|
235
|
+
claim: With the Valheim pack's default config a BepInEx console window opens alongside the game, and
|
|
236
|
+
the in-game confirmation that plugins loaded is a "Plugins Loaded" message at the top left of
|
|
237
|
+
the main menu.
|
|
238
|
+
status: community
|
|
239
|
+
source: https://github.com/Valheim-Modding/Wiki/wiki/Client-Troubleshooting
|
|
240
|
+
tags:
|
|
241
|
+
- bepinex
|
|
242
|
+
- console
|
|
243
|
+
- main-menu
|
|
244
|
+
- plugins-loaded
|
|
245
|
+
- verification
|
|
246
|
+
detail: "This is the cheapest attended verification step for a test run: it needs the main menu
|
|
247
|
+
only, no save, no character."
|