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,81 @@
1
+ game: cyberpunk2077
2
+ topic: ui.inkatlas
3
+ title: .inkatlas icon-sheet format — slot coordinates, resolution slots and yaml wiring
4
+ facts:
5
+ - id: cp2077.ui.inkatlas.slices-by-percentage-not-pixels
6
+ claim: An `.inkatlas` file slices its backing texture into sprite slots using fractional coordinates
7
+ (a float between 0 and 1) rather than pixel coordinates; the origin (0,0) is the sheet's
8
+ top-left corner and (1,1) is its bottom-right corner, so a slot's bounds are
9
+ resolution-independent of the actual texture's pixel dimensions.
10
+ status: community
11
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
12
+ for-mod-creators-theory/files-and-what-they-do/file-formats/game-icons-the-inkatlas-file.md,
13
+ section "Summary"
14
+ tags:
15
+ - inkatlas
16
+ - coordinates
17
+ - texture
18
+ - icon
19
+ - id: cp2077.ui.inkatlas.slot-is-inktextureatlasmapper
20
+ claim: Each sprite slot in an `.inkatlas` is represented by an `inkTextureAtlasMapper` entry
21
+ carrying four coordinates (the fractional top-left and bottom-right bounds described in
22
+ cp2077.ui.inkatlas.slices-by-percentage-not-pixels); a two-sprite column example gives
23
+ (x0,y0)-(x1,y0.5) for the upper sprite and (x0,y0.5)-(x1,y1) for the lower one.
24
+ status: community
25
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
26
+ for-mod-creators-theory/files-and-what-they-do/file-formats/game-icons-the-inkatlas-file.md,
27
+ section "Summary"
28
+ tags:
29
+ - inkatlas
30
+ - inktextureatlasmapper
31
+ - slot
32
+ - schema
33
+ - id: cp2077.ui.inkatlas.three-texture-slots-only-slot-0-needed-for-modding
34
+ claim: Every `.inkatlas` has three `inkTextureSlot` entries supporting different backing-texture
35
+ resolutions; for modding purposes it is sufficient to populate `inkTextureSlot` 0 (the first
36
+ slot in the list) — the other two are additional-resolution variants a modder does not need to
37
+ fill in.
38
+ status: community
39
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
40
+ for-mod-creators-theory/files-and-what-they-do/file-formats/game-icons-the-inkatlas-file.md,
41
+ section "inkTextureSlots"
42
+ tags:
43
+ - inkatlas
44
+ - inktextureslot
45
+ - resolution
46
+ - modding
47
+ detail: As of WolvenKit 8.11.1, WolvenKit's "Part Mapping" tab (which shows which image region maps
48
+ to which slot name) only appears/refreshes after reopening the file once an `.xbm` texture is
49
+ hooked up to the atlas.
50
+ - id: cp2077.ui.inkatlas.atlaspartname-must-match-mapper-entry
51
+ claim: "A `UIIcon` yaml record targets a specific sprite inside an `.inkatlas` via two fields:
52
+ `atlasResourcePath` (the `.inkatlas` file's depot path) and `atlasPartName` (the name of an
53
+ entry in that atlas's `inkTextureAtlasMapper`); if `atlasPartName` does not match any part
54
+ name in the atlas, the game displays an empty icon rather than erroring."
55
+ status: community
56
+ source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
57
+ for-mod-creators-theory/files-and-what-they-do/file-formats/game-icons-the-inkatlas-file.md,
58
+ section "Inkatlas: Slot names"'
59
+ tags:
60
+ - inkatlas
61
+ - uiicon
62
+ - atlaspartname
63
+ - atlasresourcepath
64
+ - silent-failure
65
+ detail: A validator can catch this class of mistake by cross-checking every `UIIcon` record's
66
+ `atlasPartName` against the named `.inkatlas` resource's actual part-mapping entries, since
67
+ the failure mode (blank icon, no log error) is otherwise invisible until observed in-game.
68
+ - id: cp2077.ui.inkatlas.slot-names-are-freely-renameable
69
+ claim: The part names inside an `.inkatlas`'s `inkTextureAtlasMapper` (referenced by
70
+ `atlasPartName`) can be freely renamed by a modder in WolvenKit; they are arbitrary labels the
71
+ mod author controls, not fixed engine-reserved names — some project templates ship with
72
+ several slot names already wired up by convention, but nothing enforces those specific names.
73
+ status: community
74
+ source: 'CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
75
+ for-mod-creators-theory/files-and-what-they-do/file-formats/game-icons-the-inkatlas-file.md,
76
+ caption under "Inkatlas: Slot names" ("You can change field names at your leisure.")'
77
+ tags:
78
+ - inkatlas
79
+ - atlaspartname
80
+ - naming
81
+ - convention
@@ -0,0 +1,204 @@
1
+ game: cyberpunk2077
2
+ topic: ui.modsettings
3
+ title: Mod Settings annotation schema and the Native Interactions Framework
4
+ facts:
5
+ - id: cp2077.ui.modsettings.class-must-extend-system-or-service
6
+ claim: A Mod Settings class holds the mod's settings as properties. Registering it as a singleton is
7
+ recommended, and the way to do that is to extend `ScriptableSystem`; with Codeware installed
8
+ you can extend `ScriptableService` instead. "`ScriptableSystem`s are bounded to game sessions,
9
+ they're only available when in a game session. `ScriptableService`s are independent of game
10
+ sessions as they are created when the game starts, so they're always available." The page
11
+ recommends `ScriptableService` for settings.
12
+ status: community
13
+ source: wiki.redmodding.org "Mod Settings", section "Define a class" (including the "Different Types
14
+ of Singletons" box)
15
+ tags:
16
+ - modsettings
17
+ - scriptablesystem
18
+ - scriptableservice
19
+ - class-structure
20
+ detail: 'Corrected 2026-09-07 on three counts: the singleton is recommended, not required;
21
+ `ScriptableService` requires Codeware; and the difference is session-scope/availability, not
22
+ "settings persisted between sessions" as previously recorded (Mod Settings persists values in
23
+ its own configuration file either way — see
24
+ cp2077.ui.modsettings.programmatic-change-needs-acceptchanges). The source URL was also
25
+ changed: the cited /scripting-cyberpunk/mod-settings/introduction 404s, and the live page is
26
+ /scripting-cyberpunk/scripting/settings/mod-settings. The page title is "Mod Settings"; there
27
+ is no page called "Mod Settings Framework Extraction".'
28
+ - id: cp2077.ui.modsettings.unannotated-property-is-invisible
29
+ claim: "Mod Settings binds a property to the UI through `@runtimeProperty(key: String, value:
30
+ String)` annotations, of which `ModSettings.mod` is the mod's unique name and \"You must reuse
31
+ the same value on other properties.\" A property with no annotations is simply not exposed —
32
+ the reference class's `secret: String` field is left unannotated with the comment \"We don't
33
+ want to expose this.\""
34
+ status: community
35
+ source: wiki.redmodding.org "Mod Settings", sections "Define a class" (example class) and "Binding
36
+ properties > Base Annotations"
37
+ tags:
38
+ - modsettings
39
+ - runtimeproperty
40
+ - required-field
41
+ detail: 'Whatever value the property is assigned is treated as its default, and any annotation
42
+ taking a string value can instead take a localization key. Corrected 2026-09-07: "with no
43
+ error raised" was trimmed as unsourced, and the section names fixed (the page has no
44
+ "Annotation System" or "Notable Gotchas" headings).'
45
+ - id: cp2077.ui.modsettings.universal-annotation-keys
46
+ claim: "Annotations supported on all property types: `ModSettings.mod` (unique mod name),
47
+ `ModSettings.displayName` (label), `ModSettings.description` (hover hint),
48
+ `ModSettings.category` (groups properties under a named separator),
49
+ `ModSettings.category.order` (a Number giving the category's placement) and
50
+ `ModSettings.dependency`."
51
+ status: community
52
+ source: wiki.redmodding.org "Mod Settings", section "Binding properties > Base Annotations"
53
+ tags:
54
+ - modsettings
55
+ - runtimeproperty
56
+ - annotation
57
+ - syntax
58
+ - id: cp2077.ui.modsettings.type-specific-annotation-keys
59
+ claim: "Type-specific annotations: `ModSettings.min`, `ModSettings.max` and `ModSettings.step`
60
+ (minimum, maximum and increment for the slider) are supported on `Int32` and `Float`
61
+ properties, typed to match the property; `ModSettings.displayValues.EnumValue` sets the UI
62
+ label for one value of an `Enum` property, which otherwise displays the enum's own value
63
+ names."
64
+ status: community
65
+ source: wiki.redmodding.org "Mod Settings", section "Binding properties > Specific Annotations"
66
+ tags:
67
+ - modsettings
68
+ - runtimeproperty
69
+ - annotation
70
+ - enum
71
+ - numeric
72
+ - id: cp2077.ui.modsettings.type-to-widget-mapping
73
+ claim: "Supported property types and how each is shown: `Bool` -> \"A toggle-able on/off switch\";
74
+ `Int32` -> \"A slider with `Int32` values for the user to choose from\"; `Float` -> \"A slider
75
+ with `Float` values\"; `Enum` -> \"A selector to choose from the specified enum's values\";
76
+ `EInputKey` -> \"A button where the user can input any key (supports both keyboard and
77
+ controller)\"."
78
+ status: community
79
+ source: wiki.redmodding.org "Mod Settings", section "Binding properties > Supported Types"
80
+ tags:
81
+ - modsettings
82
+ - widget
83
+ - property-type
84
+ detail: 'Corrected 2026-09-07: "There is no annotation to pick a different widget for a given type"
85
+ was trimmed — the page lists the mapping but does not state that it cannot be overridden.'
86
+ - id: cp2077.ui.modsettings.dependency-annotation-hides-property
87
+ claim: '`@runtimeProperty("ModSettings.dependency", "String")` shows the annotated property "only if
88
+ another Boolean setting is enabled"; the String "must be the name of the Boolean setting
89
+ property".'
90
+ status: community
91
+ source: wiki.redmodding.org "Mod Settings", section "Binding properties > Base Annotations"
92
+ tags:
93
+ - modsettings
94
+ - dependency
95
+ - conditional-display
96
+ detail: 'Corrected 2026-09-07: "in the same group" was trimmed as unsourced, and the section name
97
+ fixed (this is a base annotation, not a gotcha).'
98
+ - id: cp2077.ui.modsettings.listener-callbacks-require-cb-keyword
99
+ claim: 'Listeners are registered with `ModSettings.RegisterListenerToClass(target:
100
+ ref<IScriptable>)` and/or `ModSettings.RegisterListenerToModifications(target)` (with matching
101
+ `Unregister...` calls). The target must define `OnModVariableChangeRequested(groupPath: CName,
102
+ varName: CName)`, `OnModVariableChangeAccepted(groupPath: CName, varName: CName)` and/or
103
+ `OnModSettingsChange()`: "You must exactly name the callback methods as you see it, you must
104
+ also not forget to use the keyword `cb` either. Both conditions are required for the method to
105
+ be called by Mod Settings."'
106
+ status: community
107
+ source: wiki.redmodding.org "Mod Settings", sections "Listeners > Listening to Changes" and
108
+ "Listeners > Listening to Modifications" (including the info hints)
109
+ tags:
110
+ - modsettings
111
+ - listener
112
+ - callback
113
+ - cb-keyword
114
+ - silent-failure
115
+ detail: "`groupPath` is `/mods/[ModName]/[ModClass]` and `varName` is the variable name. Registering
116
+ a listener is not optional: \"Binding annotations to your class' properties isn't enough\".
117
+ Changes reach the class when the player presses `Accept`."
118
+ - id: cp2077.ui.modsettings.lifecycle-differs-by-base-class
119
+ claim: Where `Listen`/`Unlisten` go depends on the base class. A `ScriptableSystem` calls
120
+ `this.Listen()` from `OnAttach()` and `this.Unlisten()` from `OnDetach()`. A
121
+ `ScriptableService` calls `this.Listen()` from BOTH `OnLoad()` and `OnReload()` and
122
+ `this.Unlisten()` only from `OnUninitialize()` — and the page's warning is explicit that
123
+ RedHotTools users "must call `Listen` in the `Reload` method of your `ScriptableService`. You
124
+ don't need to `Unlisten` in such case."
125
+ status: community
126
+ source: wiki.redmodding.org "Mod Settings", section "Listeners > Registering Listeners" (including
127
+ the "If you are using `ScriptableService`" box and the RedHotTools warning hint)
128
+ tags:
129
+ - modsettings
130
+ - scriptableservice
131
+ - scriptablesystem
132
+ - redhottools
133
+ - lifecycle
134
+ - id: cp2077.ui.modsettings.programmatic-change-needs-acceptchanges
135
+ claim: "Changing a setting from code rather than the Mod Settings menu takes three steps: `let
136
+ configs = ModSettings.GetVars(n\"MyMod\", n\"\");` (`n\"\"` meaning no explicit category),
137
+ locate the `ConfigVar` by `config.GetName()` and cast it (e.g. to `ModConfigVarBool`) to call
138
+ `SetValue`, then call `ModSettings.AcceptChanges()` to \"save new value in configuration
139
+ file\". Without that last call, \"changes made to a setting won't be saved by Mod Settings in
140
+ its configuration file\"."
141
+ status: community
142
+ source: wiki.redmodding.org "Mod Settings", section "Save changes dynamically"
143
+ tags:
144
+ - modsettings
145
+ - acceptchanges
146
+ - configvar
147
+ - persistence
148
+ detail: Section name corrected 2026-09-07 (the heading is "Save changes dynamically", not "Dynamic
149
+ Saving").
150
+ - id: cp2077.ui.modsettings.values-persist-in-the-plugin-user-ini-keyed-by-mod-and-class
151
+ claim: 'Mod Settings persists a changed value in red4ext/plugins/mod_settings/user.ini, under a
152
+ section named "[<ModSettings.mod>.<class name>]" with one "<property> = <value>" line per
153
+ changed property, and reads it back at the next launch. The section outlives the mod: removing
154
+ the .reds leaves the section in place.'
155
+ status: verified
156
+ verified_on: "2.31"
157
+ source: ModWright field verification
158
+ tags:
159
+ - modsettings
160
+ - persistence
161
+ - user-ini
162
+ - red4ext
163
+ - scaffold
164
+ related:
165
+ - cp2077.ui.modsettings.unannotated-property-is-invisible
166
+ detail: Whether an unchanged default is written is not known (only the changed value was seen). A
167
+ stale section is harmless as far as observed; cleaning it is a hand edit of the plugin's file,
168
+ which ModWright does not touch.
169
+ - id: cp2077.ui.modsettings.scriptablesystem-listener-updates-properties-on-accept
170
+ claim: A ScriptableSystem settings class that calls ModSettings.RegisterListenerToClass(this) from
171
+ OnAttach has its annotated properties updated in the live instance when the player presses
172
+ Accept in MOD SETTINGS, with none of the listener callbacks (OnModVariableChangeRequested,
173
+ OnModVariableChangeAccepted, OnModSettingsChange) defined and no reload.
174
+ status: verified
175
+ verified_on: "2.31"
176
+ source: ModWright field verification
177
+ tags:
178
+ - modsettings
179
+ - listener
180
+ - scriptablesystem
181
+ - scaffold
182
+ - live-update
183
+ related:
184
+ - cp2077.ui.modsettings.listener-callbacks-require-cb-keyword
185
+ - cp2077.ui.modsettings.lifecycle-differs-by-base-class
186
+ detail: "The callbacks are for reacting to a change; the property update itself needed only the
187
+ registration. Not tested here: the same class without the registration (the wiki says the
188
+ properties then keep their defaults)."
189
+ - id: cp2077.ui.modsettings.module-guard-compiles-with-and-without-mod-settings
190
+ claim: Mod Settings' redscript module is ModSettingsModule (the first line of
191
+ red4ext/plugins/mod_settings/module.reds), so a settings class that puts its
192
+ ModSettings.RegisterListenerToClass / UnregisterListenerToClass calls behind
193
+ @if(ModuleExists("ModSettingsModule")), with empty @if(!ModuleExists("ModSettingsModule"))
194
+ twins, compiles whether Mod Settings is installed or not.
195
+ status: verified
196
+ verified_on: "2.31"
197
+ source: ModWright field verification
198
+ tags:
199
+ - modsettings
200
+ - redscript
201
+ - conditional-compilation
202
+ - optional-dependency
203
+ detail: "Compile evidence only: the game was not launched with Mod Settings removed, since other
204
+ installed mods may need it."