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,130 @@
|
|
|
1
|
+
game: stardewvalley
|
|
2
|
+
topic: wiki.dataformat
|
|
3
|
+
title: The wiki's data-asset pages as a schema source — table shapes, the optional marker, the
|
|
4
|
+
curated page-to-asset mapping
|
|
5
|
+
facts:
|
|
6
|
+
- id: stardewvalley.wiki.dataformat.field-tables-are-the-schema
|
|
7
|
+
claim: "A wiki page for a string-keyed data asset (the 1.6 models: `Data/Objects`, `Data/Buildings`,
|
|
8
|
+
`Data/Crops`, `Data/Locations`, `Data/Shops`, ...) states the asset's fields in `wikitable`s
|
|
9
|
+
whose header row is `field | purpose` (or `field | effect`, `field | description`, `field |
|
|
10
|
+
result`), one table per model section under its own heading, with the field name in the first
|
|
11
|
+
column (often wrapped in `<samp>`, and sometimes two names in one cell separated by `<br />`,
|
|
12
|
+
e.g. `DisplayName` and `Description`) and a one-line purpose in the second. A sub-model's
|
|
13
|
+
fields are in a further `field | ...` table nested inside the parent cell that introduces it."
|
|
14
|
+
status: community
|
|
15
|
+
source: "Rendered HTML of Modding:Object_data (11 tables under Basic info, Appearance, Edibility,
|
|
16
|
+
Geodes & artifact spots, Context tags & exclusions, Advanced and For C# mods — 9 `field |
|
|
17
|
+
purpose`, 1 `field | result`, 1 `method | effect`), Modding:Buildings (22 tables: 20 `field |
|
|
18
|
+
effect`, 1 `property | description`, 1 `type | method | effect`), Modding:Crop_data (2 `field
|
|
19
|
+
| effect` tables under Format), Modding:Location_data (11: 10 `field | effect` plus 1 `name |
|
|
20
|
+
class | description`), Modding:Shops (10: 5 `field | effect`, 2 `value | effect`, 3 id lists),
|
|
21
|
+
read 2026-09-11"
|
|
22
|
+
tags:
|
|
23
|
+
- wiki
|
|
24
|
+
- schema
|
|
25
|
+
- index
|
|
26
|
+
- data
|
|
27
|
+
- table-shape
|
|
28
|
+
detail: "This is what makes a schema index buildable without the game (the first stage of the
|
|
29
|
+
index): the field list is the documentation itself. The tables give names and purposes, not
|
|
30
|
+
machine-readable types, and a page carries other tables too (`method | effect` for C# helpers,
|
|
31
|
+
`value | effect` for enum values, `name | class | description` for vanilla location names),
|
|
32
|
+
which an index must leave out by header rather than take by position. The nested sub-model
|
|
33
|
+
tables matter twice over: a non-greedy `</table>` match stops at the first one, truncating the
|
|
34
|
+
parent table and mixing the child's rows into it, so the parser has to match
|
|
35
|
+
`<table>`/`</table>` by depth. A row whose cells are all `<th>` after the header row is a
|
|
36
|
+
sub-heading spanning the table (`<th colspan=\"2\">Growth</th>` on Crop data), not data."
|
|
37
|
+
- id: stardewvalley.wiki.dataformat.delimited-assets-use-index-tables
|
|
38
|
+
claim: "The assets that are still `/`-delimited strings in 1.6 (`Data/Boots`, `Data/Hats`,
|
|
39
|
+
`Data/Furniture`, `Data/CraftingRecipes`, `Data/Fish`, `Data/Bundles`, `Data/Monsters`,
|
|
40
|
+
`Data/NPCGiftTastes`, `Data/Quests`, `Data/Achievements`) are documented with `index | field |
|
|
41
|
+
...` tables instead (`index | syntax | description` on Bundles): the first column is the
|
|
42
|
+
0-based position in the string, the second the field's name — written as a prose label
|
|
43
|
+
(\"Added Defense\", \"hat earned (index from hats.xnb)\"), not as a C# identifier the way a
|
|
44
|
+
model's field names are."
|
|
45
|
+
status: community
|
|
46
|
+
source: Rendered HTML of Modding:Boots (`index | field | effect`, rows `0 | Name` through `9 |
|
|
47
|
+
Texture`, including `3 | Added Defense` and `5 | Color Index`), Modding:Hats (8 positions),
|
|
48
|
+
Modding:Furniture (12), Modding:Monster_data (`Index | Field | Example Value`, 15 positions
|
|
49
|
+
from `0 | health (hit points)`), Modding:Achievement_data (same header, 5 positions),
|
|
50
|
+
Modding:Bundles (`index | syntax | description`), read 2026-09-11
|
|
51
|
+
tags:
|
|
52
|
+
- wiki
|
|
53
|
+
- schema
|
|
54
|
+
- index
|
|
55
|
+
- data
|
|
56
|
+
- delimited
|
|
57
|
+
- legacy-format
|
|
58
|
+
detail: "For these assets a Content Patcher `Fields` block is keyed by position — \"the field index
|
|
59
|
+
(starting at zero) for a slash-delimited string, or the field name for an object\"
|
|
60
|
+
(ContentPatcher/docs/author-guide/action-editdata.md) — so the index records each field's
|
|
61
|
+
position and an index-backed rule can say a `Fields` key is not a position the format has. An
|
|
62
|
+
`Entries` value for such an asset is a string, never an object. Four of the ten assets are not
|
|
63
|
+
indexed because their pages name no field at all: `Data/Quests` (the `Field` column holds the
|
|
64
|
+
description), `Data/NPCGiftTastes` (`field index | taste | reaction dialogue | reference
|
|
65
|
+
IDs`), `Data/CraftingRecipes` and `Data/CookingRecipes` (one table for both, with two
|
|
66
|
+
`colspan`-merged index columns) and `Data/Fish` (angle-bracketed placeholders under `index |
|
|
67
|
+
syntax | example | content`, and its one `index | field | purpose` table documents
|
|
68
|
+
`Data/AquariumFish`)."
|
|
69
|
+
- id: stardewvalley.wiki.dataformat.optional-prefix
|
|
70
|
+
claim: An optional field's purpose text opens with the literal `(Optional)`, italicised; on a few
|
|
71
|
+
pages the marker trails the field cell itself instead. A field with neither is required (or
|
|
72
|
+
has a game-side default the text states).
|
|
73
|
+
status: community
|
|
74
|
+
source: Modding:Object_data, e.g. `ColorOverlayFromNextIndex | (Optional) When drawn as a colored
|
|
75
|
+
object, ...`, `Edibility | (Optional) A numeric value that determines how much energy ...`,
|
|
76
|
+
`IsDrink | (Optional) Whether to drink the item instead of eating it. Default false.`; the
|
|
77
|
+
field-cell form on Modding:Powers, `<samp>Description</samp> <i>(Optional)</i>` and
|
|
78
|
+
`<samp>CustomFields</samp> <i>(Optional)</i>`; read 2026-09-11
|
|
79
|
+
tags:
|
|
80
|
+
- wiki
|
|
81
|
+
- schema
|
|
82
|
+
- index
|
|
83
|
+
- optional
|
|
84
|
+
detail: "The index keeps this as a boolean per field, set by either form. The marker is always
|
|
85
|
+
inside `<i>` in the rendered HTML, so a parser that tests the cell's text before stripping
|
|
86
|
+
tags finds nothing. It is a documentation convention, not a game-enforced one: the game's JSON
|
|
87
|
+
reader fills a missing field with the model's default whether or not the wiki marks it."
|
|
88
|
+
- id: stardewvalley.wiki.dataformat.page-asset-mapping-is-curated
|
|
89
|
+
claim: "Which asset a wiki page documents cannot be read reliably from the page: the most-mentioned
|
|
90
|
+
`Data/...` name is often another asset the page links to (Modding:Object_data mentions
|
|
91
|
+
`Data/Buffs` six times and `Data/Objects` five; Modding:Weather_data mentions `Data/Festivals`
|
|
92
|
+
once and `Data/Weather` never), so ModWright carries a curated page-to-asset list and checks
|
|
93
|
+
at build time that the asset name appears on the page at all. That check has to normalize
|
|
94
|
+
separators: the pages not yet rewritten for 1.6 still say `Content\\Data\\Achievements.xnb`
|
|
95
|
+
rather than `Data/Achievements`."
|
|
96
|
+
status: inferred
|
|
97
|
+
source: "A count of `Data/...` mentions over the 61 Modding: pages saved on 2026-09-11 (the scratch
|
|
98
|
+
analysis behind src/surfaces/stardewvalley/index/wiki.ts); the backslash spelling on
|
|
99
|
+
Modding:Bundles, Modding:Monster_data, Modding:Achievement_data and Modding:Special_orders"
|
|
100
|
+
tags:
|
|
101
|
+
- wiki
|
|
102
|
+
- schema
|
|
103
|
+
- index
|
|
104
|
+
- mapping
|
|
105
|
+
- gotcha
|
|
106
|
+
detail: The list lives in `WIKI_PAGES` (src/surfaces/stardewvalley/index/wiki.ts), and
|
|
107
|
+
`check_toolchain action=install data=stardewvalley.wiki` fetches exactly those pages. All 43
|
|
108
|
+
curated mappings were confirmed against the saved pages, and all 43 parse to a non-empty field
|
|
109
|
+
list (1137 fields). A page whose asset name does not appear on it is indexed but flagged in
|
|
110
|
+
the build's sources, so a renamed asset shows up as a warning rather than a silent mismatch.
|
|
111
|
+
- id: stardewvalley.wiki.dataformat.pages-carry-their-own-date-and-no-game-version
|
|
112
|
+
claim: Every wiki page ends with a `This page was last edited on <date>` footer and none states
|
|
113
|
+
which game version its tables describe; the index records the per-page date and no
|
|
114
|
+
`gameVersion`, so `lookup`'s staleness check reports the axis as unknown rather than a false
|
|
115
|
+
match.
|
|
116
|
+
status: community
|
|
117
|
+
source: The `footer-info-lastmod` element on every page fetched 2026-09-11 (e.g. Modding:Object_data
|
|
118
|
+
"last edited on 8 August 2026", Modding:Crop_data "13 May 2025", Modding:Location_data "14
|
|
119
|
+
June 2025", Modding:Buildings "25 March 2026")
|
|
120
|
+
tags:
|
|
121
|
+
- wiki
|
|
122
|
+
- schema
|
|
123
|
+
- index
|
|
124
|
+
- versioning
|
|
125
|
+
- staleness
|
|
126
|
+
detail: "The pages describe 1.6's models (fact
|
|
127
|
+
stardewvalley.game.versions.1-6-moved-data-to-string-keyed-models) and the game has not been
|
|
128
|
+
patched since 1.6.15, so the risk today is a page lagging 1.6, not a version mismatch. The
|
|
129
|
+
wiki's own text is CC BY-NC-SA and is not committed: `check_toolchain action=install
|
|
130
|
+
data=stardewvalley.wiki` saves it locally and remembers the folder, which the index reads."
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
game: subnautica2
|
|
2
|
+
topic: game.build
|
|
3
|
+
title: Subnautica 2 build, install layout and runtime facts read off a launch-day install
|
|
4
|
+
facts:
|
|
5
|
+
- id: subnautica2.game.engine-5-6-1
|
|
6
|
+
claim: "Subnautica 2 ships on Unreal Engine 5.6.1. The game's own log prints `LogInit: Engine
|
|
7
|
+
Version: 5.6.1-113109+++Project+SN2-Release-Hotfix-Live` and `Compatible Engine Version:`
|
|
8
|
+
identically, so the build is not a licensee fork with a divergent compatible version."
|
|
9
|
+
status: community
|
|
10
|
+
verified_on: 0.10.0 (CL 113109)
|
|
11
|
+
source: "local artifacts 2026-09-11: %LOCALAPPDATA%\\Subnautica2\\Saved\\Logs\\Subnautica2.log lines
|
|
12
|
+
~470-500 (LogInit block). Corroborated by the same file's `LogMercuna: Display: Unreal Engine
|
|
13
|
+
version: 5.6.1`."
|
|
14
|
+
tags:
|
|
15
|
+
- engine
|
|
16
|
+
- ue5
|
|
17
|
+
- version
|
|
18
|
+
- loginit
|
|
19
|
+
- unreal
|
|
20
|
+
detail: "The full LogInit block also gives `Build: Subnautica2-CL-113109`, `Net CL: 113109`, `Build
|
|
21
|
+
Configuration: Shipping`, `Branch Name: ++Project+SN2-Release-Hotfix-Live` and
|
|
22
|
+
`ExecutableName: Subnautica2-Win64-Shipping.exe`. Status is `community`, not `verified`: the
|
|
23
|
+
log is a real artifact of a real run, but nobody re-observed this in the engine for ModWright,
|
|
24
|
+
and the game is not installed here to re-check. The engine version is the single most
|
|
25
|
+
load-bearing number for any UE modding tool (UE4SS builds, .usmap generation and IoStore
|
|
26
|
+
container versions are all keyed to it), so re-read it after every game patch rather than
|
|
27
|
+
trusting this line."
|
|
28
|
+
- id: subnautica2.game.two-version-axes
|
|
29
|
+
claim: "Subnautica 2 numbers one build three ways: the marketing/project version (`LogNetVersion:
|
|
30
|
+
Set ProjectVersion to 0.10.0`), the changelist (`LogUWE: Changelist: 113109`, also `Build:
|
|
31
|
+
Subnautica2-CL-113109`), and the engine version (5.6.1). They are different axes and must
|
|
32
|
+
never be compared against each other."
|
|
33
|
+
status: community
|
|
34
|
+
verified_on: 0.10.0 (CL 113109)
|
|
35
|
+
source: "local artifacts 2026-09-11: Subnautica2.log, `LogNetVersion: Set ProjectVersion to
|
|
36
|
+
0.10.0.`, `LogUWE: Changelist: 113109`, `LogInit: Engine Version: 5.6.1-113109+...`"
|
|
37
|
+
tags:
|
|
38
|
+
- version
|
|
39
|
+
- changelist
|
|
40
|
+
- projectversion
|
|
41
|
+
- axes
|
|
42
|
+
- compat
|
|
43
|
+
detail: Under ModWright's version convention, a Subnautica 2 fact's `verified_on` belongs on the
|
|
44
|
+
game's own axis — the ProjectVersion (`0.10.0`), with the changelist in parentheses where it
|
|
45
|
+
is known, because the CL is what the EOS product version string and the log both actually
|
|
46
|
+
print. The engine version is a third axis and belongs in a compat component, not in
|
|
47
|
+
`verified_on`. Note the changelist is also embedded in the engine version string itself
|
|
48
|
+
(`5.6.1-113109`), which is how one line can be misread as pinning both.
|
|
49
|
+
- id: subnautica2.game.release-cadence-and-current-build
|
|
50
|
+
claim: Subnautica 2 entered Early Access on 2026-05-14 at changelist 113109 and has shipped seven
|
|
51
|
+
releases since; the newest as of 2026-09-11 is "Early Access Buddy System Hotfix 1", v127034,
|
|
52
|
+
2026-09-01. Any fact captured on the launch build is roughly 14,000 changelists stale.
|
|
53
|
+
status: community
|
|
54
|
+
verified_on: 0.10.0 (CL 113109)
|
|
55
|
+
source: "https://wiki.subnautica.com/sn2/Update_History (Update History table), read 2026-09-11. The
|
|
56
|
+
launch row reads \"Early Access Release — May 14th, 2026 (v113109)\", which matches this
|
|
57
|
+
machine's own launch-day log exactly (local artifacts 2026-09-11, `LogUWE: Changelist:
|
|
58
|
+
113109`) — so the wiki's \"v\" numbers are the game's changelist."
|
|
59
|
+
tags:
|
|
60
|
+
- version
|
|
61
|
+
- release
|
|
62
|
+
- cadence
|
|
63
|
+
- patch
|
|
64
|
+
- changelist
|
|
65
|
+
- staleness
|
|
66
|
+
detail: "The full list, newest first: Buddy System Hotfix 1 (2026-09-01, v127034); EA 1.2 \"Buddy
|
|
67
|
+
System\" (2026-08-19, v123362); Hotfix 4 (2026-07-14, v121347); EA 1.1 \"Adaptive Measures\"
|
|
68
|
+
(2026-07-08, v119503); Hotfix 3 (2026-06-01, v115506); Hotfix 2 (2026-05-22, v114707); Hotfix
|
|
69
|
+
1 (2026-05-19, v113933); EA Release (2026-05-14, v113109). Unknown Worlds' own post for EA 1.1
|
|
70
|
+
is dated 07.08.26 and names it \"Early Access 1.1 / Adaptive Measures\"
|
|
71
|
+
(https://unknownworlds.com/en/news/subnautica-2-adaptive-measures-update, read 2026-09-11), so
|
|
72
|
+
the marketing \"EA 1.x\" names and the changelist numbers are two more axes on the same build.
|
|
73
|
+
Cadence is roughly one feature update every six weeks with hotfixes between — fast enough that
|
|
74
|
+
a version-locked native loader would break repeatedly."
|
|
75
|
+
- id: subnautica2.game.install-layout
|
|
76
|
+
claim: "The Steam install nests the Unreal project one level below the install root: the root is
|
|
77
|
+
`steamapps/common/Subnautica2/`, the project folder is `<root>/Subnautica2/`, and the shipping
|
|
78
|
+
exe is `<root>/Subnautica2/Binaries/Win64/Subnautica2-Win64-Shipping.exe`. A surface's
|
|
79
|
+
`detect` must not assume the exe sits at the root."
|
|
80
|
+
status: community
|
|
81
|
+
verified_on: 0.10.0 (CL 113109)
|
|
82
|
+
source: "local artifacts 2026-09-11: Subnautica2.log `LogInit: Base Directory: C:/Program Files
|
|
83
|
+
(x86)/Steam/steamapps/common/Subnautica2/Subnautica2/Binaries/Win64/` and `LogInit:
|
|
84
|
+
ExecutableName: Subnautica2-Win64-Shipping.exe`"
|
|
85
|
+
tags:
|
|
86
|
+
- install
|
|
87
|
+
- layout
|
|
88
|
+
- steam
|
|
89
|
+
- paths
|
|
90
|
+
- detect
|
|
91
|
+
- binaries
|
|
92
|
+
detail: "Other absolute paths in the same log confirm the rest of the tree:
|
|
93
|
+
`<root>/Engine/Binaries/Win64/EOSSDK-Win64-Shipping.dll` (so the engine folder is a sibling of
|
|
94
|
+
the project folder, the standard packaged-UE shape) and
|
|
95
|
+
`<root>/Subnautica2/Plugins/DLSS/Binaries/ThirdParty/Win64/nvngx_dlss.dll`. The Steam AppId is
|
|
96
|
+
1962700 (`LogOnline: STEAM: [AppId: 1962700] Client API initialized 1`). The folder name under
|
|
97
|
+
`common/` is `Subnautica2` with no space, which is what `findInSteam` must be given."
|
|
98
|
+
- id: subnautica2.game.steam-folder-outlives-uninstall
|
|
99
|
+
claim: "`steamapps/common/Subnautica2/` survives uninstalling the game — Steam Cloud re-creates it
|
|
100
|
+
to hold `Subnautica2/Saved/SaveGames/steam_autocloud.vdf`. A `detect` that only tests for the
|
|
101
|
+
folder (which is all `core/steam.ts`'s `findInSteam` does) reports a phantom install."
|
|
102
|
+
status: community
|
|
103
|
+
verified_on: 0.10.0 (CL 113109)
|
|
104
|
+
source: "local artifacts 2026-09-11: this machine has
|
|
105
|
+
steamapps/common/Subnautica2/Subnautica2/Saved/SaveGames/steam_autocloud.vdf (51 bytes, the
|
|
106
|
+
only file in the tree) and no steamapps/appmanifest_1962700.acf; libraryfolders.vdf lists six
|
|
107
|
+
appids and 1962700 is not among them."
|
|
108
|
+
tags:
|
|
109
|
+
- detect
|
|
110
|
+
- steam
|
|
111
|
+
- false-positive
|
|
112
|
+
- install
|
|
113
|
+
- uninstall
|
|
114
|
+
- gotcha
|
|
115
|
+
detail: The Subnautica 2 surface's `detect` must confirm
|
|
116
|
+
`<root>/Subnautica2/Binaries/Win64/Subnautica2-Win64-Shipping.exe` exists, not merely the
|
|
117
|
+
folder, or every machine that ever uninstalled the game reports an install with zero mod roots
|
|
118
|
+
and no readable version. The same residue exists here for the first Subnautica
|
|
119
|
+
(`common/Subnautica2/..`'s sibling `common/Subnautica/SNAppData/SavedGames`, 46 files,
|
|
120
|
+
likewise with no appmanifest), so this is Steam's general behaviour and not specific to this
|
|
121
|
+
title.
|
|
122
|
+
- id: subnautica2.game.iostore-only-paks
|
|
123
|
+
claim: "Subnautica 2 ships its content as an IoStore container, not a legacy pak payload:
|
|
124
|
+
`Content/Paks/` holds `global.utoc` plus the `Subnautica2-Windows.pak`/`.utoc`/`.ucas`
|
|
125
|
+
triplet, and the game mounts the .utoc alongside the .pak at startup."
|
|
126
|
+
status: community
|
|
127
|
+
verified_on: 0.10.0 (CL 113109)
|
|
128
|
+
source: 'local artifacts 2026-09-11: Subnautica2.log first 15 lines — `LogIoDispatcher: Display:
|
|
129
|
+
Reading toc: ../../../Subnautica2/Content/Paks/global.utoc`, then `LogPakFile: Display:
|
|
130
|
+
Mounted IoStore container "../../../Subnautica2/Content/Paks/Subnautica2-Windows.utoc"`'
|
|
131
|
+
tags:
|
|
132
|
+
- iostore
|
|
133
|
+
- utoc
|
|
134
|
+
- ucas
|
|
135
|
+
- pak
|
|
136
|
+
- paks
|
|
137
|
+
- packaging
|
|
138
|
+
- mount
|
|
139
|
+
detail: "The container carries `EntryCount=39605` and `NumPackages=28882` (`LogFilePackageStore:
|
|
140
|
+
Mounting container: Id=994e00ccf1aeb8bf, Order=4, NumPackages=28882`). Practical consequence
|
|
141
|
+
for modding: a mod authored as a legacy (non-IoStore) .pak may not be loadable by this build
|
|
142
|
+
without conversion, which is the problem `retoc` exists to solve. `global.utoc` mounts first
|
|
143
|
+
at `Order=0` with `EntryCount=1`; the content container is `Order=4`."
|
|
144
|
+
- id: subnautica2.game.paks-unsigned
|
|
145
|
+
claim: Subnautica 2's shipped containers are unsigned — both mounted TOCs report
|
|
146
|
+
`SignatureHash=0000000000000000000000000000000000000000` — so there is no pak signature check
|
|
147
|
+
standing between a mod pak and the game.
|
|
148
|
+
status: community
|
|
149
|
+
verified_on: 0.10.0 (CL 113109)
|
|
150
|
+
source: "local artifacts 2026-09-11: Subnautica2.log, the two `LogIoDispatcher: Display: Toc loaded
|
|
151
|
+
:` lines for global.utoc and Subnautica2-Windows.utoc"
|
|
152
|
+
tags:
|
|
153
|
+
- signing
|
|
154
|
+
- signature
|
|
155
|
+
- encryption
|
|
156
|
+
- iostore
|
|
157
|
+
- security
|
|
158
|
+
- paks
|
|
159
|
+
detail: An all-zero SignatureHash is what UE prints when a container carries no signature, and both
|
|
160
|
+
of this game's containers do. Nothing in the log indicates an AES content key either (no
|
|
161
|
+
`LogPakFile` encryption-key lines, and the containers mounted with no key supplied). Absence
|
|
162
|
+
of a log line is weaker evidence than a positive statement, so treat "unencrypted" as probable
|
|
163
|
+
rather than settled; "unsigned" is directly stated by the hash. Signed paks would have been
|
|
164
|
+
the single most likely hard blocker to the whole pak-mod route, so this is the good outcome.
|
|
165
|
+
- id: subnautica2.game.pak-mount-point
|
|
166
|
+
claim: The shipped pak mounts at `../../../`, i.e. the engine-root-relative mount point. A mod pak
|
|
167
|
+
built for this game must use the same mount point or its files resolve to the wrong virtual
|
|
168
|
+
paths and are silently ignored.
|
|
169
|
+
status: community
|
|
170
|
+
verified_on: 0.10.0 (CL 113109)
|
|
171
|
+
source: "local artifacts 2026-09-11: Subnautica2.log — `LogPakFile: Display: Mounted Pak file
|
|
172
|
+
'../../../Subnautica2/Content/Paks/Subnautica2-Windows.pak', mount point: '../../../'`"
|
|
173
|
+
tags:
|
|
174
|
+
- mount-point
|
|
175
|
+
- pak
|
|
176
|
+
- packaging
|
|
177
|
+
- validator
|
|
178
|
+
- silent-failure
|
|
179
|
+
detail: "A wrong mount point is the classic silent failure of UE pak modding: the pak mounts, the
|
|
180
|
+
log says nothing is wrong, and none of the mod's assets are ever found. This is checkable
|
|
181
|
+
statically from a built pak's header, which makes it a good candidate for a ModWright
|
|
182
|
+
validator that needs no game."
|
|
183
|
+
- id: subnautica2.game.ue-log-location-and-rotation
|
|
184
|
+
claim: The game writes `%LOCALAPPDATA%\Subnautica2\Saved\Logs\Subnautica2.log` for the current run
|
|
185
|
+
and rotates the previous run to `Subnautica2-backup-YYYY.MM.DD-HH.MM.SS.log` — one new file
|
|
186
|
+
per launch, so each run's log gets a fresh creation time.
|
|
187
|
+
status: community
|
|
188
|
+
verified_on: 0.10.0 (CL 113109)
|
|
189
|
+
source: "local artifacts 2026-09-11: directory listing of %LOCALAPPDATA%\\Subnautica2\\Saved\\Logs —
|
|
190
|
+
Subnautica2.log plus four
|
|
191
|
+
Subnautica2-backup-2026.05.14-{17.45.04,18.20.47,21.11.02,22.48.53}.log"
|
|
192
|
+
tags:
|
|
193
|
+
- logs
|
|
194
|
+
- rotation
|
|
195
|
+
- saved
|
|
196
|
+
- localappdata
|
|
197
|
+
- triage
|
|
198
|
+
detail: "This is the standard UE `Saved/Logs` layout and it is friendlier to ModWright's incremental
|
|
199
|
+
triage than Cyberpunk's is: the rotation means the offsetKeys/creation-time mechanism in
|
|
200
|
+
core/logs works as designed (contrast redscript_rCURRENT.log, which is truncated in place and
|
|
201
|
+
defeated it — see src/surfaces/cyberpunk2077/paths.ts). Note the backup file's own name is
|
|
202
|
+
stamped in UTC while the header inside is local — see
|
|
203
|
+
subnautica2.game.log-timestamps-are-utc."
|
|
204
|
+
- id: subnautica2.game.log-timestamps-are-utc
|
|
205
|
+
claim: Inside the Unreal log, the bracketed per-line timestamps are UTC while the "Log file
|
|
206
|
+
open"/"Log file closed" header and footer are local time. A run scoped by comparing a local
|
|
207
|
+
wall-clock time against the bracket timestamps will be off by the UTC offset.
|
|
208
|
+
status: community
|
|
209
|
+
verified_on: 0.10.0 (CL 113109)
|
|
210
|
+
source: "local artifacts 2026-09-11: Subnautica2.log opens `Log file open, 05/14/26 18:50:12` and
|
|
211
|
+
its first bracketed line is `[2026.05.15-01.50.13:049][ 0]` — the same instant, seven hours
|
|
212
|
+
apart (America/Los_Angeles, UTC-7 in May). The close is symmetric: `Log file closed, 05/14/26
|
|
213
|
+
20:06:22` against `[2026.05.15-03.06.22:272]`."
|
|
214
|
+
tags:
|
|
215
|
+
- logs
|
|
216
|
+
- timestamps
|
|
217
|
+
- utc
|
|
218
|
+
- timezone
|
|
219
|
+
- runscope
|
|
220
|
+
- gotcha
|
|
221
|
+
detail: Directly relevant to core/logs' `RunScope.since`. The bracket format is
|
|
222
|
+
`[YYYY.MM.DD-HH.MM.SS:mmm][frame]` where `frame` is a three-character right-aligned frame
|
|
223
|
+
counter that wraps, not a monotonic counter.
|
|
224
|
+
- id: subnautica2.game.log-head-has-no-timestamps
|
|
225
|
+
claim: The first ~520 lines of the Unreal log carry no timestamp or frame prefix at all — logging
|
|
226
|
+
starts before the timestamped logger does. That untimed head is exactly where the pak mounts
|
|
227
|
+
and the plugin list live.
|
|
228
|
+
status: community
|
|
229
|
+
verified_on: 0.10.0 (CL 113109)
|
|
230
|
+
source: "local artifacts 2026-09-11: Subnautica2.log — the first bracketed line is line 521
|
|
231
|
+
(`[2026.05.15-01.50.13:049][ 0]LogConfig: Applying CVar settings...`); every LogPakFile,
|
|
232
|
+
LogIoDispatcher and LogPluginManager line precedes it unprefixed."
|
|
233
|
+
tags:
|
|
234
|
+
- logs
|
|
235
|
+
- format
|
|
236
|
+
- parsing
|
|
237
|
+
- gotcha
|
|
238
|
+
- triage
|
|
239
|
+
- pakfile
|
|
240
|
+
- pluginmanager
|
|
241
|
+
detail: "A signature matcher anchored on a timestamp prefix would miss the entire pak-mount and
|
|
242
|
+
plugin-mount block, which is the part a modding tool most wants. ModWright's existing `PRE`
|
|
243
|
+
approach in src/surfaces/cyberpunk2077/logs.ts (zero-or-more optional bracketed fields,
|
|
244
|
+
anchored to line start) already handles this shape correctly. It also means `RunScope.since`
|
|
245
|
+
filtering cannot be applied to those lines — the `SourceStatus.timestamps: false` path in
|
|
246
|
+
core/logs/types.ts exists for precisely this."
|
|
247
|
+
- id: subnautica2.game.saves-are-gvas-with-uwe-wrapper
|
|
248
|
+
claim: Save files are Unreal `GVAS` SaveGame archives. The main `savegame_0.sav` is wrapped in a
|
|
249
|
+
Unknown Worlds container whose first four bytes are `GSWU`, with the standard GVAS header
|
|
250
|
+
starting at offset 0x10; auxiliary saves such as `FrontendSavedState.sav` are plain GVAS from
|
|
251
|
+
byte 0.
|
|
252
|
+
status: community
|
|
253
|
+
verified_on: 0.10.0 (CL 113109)
|
|
254
|
+
source: 'local artifacts 2026-09-11: hexdump of
|
|
255
|
+
%LOCALAPPDATA%\Subnautica2\Saved\SaveGames\savegame_0.sav (`4753 5755` = "GSWU", then `4756
|
|
256
|
+
4153` = "GVAS" at 0x10) and of FrontendSavedState.sav ("GVAS" at 0x00)'
|
|
257
|
+
tags:
|
|
258
|
+
- saves
|
|
259
|
+
- gvas
|
|
260
|
+
- savegame
|
|
261
|
+
- format
|
|
262
|
+
- uwe
|
|
263
|
+
detail: The GVAS header embeds the engine version and branch that wrote it — `05 00 06 00 01 00`
|
|
264
|
+
(5.6.1) followed by a length-prefixed `++Project+SN2-Release-Hotfix-Live` — so a save file
|
|
265
|
+
alone pins the build it came from, which is useful for compat reporting when the game itself
|
|
266
|
+
is not installed. Saves live beside the logs in `Saved/SaveGames/`, with `savegame_0.sav`
|
|
267
|
+
current and `savegame_0_0.bak` .. `savegame_0_9.bak` as a ten-deep rolling backup (the game
|
|
268
|
+
autosaves on a ~10-minute cadence; `bAutoSaveEnabled=True` in
|
|
269
|
+
Saved/Config/Windows/UWESaveSystemUserSetting.ini).
|
|
270
|
+
- id: subnautica2.game.eos-anticheat-present-but-not-engaged
|
|
271
|
+
claim: 'The build ships Epic Online Services anti-cheat, but it is not engaged on a normal launch:
|
|
272
|
+
the log reads "Anti-cheat client not available. Verify that the game was started using the
|
|
273
|
+
anti-cheat bootstrapper if you intend to use it." A plain Steam launch therefore runs with no
|
|
274
|
+
anti-cheat client.'
|
|
275
|
+
status: community
|
|
276
|
+
verified_on: 0.10.0 (CL 113109)
|
|
277
|
+
source: "local artifacts 2026-09-11: Subnautica2.log — `LogEOSSDK: LogEOSAntiCheat:
|
|
278
|
+
[AntiCheatClient] Anti-cheat client not available. Verify that the game was started using the
|
|
279
|
+
anti-cheat bootstrapper if you intend to use it.`"
|
|
280
|
+
tags:
|
|
281
|
+
- anticheat
|
|
282
|
+
- eos
|
|
283
|
+
- epic
|
|
284
|
+
- multiplayer
|
|
285
|
+
- risk
|
|
286
|
+
detail: "This matters because anti-cheat is the usual hard stop for DLL-injection loaders such as
|
|
287
|
+
UE4SS. On this launch-day single-player session it was inert. It does NOT establish that co-op
|
|
288
|
+
sessions are equally permissive: the bootstrapper exists in the build, so a multiplayer path
|
|
289
|
+
may launch through it. That is the single most important thing to re-check before recommending
|
|
290
|
+
any injected loader."
|
|
291
|
+
- id: subnautica2.game.no-mod-loader-plugin-shipped
|
|
292
|
+
claim: Nothing in the shipped plugin set is a mod loader or a scripting host for user content. The
|
|
293
|
+
game mounts ~160 project plugins, all first-party (`UWE*`) or licensed middleware, and none of
|
|
294
|
+
them reads a user mod directory.
|
|
295
|
+
status: community
|
|
296
|
+
verified_on: 0.10.0 (CL 113109)
|
|
297
|
+
source: "local artifacts 2026-09-11: the complete `LogPluginManager: Mounting Project plugin <name>`
|
|
298
|
+
list in Subnautica2.log (158 project plugins) plus the Engine plugin list above it"
|
|
299
|
+
tags:
|
|
300
|
+
- plugins
|
|
301
|
+
- modding
|
|
302
|
+
- loader
|
|
303
|
+
- ugc
|
|
304
|
+
- absent
|
|
305
|
+
detail: "The licensed middleware visible in that list is worth knowing for anyone editing assets:
|
|
306
|
+
FMODStudio (audio — so audio is NOT Unreal-native and Wwise/UE audio knowledge does not
|
|
307
|
+
transfer), Mercuna 3.5.2 (3D navigation), Prefabricator, NiagaraUIRenderer,
|
|
308
|
+
DLSS/StreamlineCore, and Sentry (crash reporting, which writes
|
|
309
|
+
%LOCALAPPDATA%\\Subnautica2\\.sentry-native\\). One plugin is named `UWEUserGeneratedContent`,
|
|
310
|
+
which is suggestive but proves nothing about mod support on its own — see
|
|
311
|
+
subnautica2.modding.ugc-plugin-is-not-evidence-of-mod-support."
|
|
312
|
+
- id: subnautica2.game.imgui-debug-layer-present
|
|
313
|
+
claim: The build ships an ImGui debug layer (`ImGui` and `UWEImGui` plugins) and writes
|
|
314
|
+
`%LOCALAPPDATA%\Subnautica2\Saved\ImGui\Game.ini` with a window position and size, so the
|
|
315
|
+
debug UI is at least initialized in the shipping build.
|
|
316
|
+
status: community
|
|
317
|
+
verified_on: 0.10.0 (CL 113109)
|
|
318
|
+
source: "local artifacts 2026-09-11: `LogPluginManager: Mounting Project plugin ImGui` and `...
|
|
319
|
+
UWEImGui` in Subnautica2.log; the file Saved/ImGui/Game.ini containing
|
|
320
|
+
`[Window][Debug##Default] Pos=60,60 Size=400,400`"
|
|
321
|
+
tags:
|
|
322
|
+
- imgui
|
|
323
|
+
- debug
|
|
324
|
+
- console
|
|
325
|
+
- developer
|
|
326
|
+
- bridge
|
|
327
|
+
detail: A `UWEConsole` plugin is mounted too. Neither proves a console is reachable by a player in a
|
|
328
|
+
Shipping build — UE strips much of that — but an initialized ImGui layer in Shipping is
|
|
329
|
+
unusual enough to be worth probing, because a reachable console or debug layer would be the
|
|
330
|
+
cheapest possible in-game verification channel for a ModWright bridge, far cheaper than
|
|
331
|
+
injecting a loader.
|