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,149 @@
|
|
|
1
|
+
game: eldenring
|
|
2
|
+
topic: params.paramdef
|
|
3
|
+
title: Paramdex paramdef grammar, and the two text shapes of a param export
|
|
4
|
+
facts:
|
|
5
|
+
- id: eldenring.paramdef.def-grammar-is-a-c-declaration
|
|
6
|
+
claim: "A paramdef Field's Def attribute is `<type> <name>[:bits][[n]][ = default]` — the README's
|
|
7
|
+
\"Bit size and array length are written as in a C declaration\" — over exactly thirteen types:
|
|
8
|
+
s8 u8 s16 u16 s32 u32 b32 f32 angle32 f64 fixstr fixstrW dummy8. Optional child elements are
|
|
9
|
+
DisplayName, Enum, Description, DisplayFormat, EditFlags, Minimum, Maximum, Increment and
|
|
10
|
+
SortID."
|
|
11
|
+
status: community
|
|
12
|
+
source: Paramdex README "Writing Paramdefs" (`<Field Def="u16 iconId" />`); a survey of all 194
|
|
13
|
+
files under ER/Defs on 2026-09-11 (7302 Field elements) found no Def outside that pattern —
|
|
14
|
+
bitfields only on u8/u16/u32/dummy8, arrays only on dummy8/fixstr/ fixstrW, and defaults
|
|
15
|
+
combined with both (`u8 opposeTarget:1 = 1`, `dummy8 pad_3[16] = -1`)
|
|
16
|
+
tags:
|
|
17
|
+
- paramdef
|
|
18
|
+
- paramdex
|
|
19
|
+
- grammar
|
|
20
|
+
- field
|
|
21
|
+
- bitfield
|
|
22
|
+
- array
|
|
23
|
+
- default
|
|
24
|
+
- types
|
|
25
|
+
detail: Every ER def carries `<PARAMDEF XmlVersion="2">`, BigEndian False, Unicode True and
|
|
26
|
+
FormatVersion 203 (four files 202, four 106); DataVersion ranges 0 to 10. Files begin with a
|
|
27
|
+
UTF-8 BOM and an XML declaration. `src/surfaces/eldenring/paramdef.ts` parses this grammar and
|
|
28
|
+
`test/unit/eldenring/paramdef.test.ts` covers each shape with a synthetic def.
|
|
29
|
+
- id: eldenring.paramdef.def-files-are-named-after-the-param
|
|
30
|
+
claim: Paramdex's README says def "Filenames are arbitrary; apply based on the included metadata
|
|
31
|
+
after loading", but every ER def file is in fact named after the param as the editors show it
|
|
32
|
+
(EquipParamWeapon.xml) while its ParamType element is the internal name
|
|
33
|
+
(EQUIP_PARAM_WEAPON_ST). A DSMapStudio CSV export is named after the former; a WitchyBND param
|
|
34
|
+
XML records the latter in its `<type>` element.
|
|
35
|
+
status: community
|
|
36
|
+
source: Paramdex README (Defs bullet); ER/Defs listing (EquipParamWeapon.xml,
|
|
37
|
+
ReinforceParamWeapon.xml, ...); WPARAM.Unpack.cs writes `new XElement("type",
|
|
38
|
+
param.ParamType)`
|
|
39
|
+
tags:
|
|
40
|
+
- paramdef
|
|
41
|
+
- paramdex
|
|
42
|
+
- filename
|
|
43
|
+
- paramtype
|
|
44
|
+
- csv
|
|
45
|
+
- xml
|
|
46
|
+
- lookup
|
|
47
|
+
detail: "So a def index needs both keys: by ParamType for XML exports and by file stem
|
|
48
|
+
(case-insensitive) for CSV exports. ModWright's `loadParamdex` builds both."
|
|
49
|
+
- id: eldenring.paramdef.tdfs-cover-few-of-the-enums
|
|
50
|
+
claim: Paramdex ships only five tdfs for Elden Ring (GAITEM_CATEGORY, ITEMLOT_ITEMCATEGORY,
|
|
51
|
+
ItemType, LotItemCategory, SHOP_LINEUP_EQUIPTYPE) while the ER defs reference 242 distinct
|
|
52
|
+
Enum names over 1303 Enum elements (ATK_PARAM_HIT_TYPE, WEP_TYPE, SP_EFFECT_TYPE, ...). An
|
|
53
|
+
enum-value check can therefore apply only where a tdf exists, and must stay silent elsewhere
|
|
54
|
+
rather than guess.
|
|
55
|
+
status: community
|
|
56
|
+
source: "`ls ER/Tdfs` (5 files) against `grep -o '<Enum>[^<]*' ER/Defs/*.xml | sort -u` (242 names,
|
|
57
|
+
1303 elements) on 2026-09-11; Paramdex README: \"Tdfs - paramtdfs provide friendly names for
|
|
58
|
+
enumerated types. Only officially shipped with Demon's Souls.\""
|
|
59
|
+
tags:
|
|
60
|
+
- paramdef
|
|
61
|
+
- tdf
|
|
62
|
+
- enum
|
|
63
|
+
- coverage
|
|
64
|
+
- validator
|
|
65
|
+
- limits
|
|
66
|
+
detail: 'A tdf is three kinds of line: a quoted name, a quoted type, then `"Label","value"` pairs.
|
|
67
|
+
`eldenring.params.values` reports an enum mismatch as a warn, not a block, because the tdfs
|
|
68
|
+
lag the game.'
|
|
69
|
+
- id: eldenring.paramdef.paramdex-has-no-licence-file
|
|
70
|
+
claim: The Paramdex repository has no LICENSE file, so ModWright does not vendor its defs. The
|
|
71
|
+
validators read a checkout the project points at (a source of kind `paramdex`, or
|
|
72
|
+
MODWRIGHT_ELDENRING_PARAMDEX), or the copy an installed WitchyBND ships under
|
|
73
|
+
Assets/Paramdex/ER.
|
|
74
|
+
status: community
|
|
75
|
+
source: Repository root listing of soulsmods/Paramdex (README.md and per-game folders only) on
|
|
76
|
+
2026-09-11; WitchyBND tree under WitchyBND/Assets/Paramdex/
|
|
77
|
+
tags:
|
|
78
|
+
- paramdex
|
|
79
|
+
- licence
|
|
80
|
+
- vendoring
|
|
81
|
+
- distribution
|
|
82
|
+
- witchybnd
|
|
83
|
+
detail: "WitchyBND's own vendored copy is the pragmatic default: anyone repacking a regulation
|
|
84
|
+
already has it beside the exe."
|
|
85
|
+
- id: eldenring.paramdef.minimum-and-maximum-are-editor-hints
|
|
86
|
+
claim: "A def field's Minimum and Maximum are editor display bounds, not values the game enforces:
|
|
87
|
+
they are round numbers rather than type limits, they are absent on thousands of fields, and
|
|
88
|
+
131 fields carry a Maximum below their own Minimum. A validator should type-check a value
|
|
89
|
+
(range of s32, width of a bitfield) but not reject it for exceeding Maximum."
|
|
90
|
+
status: inferred
|
|
91
|
+
source: Survey of ER/Defs on 2026-09-11 — 5725 Maximum and 3527 Minimum elements over 7302 fields,
|
|
92
|
+
so Maximum is absent on 1577 and Minimum on 3775; the commonest Maximum values are 1 (1046),
|
|
93
|
+
999999999 (832), 9999 (539), 99 (380) and 99999999 (320), and 131 fields carry Maximum
|
|
94
|
+
-294967297; no source states the game reads them
|
|
95
|
+
tags:
|
|
96
|
+
- paramdef
|
|
97
|
+
- minimum
|
|
98
|
+
- maximum
|
|
99
|
+
- validator
|
|
100
|
+
- limits
|
|
101
|
+
- id: eldenring.params.dsmapstudio-csv-shape
|
|
102
|
+
claim: A DSMapStudio/Smithbox CSV param export is `ID<d>Name<d><field>...` as a header line, then
|
|
103
|
+
`<id><d><name><d><value>...` per row, with the delimiter configurable and `,` by default. A
|
|
104
|
+
null row name is written `null`, a delimiter inside a name is replaced with `-`, and a dummy8
|
|
105
|
+
byte array is written `[1|2|3]` — which is why `|` is refused as a delimiter. Import
|
|
106
|
+
recognises a header only if the first line starts with `ID<d>Name`; otherwise the columns are
|
|
107
|
+
positional.
|
|
108
|
+
status: community
|
|
109
|
+
source: DSMapStudio src/StudioCore/ParamEditor/ParamIO.cs — GenerateColumnLabels, GenerateCSV,
|
|
110
|
+
ApplyCSV (`if (csvLines[0].StartsWith($@"ID{separator}Name"))`); ParamUtils.cs
|
|
111
|
+
Dummy8Write/Dummy8Read (`"[" + b ... "|" + b`); CFG.cs `_Param_Export_Delimiter = ","` and the
|
|
112
|
+
`"|"` guard
|
|
113
|
+
tags:
|
|
114
|
+
- csv
|
|
115
|
+
- dsmapstudio
|
|
116
|
+
- smithbox
|
|
117
|
+
- export
|
|
118
|
+
- delimiter
|
|
119
|
+
- dummy8
|
|
120
|
+
- format
|
|
121
|
+
detail: Values are `val.ToString()` of the .NET cell value unless it is a `byte[]`, which goes
|
|
122
|
+
through Dummy8Write — so a `dummy8` bitfield prints bare and only an array is bracketed.
|
|
123
|
+
GenerateColumnLabels ends the header with a trailing delimiter; rows do not, though ApplyCSV
|
|
124
|
+
accepts a row carrying one extra blank trailing column (`csvs.Length == csvLength + 1 &&
|
|
125
|
+
csvs[csvLength].Trim().Equals("")`). `src/surfaces/eldenring/params.ts` reads this shape.
|
|
126
|
+
- id: eldenring.params.witchybnd-xml-shape
|
|
127
|
+
claim: "A WitchyBND param unpack is `<param>` with `<type>` (the ParamType), `<game>`,
|
|
128
|
+
`<cellStyle>`, `<paramdef>` (its own `<type>`, `<bigEndian>`, `<unicode>`, `<dataVersion>`,
|
|
129
|
+
`<formatVersion>`), `<fields>` of `<field name type arraylength bitsize sortid>` and `<rows>`
|
|
130
|
+
of `<row id name|paramdexName>`. Cells are written in one of three styles the tool's setting
|
|
131
|
+
picks: child `<field name=\"...\">value` elements, attributes named after the field, or one
|
|
132
|
+
delimited string as the row's text."
|
|
133
|
+
status: community
|
|
134
|
+
source: WitchyBND/Parsers/XML/WPARAM/WPARAM.Unpack.cs (the XElement writes, `switch (cellStyle)`
|
|
135
|
+
with `CellStyle.Element`, `Attribute`, `CSV`); WPARAM.Repack.cs reads them back the same three
|
|
136
|
+
ways and throws "Row {id} {name} is missing value for cell {fieldName}" when a cell is absent
|
|
137
|
+
and not a fixstr
|
|
138
|
+
tags:
|
|
139
|
+
- xml
|
|
140
|
+
- witchybnd
|
|
141
|
+
- unpack
|
|
142
|
+
- param
|
|
143
|
+
- cellstyle
|
|
144
|
+
- format
|
|
145
|
+
detail: With ParamDefaultValues on, a field carries `defaultValue` and rows omit cells at the
|
|
146
|
+
default, so an absent cell is not an error on repack. `CellValueToString` brackets every
|
|
147
|
+
`dummy8` cell, bitfields included (a single byte is written `[n]`), which DSMapStudio does not
|
|
148
|
+
do. ModWright reads the Element and Attribute styles and counts delimited rows as unread
|
|
149
|
+
rather than guessing the delimiter.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
game: eldenring
|
|
2
|
+
topic: params.regulation
|
|
3
|
+
title: regulation.bin, paramdefs and the central conflict problem
|
|
4
|
+
facts:
|
|
5
|
+
- id: eldenring.regulation.is-an-aes-encrypted-bnd4-of-params
|
|
6
|
+
claim: regulation.bin is an AES-256-CBC encrypted BND4 container whose entries are the game's .param
|
|
7
|
+
tables. The first 16 bytes of the file are the IV in the clear, everything after is
|
|
8
|
+
ciphertext, and the 32-byte key is published in SoulsFormats. So the file has no readable
|
|
9
|
+
magic and cannot be inspected without decrypting first.
|
|
10
|
+
status: community
|
|
11
|
+
source: https://github.com/JKAnderson/SoulsFormats/blob/master/SoulsFormats/Util/SFUtil.cs
|
|
12
|
+
(`DecryptERRegulation` reads the file, calls `DecryptByteArray(erRegulationKey, ...)` and
|
|
13
|
+
returns `BND4.Read(bytes)`; the cipher block sets `cryptor.Mode = CipherMode.CBC`, `KeySize =
|
|
14
|
+
256`, `BlockSize = 128`, and splits a 16-byte `iv` off the front of the buffer before
|
|
15
|
+
decrypting the remainder); `erRegulationKey` is a 32-byte literal in the same file
|
|
16
|
+
tags:
|
|
17
|
+
- regulation
|
|
18
|
+
- aes
|
|
19
|
+
- encryption
|
|
20
|
+
- bnd4
|
|
21
|
+
- param
|
|
22
|
+
- magic
|
|
23
|
+
detail: Observed locally and consistent with the above - a real modded regulation.bin's first 64
|
|
24
|
+
bytes are uniform high-entropy noise with no `BND4` and no `DCX\0` anywhere, because bytes
|
|
25
|
+
0x00-0x0F are the random IV and 0x10 onward is ciphertext. The practical consequence for
|
|
26
|
+
ModWright is that no cheap header sniff can tell a valid regulation.bin from a corrupt one;
|
|
27
|
+
that check needs a tool.
|
|
28
|
+
- id: eldenring.regulation.paramdefs-come-from-paramdex
|
|
29
|
+
claim: A .param row is a flat record whose field names and types live outside the file, in a
|
|
30
|
+
paramdef. The community keeps Elden Ring's under `ER/` in soulsmods/Paramdex as XML, split
|
|
31
|
+
into Defs (field layout), Names (row names) and Tdfs (enum labels). Without a matching def, a
|
|
32
|
+
param is an untyped blob.
|
|
33
|
+
status: community
|
|
34
|
+
source: "https://github.com/soulsmods/Paramdex README (\"A collection of resources for working with
|
|
35
|
+
params via SoulsFormats and SoulsFormats-derived tools. Three folders are included for each
|
|
36
|
+
game: Defs - paramdefs required to edit param data, given in XML format... Names - predefined
|
|
37
|
+
row names, primarily for newer games with names stripped... Tdfs - paramtdfs provide friendly
|
|
38
|
+
names for enumerated types.\"); the repository's top level carries per-game folders including
|
|
39
|
+
`ER`"
|
|
40
|
+
tags:
|
|
41
|
+
- paramdef
|
|
42
|
+
- paramdex
|
|
43
|
+
- defs
|
|
44
|
+
- names
|
|
45
|
+
- tdfs
|
|
46
|
+
- index
|
|
47
|
+
- schema
|
|
48
|
+
detail: Paramdex's own README qualifies Elden Ring's provenance - "Paramdefs for SDT, ER, and ACVI
|
|
49
|
+
are mostly official but have been extended slightly due to updates" - i.e. the defs are close
|
|
50
|
+
to the shipped ones rather than fully reverse-engineered, which makes them a sound basis for a
|
|
51
|
+
typed validator. This is the closest Elden Ring equivalent to Cyberpunk's TweakDB schema, and
|
|
52
|
+
unlike TweakDB it is a plain-text repository ModWright can read with no game installed.
|
|
53
|
+
- id: eldenring.regulation.conflicts-are-record-level-inside-one-binary
|
|
54
|
+
claim: Two Elden Ring mods almost always both ship a whole regulation.bin, so at the file level they
|
|
55
|
+
always conflict and the loader silently picks one. The real conflict is per param row inside
|
|
56
|
+
that binary, and no loader resolves it — it must be resolved before launch, at build time.
|
|
57
|
+
status: community
|
|
58
|
+
source: https://github.com/soulsmods/ModEngine2/blob/main/installer/dist/config_eldenring.toml
|
|
59
|
+
("Note that modengine 2 currently has no way to resolve conflicting files including
|
|
60
|
+
regulation.bin, and thus the mod with the highest priority will have the modded file be loaded
|
|
61
|
+
in the case of conflict. Some support for merging of params and potentially other assets is
|
|
62
|
+
considered for a future release."); https://github.com/soulsmods/ModEngine2 README ("this is
|
|
63
|
+
still restricted to mods that don't replace conflicting files")
|
|
64
|
+
tags:
|
|
65
|
+
- conflict
|
|
66
|
+
- regulation
|
|
67
|
+
- merge
|
|
68
|
+
- load-order
|
|
69
|
+
- build
|
|
70
|
+
- find-conflicts
|
|
71
|
+
detail: This inverts ModWright's Skyrim guidance. For Skyrim the advice is that file-level conflict
|
|
72
|
+
detection under Data/ is noisy because the real conflicts are record-level between plugins;
|
|
73
|
+
for Elden Ring the file-level conflict is real and total (one file, one winner) *and* the
|
|
74
|
+
interesting conflict is record-level inside it. A `find_conflicts` that reports "both mods
|
|
75
|
+
ship regulation.bin" is correct but useless on its own; the useful answer needs the rows.
|
|
76
|
+
- id: eldenring.regulation.smithbox-merges-by-pasting-rows-between-projects
|
|
77
|
+
claim: Smithbox's Param Merger combines two mods' regulation edits by loading the other mod as a
|
|
78
|
+
second project ("aux bank") and pasting its added and/or modified rows into yours, per param.
|
|
79
|
+
It is implemented as generated mass-edit commands, so the merge semantics are a small,
|
|
80
|
+
inspectable string language rather than a bespoke algorithm.
|
|
81
|
+
status: community
|
|
82
|
+
source: 'src/Smithbox.Program/Editors/Param Editor/Tools/ParamMerger.cs at
|
|
83
|
+
https://github.com/vawser/Smithbox — `MergeParamsAction()` builds `$"auxparam
|
|
84
|
+
{ParamMerge_TargetProject.Descriptor.ProjectName} {entry.Key}: added: paste;"` when
|
|
85
|
+
`ParamMerge_IncludeAdded`, `"... auxmodified: paste;"` when `ParamMerge_IncludeModified`, and
|
|
86
|
+
`"... !added && auxmodified: paste;"` when only the latter is set'
|
|
87
|
+
tags:
|
|
88
|
+
- smithbox
|
|
89
|
+
- merge
|
|
90
|
+
- massedit
|
|
91
|
+
- auxparam
|
|
92
|
+
- regulation
|
|
93
|
+
- conflict
|
|
94
|
+
detail: The community wiki names this as the recommended path - its tool database's "Merging"
|
|
95
|
+
section lists DSMapStudio with the note "A modding suite that supports Param merging. For ER,
|
|
96
|
+
Smithbox is recommended", Smithbox itself, and one third-party "PRE-ALPHA WIP Tool that can
|
|
97
|
+
merge regulation.bins. Use with caution." Smithbox is GUI-only, but because the merge reduces
|
|
98
|
+
to mass-edit strings the same semantics are reachable headlessly through DSMSPortable's -M/-M+
|
|
99
|
+
scripts.
|
|
100
|
+
- id: eldenring.regulation.version-is-its-own-axis
|
|
101
|
+
claim: Elden Ring publishes two version numbers per patch — an App Ver and a Regulation Ver — and a
|
|
102
|
+
param mod is pinned to the second. A facts `verified_on` and any compat rule about a
|
|
103
|
+
regulation must say which axis it means, the way ModWright already separates Cyberpunk's
|
|
104
|
+
marketing version from its PE FileVersion.
|
|
105
|
+
status: community
|
|
106
|
+
source: https://en.bandainamcoent.eu/elden-ring/news/elden-ring-patch-notes-version-117 (dated
|
|
107
|
+
27/08/2026, headed "App Ver. 1.17 | Regulation Ver. 1.17"); the same two-axis heading appears
|
|
108
|
+
on the 1.16.1 notes
|
|
109
|
+
tags:
|
|
110
|
+
- version
|
|
111
|
+
- regulation-version
|
|
112
|
+
- compat
|
|
113
|
+
- axis
|
|
114
|
+
- patch
|
|
115
|
+
detail: "The two numbers have matched on the patches seen here, which makes it easy to conflate
|
|
116
|
+
them, but they are separate fields in FromSoftware's own notes and the tooling treats them
|
|
117
|
+
separately: DSMSPortable has a `-U oldvanillaparams` switch whose whole job is upgrading a
|
|
118
|
+
mod's params from one regulation version to a newer one, reporting the rows it could not carry
|
|
119
|
+
across, and WitchyBND refuses to repack a regulation whose version exceeds the newest it has
|
|
120
|
+
paramdefs for."
|
|
121
|
+
- id: eldenring.regulation.a-vanilla-param-index-needs-the-game
|
|
122
|
+
claim: A vanilla param index — the Elden Ring answer to ModWright's TweakDB and BG3 stats indexes —
|
|
123
|
+
is paramdefs from Paramdex applied to the rows in the *game's own* regulation.bin. The defs
|
|
124
|
+
can be fetched without the game; the row data cannot.
|
|
125
|
+
status: inferred
|
|
126
|
+
source: Derived from https://github.com/soulsmods/Paramdex README (defs are field layout and row
|
|
127
|
+
names only, no values) plus DSMSPortable's usage line at
|
|
128
|
+
https://github.com/mountlover/DSMSPortable, in which `-P gamepath` is documented as "Path to
|
|
129
|
+
the main install directory for the selected game, for loading vanilla params" and is required
|
|
130
|
+
for any diff or upgrade operation
|
|
131
|
+
tags:
|
|
132
|
+
- index
|
|
133
|
+
- vanilla
|
|
134
|
+
- paramdex
|
|
135
|
+
- build-index
|
|
136
|
+
- gamepath
|
|
137
|
+
- blocked
|
|
138
|
+
detail: This is the hard boundary on what can be prepared without an install. Field names, types,
|
|
139
|
+
enums and the row-name lists are all available offline and are enough for a typed "is this
|
|
140
|
+
field real, is this value in range" validator. Actual vanilla values — what EquipParamWeapon
|
|
141
|
+
row 1234 currently says — are not, so anything phrased as "compare against vanilla" is blocked
|
|
142
|
+
on a game install.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
game: eldenring
|
|
2
|
+
topic: saves.online
|
|
3
|
+
title: saves, steam cloud, anti-cheat and what makes a modded test run safe
|
|
4
|
+
facts:
|
|
5
|
+
- id: eldenring.saves.one-sl2-per-steam-account-under-appdata
|
|
6
|
+
claim: Elden Ring keeps one save file, ER0000.sl2, in a folder named after the player's 17-digit
|
|
7
|
+
SteamID under %APPDATA%\EldenRing\. The game writes an ER0000.sl2.bak alongside it, and Steam
|
|
8
|
+
Cloud syncs the folder.
|
|
9
|
+
status: community
|
|
10
|
+
source: 'https://github.com/ersc-docs/ersc-docs.github.io/blob/main/pages/faq.md, "How can I use my
|
|
11
|
+
Elden Ring characters in Seamless Coop" — "Click the address line, and enter:
|
|
12
|
+
`%appdata%/EldenRing/`. Enter the folder that corresponds to your SteamID. It will have a lot
|
|
13
|
+
of numbers. Copy `ER0000.sl2`, and paste it."'
|
|
14
|
+
tags:
|
|
15
|
+
- saves
|
|
16
|
+
- sl2
|
|
17
|
+
- appdata
|
|
18
|
+
- steamid
|
|
19
|
+
- backup
|
|
20
|
+
- steam-cloud
|
|
21
|
+
detail: "Observed locally, where the game itself is no longer installed but the save folder survives
|
|
22
|
+
- %APPDATA%\\EldenRing\\<steamid64>\\ holds ER0000.sl2 and ER0000.sl2.bak at ~27.6 MB each
|
|
23
|
+
plus a steam_autocloud.vdf, which is the Steam Cloud manifest. The single-file, cloud-synced,
|
|
24
|
+
~28 MB shape is the risk: there is no save slot directory to sandbox, so a modded run and a
|
|
25
|
+
vanilla run write the same file unless something intervenes, and Steam may then propagate the
|
|
26
|
+
result off-machine."
|
|
27
|
+
- id: eldenring.saves.modded-play-needs-a-separate-save-file
|
|
28
|
+
claim: The established way to keep modded play from touching a real save is to make the game use a
|
|
29
|
+
different save filename. Seamless Co-op does it with its own extension, defaulting to .co2,
|
|
30
|
+
and me3 does it with a profile's `savefile` field. Neither moves the save directory.
|
|
31
|
+
status: community
|
|
32
|
+
source: "https://github.com/garyttierney/me3/blob/main/docs/configuration-reference.md (\"savefile:
|
|
33
|
+
This optional field specifies the file name of the savefile the game will use instead of the
|
|
34
|
+
default one (e.g. `ER0000.sl2` in Elden Ring). It's extremely handy for compartmentalizing
|
|
35
|
+
modded content to avoid save corruption and multiplayer bans. If a file with that name does
|
|
36
|
+
not already exist, me3 copies and renames an existing base savefile. The default save
|
|
37
|
+
directory is unchanged.\");
|
|
38
|
+
https://github.com/ersc-docs/ersc-docs.github.io/blob/main/pages/faq.md (copy ER0000.sl2 and
|
|
39
|
+
\"Rename the pasted file `ER0000.co2`\")"
|
|
40
|
+
tags:
|
|
41
|
+
- saves
|
|
42
|
+
- savefile
|
|
43
|
+
- co2
|
|
44
|
+
- isolation
|
|
45
|
+
- safety
|
|
46
|
+
- testing
|
|
47
|
+
detail: Seamless Co-op's own guidance goes one step further for stacked mods - it recommends a third
|
|
48
|
+
extension so that a Mod-Engine-plus-co-op run is separate again from a plain co-op run. For
|
|
49
|
+
ModWright the practical rule is that any Elden Ring test run must state which save file it
|
|
50
|
+
will write before it launches anything, and the cheapest way to guarantee it is a `savefile`
|
|
51
|
+
line in the profile rather than manual file juggling.
|
|
52
|
+
- id: eldenring.saves.modded-launch-means-eac-never-starts
|
|
53
|
+
claim: Steam launches start_protected_game.exe, the Easy Anti-Cheat shim; a mod loader launches
|
|
54
|
+
Game\eldenring.exe directly instead, so EAC never starts. Modded play is therefore offline
|
|
55
|
+
play, and the absence of the EAC splash screen is the community's own check that a mod
|
|
56
|
+
installed correctly.
|
|
57
|
+
status: community
|
|
58
|
+
source: https://github.com/soulsmods/ModEngine2/blob/main/installer/dist/README.txt ("This includes
|
|
59
|
+
the game launching with EAC disabled so you can play with mods offline with no fear of being
|
|
60
|
+
banned."; and on renaming the launcher to "start_protected_game.exe", "game updates will
|
|
61
|
+
restore the existing exe and overwrite the Mod Engine 2 launcher if you do so");
|
|
62
|
+
https://github.com/ersc-docs/ersc-docs.github.io/blob/main/pages/how-to-install.md ("return to
|
|
63
|
+
the `Game` folder, and open `ersc_launcher.exe`. If there is no EAC splash screen on launch,
|
|
64
|
+
the mod was installed correctly!")
|
|
65
|
+
tags:
|
|
66
|
+
- eac
|
|
67
|
+
- anticheat
|
|
68
|
+
- offline
|
|
69
|
+
- launch
|
|
70
|
+
- ban
|
|
71
|
+
- start-protected-game
|
|
72
|
+
detail: 'There is no flag for this in either loader - it is purely a consequence of which executable
|
|
73
|
+
is started. The same doc names the failure mode when injection does not take: "If you are
|
|
74
|
+
getting `Inappropriate Activity Detected` after mod launch, that means that it failed to
|
|
75
|
+
load." That string is a usable triage signature even though it appears on screen rather than
|
|
76
|
+
in any log.'
|
|
77
|
+
- id: eldenring.saves.file-mods-are-not-ban-grounds-but-save-edits-may-be
|
|
78
|
+
claim: The community's own position, stated by the author of the unpacker, is that file mods have
|
|
79
|
+
never been grounds for a ban in a Souls game, but mods that alter the save may not be safe —
|
|
80
|
+
and that a modified exe cannot go online at all.
|
|
81
|
+
status: community
|
|
82
|
+
source: https://github.com/Nordgaren/UXM-Selective-Unpack README, "Bannability" section — "UXM only
|
|
83
|
+
edits data within the executable, not code, so anticheat should have no effect on it. File
|
|
84
|
+
mods in general have never been grounds for a ban in any of the Souls games, but mods that
|
|
85
|
+
alter your save may not be safe, so please consult your mod author's advice and play offline
|
|
86
|
+
if using anything dubious." and "You cannot play online with an modified exe, so you cannot go
|
|
87
|
+
online with an unpacked game (Nor can you go online with Mod Engine 2)"
|
|
88
|
+
tags:
|
|
89
|
+
- ban
|
|
90
|
+
- anticheat
|
|
91
|
+
- online
|
|
92
|
+
- saves
|
|
93
|
+
- risk
|
|
94
|
+
- guidance
|
|
95
|
+
detail: "This is a community position, not a statement from FromSoftware or Bandai Namco, and should
|
|
96
|
+
be relayed as such. me3 encodes the cautious reading in code: matchmaking is blocked unless a
|
|
97
|
+
profile opts in, and its CLI help for that opt-in calls it a ban risk outright."
|
|
98
|
+
- id: eldenring.saves.the-game-writes-no-log-of-its-own
|
|
99
|
+
claim: No primary source consulted states that Elden Ring writes any log, crash log or dump of its
|
|
100
|
+
own. Every log worth triaging belongs to the loader or the tooling, not the game, so a
|
|
101
|
+
log-triage surface here speaks only for the loader.
|
|
102
|
+
status: community
|
|
103
|
+
source: Searched without a hit - the community wiki's full page index
|
|
104
|
+
(http://soulsmodding.wikidot.com/system:list-all-pages) has no crash or log page for Elden
|
|
105
|
+
Ring, and neither ModEngine2's nor me3's documentation mentions a game-written log. Mod Engine
|
|
106
|
+
2's README lists "Crash dumps for all users" as its own feature, and me3's changelog describes
|
|
107
|
+
its own minidump crash handler
|
|
108
|
+
tags:
|
|
109
|
+
- logs
|
|
110
|
+
- crash
|
|
111
|
+
- triage
|
|
112
|
+
- gap
|
|
113
|
+
- not-found
|
|
114
|
+
detail: The one game-adjacent artefact seen locally is a `crashdumps` folder in the Game directory
|
|
115
|
+
holding a Crashpad `metadata` file naming three .dmp files — but Crashpad is what Mod Engine 2
|
|
116
|
+
ships (its distribution has a crashpad/ folder with crashpad_handler.exe), so that is the
|
|
117
|
+
loader's crash handler, not the game's. Treat "the game produced no log" as the expected state
|
|
118
|
+
rather than a broken install.
|