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,216 @@
|
|
|
1
|
+
game: valheim
|
|
2
|
+
topic: install.layout
|
|
3
|
+
title: Valheim install detection, folder layout, and the dedicated server as a second install kind
|
|
4
|
+
facts:
|
|
5
|
+
- id: valheim.install.layout.steam-app-ids
|
|
6
|
+
claim: Valheim is Steam app `892970` and the Valheim dedicated server is a separate Steam app,
|
|
7
|
+
`896660`; Thunderstore's ecosystem schema lists both under the same `valheim` community, plus
|
|
8
|
+
an Xbox Game Pass distribution identified as `CoffeeStainStudios.Valheim`.
|
|
9
|
+
status: community
|
|
10
|
+
source: https://github.com/thunderstore-io/ecosystem-schema/blob/main/games/data/generated/valheim.yml,
|
|
11
|
+
the `distributions` list
|
|
12
|
+
tags:
|
|
13
|
+
- install
|
|
14
|
+
- steam
|
|
15
|
+
- appid
|
|
16
|
+
- dedicated-server
|
|
17
|
+
- xbox
|
|
18
|
+
- detect
|
|
19
|
+
detail: A ModWright `detect` must therefore return up to three install kinds, not one. The client
|
|
20
|
+
and the server are different apps with different folder names, different data folders and
|
|
21
|
+
different executables, but the same BepInEx install procedure.
|
|
22
|
+
- id: valheim.install.layout.steam-folder-names
|
|
23
|
+
claim: The Steam `steamapps/common` folder is `Valheim` for the client and `Valheim dedicated
|
|
24
|
+
server` for the server (note the lowercase words); the corresponding Unity data folders are
|
|
25
|
+
`valheim_Data` and `valheim_server_Data`.
|
|
26
|
+
status: community
|
|
27
|
+
source: https://github.com/thunderstore-io/ecosystem-schema/blob/main/games/data/generated/valheim.yml,
|
|
28
|
+
`steamFolderName` and `dataFolderName` on both r2modman entries
|
|
29
|
+
tags:
|
|
30
|
+
- install
|
|
31
|
+
- steam
|
|
32
|
+
- folder-name
|
|
33
|
+
- detect
|
|
34
|
+
- dedicated-server
|
|
35
|
+
detail: '`findInSteam(["Valheim", "Valheim dedicated server"])` covers both in one call, and the two
|
|
36
|
+
are distinguished after the fact by which data folder exists.'
|
|
37
|
+
- id: valheim.install.layout.executable-names
|
|
38
|
+
claim: The client executables are `valheim.exe` (Windows) and `valheim.x86_64` (Linux); the
|
|
39
|
+
dedicated server's are `valheim_server.exe` and `valheim_server.x86_64`.
|
|
40
|
+
status: community
|
|
41
|
+
source: https://github.com/thunderstore-io/ecosystem-schema/blob/main/games/data/generated/valheim.yml,
|
|
42
|
+
the `exeNames` lists on both r2modman entries
|
|
43
|
+
tags:
|
|
44
|
+
- install
|
|
45
|
+
- executable
|
|
46
|
+
- processname
|
|
47
|
+
- dedicated-server
|
|
48
|
+
detail: "`GameSurface.processNames` should carry both Windows names, because ModWright's game-exit
|
|
49
|
+
wait in `core/deploy` must recognise a running dedicated server as much as a running client."
|
|
50
|
+
- id: valheim.install.layout.msbuild-install-resolution-order
|
|
51
|
+
claim: "The Valheim-Modding org's shared `Paths.props` resolves the install in this order on
|
|
52
|
+
Windows: the `VALHEIM_INSTALL` property/environment variable if it points at an existing
|
|
53
|
+
directory, then the registry value `InstallLocation` under
|
|
54
|
+
`HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App 892970`, then
|
|
55
|
+
`<SteamPath>\\steamapps\\common\\Valheim` where `SteamPath` comes from
|
|
56
|
+
`HKCU\\SOFTWARE\\Valve\\Steam`, then `C:\\Program Files\\Steam\\steamapps\\common\\Valheim`,
|
|
57
|
+
then `C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim`."
|
|
58
|
+
status: community
|
|
59
|
+
source: https://github.com/Valheim-Modding/CommonPackages/blob/master/Paths.props, the Windows_NT
|
|
60
|
+
`<When>` block
|
|
61
|
+
tags:
|
|
62
|
+
- install
|
|
63
|
+
- detect
|
|
64
|
+
- registry
|
|
65
|
+
- msbuild
|
|
66
|
+
- valheim-install
|
|
67
|
+
- steam
|
|
68
|
+
detail: Two things ModWright can reuse directly. The `Steam App 892970` uninstall key is a per-app
|
|
69
|
+
install path Steam itself writes, so it finds an install in a library folder that
|
|
70
|
+
`libraryfolders.vdf` parsing might miss. And `VALHEIM_INSTALL` is the variable every Valheim
|
|
71
|
+
plugin project already sets, so a Valheim surface should honour it alongside its own
|
|
72
|
+
`MODWRIGHT_VALHEIM_ROOT`.
|
|
73
|
+
- id: valheim.install.layout.msbuild-bepinex-path-default
|
|
74
|
+
claim: "`Paths.props` derives `BEPINEX_PATH` as `$(VALHEIM_INSTALL)\\BepInEx` whenever
|
|
75
|
+
`BEPINEX_PATH` is unset, i.e. the convention is that BepInEx is installed into the game
|
|
76
|
+
directory itself rather than beside it."
|
|
77
|
+
status: community
|
|
78
|
+
source: https://github.com/Valheim-Modding/CommonPackages/blob/master/Paths.props, the final
|
|
79
|
+
`<PropertyGroup Condition="$(BEPINEX_PATH)==''...">`
|
|
80
|
+
tags:
|
|
81
|
+
- install
|
|
82
|
+
- bepinex
|
|
83
|
+
- path
|
|
84
|
+
- msbuild
|
|
85
|
+
- id: valheim.install.layout.linux-mac-install-paths
|
|
86
|
+
claim: On non-Windows, `Paths.props` defaults `VALHEIM_INSTALL` to
|
|
87
|
+
`$(HOME)/.steam/steam/steamapps/common/Valheim` and then `$(HOME)/Library/Application
|
|
88
|
+
Support/Steam/steamapps/common/Valheim/Contents/MacOS`.
|
|
89
|
+
status: community
|
|
90
|
+
source: https://github.com/Valheim-Modding/CommonPackages/blob/master/Paths.props, the Unix/OSX
|
|
91
|
+
`<When>` block
|
|
92
|
+
tags:
|
|
93
|
+
- install
|
|
94
|
+
- linux
|
|
95
|
+
- macos
|
|
96
|
+
- path
|
|
97
|
+
detail: The macOS path ends in `Contents/MacOS`, a bundle-internal directory — a surface that
|
|
98
|
+
appends `valheim_Data` to a bare app-bundle path on macOS will miss.
|
|
99
|
+
- id: valheim.install.layout.assemblies-under-managed
|
|
100
|
+
claim: Plugin projects reference the game's managed assemblies from `valheim_Data\Managed\` —
|
|
101
|
+
`UnityEngine.dll` directly, and `assembly_valheim` from a
|
|
102
|
+
`valheim_Data\Managed\publicized_assemblies\` subfolder produced locally by a publicizer,
|
|
103
|
+
never shipped.
|
|
104
|
+
status: community
|
|
105
|
+
source: https://github.com/Valheim-Modding/Wiki/wiki/Best-Practices, section "Referencing Assemblies"
|
|
106
|
+
tags:
|
|
107
|
+
- assemblies
|
|
108
|
+
- managed
|
|
109
|
+
- publicized
|
|
110
|
+
- reference
|
|
111
|
+
- valheim-data
|
|
112
|
+
detail: The page's stated rule is "You only need to publicize the assemblies you are referencing
|
|
113
|
+
directly in your code", and that Unity assemblies do not normally need publicizing — only the
|
|
114
|
+
Valheim ones.
|
|
115
|
+
- id: valheim.install.layout.managed-assembly-set
|
|
116
|
+
claim: The `assembly_*.dll` set a plugin project can reference is exactly eight files —
|
|
117
|
+
`assembly_valheim`, `assembly_utils`, `assembly_guiutils`, `assembly_postprocessing`,
|
|
118
|
+
`assembly_googleanalytics`, `assembly_sunshafts`, `assembly_lux` and
|
|
119
|
+
`assembly_simplemeshcombine` — plus two non-`assembly_` game DLLs Jötunn also publicizes,
|
|
120
|
+
`SoftReferenceableAssets.dll` and `gui_framework.dll`.
|
|
121
|
+
status: community
|
|
122
|
+
source: https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnLib/BuildProps/JotunnLibRefsCorlib.props
|
|
123
|
+
(the `*_publicized.dll` reference list) and
|
|
124
|
+
https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnBuildTask/JotunnBuildTask.cs
|
|
125
|
+
(`GetFiles(managedFolder, "assembly_*.dll")` plus the two explicit extras)
|
|
126
|
+
tags:
|
|
127
|
+
- assemblies
|
|
128
|
+
- managed
|
|
129
|
+
- publicize
|
|
130
|
+
- reference
|
|
131
|
+
- jotunn
|
|
132
|
+
detail: The build task globs rather than hardcodes the `assembly_*` set, so the eight names above
|
|
133
|
+
are what the current install actually ships rather than a fixed contract.
|
|
134
|
+
`SoftReferenceableAssets.dll` being on the list is the code-side counterpart of the asset
|
|
135
|
+
system Iron Gate introduced in 0.217.40.
|
|
136
|
+
- id: valheim.install.layout.data-folder-casing-differs-by-platform
|
|
137
|
+
claim: The client data folder is spelled `Valheim_Data` on Windows and `valheim_Data` on Linux;
|
|
138
|
+
Jötunn's build task says so in a comment and probes both spellings, because "Both spellings
|
|
139
|
+
resolve on the case-insensitive filesystems of Windows and macOS, so a case-sensitive lookup
|
|
140
|
+
only ever fails on Linux". The server folder is `valheim_server_Data` on every platform.
|
|
141
|
+
status: community
|
|
142
|
+
source: https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnBuildTask/JotunnBuildTask.cs
|
|
143
|
+
(`ValheimData` / `ValheimServerData` constants and the comment above them)
|
|
144
|
+
tags:
|
|
145
|
+
- install
|
|
146
|
+
- data-folder
|
|
147
|
+
- casing
|
|
148
|
+
- linux
|
|
149
|
+
- detect
|
|
150
|
+
detail: Thunderstore's ecosystem schema records the lowercase `valheim_Data`. Both are right on
|
|
151
|
+
Windows; a surface should compare case-insensitively and never branch on the spelling.
|
|
152
|
+
- id: valheim.install.layout.dedicated-server-arguments
|
|
153
|
+
claim: "Iron Gate documents the dedicated server's arguments: `-name`, `-port` (which uses the given
|
|
154
|
+
port *and* port+1; default 2456-2457), `-world`, `-password`, `-savedir`, `-public 1`,
|
|
155
|
+
`-logFile`, `-saveinterval`, `-backups`, `-backupshort`, `-backuplong`, `-crossplay`,
|
|
156
|
+
`-instanceid`, `-preset`, `-modifier` and `-setkey`. The default save path that `-savedir`
|
|
157
|
+
overrides is `%USERPROFILE%/AppData/LocalLow/IronGate/Valheim` on Windows and
|
|
158
|
+
`~/.config/unity3d/IronGate/Valheim` on Linux."
|
|
159
|
+
status: community
|
|
160
|
+
source: https://valheim.com/support/a-guide-to-dedicated-servers
|
|
161
|
+
tags:
|
|
162
|
+
- dedicated-server
|
|
163
|
+
- arguments
|
|
164
|
+
- savedir
|
|
165
|
+
- port
|
|
166
|
+
- path
|
|
167
|
+
- crossplay
|
|
168
|
+
detail: Two things ModWright can use. `-savedir` means the server's data directory is not a fixed
|
|
169
|
+
path, so a log or permission-file location must be derived from the launch arguments where
|
|
170
|
+
they are known and reported as undetermined where they are not. And the Linux default is under
|
|
171
|
+
`~/.config/unity3d/`, not LocalLow — the same company/product pair, a different Unity
|
|
172
|
+
convention.
|
|
173
|
+
- id: valheim.install.layout.server-permission-files
|
|
174
|
+
claim: The dedicated server's `adminlist.txt`, `bannedlist.txt` and `permittedlist.txt` live in the
|
|
175
|
+
default save path (or wherever `-savedir` points), and each entry is a Platform User ID
|
|
176
|
+
written as `[Platform]_[User ID]`.
|
|
177
|
+
status: community
|
|
178
|
+
source: https://valheim.com/support/a-guide-to-dedicated-servers
|
|
179
|
+
tags:
|
|
180
|
+
- dedicated-server
|
|
181
|
+
- adminlist
|
|
182
|
+
- permissions
|
|
183
|
+
- path
|
|
184
|
+
- config
|
|
185
|
+
detail: Relevant to Jötunn's config sync, whose `IsAdminOnly` enforcement keys on whether the
|
|
186
|
+
connecting player is an admin — which is decided by `adminlist.txt` on the server, not by
|
|
187
|
+
anything on the client.
|
|
188
|
+
- id: valheim.install.layout.bepinex-installs-at-server-top-level
|
|
189
|
+
claim: "On the dedicated server BepInEx installs exactly as on the client: the BepInEx pack's extra
|
|
190
|
+
top-level files (not just the `BepInEx` folder) must be placed at the top level of the server
|
|
191
|
+
install, and the server's log is `BepInEx/LogOutput.log` relative to that same root."
|
|
192
|
+
status: community
|
|
193
|
+
source: https://github.com/Valheim-Modding/Wiki/wiki/Server-Troubleshooting
|
|
194
|
+
tags:
|
|
195
|
+
- dedicated-server
|
|
196
|
+
- bepinex
|
|
197
|
+
- install
|
|
198
|
+
- logoutput
|
|
199
|
+
detail: The page's diagnostic is that if no `BepInEx/LogOutput.log` is generated after deleting it
|
|
200
|
+
and restarting, no mods loaded at all — the same zero-byte/absent-log signal ModWright already
|
|
201
|
+
models for other games' loaders.
|
|
202
|
+
- id: valheim.install.layout.server-vs-client-mod-split
|
|
203
|
+
claim: Valheim mods divide into server-side, client-side and both-sides; the community's own
|
|
204
|
+
troubleshooting guidance is to check a mod's Thunderstore tags to learn which, because a
|
|
205
|
+
client-only mod does not need to be on the server and a server-side mod does nothing if only
|
|
206
|
+
the client has it.
|
|
207
|
+
status: community
|
|
208
|
+
source: https://github.com/Valheim-Modding/Wiki/wiki/Server-Troubleshooting
|
|
209
|
+
tags:
|
|
210
|
+
- dedicated-server
|
|
211
|
+
- client
|
|
212
|
+
- deploy
|
|
213
|
+
- mod-model
|
|
214
|
+
detail: "This is why a Valheim surface's deploy targets cannot be a single root: the same built DLL
|
|
215
|
+
may need to land in two different installs, and which ones is a property of the mod, not of
|
|
216
|
+
the game."
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
game: valheim
|
|
2
|
+
topic: jotunn.library
|
|
3
|
+
title: Jötunn, the Valheim modding library — managers, config sync, network compatibility, and its
|
|
4
|
+
mod stub
|
|
5
|
+
facts:
|
|
6
|
+
- id: valheim.jotunn.library.what-it-is-and-version
|
|
7
|
+
claim: Jötunn ("the Valheim Library") is a BepInEx-hosted C# library that gives Valheim mods a
|
|
8
|
+
curated set of helpers for custom content and network consistency; the current release is
|
|
9
|
+
2.30.0, published 2026-09-09, whose notes say it "Updated the majority of systems for Valheim
|
|
10
|
+
1.0.7" and that piece categories are incomplete because Valheim overhauled that system.
|
|
11
|
+
status: community
|
|
12
|
+
source: https://valheim-modding.github.io/Jotunn/ ;
|
|
13
|
+
https://github.com/Valheim-Modding/Jotunn/releases (v2.30.0, 2026-09-09)
|
|
14
|
+
tags:
|
|
15
|
+
- jotunn
|
|
16
|
+
- library
|
|
17
|
+
- version
|
|
18
|
+
- valheim-1.0
|
|
19
|
+
detail: Jötunn shipped a 1.0-compatible release the same day Valheim 1.0 launched, which is the
|
|
20
|
+
practical reason a Valheim surface's compat matrix has to treat Jötunn version, BepInEx pack
|
|
21
|
+
version and game version as three independent axes.
|
|
22
|
+
- id: valheim.jotunn.library.depends-on-the-valheim-bepinex-pack
|
|
23
|
+
claim: Jötunn's Thunderstore manifest declares exactly one dependency,
|
|
24
|
+
`denikson-BepInExPack_Valheim-5.4.2333`, and its guide states plainly that the Thunderstore
|
|
25
|
+
pack must be used because "a release from Github may not work properly".
|
|
26
|
+
status: community
|
|
27
|
+
source: https://thunderstore.io/api/experimental/package/ValheimModding/Jotunn/ ;
|
|
28
|
+
https://valheim-modding.github.io/Jotunn/guides/guide.html
|
|
29
|
+
tags:
|
|
30
|
+
- jotunn
|
|
31
|
+
- bepinex
|
|
32
|
+
- dependency
|
|
33
|
+
- bepinexpack
|
|
34
|
+
- compat
|
|
35
|
+
detail: "This is a real compat rule, not advice: stock BepInEx is not configured for Valheim's entry
|
|
36
|
+
point, so \"BepInEx is installed\" is not sufficient — a Valheim compat surface must
|
|
37
|
+
distinguish the pack from stock BepInEx."
|
|
38
|
+
- id: valheim.jotunn.library.manager-classes
|
|
39
|
+
claim: "Jötunn's public surface is a set of static managers in the `Jotunn.Managers` namespace:
|
|
40
|
+
AssetManager, CommandManager, CreatureManager, DungeonManager, GUIManager, InputManager,
|
|
41
|
+
ItemManager, KeyHintManager, KitbashManager, LocalizationManager, MinimapManager,
|
|
42
|
+
NetworkManager, PieceManager, PrefabManager, RenderManager, SkillManager,
|
|
43
|
+
SynchronizationManager, UndoManager and ZoneManager."
|
|
44
|
+
status: community
|
|
45
|
+
source: https://valheim-modding.github.io/Jotunn/api/Jotunn.Managers.html
|
|
46
|
+
tags:
|
|
47
|
+
- jotunn
|
|
48
|
+
- managers
|
|
49
|
+
- api
|
|
50
|
+
- scaffold
|
|
51
|
+
detail: There is no `ConfigManager`, `RecipeManager`, `PieceTableManager` or `StatusEffectManager` —
|
|
52
|
+
config sync lives in `SynchronizationManager`, and recipes, piece tables and status effects
|
|
53
|
+
are handled through ItemManager, PieceManager and PrefabManager. A scaffold that emits a call
|
|
54
|
+
to a manager that does not exist produces a compile error, so the manager list is exactly the
|
|
55
|
+
kind of thing a validator should check against.
|
|
56
|
+
- id: valheim.jotunn.library.assetmanager-soft-referenceable
|
|
57
|
+
claim: Jötunn's `AssetManager` exists specifically to interact with Valheim's
|
|
58
|
+
"SoftReferenceableAssets" system, the custom asset-management layer Iron Gate introduced in
|
|
59
|
+
0.217.40 that loads assets through AssetBundles instead of keeping everything in memory.
|
|
60
|
+
status: community
|
|
61
|
+
source: https://valheim-modding.github.io/Jotunn/api/Jotunn.Managers.html ;
|
|
62
|
+
https://valheim.com/support/modding-faq-for-the-asset-bundle-update-0-217-40/
|
|
63
|
+
tags:
|
|
64
|
+
- jotunn
|
|
65
|
+
- assets
|
|
66
|
+
- softreferenceableassets
|
|
67
|
+
- assetbundle
|
|
68
|
+
- index
|
|
69
|
+
detail: "Iron Gate's own FAQ is the primary source for the system and says the quiet part directly:
|
|
70
|
+
\"if your mod relies on a certain asset having a certain path, it's likely that an update will
|
|
71
|
+
break your mod\", and to use AssetIDs instead because they \"will always stay the same for
|
|
72
|
+
each asset even if it's moved or renamed\". That is the strongest argument for a ModWright
|
|
73
|
+
vanilla index keyed on AssetIDs rather than paths."
|
|
74
|
+
- id: valheim.jotunn.library.jotunndoc-publishes-a-vanilla-index
|
|
75
|
+
claim: "Jötunn ships a generated, machine-readable dump of the vanilla game's content, committed in
|
|
76
|
+
the repository under `JotunnLib/Documentation/data/` and published at
|
|
77
|
+
`https://valheim-modding.github.io/Jotunn/data/`: prefab, item, piece, piece-table, recipe,
|
|
78
|
+
status-effect, location, vegetation, RPC, sprite, character, material, mesh and shader lists
|
|
79
|
+
plus localization tables for English and ~40 other languages. Each file's header names the
|
|
80
|
+
game version it was generated from — `prefab-list.md` and `item-list.md` say Valheim 1.0.7,
|
|
81
|
+
`piece-list.md` says 1.0.12 — and the generator is Jötunn's own JotunnDoc mod."
|
|
82
|
+
status: community
|
|
83
|
+
source: 'https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnLib/Documentation/data (file
|
|
84
|
+
headers read directly: "This file is automatically generated from Valheim 1.0.7 using the
|
|
85
|
+
JotunnDoc mod found on our GitHub"); generator at
|
|
86
|
+
https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnDoc'
|
|
87
|
+
tags:
|
|
88
|
+
- jotunn
|
|
89
|
+
- jotunndoc
|
|
90
|
+
- index
|
|
91
|
+
- prefabs
|
|
92
|
+
- items
|
|
93
|
+
- assetid
|
|
94
|
+
- vanilla
|
|
95
|
+
detail: "This is the single most consequential find for ModWright's `index` subsystem on this game:
|
|
96
|
+
a vanilla index can be built **without the game installed**, by parsing markdown tables out of
|
|
97
|
+
a public repository. The prefab table's columns are `Name | AssetID | Token | English Name |
|
|
98
|
+
Components | Components in Children` and the item table's are `Item | AssetID | Token |
|
|
99
|
+
English Name | Type | Description` — so the index carries exactly the AssetIDs Iron Gate's own
|
|
100
|
+
FAQ says to key on, plus the localization token and the component list. `prefab-list.md` alone
|
|
101
|
+
is 1.3 MB. The caveat is that the files are regenerated by hand when a maintainer runs
|
|
102
|
+
JotunnDoc, so different tables can be stamped with different game versions at the same time —
|
|
103
|
+
the version must be read per-file from its header, never assumed uniform."
|
|
104
|
+
- id: valheim.jotunn.library.isadminonly-config-sync
|
|
105
|
+
claim: Jötunn enforces server-side config by binding a BepInEx `ConfigEntry` with a
|
|
106
|
+
`Jotunn.Utils.ConfigurationManagerAttributes` instance whose `IsAdminOnly` is true; every
|
|
107
|
+
client connecting to that server receives the server's values, and "Local settings will be
|
|
108
|
+
overriden by the servers values as long as the client is connected to that server". In
|
|
109
|
+
single-player the player is always considered admin.
|
|
110
|
+
status: community
|
|
111
|
+
source: https://valheim-modding.github.io/Jotunn/tutorials/config.html
|
|
112
|
+
tags:
|
|
113
|
+
- jotunn
|
|
114
|
+
- config
|
|
115
|
+
- sync
|
|
116
|
+
- isadminonly
|
|
117
|
+
- server
|
|
118
|
+
- admin
|
|
119
|
+
detail: "A consequence for any ModWright deploy or verification story: a value read out of
|
|
120
|
+
`BepInEx/config/<GUID>.cfg` on a client is not necessarily the value in force. Only default
|
|
121
|
+
mod configs sync automatically; a custom config file must be registered with the
|
|
122
|
+
SynchronizationManager and still needs `IsAdminOnly` per entry."
|
|
123
|
+
- id: valheim.jotunn.library.networkcompatibility-attribute
|
|
124
|
+
claim: "`Jotunn.Utils.NetworkCompatibilityAttribute` is applied to an assembly or a class as
|
|
125
|
+
`[NetworkCompatibility(CompatibilityLevel, VersionStrictness)]`; `CompatibilityLevel` is one
|
|
126
|
+
of NotEnforced, VersionCheckOnly, EveryoneMustHaveMod, ClientMustHaveMod, ServerMustHaveMod,
|
|
127
|
+
and `VersionStrictness` is one of None, Major, Minor, Patch."
|
|
128
|
+
status: community
|
|
129
|
+
source: https://valheim-modding.github.io/Jotunn/api/Jotunn.Utils.NetworkCompatibilityAttribute.html
|
|
130
|
+
; https://valheim-modding.github.io/Jotunn/api/Jotunn.Utils.CompatibilityLevel.html ;
|
|
131
|
+
https://valheim-modding.github.io/Jotunn/api/Jotunn.Utils.VersionStrictness.html
|
|
132
|
+
tags:
|
|
133
|
+
- jotunn
|
|
134
|
+
- networkcompatibility
|
|
135
|
+
- multiplayer
|
|
136
|
+
- version
|
|
137
|
+
- attribute
|
|
138
|
+
- validator
|
|
139
|
+
detail: The tutorial page omits `None` from VersionStrictness; the API reference lists all four. A
|
|
140
|
+
static validator reading a plugin's source can check that the attribute's arguments are
|
|
141
|
+
members of these two enums, and that a mod declaring EveryoneMustHaveMod is deployed to both
|
|
142
|
+
the client and the server install.
|
|
143
|
+
- id: valheim.jotunn.library.mismatch-panel-strings
|
|
144
|
+
claim: A Jötunn version or install mismatch disconnects the client into a panel whose section
|
|
145
|
+
headers are localized as "Failed Connection:", "Valheim Version Error:", "Missing Mods:", "Mod
|
|
146
|
+
Updates Needed:", "Mod Downgrades Needed:", "Additional Mods Loaded:" and "Further Steps:",
|
|
147
|
+
with per-mod lines such as "$1 $2 was not loaded on your game" and "Please update $1 to
|
|
148
|
+
version $2".
|
|
149
|
+
status: community
|
|
150
|
+
source: https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnLib/Localization/English.json (keys
|
|
151
|
+
`mod_compat_*`), rendered by `JotunnLib/Utils/ModCompatibility/ModCompatibility.cs`
|
|
152
|
+
`CreateErrorMessage`
|
|
153
|
+
tags:
|
|
154
|
+
- jotunn
|
|
155
|
+
- mismatch
|
|
156
|
+
- multiplayer
|
|
157
|
+
- error-message
|
|
158
|
+
- triage
|
|
159
|
+
detail: The panel's own "Further Steps" text tells the user that this check only covers Jötunn mods
|
|
160
|
+
and to read `BepInEx/LogOutput.log` on both sides for other disconnects — i.e. Jötunn itself
|
|
161
|
+
points at the file ModWright would triage. A client without Jötunn gets Valheim's own
|
|
162
|
+
"Incompatible Version" message instead, which carries none of this detail.
|
|
163
|
+
- id: valheim.jotunn.library.modstub-shape
|
|
164
|
+
claim: "`JotunnModStub` is the org's mod skeleton: a C# plugin project targeting `net48` with a
|
|
165
|
+
`JotunnLib` PackageReference, a sibling Unity project stub, an `Environment.props` the author
|
|
166
|
+
creates to define `VALHEIM_INSTALL`, and `DoPrebuild.props` whose `ExecutePrebuild` flag turns
|
|
167
|
+
on automatic generation of publicized assemblies."
|
|
168
|
+
status: community
|
|
169
|
+
source: https://github.com/Valheim-Modding/JotunnModStub (README,
|
|
170
|
+
`JotunnModStub/JotunnModStub.csproj`, `DoPrebuild.props`)
|
|
171
|
+
tags:
|
|
172
|
+
- jotunn
|
|
173
|
+
- template
|
|
174
|
+
- scaffold
|
|
175
|
+
- msbuild
|
|
176
|
+
- net48
|
|
177
|
+
- publicize
|
|
178
|
+
- dotnet
|
|
179
|
+
detail: The stub's `JotunnLib` PackageReference is pinned to 2.27.1 while the current release is
|
|
180
|
+
2.30.0, so "scaffold from the stub" and "scaffold at the current Jötunn version" are not the
|
|
181
|
+
same thing.
|
|
182
|
+
- id: valheim.jotunn.library.modstub-post-build-deploy
|
|
183
|
+
claim: "The stub's post-build step runs `scripts/publish.ps1` (or `publish.sh`) with the build
|
|
184
|
+
configuration: a Debug build copies the built `.dll` and its `.dll.mdb` into
|
|
185
|
+
`$(MOD_DEPLOYPATH)`, defaulting to `$(VALHEIM_INSTALL)\\BepInEx\\plugins`, while a Release
|
|
186
|
+
build produces a Thunderstore-ready zip under the project's `Packages` folder."
|
|
187
|
+
status: community
|
|
188
|
+
source: https://github.com/Valheim-Modding/JotunnModStub/blob/master/JotunnModStub/JotunnModStub.csproj
|
|
189
|
+
(`JotunnPostBuildTaskWin` / `JotunnPostBuildTaskUnix`) and the repo README
|
|
190
|
+
tags:
|
|
191
|
+
- jotunn
|
|
192
|
+
- deploy
|
|
193
|
+
- build
|
|
194
|
+
- msbuild
|
|
195
|
+
- thunderstore
|
|
196
|
+
- packaging
|
|
197
|
+
detail: "This is precisely the deploy-and-package step ModWright's `core/build` and `core/deploy`
|
|
198
|
+
already model, done today by an MSBuild target and a PowerShell script. A Valheim surface
|
|
199
|
+
should treat it as prior art to match, not to wrap: the interesting part is that Debug and
|
|
200
|
+
Release have different destinations, which is exactly ModWright's `variant` concept."
|
|
201
|
+
- id: valheim.jotunn.library.publicizer-is-vendored-not-a-separate-repo
|
|
202
|
+
claim: There is no publicizer repository in the Valheim-Modding organisation; the publicizer is
|
|
203
|
+
vendored inside Jötunn as `JotunnBuildTask/AssemblyPublicizer.cs`, and the community wiki's
|
|
204
|
+
manual route points at the third-party CabbageCrow AssemblyPublicizer instead.
|
|
205
|
+
status: community
|
|
206
|
+
source: https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnBuildTask ;
|
|
207
|
+
https://github.com/Valheim-Modding?tab=repositories ;
|
|
208
|
+
https://github.com/Valheim-Modding/Wiki/wiki/Best-Practices
|
|
209
|
+
tags:
|
|
210
|
+
- publicize
|
|
211
|
+
- assemblies
|
|
212
|
+
- jotunn
|
|
213
|
+
- buildtask
|
|
214
|
+
- toolchain
|
|
215
|
+
detail: Jötunn's build task globs the Managed folder for `assembly_*.dll` plus
|
|
216
|
+
`SoftReferenceableAssets.dll` and `gui_framework.dll`, finds Managed under either
|
|
217
|
+
`Valheim_Data` or `valheim_server_Data`, and writes `{OriginalName}_publicized.dll` into a
|
|
218
|
+
`publicized_assemblies` subfolder.
|
|
219
|
+
- id: valheim.jotunn.library.no-redistribution-of-game-assemblies
|
|
220
|
+
claim: "The project's stated norm on game assemblies is in the JotunnModStub README: \"These
|
|
221
|
+
assembly files are copyrighted material and you can theoretically get into trouble when you
|
|
222
|
+
distribute them in your github repository\", which is why the Unity project folder ships a
|
|
223
|
+
`.gitignore` the author is told to keep."
|
|
224
|
+
status: community
|
|
225
|
+
source: https://github.com/Valheim-Modding/JotunnModStub (README, Unity setup step 5)
|
|
226
|
+
tags:
|
|
227
|
+
- legal
|
|
228
|
+
- assemblies
|
|
229
|
+
- redistribution
|
|
230
|
+
- norm
|
|
231
|
+
- publicize
|
|
232
|
+
detail: The design consequence is Jötunn's asset-mocking system, documented as a way to "Duplicate
|
|
233
|
+
and modify Assets without the need to include copyrighted content in your plugin"
|
|
234
|
+
(https://valheim-modding.github.io/Jotunn/tutorials/asset-mocking.html). No stronger
|
|
235
|
+
licence-level clause about game-assembly redistribution was found on the Jötunn docs site or
|
|
236
|
+
repository.
|
|
237
|
+
- id: valheim.jotunn.library.jotunndoc-table-shapes
|
|
238
|
+
claim: "The JotunnDoc dumps live in subfolders of `JotunnLib/Documentation/data/` (`prefabs/` with
|
|
239
|
+
prefab, character, material, mesh and shader lists; `objects/` with item and recipe lists;
|
|
240
|
+
`pieces/` with piece and piece-table lists; `status-effects/`, `zones/` (location,
|
|
241
|
+
vegetation), `rpc/`, `gui/` (sprite), `input/`, `localization/`), every list named
|
|
242
|
+
`<kind>-list.md`. Each file opens with a title, a sentence and \"This file is automatically
|
|
243
|
+
generated from Valheim <version> using the JotunnDoc mod found on our GitHub\", then pipe
|
|
244
|
+
tables whose first column is the object's name; prefabs, items and pieces also carry
|
|
245
|
+
`AssetID`, `Token` and `English Name` columns, list-valued cells are `<ul><li>..</li></ul>`
|
|
246
|
+
(or `<dl><dd>..</dd></dl>`) HTML, and the piece and location lists are split into `## <group>`
|
|
247
|
+
sections. Three details bite a parser: the name column is written `Name<br><img
|
|
248
|
+
src=\"../../images/..\">` in the item, piece, location, character and vegetation lists, so the
|
|
249
|
+
raw cell is not the name; a long list is emitted in several chunks with the header repeated
|
|
250
|
+
after a blank line (the item list in 3, the prefab list in 4, mesh and material in 2), so one
|
|
251
|
+
file yields several tables; and the mesh list spells its key column `Asset ID`, not `AssetID`.
|
|
252
|
+
Versions disagree across the set — on the dev branch most lists say 1.0.7, the piece list says
|
|
253
|
+
1.0.12 and the input list still says 0.221.12."
|
|
254
|
+
status: community
|
|
255
|
+
source: "https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnLib/Documentation (directory
|
|
256
|
+
listing and all sixteen `*-list.md` files under data/, read 2026-09-11: e.g.
|
|
257
|
+
prefabs/prefab-list.md \"|Name |AssetID |Token |English Name |Components |Components in
|
|
258
|
+
Children |\", objects/item-list.md \"|Item |AssetID |Token |English Name |Type |Description
|
|
259
|
+
|\" whose first cell reads \"Acorn<br><img src=../../images/items/Acorn.png>\",
|
|
260
|
+
prefabs/mesh-list.md \"|SoftReference Name |Asset ID |Internal Object Name |\",
|
|
261
|
+
input/input-list.md's \"generated from Valheim 0.221.12\" header)"
|
|
262
|
+
tags:
|
|
263
|
+
- jotunn
|
|
264
|
+
- jotunndoc
|
|
265
|
+
- index
|
|
266
|
+
- markdown
|
|
267
|
+
- table
|
|
268
|
+
- assetid
|
|
269
|
+
- token
|
|
270
|
+
- version
|
|
271
|
+
detail: "`src/surfaces/valheim/index/` builds ModWright's Valheim index from exactly this shape, one
|
|
272
|
+
`jotunn_table` row per table with the file's stated version and one `entry` per row keyed on
|
|
273
|
+
AssetID, name and token, so a lookup can say which game version its answer was dumped from.
|
|
274
|
+
Parsed over the dev-branch files that is 66 tables and 15,186 rows from sixteen lists — prefab
|
|
275
|
+
4,810, mesh 3,191, sprite 2,015, material 1,696, item 1,517, piece 549, recipe 478, location
|
|
276
|
+
213 in 41 `##` groups, vegetation 213, character 162, shader 106, input 100, status-effect 96,
|
|
277
|
+
language 36, piece-table 4, and rpc 0 (its table has a header and no rows). The location,
|
|
278
|
+
vegetation, sprite, shader, language, input, piece-table and RPC lists have no AssetID column
|
|
279
|
+
and are indexed by name only."
|
|
280
|
+
related:
|
|
281
|
+
- valheim.jotunn.library.jotunndoc-publishes-a-vanilla-index
|
|
282
|
+
- id: valheim.jotunn.library.references-are-by-prefab-name-and-token
|
|
283
|
+
claim: "Jötunn's tutorials reference vanilla content by name string: a `CustomItem` or `CustomPiece`
|
|
284
|
+
clones an existing prefab by its name (`new CustomItem(\"EvilSword\", \"SwordBlackmetal\",
|
|
285
|
+
config)`, `new CustomPiece(\"our_rug_deer\", \"rug_deer\", rug)`), a recipe names the item it
|
|
286
|
+
crafts and the items it needs (`meatConfig.Item = \"CookedMeat\"; // Name of the item prefab
|
|
287
|
+
to be crafted`, `AddRequirement(\"Wood\", 1, 2)`; `RequirementConfig.Item` is documented as
|
|
288
|
+
\"Name of the item prefab of this requirement\"), a piece names its table (`PieceTable =
|
|
289
|
+
PieceTables.Hammer`, or a string — the blueprint-rune example assigns its own
|
|
290
|
+
`\"_BlueprintTestTable\"`), and display strings are `$`-prefixed localization tokens
|
|
291
|
+
(`\"$item_evilsword\"`) registered without the `$` (`AddTranslation(\"English\", new
|
|
292
|
+
Dictionary<string, string> { {\"item_evilsword\", \"Sword of Darkness\"} })`). The tutorials
|
|
293
|
+
say of both a clone source and a recipe's items: \"You must only use names of existing
|
|
294
|
+
prefabs. This can be prefabs you created, that have already been registered by another mod, or
|
|
295
|
+
that already exist in the game.\" When no translation for a token exists, \"the word to
|
|
296
|
+
translate will be fed to Valheim's own Translation class\" — so a token neither the mod nor
|
|
297
|
+
the game defines reaches the player unresolved."
|
|
298
|
+
status: community
|
|
299
|
+
source: "https://valheim-modding.github.io/Jotunn/tutorials/items.html (the EvilSword example, the
|
|
300
|
+
AssetBundle overload `new CustomItem(BlueprintRuneBundle, \"BlueprintTestRune\", fixReference:
|
|
301
|
+
false, runeConfig)`, and \"You must only use names of existing prefabs\");
|
|
302
|
+
https://valheim-modding.github.io/Jotunn/tutorials/pieces.html (the rug example, `PieceTable`,
|
|
303
|
+
`AddRequirement`, and `new CustomPieceTable(BlueprintRuneBundle, \"_BlueprintTestTable\",
|
|
304
|
+
runeTable)` followed by `makeConfig.PieceTable = \"_BlueprintTestTable\"`);
|
|
305
|
+
https://valheim-modding.github.io/Jotunn/tutorials/recipes.html (`meatConfig.Item =
|
|
306
|
+
\"CookedMeat\"` and the requirement rule);
|
|
307
|
+
https://valheim-modding.github.io/Jotunn/api/Jotunn.Configs.RequirementConfig.html (`Item`:
|
|
308
|
+
\"Name of the item prefab of this requirement\");
|
|
309
|
+
https://valheim-modding.github.io/Jotunn/api/Jotunn.Entities.CustomLocalization.html (the
|
|
310
|
+
three `AddTranslation` overloads: language plus dictionary, key plus text, and language plus
|
|
311
|
+
key plus text); https://valheim-modding.github.io/Jotunn/tutorials/localization.html
|
|
312
|
+
(\"language tokens are prefixed with a `$`\", \"the translation keys should not be prefixed
|
|
313
|
+
with a `$`\", the `Translations/{LanguageName}/{anyname}.json` layout, and the fallback to
|
|
314
|
+
Valheim's Translation class); all read 2026-09-11"
|
|
315
|
+
tags:
|
|
316
|
+
- jotunn
|
|
317
|
+
- prefab
|
|
318
|
+
- clone
|
|
319
|
+
- requirement
|
|
320
|
+
- piecetable
|
|
321
|
+
- token
|
|
322
|
+
- localization
|
|
323
|
+
- validator
|
|
324
|
+
- index
|
|
325
|
+
detail: "`valheim.plugins.vanilla-references` scans exactly these literal shapes and resolves each
|
|
326
|
+
against the JotunnDoc index or the project's own declarations — which include the names the
|
|
327
|
+
mod itself creates: a `CustomItem`/`CustomPiece` clone name, the asset name of the AssetBundle
|
|
328
|
+
constructor overload, a `CreateClonedPrefab` or `CreateEmptyPrefab` name, a `CustomPieceTable`
|
|
329
|
+
name, and every `AddTranslation` key. A name built from an expression, a constant from another
|
|
330
|
+
file, or a prefab registered by another mod is not seen or not resolvable, which is why every
|
|
331
|
+
miss is a warning."
|
|
332
|
+
related:
|
|
333
|
+
- valheim.jotunn.library.manager-classes
|
|
334
|
+
- valheim.jotunn.library.jotunndoc-publishes-a-vanilla-index
|