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.
Files changed (455) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +212 -0
  3. package/assets/claude/agents/mw-explore.md +46 -0
  4. package/assets/claude/agents/mw-fixture.md +33 -0
  5. package/assets/claude/agents/mw-rule-author.md +51 -0
  6. package/assets/claude/agents/mw-scaffold-author.md +48 -0
  7. package/assets/claude/skills/mw-author.md +59 -0
  8. package/assets/claude/skills/mw-new-item.md +51 -0
  9. package/assets/claude/skills/mw-new-spell.md +50 -0
  10. package/assets/claude/skills/mw-scaffold.md +59 -0
  11. package/assets/claude/skills/mw-ship.md +57 -0
  12. package/assets/claude/skills/mw-validate.md +51 -0
  13. package/assets/claude/skills/mw-verify.md +59 -0
  14. package/assets/nivalisnights/extract_resources.py +177 -0
  15. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Config.json +5 -0
  16. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapClient.lua +55 -0
  17. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapServer.lua +81 -0
  18. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Log.lua +96 -0
  19. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Probes.lua +1038 -0
  20. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/ProbesClient.lua +74 -0
  21. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Protocol.lua +985 -0
  22. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Watch.lua +175 -0
  23. package/bridges/bg3-se/Mods/ModWrightBridge/meta.lsx +45 -0
  24. package/bridges/bg3-se/README.md +99 -0
  25. package/bridges/bg3-se/bridge.json +68 -0
  26. package/bridges/cp2077-cet/ModWrightBridge/init.lua +375 -0
  27. package/bridges/cp2077-cet/ModWrightBridge/probes.lua +1104 -0
  28. package/bridges/cp2077-cet/ModWrightBridge/protocol.lua +1306 -0
  29. package/bridges/cp2077-cet/README.md +165 -0
  30. package/bridges/cp2077-cet/bridge.json +53 -0
  31. package/dist/core/bridge/arm.js +175 -0
  32. package/dist/core/bridge/cet-console.js +26 -0
  33. package/dist/core/bridge/cet-log.js +362 -0
  34. package/dist/core/bridge/index.js +11 -0
  35. package/dist/core/bridge/locate.js +35 -0
  36. package/dist/core/bridge/paths.js +34 -0
  37. package/dist/core/bridge/pending.js +89 -0
  38. package/dist/core/bridge/poll.js +155 -0
  39. package/dist/core/bridge/stage.js +100 -0
  40. package/dist/core/bridge/status.js +97 -0
  41. package/dist/core/bridge/types.js +145 -0
  42. package/dist/core/bridge/validate.js +107 -0
  43. package/dist/core/build/index.js +6 -0
  44. package/dist/core/build/manifest.js +47 -0
  45. package/dist/core/build/paths.js +32 -0
  46. package/dist/core/build/run.js +342 -0
  47. package/dist/core/build/stage.js +265 -0
  48. package/dist/core/build/steps/bg3.js +129 -0
  49. package/dist/core/build/steps/core.js +195 -0
  50. package/dist/core/build/steps/cyberpunk.js +95 -0
  51. package/dist/core/build/steps/listing.js +35 -0
  52. package/dist/core/build/types.js +13 -0
  53. package/dist/core/build/zip.js +148 -0
  54. package/dist/core/compat/check.js +113 -0
  55. package/dist/core/compat/pe.js +220 -0
  56. package/dist/core/compat/types.js +1 -0
  57. package/dist/core/compat/version.js +70 -0
  58. package/dist/core/deploy/guards.js +292 -0
  59. package/dist/core/deploy/index.js +5 -0
  60. package/dist/core/deploy/plan.js +696 -0
  61. package/dist/core/deploy/reload-apply.js +361 -0
  62. package/dist/core/deploy/reload.js +358 -0
  63. package/dist/core/deploy/sources.js +169 -0
  64. package/dist/core/deploy/types.js +1 -0
  65. package/dist/core/epic.js +54 -0
  66. package/dist/core/fsutil.js +191 -0
  67. package/dist/core/home.js +70 -0
  68. package/dist/core/knowledge/facts.js +229 -0
  69. package/dist/core/knowledge/index.js +4 -0
  70. package/dist/core/knowledge/search.js +112 -0
  71. package/dist/core/knowledge/store.js +123 -0
  72. package/dist/core/knowledge/types.js +1 -0
  73. package/dist/core/ledger/check.js +42 -0
  74. package/dist/core/ledger/hooks.js +80 -0
  75. package/dist/core/ledger/index.js +7 -0
  76. package/dist/core/ledger/query.js +17 -0
  77. package/dist/core/ledger/record.js +84 -0
  78. package/dist/core/ledger/status.js +53 -0
  79. package/dist/core/ledger/store.js +98 -0
  80. package/dist/core/ledger/types.js +108 -0
  81. package/dist/core/logs/index.js +4 -0
  82. package/dist/core/logs/registry.js +50 -0
  83. package/dist/core/logs/scan.js +195 -0
  84. package/dist/core/logs/triage.js +160 -0
  85. package/dist/core/logs/types.js +1 -0
  86. package/dist/core/lsx.js +10 -0
  87. package/dist/core/lz4.js +66 -0
  88. package/dist/core/mods.js +229 -0
  89. package/dist/core/process.js +49 -0
  90. package/dist/core/project/build-steps.js +83 -0
  91. package/dist/core/project/describe.js +74 -0
  92. package/dist/core/project/index.js +5 -0
  93. package/dist/core/project/load.js +146 -0
  94. package/dist/core/project/schema.js +264 -0
  95. package/dist/core/project/types.js +3 -0
  96. package/dist/core/prompts.js +72 -0
  97. package/dist/core/registry.js +35 -0
  98. package/dist/core/safety/backup.js +206 -0
  99. package/dist/core/safety/execute.js +188 -0
  100. package/dist/core/safety/index.js +5 -0
  101. package/dist/core/safety/plan.js +122 -0
  102. package/dist/core/safety/restore.js +172 -0
  103. package/dist/core/safety/types.js +1 -0
  104. package/dist/core/scaffold/bootstrap.js +7 -0
  105. package/dist/core/scaffold/catalog.js +28 -0
  106. package/dist/core/scaffold/claude-assets.js +271 -0
  107. package/dist/core/scaffold/collisions.js +64 -0
  108. package/dist/core/scaffold/emit.js +356 -0
  109. package/dist/core/scaffold/engine.js +680 -0
  110. package/dist/core/scaffold/ids.js +78 -0
  111. package/dist/core/scaffold/index.js +10 -0
  112. package/dist/core/scaffold/jsonpath.js +121 -0
  113. package/dist/core/scaffold/load.js +81 -0
  114. package/dist/core/scaffold/render.js +85 -0
  115. package/dist/core/scaffold/sequence.js +396 -0
  116. package/dist/core/scaffold/types.js +309 -0
  117. package/dist/core/steam.js +63 -0
  118. package/dist/core/surfaceutil.js +36 -0
  119. package/dist/core/testplan/check.js +67 -0
  120. package/dist/core/testplan/index.js +5 -0
  121. package/dist/core/testplan/load.js +100 -0
  122. package/dist/core/testplan/registry.js +317 -0
  123. package/dist/core/testplan/run.js +389 -0
  124. package/dist/core/testplan/types.js +82 -0
  125. package/dist/core/text/converters/bg3.js +50 -0
  126. package/dist/core/text/converters/cyberpunk.js +36 -0
  127. package/dist/core/text/converters/index.js +261 -0
  128. package/dist/core/text/diff/cr2w.js +180 -0
  129. package/dist/core/text/diff/index.js +16 -0
  130. package/dist/core/text/diff/loca.js +43 -0
  131. package/dist/core/text/diff/lsx.js +126 -0
  132. package/dist/core/text/handles.js +86 -0
  133. package/dist/core/text/index.js +6 -0
  134. package/dist/core/text/json.js +46 -0
  135. package/dist/core/text/templates/cache.js +71 -0
  136. package/dist/core/text/templates/index.js +3 -0
  137. package/dist/core/text/templates/library.js +245 -0
  138. package/dist/core/text/templates/types.js +51 -0
  139. package/dist/core/text/toolchain.js +16 -0
  140. package/dist/core/text/types.js +1 -0
  141. package/dist/core/text/validate.js +149 -0
  142. package/dist/core/text/xml.js +58 -0
  143. package/dist/core/toolchain/datafetch.js +151 -0
  144. package/dist/core/toolchain/env.js +63 -0
  145. package/dist/core/toolchain/features.js +170 -0
  146. package/dist/core/toolchain/index.js +8 -0
  147. package/dist/core/toolchain/install.js +191 -0
  148. package/dist/core/toolchain/locate.js +275 -0
  149. package/dist/core/toolchain/remember.js +84 -0
  150. package/dist/core/toolchain/run.js +318 -0
  151. package/dist/core/toolchain/specs.js +351 -0
  152. package/dist/core/toolchain/types.js +1 -0
  153. package/dist/core/types.js +1 -0
  154. package/dist/core/userconfig.js +66 -0
  155. package/dist/core/validate/context.js +139 -0
  156. package/dist/core/validate/index.js +5 -0
  157. package/dist/core/validate/registry.js +58 -0
  158. package/dist/core/validate/run.js +131 -0
  159. package/dist/core/validate/suppressions.js +91 -0
  160. package/dist/core/validate/types.js +2 -0
  161. package/dist/core/yamledit.js +51 -0
  162. package/dist/index.js +389 -0
  163. package/dist/server.js +1914 -0
  164. package/dist/surfaces/baldursgate3/compat.js +164 -0
  165. package/dist/surfaces/baldursgate3/identity.js +110 -0
  166. package/dist/surfaces/baldursgate3/index/build.js +331 -0
  167. package/dist/surfaces/baldursgate3/index/index.js +17 -0
  168. package/dist/surfaces/baldursgate3/index/info.js +40 -0
  169. package/dist/surfaces/baldursgate3/index/parsers/loca.js +41 -0
  170. package/dist/surfaces/baldursgate3/index/parsers/lsx.js +137 -0
  171. package/dist/surfaces/baldursgate3/index/parsers/stats.js +45 -0
  172. package/dist/surfaces/baldursgate3/index/parsers/treasuretable.js +57 -0
  173. package/dist/surfaces/baldursgate3/index/parsers/xmlutil.js +142 -0
  174. package/dist/surfaces/baldursgate3/index/queries.js +327 -0
  175. package/dist/surfaces/baldursgate3/index/schema.js +62 -0
  176. package/dist/surfaces/baldursgate3/index.js +3 -0
  177. package/dist/surfaces/baldursgate3/logs.js +278 -0
  178. package/dist/surfaces/baldursgate3/modsettings.js +115 -0
  179. package/dist/surfaces/baldursgate3/pak.js +153 -0
  180. package/dist/surfaces/baldursgate3/settings.js +49 -0
  181. package/dist/surfaces/baldursgate3/surface.js +232 -0
  182. package/dist/surfaces/baldursgate3/validators/bridge.js +7 -0
  183. package/dist/surfaces/baldursgate3/validators/files.js +476 -0
  184. package/dist/surfaces/baldursgate3/validators/items.js +1001 -0
  185. package/dist/surfaces/baldursgate3/validators/progression.js +734 -0
  186. package/dist/surfaces/baldursgate3/validators/stats.js +1076 -0
  187. package/dist/surfaces/baldursgate3/validators/story.js +790 -0
  188. package/dist/surfaces/baldursgate3/validators/templates.js +7 -0
  189. package/dist/surfaces/cyberpunk2077/compat.js +223 -0
  190. package/dist/surfaces/cyberpunk2077/index/build.js +231 -0
  191. package/dist/surfaces/cyberpunk2077/index/index.js +17 -0
  192. package/dist/surfaces/cyberpunk2077/index/info.js +51 -0
  193. package/dist/surfaces/cyberpunk2077/index/model.js +52 -0
  194. package/dist/surfaces/cyberpunk2077/index/parsers/tweak.js +483 -0
  195. package/dist/surfaces/cyberpunk2077/index/parsers/tweakxl-yaml.js +183 -0
  196. package/dist/surfaces/cyberpunk2077/index/queries.js +504 -0
  197. package/dist/surfaces/cyberpunk2077/index/resource.js +135 -0
  198. package/dist/surfaces/cyberpunk2077/index/schema.js +90 -0
  199. package/dist/surfaces/cyberpunk2077/index.js +3 -0
  200. package/dist/surfaces/cyberpunk2077/logs.js +742 -0
  201. package/dist/surfaces/cyberpunk2077/paths.js +12 -0
  202. package/dist/surfaces/cyberpunk2077/surface.js +218 -0
  203. package/dist/surfaces/cyberpunk2077/validators/bridge.js +7 -0
  204. package/dist/surfaces/cyberpunk2077/validators/cr2w.js +349 -0
  205. package/dist/surfaces/cyberpunk2077/validators/garments.js +1181 -0
  206. package/dist/surfaces/cyberpunk2077/validators/mesh.js +338 -0
  207. package/dist/surfaces/cyberpunk2077/validators/modsettings.js +120 -0
  208. package/dist/surfaces/cyberpunk2077/validators/packaging.js +463 -0
  209. package/dist/surfaces/cyberpunk2077/validators/red4ext.js +318 -0
  210. package/dist/surfaces/cyberpunk2077/validators/redscript.js +193 -0
  211. package/dist/surfaces/cyberpunk2077/validators/templates.js +7 -0
  212. package/dist/surfaces/cyberpunk2077/validators/tweaks.js +768 -0
  213. package/dist/surfaces/cyberpunk2077/validators/vehicles.js +531 -0
  214. package/dist/surfaces/cyberpunk2077/validators/xl.js +308 -0
  215. package/dist/surfaces/eldenring/binders.js +111 -0
  216. package/dist/surfaces/eldenring/compat.js +166 -0
  217. package/dist/surfaces/eldenring/dcx.js +49 -0
  218. package/dist/surfaces/eldenring/index.js +13 -0
  219. package/dist/surfaces/eldenring/loaders.js +132 -0
  220. package/dist/surfaces/eldenring/logs.js +67 -0
  221. package/dist/surfaces/eldenring/paramdef.js +256 -0
  222. package/dist/surfaces/eldenring/params.js +129 -0
  223. package/dist/surfaces/eldenring/surface.js +121 -0
  224. package/dist/surfaces/eldenring/tools.js +52 -0
  225. package/dist/surfaces/eldenring/validators/binders.js +193 -0
  226. package/dist/surfaces/eldenring/validators/packages.js +159 -0
  227. package/dist/surfaces/eldenring/validators/params.js +334 -0
  228. package/dist/surfaces/eldenring/validators/profiles.js +287 -0
  229. package/dist/surfaces/index.js +34 -0
  230. package/dist/surfaces/nivalisnights/compat.js +229 -0
  231. package/dist/surfaces/nivalisnights/index/build.js +310 -0
  232. package/dist/surfaces/nivalisnights/index/index.js +5 -0
  233. package/dist/surfaces/nivalisnights/index/queries.js +231 -0
  234. package/dist/surfaces/nivalisnights/index.js +4 -0
  235. package/dist/surfaces/nivalisnights/logs.js +473 -0
  236. package/dist/surfaces/nivalisnights/surface.js +195 -0
  237. package/dist/surfaces/skyrimse/archives.js +229 -0
  238. package/dist/surfaces/skyrimse/compat.js +163 -0
  239. package/dist/surfaces/skyrimse/index.js +12 -0
  240. package/dist/surfaces/skyrimse/loadorder.js +174 -0
  241. package/dist/surfaces/skyrimse/logs.js +241 -0
  242. package/dist/surfaces/skyrimse/plugins.js +149 -0
  243. package/dist/surfaces/skyrimse/records.js +94 -0
  244. package/dist/surfaces/skyrimse/surface.js +240 -0
  245. package/dist/surfaces/skyrimse/validators/archive-records.js +165 -0
  246. package/dist/surfaces/skyrimse/validators/archives.js +110 -0
  247. package/dist/surfaces/skyrimse/validators/plugins.js +374 -0
  248. package/dist/surfaces/skyrimse/validators/records.js +117 -0
  249. package/dist/surfaces/stardewvalley/compat.js +190 -0
  250. package/dist/surfaces/stardewvalley/config.js +42 -0
  251. package/dist/surfaces/stardewvalley/contentpatcher.js +203 -0
  252. package/dist/surfaces/stardewvalley/index/index.js +229 -0
  253. package/dist/surfaces/stardewvalley/index/wiki.js +190 -0
  254. package/dist/surfaces/stardewvalley/index.js +12 -0
  255. package/dist/surfaces/stardewvalley/logs.js +307 -0
  256. package/dist/surfaces/stardewvalley/mods.js +182 -0
  257. package/dist/surfaces/stardewvalley/surface.js +244 -0
  258. package/dist/surfaces/stardewvalley/validators/content.js +321 -0
  259. package/dist/surfaces/stardewvalley/validators/fields.js +147 -0
  260. package/dist/surfaces/stardewvalley/validators/loadorder.js +69 -0
  261. package/dist/surfaces/stardewvalley/validators/manifest.js +221 -0
  262. package/dist/surfaces/subnautica2/compat.js +138 -0
  263. package/dist/surfaces/subnautica2/index.js +5 -0
  264. package/dist/surfaces/subnautica2/logs.js +129 -0
  265. package/dist/surfaces/subnautica2/paks.js +173 -0
  266. package/dist/surfaces/subnautica2/surface.js +151 -0
  267. package/dist/surfaces/subnautica2/validators/packaging.js +298 -0
  268. package/dist/surfaces/valheim/compat.js +171 -0
  269. package/dist/surfaces/valheim/index/index.js +301 -0
  270. package/dist/surfaces/valheim/index/tables.js +103 -0
  271. package/dist/surfaces/valheim/index.js +11 -0
  272. package/dist/surfaces/valheim/logs.js +197 -0
  273. package/dist/surfaces/valheim/packaging.js +131 -0
  274. package/dist/surfaces/valheim/plugins.js +270 -0
  275. package/dist/surfaces/valheim/references.js +121 -0
  276. package/dist/surfaces/valheim/surface.js +223 -0
  277. package/dist/surfaces/valheim/validators/packaging.js +218 -0
  278. package/dist/surfaces/valheim/validators/plugins.js +287 -0
  279. package/dist/surfaces/valheim/validators/references.js +169 -0
  280. package/knowledge/baldursgate3/animations.gr2.yaml +166 -0
  281. package/knowledge/baldursgate3/audio.voice.yaml +182 -0
  282. package/knowledge/baldursgate3/audio.wwise.yaml +104 -0
  283. package/knowledge/baldursgate3/charactercreation.heads-hair.yaml +193 -0
  284. package/knowledge/baldursgate3/communitylibrary.shared-content.yaml +129 -0
  285. package/knowledge/baldursgate3/compatibilityframework.api.yaml +176 -0
  286. package/knowledge/baldursgate3/crash.causes.yaml +90 -0
  287. package/knowledge/baldursgate3/dialogue.dialogbank.yaml +120 -0
  288. package/knowledge/baldursgate3/dialogue.files.yaml +236 -0
  289. package/knowledge/baldursgate3/dialogue.osiris-goals.yaml +386 -0
  290. package/knowledge/baldursgate3/dialogue.yaml +122 -0
  291. package/knowledge/baldursgate3/feats.classes.yaml +164 -0
  292. package/knowledge/baldursgate3/items.cloth-physics.yaml +167 -0
  293. package/knowledge/baldursgate3/items.roottemplates.yaml +320 -0
  294. package/knowledge/baldursgate3/items.visualbank.yaml +628 -0
  295. package/knowledge/baldursgate3/journal.quests.yaml +214 -0
  296. package/knowledge/baldursgate3/loadorder.modsettings.yaml +128 -0
  297. package/knowledge/baldursgate3/localization.handles.yaml +92 -0
  298. package/knowledge/baldursgate3/misc.encoding-and-practice.yaml +111 -0
  299. package/knowledge/baldursgate3/origins.companions.yaml +144 -0
  300. package/knowledge/baldursgate3/osiris.signatures.yaml +211 -0
  301. package/knowledge/baldursgate3/packaging.meta.yaml +155 -0
  302. package/knowledge/baldursgate3/packaging.paks.yaml +79 -0
  303. package/knowledge/baldursgate3/process.launch.yaml +34 -0
  304. package/knowledge/baldursgate3/progressions.yaml +92 -0
  305. package/knowledge/baldursgate3/publishing.modio-nexus.yaml +170 -0
  306. package/knowledge/baldursgate3/publishing.toolkit-modio.yaml +135 -0
  307. package/knowledge/baldursgate3/races.progression.yaml +228 -0
  308. package/knowledge/baldursgate3/scriptextender.console.yaml +257 -0
  309. package/knowledge/baldursgate3/scriptextender.yaml +252 -0
  310. package/knowledge/baldursgate3/stats.boosts.yaml +293 -0
  311. package/knowledge/baldursgate3/stats.equipment-kits.yaml +69 -0
  312. package/knowledge/baldursgate3/stats.interrupts.yaml +45 -0
  313. package/knowledge/baldursgate3/stats.itemcombos.yaml +65 -0
  314. package/knowledge/baldursgate3/stats.spells.yaml +293 -0
  315. package/knowledge/baldursgate3/stats.weapons.yaml +210 -0
  316. package/knowledge/baldursgate3/toolchain.divine.yaml +179 -0
  317. package/knowledge/baldursgate3/toolchain.lslib-formats.yaml +242 -0
  318. package/knowledge/baldursgate3/toolkit.levels.yaml +177 -0
  319. package/knowledge/baldursgate3/ui.icons-atlas.yaml +78 -0
  320. package/knowledge/baldursgate3/ui.icons.yaml +412 -0
  321. package/knowledge/baldursgate3/ui.mcm.yaml +161 -0
  322. package/knowledge/baldursgate3/vfx.materials.yaml +174 -0
  323. package/knowledge/baldursgate3/visuals.characterfix.yaml +73 -0
  324. package/knowledge/cyberpunk2077/animations.anims.yaml +118 -0
  325. package/knowledge/cyberpunk2077/anims.archivexl.yaml +163 -0
  326. package/knowledge/cyberpunk2077/anims.authoring.yaml +579 -0
  327. package/knowledge/cyberpunk2077/anims.encoder.yaml +156 -0
  328. package/knowledge/cyberpunk2077/anims.graph.yaml +629 -0
  329. package/knowledge/cyberpunk2077/anims.method.yaml +360 -0
  330. package/knowledge/cyberpunk2077/anims.pipeline.yaml +352 -0
  331. package/knowledge/cyberpunk2077/anims.roundtrip.yaml +222 -0
  332. package/knowledge/cyberpunk2077/anims.sets.yaml +176 -0
  333. package/knowledge/cyberpunk2077/archivexl.bodytypes.yaml +149 -0
  334. package/knowledge/cyberpunk2077/archivexl.dynamic-appearances.yaml +218 -0
  335. package/knowledge/cyberpunk2077/archivexl.manifest.yaml +214 -0
  336. package/knowledge/cyberpunk2077/audio.events.yaml +168 -0
  337. package/knowledge/cyberpunk2077/audio.sounds.yaml +164 -0
  338. package/knowledge/cyberpunk2077/audio.voicesets.yaml +146 -0
  339. package/knowledge/cyberpunk2077/cet.sandbox.yaml +219 -0
  340. package/knowledge/cyberpunk2077/clothing.garments.yaml +283 -0
  341. package/knowledge/cyberpunk2077/clothing.refits.yaml +215 -0
  342. package/knowledge/cyberpunk2077/codeware.overview.yaml +111 -0
  343. package/knowledge/cyberpunk2077/codeware.systems.yaml +192 -0
  344. package/knowledge/cyberpunk2077/drones.combat.yaml +416 -0
  345. package/knowledge/cyberpunk2077/drones.control.yaml +552 -0
  346. package/knowledge/cyberpunk2077/entities.appearance.yaml +166 -0
  347. package/knowledge/cyberpunk2077/equipmentex.slots.yaml +151 -0
  348. package/knowledge/cyberpunk2077/fx.effects.yaml +246 -0
  349. package/knowledge/cyberpunk2077/fx.lights.yaml +171 -0
  350. package/knowledge/cyberpunk2077/hair.modding.yaml +145 -0
  351. package/knowledge/cyberpunk2077/items.wiring.yaml +246 -0
  352. package/knowledge/cyberpunk2077/loadorder.archives.yaml +71 -0
  353. package/knowledge/cyberpunk2077/mesh.blender.yaml +209 -0
  354. package/knowledge/cyberpunk2077/nativedb.dump.yaml +98 -0
  355. package/knowledge/cyberpunk2077/npc.appearance.yaml +275 -0
  356. package/knowledge/cyberpunk2077/npc.behaviour.yaml +128 -0
  357. package/knowledge/cyberpunk2077/npc.locomotion.yaml +490 -0
  358. package/knowledge/cyberpunk2077/packaging.deploy.yaml +175 -0
  359. package/knowledge/cyberpunk2077/packaging.variants.yaml +176 -0
  360. package/knowledge/cyberpunk2077/player.control.yaml +918 -0
  361. package/knowledge/cyberpunk2077/process.assetbuild.yaml +154 -0
  362. package/knowledge/cyberpunk2077/process.lessons.yaml +276 -0
  363. package/knowledge/cyberpunk2077/quests.minor.yaml +46 -0
  364. package/knowledge/cyberpunk2077/quests.scenes.yaml +282 -0
  365. package/knowledge/cyberpunk2077/quickhacks.tiers.yaml +41 -0
  366. package/knowledge/cyberpunk2077/red4ext.api.yaml +645 -0
  367. package/knowledge/cyberpunk2077/red4ext.plugins.yaml +124 -0
  368. package/knowledge/cyberpunk2077/redhottools.hotreload.yaml +245 -0
  369. package/knowledge/cyberpunk2077/redscript.compile-log.yaml +76 -0
  370. package/knowledge/cyberpunk2077/redscript.modules.yaml +118 -0
  371. package/knowledge/cyberpunk2077/toolchain.wolvenkit.yaml +163 -0
  372. package/knowledge/cyberpunk2077/tweakdb.loot-recipes.yaml +184 -0
  373. package/knowledge/cyberpunk2077/tweakdb.melee.yaml +352 -0
  374. package/knowledge/cyberpunk2077/tweakdb.weapons.yaml +325 -0
  375. package/knowledge/cyberpunk2077/tweakxl.hotreload.yaml +151 -0
  376. package/knowledge/cyberpunk2077/tweakxl.yaml-syntax.yaml +208 -0
  377. package/knowledge/cyberpunk2077/ui.icons.yaml +259 -0
  378. package/knowledge/cyberpunk2077/ui.inkatlas.yaml +81 -0
  379. package/knowledge/cyberpunk2077/ui.modsettings.yaml +204 -0
  380. package/knowledge/cyberpunk2077/vehicles.control.yaml +475 -0
  381. package/knowledge/cyberpunk2077/vehicles.dashboard-ui.yaml +203 -0
  382. package/knowledge/cyberpunk2077/vehicles.entities.yaml +195 -0
  383. package/knowledge/cyberpunk2077/vehicles.wiring.yaml +137 -0
  384. package/knowledge/cyberpunk2077/wolvenkit.cli.yaml +167 -0
  385. package/knowledge/cyberpunk2077/workspot.system.yaml +55 -0
  386. package/knowledge/cyberpunk2077/world.interactions.yaml +41 -0
  387. package/knowledge/cyberpunk2077/world.loot-container.yaml +167 -0
  388. package/knowledge/cyberpunk2077/world.sectors.yaml +233 -0
  389. package/knowledge/eldenring/formats.binders.yaml +237 -0
  390. package/knowledge/eldenring/launcher.me3.yaml +230 -0
  391. package/knowledge/eldenring/launcher.modengine2.yaml +119 -0
  392. package/knowledge/eldenring/params.paramdef.yaml +149 -0
  393. package/knowledge/eldenring/params.regulation.yaml +142 -0
  394. package/knowledge/eldenring/saves.online.yaml +118 -0
  395. package/knowledge/eldenring/toolchain.cli.yaml +256 -0
  396. package/knowledge/nivalisnights/modding.runtime.yaml +157 -0
  397. package/knowledge/skyrimse/archives.bsa.yaml +212 -0
  398. package/knowledge/skyrimse/install.detection.yaml +41 -0
  399. package/knowledge/skyrimse/loadorder.files.yaml +242 -0
  400. package/knowledge/skyrimse/plugins.esl.yaml +189 -0
  401. package/knowledge/skyrimse/plugins.format.yaml +224 -0
  402. package/knowledge/skyrimse/skse.runtime.yaml +283 -0
  403. package/knowledge/skyrimse/toolchain.xedit-spriggit.yaml +336 -0
  404. package/knowledge/stardewvalley/contentpatcher.format.yaml +338 -0
  405. package/knowledge/stardewvalley/distribution.channels.yaml +236 -0
  406. package/knowledge/stardewvalley/game.versions.yaml +202 -0
  407. package/knowledge/stardewvalley/install.layout.yaml +277 -0
  408. package/knowledge/stardewvalley/smapi.loader.yaml +284 -0
  409. package/knowledge/stardewvalley/smapi.logs.yaml +329 -0
  410. package/knowledge/stardewvalley/smapi.manifest.yaml +293 -0
  411. package/knowledge/stardewvalley/toolchain.build.yaml +261 -0
  412. package/knowledge/stardewvalley/wiki.dataformat.yaml +130 -0
  413. package/knowledge/subnautica2/game.build.yaml +331 -0
  414. package/knowledge/subnautica2/modding.state.yaml +210 -0
  415. package/knowledge/subnautica2/ue5.containers.yaml +72 -0
  416. package/knowledge/subnautica2/ue5.paks.yaml +203 -0
  417. package/knowledge/subnautica2/ue5.tooling.yaml +175 -0
  418. package/knowledge/subnautica2/ue5.ue4ss.yaml +203 -0
  419. package/knowledge/valheim/bepinex.loader.yaml +247 -0
  420. package/knowledge/valheim/bepinex.plugins.yaml +251 -0
  421. package/knowledge/valheim/game.versions.yaml +321 -0
  422. package/knowledge/valheim/install.layout.yaml +216 -0
  423. package/knowledge/valheim/jotunn.library.yaml +334 -0
  424. package/knowledge/valheim/thunderstore.packaging.yaml +217 -0
  425. package/knowledge/valheim/toolchain.build.yaml +111 -0
  426. package/package.json +29 -0
  427. package/scaffolds/baldursgate3/new-class-injection.yaml +148 -0
  428. package/scaffolds/baldursgate3/new-item.yaml +264 -0
  429. package/scaffolds/baldursgate3/new-mod.yaml +174 -0
  430. package/scaffolds/baldursgate3/new-passive.yaml +100 -0
  431. package/scaffolds/baldursgate3/new-project.yaml +118 -0
  432. package/scaffolds/baldursgate3/new-quest-stub.yaml +159 -0
  433. package/scaffolds/baldursgate3/new-spell.yaml +102 -0
  434. package/scaffolds/baldursgate3/new-status.yaml +119 -0
  435. package/scaffolds/baldursgate3/sequences/subclass-kit.yaml +50 -0
  436. package/scaffolds/cyberpunk2077/edit-tweak.yaml +70 -0
  437. package/scaffolds/cyberpunk2077/mesh-export-preset.yaml +170 -0
  438. package/scaffolds/cyberpunk2077/new-entity-patch.yaml +255 -0
  439. package/scaffolds/cyberpunk2077/new-garment-refit.yaml +279 -0
  440. package/scaffolds/cyberpunk2077/new-item-chain.yaml +548 -0
  441. package/scaffolds/cyberpunk2077/new-localization.yaml +130 -0
  442. package/scaffolds/cyberpunk2077/new-mod-settings.yaml +133 -0
  443. package/scaffolds/cyberpunk2077/new-player-replacer.yaml +1003 -0
  444. package/scaffolds/cyberpunk2077/new-project.yaml +157 -0
  445. package/scaffolds/cyberpunk2077/new-sector-node.yaml +156 -0
  446. package/scaffolds/cyberpunk2077/new-tweak.yaml +121 -0
  447. package/scaffolds/cyberpunk2077/new-vehicle-livery.yaml +148 -0
  448. package/scaffolds/cyberpunk2077/new-workspot-entity.yaml +177 -0
  449. package/scaffolds/cyberpunk2077/sequences/iconic-weapon.yaml +72 -0
  450. package/scaffolds/cyberpunk2077/sequences/quickhack-takeover.yaml +213 -0
  451. package/scaffolds/stardewvalley/new-cp-patch.yaml +106 -0
  452. package/scaffolds/stardewvalley/new-csharp-mod.yaml +195 -0
  453. package/scaffolds/stardewvalley/new-project.yaml +184 -0
  454. package/scaffolds/stardewvalley/sequences/content-pack.yaml +31 -0
  455. 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.