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,202 @@
|
|
|
1
|
+
game: stardewvalley
|
|
2
|
+
topic: game.versions
|
|
3
|
+
title: Game versions, the version axes, and the 1.6 data-format break
|
|
4
|
+
facts:
|
|
5
|
+
- id: stardewvalley.game.versions.current-is-1-6-15
|
|
6
|
+
claim: The current Stardew Valley release is 1.6.15, published 20 December 2024 — twenty-one months
|
|
7
|
+
before this research. The preceding chain is 1.6.14 (12 November 2024), 1.6.13 (8 November
|
|
8
|
+
2024), 1.6.12 (7 November 2024), 1.6.11, 1.6.10, 1.6.9, and back to 1.6 in March 2024.
|
|
9
|
+
status: community
|
|
10
|
+
source: 'https://stardewvalleywiki.com/Version_History (read 2026-09-11): "Stardew Valley 1.6.15 was
|
|
11
|
+
released on 20 December 2024."'
|
|
12
|
+
verified_on: 1.6.15
|
|
13
|
+
tags:
|
|
14
|
+
- version
|
|
15
|
+
- cadence
|
|
16
|
+
- stability
|
|
17
|
+
- compat
|
|
18
|
+
detail: This is the most consequential fact about the surface. Every other game ModWright supports
|
|
19
|
+
is mid-motion; this one has been stationary for nearly two years, so a compat matrix has one
|
|
20
|
+
live row, the compatibility list is mature rather than churning, and work built now will not
|
|
21
|
+
rot before the game is installed.
|
|
22
|
+
- id: stardewvalley.game.versions.one-axis-no-marketing-split
|
|
23
|
+
claim: Stardew Valley has one public version axis. `1.6.15` is what the patch notes, the wiki and
|
|
24
|
+
the community all use, so it is the axis `verified_on` is written on, and
|
|
25
|
+
`InstalledComponent.marketingVersion` should stay undefined.
|
|
26
|
+
status: inferred
|
|
27
|
+
source: https://stardewvalleywiki.com/Version_History
|
|
28
|
+
tags:
|
|
29
|
+
- version
|
|
30
|
+
- axis
|
|
31
|
+
- verified-on
|
|
32
|
+
- compat
|
|
33
|
+
- marketingversion
|
|
34
|
+
detail: There is a second number in the install — the executable's assembly version, which SMAPI
|
|
35
|
+
reads only to decide whether a folder is a pre-1.6 install — but its relationship to `1.6.15`
|
|
36
|
+
was not established without the game, so a surface must not present it as the game version.
|
|
37
|
+
- id: stardewvalley.game.versions.smapi-floor-is-1-6-14
|
|
38
|
+
claim: Current SMAPI requires game version 1.6.14 or later and declares no maximum, so the installed
|
|
39
|
+
1.6.15 sits one patch above the floor with unbounded headroom.
|
|
40
|
+
status: inferred
|
|
41
|
+
source: 'SMAPI develop, src/SMAPI/Constants.cs: `MinimumGameVersion = new GameVersion("1.6.14")` and
|
|
42
|
+
`MaximumGameVersion = null`'
|
|
43
|
+
tags:
|
|
44
|
+
- version
|
|
45
|
+
- smapi
|
|
46
|
+
- compat
|
|
47
|
+
- rule
|
|
48
|
+
- floor
|
|
49
|
+
related:
|
|
50
|
+
- id: stardewvalley.smapi.loader.version-and-game-floor
|
|
51
|
+
detail: the same two constants, stated there from SMAPI's side
|
|
52
|
+
- id: stardewvalley.game.versions.1-7-is-announced-undated
|
|
53
|
+
claim: Stardew Valley 1.7 has been announced — new marriage candidates Clint and Sandy, an overhaul
|
|
54
|
+
of children, a possible farm map editor — with no release date and no window, and the modding
|
|
55
|
+
wiki also lists an upcoming 1.6.16.
|
|
56
|
+
status: community
|
|
57
|
+
source: https://gameinformer.com/2026/02/26/you-can-marry-clint-and-sandy-in-the-17-update-for-stardew-valley-concernedape-announces
|
|
58
|
+
and https://www.pcgamer.com/games/life-sim/stardew-valley-1-7-guide/ (both read 2026-09-11);
|
|
59
|
+
the two upcoming migration guides are listed on https://stardewvalleywiki.com/Modding:Index as
|
|
60
|
+
"Stardew Valley 1.6.16 — upcoming" and "Stardew Valley 1.7 — upcoming"
|
|
61
|
+
tags:
|
|
62
|
+
- version
|
|
63
|
+
- roadmap
|
|
64
|
+
- compat
|
|
65
|
+
- advisory
|
|
66
|
+
detail: The wiki reserving a 1.6.16 migration page means the community expects one more point
|
|
67
|
+
release before 1.7, and those pages are where the next round of breaking changes will be
|
|
68
|
+
written down before they ship — a cheap thing for a compat refresh to watch. ConcernedApe has
|
|
69
|
+
also said he is taking more of a creative-director role on Stardew so he can focus on his next
|
|
70
|
+
title, which argues against a near-term date.
|
|
71
|
+
- id: stardewvalley.game.versions.1-6-moved-data-to-string-keyed-models
|
|
72
|
+
claim: Stardew Valley 1.6 replaced the old delimited-string data assets with string-keyed model
|
|
73
|
+
lookups. `Data/Objects`, for example, "consists of a string -> model lookup, where the key is
|
|
74
|
+
the unqualified item ID" and the value is an object with named fields.
|
|
75
|
+
status: community
|
|
76
|
+
source: https://stardewvalleywiki.com/Modding:Object_data (read 2026-09-11), "Data format"
|
|
77
|
+
tags:
|
|
78
|
+
- data
|
|
79
|
+
- "1.6"
|
|
80
|
+
- format
|
|
81
|
+
- index
|
|
82
|
+
- contentpatcher
|
|
83
|
+
detail: 'This is why a Content Patcher `EditData` on `Data/Objects` in 1.6 sets named fields
|
|
84
|
+
(`"Fields": {"MossSoup": {"Price": 80}}`) rather than editing a slash-delimited string, and
|
|
85
|
+
why a field-name validator is meaningful at all. Content Patcher ships
|
|
86
|
+
`Migration_2_0.ForObjectInformation.cs` and a dozen siblings to rewrite pre-1.6 packs into the
|
|
87
|
+
new shape at load time.'
|
|
88
|
+
- id: stardewvalley.game.versions.unique-string-ids-convention
|
|
89
|
+
claim: 1.6 introduced unique string IDs throughout the game, and the documented convention is to
|
|
90
|
+
namespace every new content ID with the mod's own unique ID —
|
|
91
|
+
`Example.PufferchickMod_PufferchickPlushy`, or `{{ModId}}_PufferchickPlushy` in a Content
|
|
92
|
+
Patcher pack — using only alphanumerics, underscore and dot.
|
|
93
|
+
status: community
|
|
94
|
+
source: "https://stardewvalleywiki.com/Modding:Migrate_to_Stardew_Valley_1.6 (read 2026-09-11):
|
|
95
|
+
\"Use namespaced IDs prefixed with your mod's unique ID for all new content ... This
|
|
96
|
+
eliminates ID conflicts between mods, and makes it easy (for both troubleshooters and mod
|
|
97
|
+
code) to identify which mod added a particular content.\" and \"Only use alphanumeric (a-z,
|
|
98
|
+
A-Z, 0-9), underscore (_), and dot (.) characters in string IDs. This is important because
|
|
99
|
+
they're often used in places where some characters have special meaning (like file names or
|
|
100
|
+
game state queries).\""
|
|
101
|
+
tags:
|
|
102
|
+
- "1.6"
|
|
103
|
+
- ids
|
|
104
|
+
- convention
|
|
105
|
+
- validator
|
|
106
|
+
- contentpatcher
|
|
107
|
+
- conflict
|
|
108
|
+
detail: "Directly checkable from a content pack alone, because the pack's own `manifest.json` is
|
|
109
|
+
right there: every key a patch adds to a `Data/*` asset should start with the pack's UniqueID
|
|
110
|
+
or with `{{ModId}}_`. A `warn`-severity rule, since a pack may legitimately edit a vanilla
|
|
111
|
+
key."
|
|
112
|
+
- id: stardewvalley.game.versions.qualified-item-ids
|
|
113
|
+
claim: Items carry a type prefix in their qualified ID — objects are `(O)`, corresponding to
|
|
114
|
+
`ItemRegistry.type_object` in C# — so `(O)MossSoup` is the qualified form of the
|
|
115
|
+
`Data/Objects` key `MossSoup`.
|
|
116
|
+
status: community
|
|
117
|
+
source: 'https://stardewvalleywiki.com/Modding:Object_data (read 2026-09-11): "They have item type
|
|
118
|
+
(O) (or ItemRegistry.type_object in C# code), their data in Data/Objects, their icon sprites
|
|
119
|
+
in Maps/springobjects or TileSheets/Objects_2 by default, and their code in
|
|
120
|
+
StardewValley.Object."'
|
|
121
|
+
tags:
|
|
122
|
+
- "1.6"
|
|
123
|
+
- ids
|
|
124
|
+
- items
|
|
125
|
+
- index
|
|
126
|
+
- keying
|
|
127
|
+
detail: An index for this game should key on the qualified form with the unqualified id and display
|
|
128
|
+
name as secondary keys, because the qualified form is what 1.6 content and item queries use.
|
|
129
|
+
The console command `player_add` accepts it directly (`player_add (O)246`).
|
|
130
|
+
- id: stardewvalley.game.versions.smapi-4-0-changed-the-content-api
|
|
131
|
+
claim: SMAPI 4.0 (March 2024) replaced `IAssetLoader`/`IAssetEditor` with the `AssetRequested`
|
|
132
|
+
event, split `helper.Content` into `helper.ModContent` and `helper.GameContent`, made asset
|
|
133
|
+
names locale-sensitive, and added load and edit priorities. It shipped alongside Stardew
|
|
134
|
+
Valley 1.6.
|
|
135
|
+
status: community
|
|
136
|
+
source: 'https://stardewvalleywiki.com/Modding:Migrate_to_SMAPI_4.0 (read 2026-09-11): "The
|
|
137
|
+
IAssetLoader and IAssetEditor interfaces no longer exist. Both have been replaced by the
|
|
138
|
+
AssetRequested event" and "Asset names are no longer locale-agnostic. For example,
|
|
139
|
+
Data/Bundles and Data/Bundles.fr-FR are not equivalent."'
|
|
140
|
+
tags:
|
|
141
|
+
- smapi
|
|
142
|
+
- api
|
|
143
|
+
- "4.0"
|
|
144
|
+
- migration
|
|
145
|
+
- locale
|
|
146
|
+
- csharp
|
|
147
|
+
detail: "Relevant to a C# mod validator and to any advice about content interception: a mod still
|
|
148
|
+
using `helper.Content` or the old interfaces will not compile against current SMAPI. The
|
|
149
|
+
locale change is the one that bites content packs too, via `TargetLocale`."
|
|
150
|
+
- id: stardewvalley.game.versions.content-patcher-is-most-of-the-ecosystem
|
|
151
|
+
claim: Content Patcher is "the backbone for 41.1% of all mods" according to SMAPI's own 4.0
|
|
152
|
+
migration page — a period statement predating the March 2024 release of SMAPI 4.0, not a
|
|
153
|
+
current figure.
|
|
154
|
+
status: community
|
|
155
|
+
source: "https://stardewvalleywiki.com/Modding:Migrate_to_SMAPI_4.0 (read 2026-09-11): \"it's the
|
|
156
|
+
basis for Content Patcher which is now the backbone for 41.1% of all mods\""
|
|
157
|
+
tags:
|
|
158
|
+
- contentpatcher
|
|
159
|
+
- ecosystem
|
|
160
|
+
- prioritisation
|
|
161
|
+
- undated
|
|
162
|
+
detail: "The figure is undated on the page and should be treated as an order-of-magnitude statement,
|
|
163
|
+
not a metric. Its use here is only to justify prioritising the content-pack validator family
|
|
164
|
+
over the C# one: a large fraction of this ecosystem's mods are JSON, which is exactly what a
|
|
165
|
+
pre-build checker can check."
|
|
166
|
+
- id: stardewvalley.game.versions.no-eula-text-was-located
|
|
167
|
+
claim: No Stardew Valley EULA or terms-of-service text was located in any source read for this
|
|
168
|
+
research, so nothing is claimed in either direction about decompilation, asset extraction or
|
|
169
|
+
redistribution.
|
|
170
|
+
status: inferred
|
|
171
|
+
source: ModWright research
|
|
172
|
+
tags:
|
|
173
|
+
- legal
|
|
174
|
+
- licence
|
|
175
|
+
- unsourced
|
|
176
|
+
- gap
|
|
177
|
+
detail: This is an absence of evidence, recorded as such and not as permission. The one adjacent
|
|
178
|
+
operational norm that *is* sourced is that the ecosystem's own unpacking tool (StardewXnbHack)
|
|
179
|
+
runs against the user's own install and writes into it, never redistributing game content —
|
|
180
|
+
the same design the Valheim publicizer uses, and the same inference is available here.
|
|
181
|
+
- id: stardewvalley.game.versions.data-asset-doc-index
|
|
182
|
+
claim: The wiki documents roughly forty data assets individually — Items (with per-type pages for
|
|
183
|
+
big craftables, boots, furniture, hats, mannequins, objects, pants, shirts, tools, trinkets,
|
|
184
|
+
wallpaper and flooring, weapons), Crops, Fruit trees, Giant crops, Item queries, Machines,
|
|
185
|
+
Recipes, Wild trees, Maps, Farm data, Festivals, Fish, Location contexts, Locations, Movie
|
|
186
|
+
theater, Museum data, Passive festivals, Weather, Buffs, Buildings, Bundles, Farmer sprite,
|
|
187
|
+
Fences, Floors and paths, Fish ponds, Garbage cans, Jukebox tracks, Lost items shop, Mail,
|
|
188
|
+
Minecarts, Monster eradication goals, Phone calls, Shops, Special items and powers, Special
|
|
189
|
+
orders, Tailoring, Animals, Monsters, Pets, and the NPC pages for dialogue, events, gift
|
|
190
|
+
tastes, quests and schedules.
|
|
191
|
+
status: community
|
|
192
|
+
source: https://stardewvalleywiki.com/Modding:Index (read 2026-09-11), the "Specific topics" list
|
|
193
|
+
tags:
|
|
194
|
+
- index
|
|
195
|
+
- data
|
|
196
|
+
- documentation
|
|
197
|
+
- wiki
|
|
198
|
+
- schema
|
|
199
|
+
detail: "This list is the table of contents for a schema-level vanilla index that needs no game:
|
|
200
|
+
each page states its asset's field names, types and defaults. What it does not give is the
|
|
201
|
+
*values* — whether `MossSoup` exists, what `Universal_Love` currently contains — which need a
|
|
202
|
+
StardewXnbHack run against a real install."
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
game: stardewvalley
|
|
2
|
+
topic: install.layout
|
|
3
|
+
title: Where Stardew Valley installs, how SMAPI sits beside it, and where the data folder lives
|
|
4
|
+
facts:
|
|
5
|
+
- id: stardewvalley.install.layout.steam-app-id
|
|
6
|
+
claim: Stardew Valley is Steam app `413150`, and its `steamapps/common` folder name is `Stardew
|
|
7
|
+
Valley` — with a space.
|
|
8
|
+
status: inferred
|
|
9
|
+
source: 'SMAPI develop, src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs: `private const
|
|
10
|
+
string SteamAppId = "413150";` and the path literal `steamapps\common\Stardew Valley`
|
|
11
|
+
(https://github.com/Pathoschild/SMAPI/blob/develop/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs)'
|
|
12
|
+
tags:
|
|
13
|
+
- steam
|
|
14
|
+
- appid
|
|
15
|
+
- detect
|
|
16
|
+
- install
|
|
17
|
+
- folder-name
|
|
18
|
+
detail: 'The space matters: `findInSteam(["Stardew Valley"])` is correct and
|
|
19
|
+
`findInSteam(["StardewValley"])` finds nothing. The no-space spelling `StardewValley.exe` does
|
|
20
|
+
exist, but only as the pre-1.5.5 Linux/macOS executable name, not as a folder name.'
|
|
21
|
+
- id: stardewvalley.install.layout.default-paths
|
|
22
|
+
claim: "SMAPI's own scanner probes, in order on Windows: registry
|
|
23
|
+
`HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App 413150` value
|
|
24
|
+
`InstallLocation`; registry `HKLM\\SOFTWARE\\WOW6432Node\\GOG.com\\Games\\1453375253` value
|
|
25
|
+
`PATH`; `HKCU\\Software\\Valve\\Steam` value `SteamPath` plus `steamapps\\common\\Stardew
|
|
26
|
+
Valley` and every library in that Steam's `steamapps\\libraryfolders.vdf`; then under each of
|
|
27
|
+
`C:\\Program Files` and `C:\\Program Files (x86)` the four paths `GalaxyClient\\Games\\Stardew
|
|
28
|
+
Valley`, `GOG Galaxy\\Games\\Stardew Valley`, `GOG Games\\Stardew Valley` and
|
|
29
|
+
`Steam\\steamapps\\common\\Stardew Valley`; then `<drive>:\\Program
|
|
30
|
+
Files\\ModifiableWindowsApps\\Stardew Valley` for drive letters C through H."
|
|
31
|
+
status: inferred
|
|
32
|
+
source: SMAPI develop, src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs,
|
|
33
|
+
`GetDefaultInstallPaths()` and the `registryKeys` dictionary
|
|
34
|
+
tags:
|
|
35
|
+
- detect
|
|
36
|
+
- install
|
|
37
|
+
- registry
|
|
38
|
+
- steam
|
|
39
|
+
- gog
|
|
40
|
+
- xbox
|
|
41
|
+
- gamepass
|
|
42
|
+
detail: On Linux it is `$HOME/GOG Games/Stardew Valley/game`, then
|
|
43
|
+
`$HOME/.steam/steam/steamapps/common/Stardew Valley` falling back to
|
|
44
|
+
`$HOME/.local/share/Steam/steamapps/common/Stardew Valley`, then the Flatpak path
|
|
45
|
+
`$HOME/.var/app/com.valvesoftware.Steam/data/Steam/steamapps/common/Stardew Valley`. The same
|
|
46
|
+
branch then yields the two macOS paths, `/Applications/Stardew Valley.app/Contents/MacOS` and
|
|
47
|
+
`$HOME/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS`. A
|
|
48
|
+
ModWright `detect` that mirrors this list is transcription, not design.
|
|
49
|
+
- id: stardewvalley.install.layout.targets-file-override
|
|
50
|
+
claim: A `stardewvalley.targets` file in the user's home directory (`%USERPROFILE%` on Windows,
|
|
51
|
+
`$HOME` otherwise) whose `<GamePath>` property names a folder is a first-party install
|
|
52
|
+
override that both SMAPI's scanner and the NuGet build package honour.
|
|
53
|
+
status: inferred
|
|
54
|
+
source: 'SMAPI develop, src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs,
|
|
55
|
+
`GetCustomInstallPaths()`; documented for authors in docs/technical/mod-package.md ("Create a
|
|
56
|
+
`stardewvalley.targets` file with this content:
|
|
57
|
+
`<Project><PropertyGroup><GamePath>PATH_HERE</GamePath>...`")'
|
|
58
|
+
tags:
|
|
59
|
+
- detect
|
|
60
|
+
- override
|
|
61
|
+
- csproj
|
|
62
|
+
- developer
|
|
63
|
+
- install
|
|
64
|
+
detail: On a developer machine this is high-confidence and costs one file read, so it is worth
|
|
65
|
+
probing before Steam. No such file exists on the machine this research was done on.
|
|
66
|
+
- id: stardewvalley.install.layout.game-folder-heuristic
|
|
67
|
+
claim: '"Is this folder a game folder" has five distinct answers, not two. SMAPI decides: `Stardew
|
|
68
|
+
Valley.dll` present -> Valid; else no `Stardew Valley.exe` and no `StardewValley.exe` ->
|
|
69
|
+
NoGameFound; else exe assembly version below 1.6 -> LegacyVersion; else no
|
|
70
|
+
`MonoGame.Framework.dll` -> LegacyCompatibilityBranch; else InvalidUnknown.'
|
|
71
|
+
status: inferred
|
|
72
|
+
source: SMAPI develop, src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
|
|
73
|
+
`GetGameFolderType(DirectoryInfo)`, with the enum documented in
|
|
74
|
+
src/SMAPI.Toolkit/Framework/GameScanning/GameFolderType.cs
|
|
75
|
+
tags:
|
|
76
|
+
- detect
|
|
77
|
+
- validity
|
|
78
|
+
- phantom-install
|
|
79
|
+
- legacy
|
|
80
|
+
detail: "`LegacyVersion` is documented as \"contains Stardew Valley 1.5.6 or earlier, which isn't
|
|
81
|
+
compatible with current versions of SMAPI\" and `LegacyCompatibilityBranch` as \"the game's
|
|
82
|
+
legacy compatibility branch, which backports newer changes to the LegacyVersion format\".
|
|
83
|
+
Reporting these separately is much more useful than \"not found\", and it avoids the
|
|
84
|
+
Subnautica 2 phantom-install failure where a folder exists but holds nothing."
|
|
85
|
+
- id: stardewvalley.install.layout.executables
|
|
86
|
+
claim: The game ships `Stardew Valley.exe` on Windows and a `StardewValley` shell script on
|
|
87
|
+
Linux/macOS; SMAPI adds `StardewModdingAPI.exe` (Windows) or a `StardewModdingAPI` binary
|
|
88
|
+
(Unix) beside it, plus a `StardewModdingAPI.deps.json` copied from `Stardew Valley.deps.json`.
|
|
89
|
+
status: community
|
|
90
|
+
source: "SMAPI installer README
|
|
91
|
+
(https://github.com/Pathoschild/SMAPI/blob/develop/src/SMAPI.Installer/assets/README.txt):
|
|
92
|
+
\"The `StardewModdingAPI.exe` file should be right next to the game's executable\" and step 3,
|
|
93
|
+
\"Copy `Stardew Valley.deps.json` in the game folder, and rename the copy to
|
|
94
|
+
`StardewModdingAPI.deps.json`\""
|
|
95
|
+
tags:
|
|
96
|
+
- smapi
|
|
97
|
+
- executable
|
|
98
|
+
- install
|
|
99
|
+
- detect
|
|
100
|
+
- process-names
|
|
101
|
+
detail: "Three process names matter for a deploy's game-exit wait: `Stardew Valley`,
|
|
102
|
+
`StardewModdingAPI`, and `StardewValley` (the Unix launcher after renaming)."
|
|
103
|
+
- id: stardewvalley.install.layout.unix-rename
|
|
104
|
+
claim: "On Linux and macOS the SMAPI installer renames the launcher rather than adding a second one:
|
|
105
|
+
`StardewValley` becomes `StardewValley-original` and `StardewModdingAPI` becomes
|
|
106
|
+
`StardewValley`, so launching the game normally launches SMAPI."
|
|
107
|
+
status: community
|
|
108
|
+
source: SMAPI installer README, manual-install step 4; the same three paths are named in
|
|
109
|
+
src/SMAPI.Installer/Framework/InstallerPaths.cs as `VanillaLaunchScriptPath`,
|
|
110
|
+
`BackupLaunchScriptPath` and `UnixSmapiExecutablePath`
|
|
111
|
+
tags:
|
|
112
|
+
- smapi
|
|
113
|
+
- install
|
|
114
|
+
- unix
|
|
115
|
+
- detect
|
|
116
|
+
- launch
|
|
117
|
+
detail: 'Consequence for `detect`: on Unix, "is SMAPI what will launch" is readable from disk (does
|
|
118
|
+
`StardewValley-original` exist), and on Windows it is not — see the Steam launch-options
|
|
119
|
+
fact.'
|
|
120
|
+
- id: stardewvalley.install.layout.steam-launch-options-are-not-on-disk
|
|
121
|
+
claim: On Windows, Steam runs SMAPI only if the player pasted a launch-options string of the form
|
|
122
|
+
`"<path>\StardewModdingAPI.exe" %command%` into Steam's per-game properties. That string lives
|
|
123
|
+
in Steam's own configuration, not in the game folder, so whether pressing Play will run SMAPI
|
|
124
|
+
is not determinable from the filesystem.
|
|
125
|
+
status: community
|
|
126
|
+
source: 'https://stardewvalleywiki.com/Modding:Installing_SMAPI_on_Windows (read 2026-09-11):
|
|
127
|
+
"Default for most users is `\"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Stardew
|
|
128
|
+
Valley\\StardewModdingAPI.exe\" %command%` / The quotes - and %command% - are both necessary,
|
|
129
|
+
so include them!"'
|
|
130
|
+
tags:
|
|
131
|
+
- steam
|
|
132
|
+
- launch
|
|
133
|
+
- detect
|
|
134
|
+
- undeterminable
|
|
135
|
+
- guidance
|
|
136
|
+
detail: This is the single most common "my mods do nothing" cause on Windows and it leaves no trace
|
|
137
|
+
on disk. A surface must report it as undeterminable (architecture rule 2) rather than assert
|
|
138
|
+
either way. GOG Galaxy uses a hand-written `start.bat` in the game folder instead, which *is*
|
|
139
|
+
detectable.
|
|
140
|
+
- id: stardewvalley.install.layout.xbox-path-conflict
|
|
141
|
+
claim: "Two different Xbox/Game Pass install paths are documented and they were not reconciled:
|
|
142
|
+
SMAPI's scanner probes `<drive>:\\Program Files\\ModifiableWindowsApps\\Stardew Valley`, while
|
|
143
|
+
the wiki gives `C:\\XboxGames\\Stardew Valley` and instructs players to install SMAPI into
|
|
144
|
+
that folder's `Content` subfolder."
|
|
145
|
+
status: community
|
|
146
|
+
source: "SMAPI develop GameScanner.cs (in-source comment: \"The Xbox app saves the install path to
|
|
147
|
+
the registry, but we can't use it here since it saves the internal readonly path (like
|
|
148
|
+
C:\\Program Files\\WindowsApps\\Mutable\\<package ID>) instead of the mods-enabled path\");
|
|
149
|
+
versus https://stardewvalleywiki.com/Modding:Player_Guide/Getting_Started (\"Xbox App:
|
|
150
|
+
C:\\XboxGames\\Stardew Valley\") and
|
|
151
|
+
https://stardewvalleywiki.com/Modding:Installing_SMAPI_on_Windows (\"Open the Stardew Valley >
|
|
152
|
+
Content folder\")"
|
|
153
|
+
tags:
|
|
154
|
+
- xbox
|
|
155
|
+
- gamepass
|
|
156
|
+
- detect
|
|
157
|
+
- conflict
|
|
158
|
+
- unresolved
|
|
159
|
+
detail: Plausibly both are true of the same install reached by different paths, but that was not
|
|
160
|
+
established. Offer both candidates and report which exists; never hard-code one. The Xbox
|
|
161
|
+
install also requires renaming `Stardew Valley.exe` and copying `StardewModdingAPI.exe` over
|
|
162
|
+
it, which must be redone after every game update.
|
|
163
|
+
- id: stardewvalley.install.layout.mods-folder
|
|
164
|
+
claim: Mods live in `Mods/` inside the game folder, one subfolder per mod, and SMAPI searches
|
|
165
|
+
recursively — grouping subfolders are supported, so `Mods/Fruit
|
|
166
|
+
mods/PineapplesEverywhere/manifest.json` is a valid mod.
|
|
167
|
+
status: community
|
|
168
|
+
source: 'https://stardewvalleywiki.com/Modding:Player_Guide/Getting_Started (read 2026-09-11): "Make
|
|
169
|
+
sure each mod has its own subfolder, without trailing numbers" and "If you have a lot of mods,
|
|
170
|
+
you can optionally organize them into subfolders. SMAPI will automatically search inside each
|
|
171
|
+
folder until it finds one with files."; path from src/SMAPI/Constants.cs `DefaultModsPath =
|
|
172
|
+
Path.Combine(Constants.GamePath, "Mods")`'
|
|
173
|
+
tags:
|
|
174
|
+
- mods
|
|
175
|
+
- modroots
|
|
176
|
+
- layout
|
|
177
|
+
- nesting
|
|
178
|
+
detail: A `list_mods` implementation must walk to arbitrary depth looking for `manifest.json`, not
|
|
179
|
+
just enumerate immediate subdirectories. The wiki also warns about the
|
|
180
|
+
`PineapplesEverywhere-1234567890` wrapper folder that mod sites produce, which is a real and
|
|
181
|
+
common failure.
|
|
182
|
+
- id: stardewvalley.install.layout.dot-prefix-disables-a-mod
|
|
183
|
+
claim: Prefixing a mod folder's name with a dot disables it. SMAPI classifies it as
|
|
184
|
+
`ModType.Ignored` with the reason "ignored folder because its name starts with a dot." and
|
|
185
|
+
logs " Skipped {path} (folder name starts with a dot)."
|
|
186
|
+
status: inferred
|
|
187
|
+
source: SMAPI develop, src/SMAPI.Toolkit/Framework/ModScanning/ModScanner.cs (`if
|
|
188
|
+
(folder.Name.StartsWith("."))`) and src/SMAPI/Framework/SCore.cs; documented for players at
|
|
189
|
+
https://stardewvalleywiki.com/Modding:Player_Guide/Getting_Started
|
|
190
|
+
tags:
|
|
191
|
+
- mods
|
|
192
|
+
- disable
|
|
193
|
+
- scanning
|
|
194
|
+
- modroots
|
|
195
|
+
detail: "The wiki adds the Windows workaround: \"If Windows doesn't let you do that, put a dot at
|
|
196
|
+
the end too and it'll let you (like `.disabled mods.`).\" A validator should report a
|
|
197
|
+
dot-prefixed folder as `info`, not an error — it is usually deliberate."
|
|
198
|
+
- id: stardewvalley.install.layout.smapi-internal-folder
|
|
199
|
+
claim: SMAPI's own files live in `smapi-internal/` in the game folder
|
|
200
|
+
(`Constants.InternalFilesPath`), holding `config.json`, `config.user.json`, `metadata.json`,
|
|
201
|
+
`blacklist.json`, `blacklist-updated.json`, `0Harmony.dll`, `SMAPI.Toolkit.CoreInterfaces.dll`
|
|
202
|
+
and the `StardewModdingAPI.crash.marker` / `.update.marker` one-shot files.
|
|
203
|
+
status: inferred
|
|
204
|
+
source: SMAPI develop, src/SMAPI/Constants.cs (`InternalFilesPath`, `ApiConfigPath`,
|
|
205
|
+
`ApiUserConfigPath`, `ApiMetadataPath`, `ApiBlacklistPath`, `ApiBlacklistFetchedPath`,
|
|
206
|
+
`FatalCrashMarker`, `UpdateMarker`) and src/SMAPI.ModBuildConfig/build/smapi.targets (the
|
|
207
|
+
`HintPath`s into `$(GamePath)\smapi-internal\`)
|
|
208
|
+
tags:
|
|
209
|
+
- smapi-internal
|
|
210
|
+
- config
|
|
211
|
+
- modroots
|
|
212
|
+
- compat
|
|
213
|
+
- never-deploy
|
|
214
|
+
detail: This is a mod root only in the sense that a mod wrongly shipped into it is visible; it must
|
|
215
|
+
never be a deploy target and prune must never touch it. `metadata.json` is a direct compat
|
|
216
|
+
input — it is SMAPI's internal known-broken list, on disk, readable with no network call.
|
|
217
|
+
- id: stardewvalley.install.layout.config-filename-conflict
|
|
218
|
+
claim: SMAPI's configuration file is `smapi-internal/config.json` according to the current source,
|
|
219
|
+
but two wiki pages and Content Patcher's troubleshooting guide still call it
|
|
220
|
+
`smapi-internal/StardewModdingAPI.config.json`. A detector must probe both names.
|
|
221
|
+
status: inferred
|
|
222
|
+
source: SMAPI develop names `config.json` in three places — src/SMAPI/Constants.cs `ApiConfigPath`,
|
|
223
|
+
src/SMAPI.Installer/Framework/InstallerPaths.cs `ApiConfigPath`, and three log lines in
|
|
224
|
+
src/SMAPI/Framework/SCore.cs that say "the 'smapi-internal/config.json' file"; versus
|
|
225
|
+
https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Logging and
|
|
226
|
+
https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/troubleshooting.md,
|
|
227
|
+
both of which say `smapi-internal/StardewModdingAPI.config.json`
|
|
228
|
+
tags:
|
|
229
|
+
- config
|
|
230
|
+
- conflict
|
|
231
|
+
- unresolved
|
|
232
|
+
- detect
|
|
233
|
+
- explain-missing
|
|
234
|
+
detail: Most likely a rename the wiki has not caught up with, but that was not established without
|
|
235
|
+
an install. Both `explainMissing`'s verbose-logging answer and the load-order override file
|
|
236
|
+
(`ModsToLoadEarly`) depend on finding this file, so getting it wrong silently disables both.
|
|
237
|
+
- id: stardewvalley.install.layout.data-folder
|
|
238
|
+
claim: The per-user data folder is `%APPDATA%\StardewValley`, with saves in `Saves/` and SMAPI logs
|
|
239
|
+
in `ErrorLogs/`. It is created the first time the game runs, which is why SMAPI's install
|
|
240
|
+
guide's first step is to run the game once without SMAPI.
|
|
241
|
+
status: inferred
|
|
242
|
+
source: 'SMAPI develop, src/SMAPI/Constants.cs: `DataPath =
|
|
243
|
+
Path.Combine(Environment.GetFolderPath(SpecialFolder.ApplicationData), "StardewValley")`,
|
|
244
|
+
`SavesPath = Path.Combine(DataPath, "Saves")`, `LogDir = Path.Combine(DataPath, "ErrorLogs")`;
|
|
245
|
+
the first-run instruction is from
|
|
246
|
+
https://stardewvalleywiki.com/Modding:Installing_SMAPI_on_Windows ("Run the game without SMAPI
|
|
247
|
+
at least once (so it can do first-time setup).")'
|
|
248
|
+
tags:
|
|
249
|
+
- appdata
|
|
250
|
+
- logs
|
|
251
|
+
- saves
|
|
252
|
+
- explain-missing
|
|
253
|
+
detail: "Two `explainMissing` answers fall out of this: no `%APPDATA%\\StardewValley` at all means
|
|
254
|
+
the game has never been run; the folder present with no `SMAPI-*.txt` inside `ErrorLogs` means
|
|
255
|
+
SMAPI is installed but was not launched. Those demand opposite next actions. SMAPI also
|
|
256
|
+
exposes `show_data_files` and `show_game_files` console commands that open these two folders."
|
|
257
|
+
- id: stardewvalley.install.layout.mods-path-argument
|
|
258
|
+
claim: "`StardewModdingAPI.exe --mods-path <path>` (or the `SMAPI_MODS_PATH` environment variable)
|
|
259
|
+
relocates the mod folder only; the loader stays in the game folder. A relative path is
|
|
260
|
+
combined with the game path."
|
|
261
|
+
status: inferred
|
|
262
|
+
source: 'SMAPI develop, src/SMAPI/Program.cs `Start(string[] args)`: `int pathIndex =
|
|
263
|
+
Array.LastIndexOf(args, "--mods-path") + 1;` and `modsPath =
|
|
264
|
+
!string.IsNullOrWhiteSpace(rawModsPath) ? Path.Combine(Constants.GamePath, rawModsPath) :
|
|
265
|
+
Constants.DefaultModsPath;`'
|
|
266
|
+
tags:
|
|
267
|
+
- launch
|
|
268
|
+
- mods
|
|
269
|
+
- deploy
|
|
270
|
+
- profiles
|
|
271
|
+
- developer
|
|
272
|
+
detail: "This is the Stardew analogue of an r2modman profile, and it is much weaker: it does not
|
|
273
|
+
relocate the loader and it is chosen at launch, so ModWright can offer a declared
|
|
274
|
+
`--mods-path` folder as a second deploy target but must never assert which mod folder is live.
|
|
275
|
+
The other documented arguments are `--developer-mode`, `--developer-mode-off` and
|
|
276
|
+
`--no-terminal`, with `SMAPI_DEVELOPER_MODE` and `SMAPI_NO_TERMINAL` as environment
|
|
277
|
+
equivalents."
|