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,78 @@
1
+ game: baldursgate3
2
+ topic: ui.icons-atlas
3
+ title: Icon atlas normalized-coordinate rule (BG3's inkatlas equivalent)
4
+ facts:
5
+ - id: bg3.ui.icons-atlas.uv-coordinates-are-normalized-fractions-not-pixels
6
+ claim: "The community icon tutorial confirms bg3.icons.iconuv-region-nesting-gotcha's \"U1/U2/V1/V2
7
+ normalized cell bounds\" and supplies the arithmetic: the values are fractions of the whole
8
+ atlas, not pixels, so a 64x64 icon on a 2048x2048 atlas spans 64/2048 = 0.03125 per axis — the
9
+ first cell is U1/V1 0.0 with U2/V2 0.03125."
10
+ status: community
11
+ source: wiki.bg3.community/en/Tutorials/Icons/Icon-Creation ("These values are determined by the
12
+ size of your icon and your atlas size as a whole"; worked value 64/2048 = 0.03125)
13
+ tags:
14
+ - icons
15
+ - atlas
16
+ - uv-coordinates
17
+ - normalized
18
+ - inkatlas-equivalent
19
+ detail: Same normalized-coordinate convention as Cyberpunk 2077's .inkatlas, applied to BG3's
20
+ TextureAtlasInfo/IconUVList pair. Kept over the existing verified fact only for the
21
+ arithmetic; the region-nesting rule (IconUV in its own IconUVList region, NOT inside
22
+ TextureAtlasInfo) stays with bg3.icons.iconuv-region-nesting-gotcha.
23
+ - id: bg3.ui.icons-atlas.icon-size-scales-atlas-math
24
+ claim: TextureAtlasIconSize (icon width/height) and TextureAtlasTextureSize (the whole atlas's
25
+ width/height) together determine every IconUV cell's U1/V1/U2/V2 math; the tutorial's worked
26
+ example fixes both at 64 and 2048 respectively specifically so its example U/V values can be
27
+ copied without recalculating — changing either size requires recomputing every icon's UV
28
+ bounds.
29
+ status: community
30
+ source: wiki.bg3.community/en/Tutorials/Icons/Icon-Creation ("If you followed 64x64 and 2048x2048
31
+ you shouldn't have a problem copying the U1,U2,V1, and V2 that I use here")
32
+ tags:
33
+ - icons
34
+ - atlas
35
+ - texturesize
36
+ - iconsize
37
+ - id: bg3.ui.icons-atlas.atlas-path-must-match-textureatlaspath
38
+ claim: The icon atlas file is named Icons_<ModName>.dds with a LOWERCASE .dds extension and lives at
39
+ Assets/Textures/Icons/Icons_<ModName>.dds, which must be exactly the TextureAtlasPath value in
40
+ the atlas map .lsx that describes it. This confirms bg3.icons.spell-atlas-three-file-system's
41
+ atlas path.
42
+ status: community
43
+ source: 'wiki.bg3.community/en/Tutorials/Icons/Icon-Creation ("The proper name should be
44
+ Icons_{ModName}.dds"; atlas map "Path": "Assets/Textures/Icons/Icons_MODNAME.dds")'
45
+ tags:
46
+ - icons
47
+ - atlas
48
+ - path
49
+ - dds
50
+ - case-sensitivity
51
+ detail: 'Corrected from "must not be lowercase .dds", which reversed the source. Casing in BG3 is
52
+ per file class, not global: the ATLAS is lowercase .dds, while item/character textures and the
53
+ standalone tooltip and controller icons are uppercase .DDS
54
+ (bg3.items.visualbank.dds-extension-case-sensitive, bg3.icons.tooltip-asset-system).'
55
+ - id: bg3.ui.icons-atlas.extra-empty-iconuv-entries-are-harmless
56
+ claim: An icon atlas map can carry more IconUV entries than icons actually placed on the atlas
57
+ without causing errors — the tutorial leaves a second, unused IconUV entry in place "for
58
+ future use" alongside the one real icon with no ill effect.
59
+ status: community
60
+ source: wiki.bg3.community/en/Tutorials/Icons/Icon-Creation ("I can leave that alone for now without
61
+ any issues. I'd rather it be there for future use then now.")
62
+ tags:
63
+ - icons
64
+ - atlas
65
+ - iconuv
66
+ - id: bg3.ui.icons-atlas.hotbar-icon-size-scales-with-atlas-size
67
+ claim: An icon's rendered hotbar size scales with the atlas size it's placed on, not just with the
68
+ icon's own pixel dimensions inside that atlas — the tutorial notes this explicitly when
69
+ recommending sticking to a 64px icon on a 2048px atlas rather than deviating from the
70
+ reference proportions.
71
+ status: community
72
+ source: wiki.bg3.community/en/Tutorials/Icons/Icon-Creation ("Your hotbar icon size scales with your
73
+ atlas size")
74
+ tags:
75
+ - icons
76
+ - atlas
77
+ - hotbar
78
+ - scaling
@@ -0,0 +1,412 @@
1
+ game: baldursgate3
2
+ topic: ui.icons
3
+ title: Icon systems — class icons, spell atlas, tooltip images, and metadata
4
+ facts:
5
+ - id: bg3.icons.class-icon-pair
6
+ claim: 'Class/subclass icons are a 300×300 "main" DDS (top-right/summary icon) plus a 140×140
7
+ "hotbar" DDS (the class-SELECTION list icon and the round badge). Filename = the
8
+ ClassDescription Name (the engine auto-links subclasses by name). Copied to FOUR paths:
9
+ GUI/Assets/ClassIcons/<Name>.DDS, GUI/AssetsLowRes/ClassIcons/<Name>.DDS, and both again under
10
+ a hotbar/ subfolder (the hotbar dir holds the 140).'
11
+ status: verified
12
+ verified_on: 4.73.98.727 (Patch 8)
13
+ source: ModWright field verification
14
+ tags:
15
+ - icons
16
+ - class
17
+ - dds
18
+ - resolution
19
+ detail: "A class mod's first attempts got this wrong twice: a _Hotbar filename suffix, and a
20
+ ClassIcons/LowRes/ subfolder instead of the sibling AssetsLowRes/ tree — both produced blank
21
+ icons in-game."
22
+ - id: bg3.icons.class-icon-metadata
23
+ claim: Hand-authored GUI textures need a GUI/metadata.lsf (per-file width/height/mipcount); the
24
+ Toolkit normally auto-writes it via its "Convert UI Assets" step, which an SE-compatible
25
+ hand-authored pipeline cannot use. Without it the game shows "Missing MetaData" and the icons
26
+ are blank.
27
+ status: verified
28
+ verified_on: 4.73.98.727 (Patch 8)
29
+ source: ModWright field verification
30
+ tags:
31
+ - icons
32
+ - metadata
33
+ - lsf
34
+ - class
35
+ detail: Hand-build it by extracting vanilla's Public/Game/GUI/metadata.lsf from Game.pak, converting
36
+ to lsx, copying a Bard class-icon entry, editing, and converting lsx→lsf.
37
+ - id: bg3.icons.spell-atlas-three-file-system
38
+ claim: 'Spell/action icons are a texture ATLAS needing THREE files: (1) the DDS atlas
39
+ (Assets/Textures/Icons/<Atlas>.dds, DXT5, no mipmaps, sRGB, a grid of NxN cells); (2) the
40
+ descriptor GUI/<Atlas>.lsx (stays lsx) with TWO SEPARATE sibling regions — TextureAtlasInfo
41
+ (icon size / path+UUID / texture size) and IconUVList; (3) texture registration in
42
+ Content/UI/[PAK]_UI/_merged.lsf — a TextureBank Resource with the SAME UUID as the atlas path,
43
+ Template "Icons_Items", SRGB True. Reference it from a stat as data "Icon" "<MapKey>".'
44
+ status: verified
45
+ verified_on: 4.73.98.727 (Patch 8)
46
+ source: ModWright field verification
47
+ tags:
48
+ - icons
49
+ - atlas
50
+ - spell
51
+ - action
52
+ detail: "[PAK]_UI is a LITERAL bracketed folder name. Status/buff icons resolve from this same item
53
+ atlas — no separate status-template registration is needed; that was flagged as an UNVERIFIED
54
+ caveat when the first status icon was added and then confirmed in the v1.1.22.0 batch (a
55
+ custom status renders as a portrait buff)."
56
+ - id: bg3.icons.iconuv-region-nesting-gotcha
57
+ claim: IconUV goes in its OWN IconUVList region, NOT nested inside TextureAtlasInfo. Nesting it
58
+ yields the generic blue missing-icon fallback. A docs summary got this wrong; vanilla
59
+ Icons_Skills.lsx confirms two regions.
60
+ status: verified
61
+ verified_on: 4.73.98.727 (Patch 8)
62
+ source: ModWright field verification
63
+ tags:
64
+ - icons
65
+ - atlas
66
+ - iconuv
67
+ - region
68
+ - nesting
69
+ detail: Each IconUV carries MapKey + U1/U2/V1/V2 normalized cell bounds. IconUVList is a sibling
70
+ region of TextureAtlasInfo, not a child.
71
+ - id: bg3.icons.atlas-expansion-pattern
72
+ claim: "To add an icon to an existing atlas: grow the DDS grid, add an IconUV, and point the stat's
73
+ Icon at the MapKey. Compose onto the existing atlas by decoding the DDS in PIL,
74
+ paste(cell,(x,y),cell), re-encode DXT5 with no mipmaps."
75
+ status: verified
76
+ verified_on: 4.73.98.727 (Patch 8)
77
+ source: ModWright field verification
78
+ tags:
79
+ - icons
80
+ - atlas
81
+ - dds
82
+ - pil
83
+ - composition
84
+ detail: "Re-encode flags used: -define dds:compression=dxt5 -define dds:mipmaps=0. Adding a cell
85
+ needs no change to the atlas UUID or the _merged.lsf TextureBank registration."
86
+ - id: bg3.icons.item-tooltip-not-atlas
87
+ claim: The big item image in a tooltip does NOT come from the icon atlas. The atlas serves
88
+ inventory/hotbar cells only; an atlas-only mod icon shows in the grid but the tooltip image
89
+ area is BLANK. Vanilla keys look fine because vanilla ships separate tooltip textures for
90
+ them.
91
+ status: verified
92
+ verified_on: 4.73.98.727 (Patch 8)
93
+ source: ModWright field verification
94
+ tags:
95
+ - icons
96
+ - tooltip
97
+ - atlas
98
+ - image
99
+ detail: "Symptom to search for: icon correct in the inventory grid, empty box in the tooltip."
100
+ - id: bg3.icons.tooltip-asset-system
101
+ claim: "Per icon KEY, ship standalone DDS files under Mods/<Mod>/GUI/:
102
+ Assets/Tooltips/ItemIcons/<IconKey>.DDS (380×380, the tooltip image),
103
+ Assets/ControllerUIIcons/items_png/<IconKey>.DDS (144×144), plus AssetsLowRes/ copies of both
104
+ (192 / 72), all DXT5 no-mips. Register the two Assets/ files in GUI/metadata.lsf — and the
105
+ MapKey uses a .png extension even though the shipped file is .DDS. AssetsLowRes files need no
106
+ metadata entries."
107
+ status: community
108
+ source: ModWright research
109
+ tags:
110
+ - icons
111
+ - tooltip
112
+ - dds
113
+ - metadata
114
+ - assets
115
+ detail: The tooltip/controller files resolve purely by GUI-path + filename = icon key; the
116
+ Public/<ns>/Content/UI/[PAK]_UI/_merged.lsf TextureBank registration (Template Icons_Items) is
117
+ only needed for the ATLAS. The same metadata.lsf carries the ClassIcons entries.
118
+ - id: bg3.icons.atlas-lsf-twin-blanks-passive-icons
119
+ claim: "Believed and later disproved: that a stray binary .lsf twin of the icon atlas .lsx in the
120
+ project blanked the equipment-passive icons, so deleting it was the fix."
121
+ status: contradicted
122
+ source: ModWright research
123
+ tags:
124
+ - icons
125
+ - passives
126
+ - atlas
127
+ - confounded
128
+ detail: Kept so the mistake is not remade. The real pattern was NEW GAME = the starting-kit passive
129
+ icons blank, save+reload = icons show, in every build — the .lsf twin was irrelevant to it.
130
+ Removing the twin (and the passive-only atlas keys) is still kept as project hygiene, because
131
+ vanilla ships atlases as .lsx only, but it was not the fix. Superseded by
132
+ bg3.icons.starting-kit-passive-icons.
133
+ - id: bg3.icons.starting-kit-passive-icons
134
+ claim: Starting-kit passives (granted via PassivesOnEquip on Equipment.txt CC-kit items) have icons
135
+ the Notable Features list only resolves on an equipment-change EVENT. On a fresh game no such
136
+ event fires, so the rows are blank until any gear change or a save+reload (which re-equips
137
+ through the normal path).
138
+ status: verified
139
+ verified_on: 4.73.98.727 (Patch 8)
140
+ supersedes: bg3.icons.atlas-lsf-twin-blanks-passive-icons
141
+ source: ModWright field verification
142
+ tags:
143
+ - icons
144
+ - passives
145
+ - equipment
146
+ - cc-kit
147
+ - script-extender
148
+ detail: "Vanilla never ships a Highlighted passive on a kit item, so there is no precedent. Fix
149
+ used: a Script Extender Lua refresh script — 2.5 s after LevelGameplayStarted, once per
150
+ character (PersistentVars ledger), Osi.Unequip + Osi.Equip one equipped wearable
151
+ (GetEquippedItem query first, entity inventory walk as fallback)."
152
+ - id: bg3.icons.dds-format-and-alpha
153
+ claim: DXT5 DDS works fine via ImageMagick or PIL (img.save(p, pixel_format="DXT5")). Main icon =
154
+ opaque on black; hotbar icon = transparency via HSB-brightness-as-alpha (( +clone -colorspace
155
+ HSB -channel B -separate +channel ) -compose CopyOpacity -composite), which beats grayscale
156
+ luminance for saturated colours. For transparency from a solid-black background, floodfill
157
+ from the four corners (-fuzz 16% -fill none -draw "alpha 0,0 floodfill" ×4) — it knocks out
158
+ only the border-connected background and KEEPS interior dark areas, unlike -transparent black.
159
+ Then -trim +repage, pad square via -extent, resize.
160
+ status: verified
161
+ verified_on: 4.73.98.727 (Patch 8)
162
+ source: ModWright field verification
163
+ tags:
164
+ - icons
165
+ - dds
166
+ - dxt5
167
+ - alpha
168
+ - transparency
169
+ detail: 'HSB-brightness-as-alpha comes out DIM for bright-on-black art — floodfill is better there
170
+ (a class mod used -fuzz 18% for a bright-on-black source). Small-icon design: a buff badge
171
+ renders ~32-40px; a centered round object ringed by a symmetric radial burst reads as an EYE
172
+ (iris+lashes) at that size, so use a bold, diagonal/asymmetric subject and put "eye, iris,
173
+ radial, symmetrical" in a negative prompt. PIL needs Windows paths (C:/...), not msys /c/...;
174
+ ImageMagick 7 is fine either way.'
175
+ - id: bg3.icons.imagemagick-diagnostics
176
+ claim: "ImageMagick diagnostic for icon work: -alpha extract -format \"%[fx:mean*100]%%\" measures a
177
+ region's opacity."
178
+ status: verified
179
+ verified_on: 4.73.98.727 (Patch 8)
180
+ source: ModWright field verification
181
+ tags:
182
+ - icons
183
+ - diagnostics
184
+ - imagemagick
185
+ - tools
186
+ detail: Useful for checking that a floodfill or alpha-from-brightness pass actually produced
187
+ transparency where you expect it, before spending a relaunch cycle on a blank-icon report.
188
+ - id: bg3.icons.public-game-gui-path-for-tooltip-and-controller-icons
189
+ claim: A separate community tutorial (a different mod, a class/passive icon rather than an item)
190
+ places tooltip and controller icon DDS files under Public\Game\GUI\Assets\Tooltips\Icons and
191
+ Public\Game\GUI\Assets\ControllerUIIcons\skills_png — under the mod's Public\Game\GUI tree,
192
+ not Mods\<Mod>\GUI — with the controller-icon subfolder named for the icon's category
193
+ ("skills_png" for a passive/skill icon) rather than always "items_png".
194
+ status: community
195
+ source: 'bg3-community/Tutorials/Icons/Icon-Creation.md §Mod folder setup (folder tree listing
196
+ "Game: GUI: Assets: Tooltips: Icons / ItemIcons", "ControllerUIIcons: skills_png /
197
+ items_png"), §Tooltip Icons, §Controller Icons'
198
+ tags:
199
+ - icons
200
+ - tooltip
201
+ - controller
202
+ - public-game-gui
203
+ - path
204
+ related:
205
+ - id: bg3.icons.tooltip-asset-system
206
+ detail: Records a second, differently-rooted path convention (Public\Game\GUI rather than
207
+ Mods\<Mod>\GUI) from an independent mod's tutorial; the existing fact's Mods\<Mod>\GUI
208
+ convention was itself only "verified against two installed item mods" — this is not a
209
+ contradiction so much as a second attested pattern, and both should be checked when
210
+ tooltip icons are blank.
211
+ - id: bg3.icons.blank-icon-shows-at-both-tooltip-and-cc-selection-until-fixed
212
+ claim: A passive/spell icon missing from tooltip/controller/hotbar locations (while still correct in
213
+ the inventory grid or wherever the atlas alone renders it) shows the SAME generic
214
+ error-fallback icon both in the tooltip and in the Character Creation selection list for that
215
+ passive — seeing the fallback icon in one location is a reliable signal to check the other.
216
+ status: community
217
+ source: bg3-community/Tutorials/Icons/Icon-Creation.md:189-212, §Tooltip Icons ("That is a default
218
+ icon the game puts if you have an error with your current one and it can't be read.")
219
+ tags:
220
+ - icons
221
+ - tooltip
222
+ - fallback-icon
223
+ - cc
224
+ - silent-failure
225
+ related:
226
+ - id: bg3.icons.item-tooltip-not-atlas
227
+ detail: Confirms from an independent source that the atlas and the tooltip/CC image are separately
228
+ resolved — a correct atlas entry does not guarantee a correct tooltip or CC-selection
229
+ image, and a blank/ fallback tooltip icon is the visible symptom of the missing standalone
230
+ file.
231
+ - id: bg3.icons.texturebank-resource-fields-in-merged-lsx
232
+ claim: "The worked Content/UI/[PAK]_UI/_merged.lsx TextureBank Resource node registering an icon
233
+ atlas carries: ID (FixedString, the same UUID used as the atlas map's Path attribute UUID),
234
+ Localized (bool, False), Name (LSString, set to the mod's name), SRGB (True), SourceFile
235
+ (LSString, the atlas .dds path rooted at \"Public/...\"), Streaming (True), Template
236
+ (FixedString \"Icons_Items\"), Type (int32 0) and _OriginalFileVersion_. The page's
237
+ walkthrough says only ID, Name and SourceFile need changing."
238
+ status: community
239
+ source: bg3-community/Tutorials/Icons/Icon-Creation.md:344-380, §_merged.lsx (worked TextureBank
240
+ Resource node and its field-by-field walkthrough)
241
+ tags:
242
+ - icons
243
+ - atlas
244
+ - texturebank
245
+ - merged-lsx
246
+ - required-fields
247
+ related:
248
+ - id: bg3.icons.spell-atlas-three-file-system
249
+ detail: Confirms and itemizes the exact TextureBank Resource attributes the existing fact's third
250
+ file (texture registration in Content/UI/[PAK]_UI/_merged.lsf) requires, including that
251
+ SourceFile is rooted at "Public/" while the atlas map's own Path attribute is rooted at
252
+ "Assets/" — a distinction worth checking directly if an atlas fails to resolve.
253
+ - id: bg3.icons.class-icon-vanilla-format-and-four-sizes
254
+ claim: "The vanilla class/subclass icon files are BC7 (DX10 header, DXGI format 98), one mip, at
255
+ four sizes that match the four paths of bg3.icons.class-icon-pair: Assets/ClassIcons 300x300,
256
+ Assets/ClassIcons/hotbar 140x140, AssetsLowRes/ClassIcons 152x152,
257
+ AssetsLowRes/ClassIcons/hotbar 72x72. The glyph occupies about 64% of the main canvas
258
+ (OpenHand: alpha bbox 53..245 of 300) over a transparent background with a soft drop shadow;
259
+ the art is full colour, not a tintable white glyph. The file's byte size is the same whether
260
+ it is BC7 or DXT5 (1 byte per pixel), so a DXT5 no-mip file written by ImageMagick is a
261
+ like-for-like replacement in size; whether the engine accepts DXT5 in this slot is recorded
262
+ separately below."
263
+ status: verified
264
+ verified_on: 4.73.98.727 (Patch 8)
265
+ source: Game.pak Public/Game/GUI/Assets/ClassIcons/OpenHand.DDS + hotbar + AssetsLowRes copies
266
+ (2026-09-19)
267
+ tags:
268
+ - icons
269
+ - class
270
+ - dds
271
+ - bc7
272
+ - dxt5
273
+ - sizes
274
+ detail: "Vanilla names: Monk.DDS, OpenHand.DDS, Shadow.DDS, FourElements.DDS — the subclass
275
+ Progression/ClassDescription Name, not the display name. A subclass mod ships its icon four
276
+ times under its own ClassDescription Name."
277
+ - id: bg3.icons.class-icon-needs-public-game-source-in-the-pak
278
+ claim: "Class icons live under Public/Game/GUI/..., outside the mod's own Public/<Mod>/ tree, so a
279
+ ModWright project whose \"public\" source is Public/<Mod> silently leaves them out of the pak:
280
+ the build succeeds and verify-listing passes while divine list-package shows no ClassIcons
281
+ entry. A second source ({\"id\": \"game-ui\", \"path\": \"Public/Game\", \"kind\":
282
+ \"public\"}) added to the stage step's sources puts them in at the same relative path."
283
+ status: verified
284
+ verified_on: 4.73.98.727 (Patch 8)
285
+ source: ModWright field verification
286
+ tags:
287
+ - icons
288
+ - class
289
+ - modwright
290
+ - sources
291
+ - packaging
292
+ - id: bg3.icons.single-row-atlas-widening-recomputes-every-uv
293
+ claim: "A mod icon atlas can stay a single row of 144-px cells and simply grow wider: the DDS
294
+ becomes COLS*144 x 144, TextureAtlasTextureSize Width is updated to match, and EVERY IconUV's
295
+ U1/U2 is recomputed as idx/COLS and (idx+1)/COLS (V1 0, V2 1). The atlas UUID, the TextureBank
296
+ registration and the per-key tooltip/controller files do not change. A second ROW is not an
297
+ option: the character sheet read a two-row atlas's row 1 cells back as row 0."
298
+ status: verified
299
+ verified_on: 4.73.98.727 (Patch 8)
300
+ source: ModWright field verification
301
+ tags:
302
+ - icons
303
+ - atlas
304
+ - uv
305
+ - widening
306
+ - single-row
307
+ related:
308
+ - id: bg3.icons.atlas-expansion-pattern
309
+ detail: The same operation, stated for the single-row layout and with the "every UV" recompute
310
+ spelled out.
311
+ - id: bg3.icons.status-without-icon-field-shows-a-blank-condition
312
+ claim: A StatusData entry with no Icon line shows a blank badge in the conditions strip and the
313
+ status tooltip while it is active. Statuses take the same Icon values as passives and spells
314
+ (an atlas MapKey of the mod's own atlas, or a vanilla icon name such as Status_Burning or
315
+ PassiveFeature_PatientDefence).
316
+ status: verified
317
+ verified_on: 4.73.98.727 (Patch 8)
318
+ source: ModWright field verification
319
+ tags:
320
+ - icons
321
+ - status
322
+ - conditions
323
+ - blank
324
+ - id: bg3.icons.icon-names-cross-stat-types
325
+ claim: "The Icon field is one global namespace: a passive can name a vanilla spell or action icon
326
+ (PassiveFeature_MartialArts_BonusUnarmedStrike, Action_Whirlwind), a spell can name a passive
327
+ icon, and a status can name either, so a feature can borrow any vanilla icon by name without
328
+ shipping a file. Whether an ITEM icon key (Item_QUEST_GLO_SoulCoin, from the vanilla item
329
+ atlas) also resolves on a passive is built for Soulfire but not yet seen in-game."
330
+ status: verified
331
+ verified_on: 4.73.98.727 (Patch 8)
332
+ source: ModWright field verification
333
+ tags:
334
+ - icons
335
+ - namespace
336
+ - vanilla-names
337
+ - passives
338
+ - spells
339
+ - statuses
340
+ - id: bg3.icons.notable-features-row-uses-the-granting-items-icon
341
+ claim: In the character sheet's Notable Features list, a passive granted by equipment
342
+ (PassivesOnEquip) is listed with the GRANTING ITEM's icon, not the passive's own Icon; the
343
+ passive's icon appears only in its tooltip card. This is vanilla behaviour, so making the item
344
+ icon legible at list size is the only fix.
345
+ status: verified
346
+ verified_on: 4.73.98.727 (Patch 8)
347
+ source: ModWright field verification
348
+ tags:
349
+ - icons
350
+ - character-sheet
351
+ - notable-features
352
+ - equipment-passives
353
+ related:
354
+ - id: bg3.icons.starting-kit-passive-icons
355
+ detail: That fact is about WHEN the row resolves; this one is about WHICH icon it resolves to.
356
+ - id: bg3.icons.passive-tooltip-files-under-mods-gui-skills-folders
357
+ claim: For a passive or action icon (as opposed to an item icon) the per-key files go to
358
+ Mods/<Mod>/GUI/Assets/Tooltips/Icons/<Key>.DDS (380) and
359
+ Mods/<Mod>/GUI/Assets/ControllerUIIcons/skills_png/<Key>.DDS (144), with AssetsLowRes copies
360
+ (192 / 72) and two metadata.lsx Object entries whose MapKeys end in .png � the Mods/<Mod>/GUI
361
+ root works for skills, the same as bg3.icons.tooltip-asset-system records for items, so the
362
+ Public/Game/GUI root of the community tutorial is not required.
363
+ status: verified
364
+ verified_on: 4.73.98.727 (Patch 8)
365
+ source: ModWright field verification
366
+ tags:
367
+ - icons
368
+ - passives
369
+ - tooltip
370
+ - controller
371
+ - skills_png
372
+ - metadata
373
+ related:
374
+ - id: bg3.icons.public-game-gui-path-for-tooltip-and-controller-icons
375
+ detail: Both roots are attested; this is the Mods/<Mod>/GUI one seen working for a skill icon.
376
+ - id: bg3.icons.keyed-neon-art-needs-the-same-brightness-ramp-as-recoloured-vanilla-icons
377
+ claim: Mixing two icon sources in one set � AI-made neon line art on black that is only alpha-keyed,
378
+ and vanilla icons recoloured through a luminance-to-red ramp � makes the keyed art read
379
+ markedly darker in the Actions panel, because keying keeps the art's own dim glow while the
380
+ ramp maps mid-tones to a bright core. Pushing every source through the same ramp (dark
381
+ 110/0/0, mid 240/40/30, core 255/150/140 over luminance^0.6..0.75, plus a blurred copy
382
+ underneath as glow) gives a matched set.
383
+ status: verified
384
+ verified_on: 4.73.98.727 (Patch 8)
385
+ source: ModWright field verification
386
+ tags:
387
+ - icons
388
+ - art
389
+ - recolour
390
+ - ramp
391
+ - consistency
392
+ detail: "Keying recipe used for black-background art: alpha = clip((max(R,G,B) - 10) * 255 / 50).
393
+ For emblem art with dark enclosed areas a flood fill from the border keeps the interior; a
394
+ global key opens it."
395
+ - id: bg3.icons.vanilla-tooltip-icons-extract-per-file-with-divine
396
+ claim: A single vanilla icon's full-size art is a 380x380 BC7 DDS at
397
+ Public/Game/GUI/Assets/Tooltips/Icons/<name>.DDS inside Game.pak and can be pulled alone with
398
+ divine extract-package -x "*/GUI/Assets/Tooltips/Icons/<name>.DDS" (one call per file); PIL
399
+ decodes it, which is enough to recolour a vanilla icon into a mod's palette without touching
400
+ the game's atlases. Not every stat's Icon name has such a file � two of twelve tried
401
+ (Spell_Abjuration_WardingBond, PassiveFeature_DualWielder_BonusAC) had none.
402
+ status: verified
403
+ verified_on: 4.73.98.727 (Patch 8)
404
+ source: divine list-package Game.pak (Tooltips/Icons entries, 144548 bytes each) and the extractions
405
+ of 2026-09-19
406
+ tags:
407
+ - icons
408
+ - vanilla
409
+ - extract
410
+ - divine
411
+ - tooltips
412
+ - reference
@@ -0,0 +1,161 @@
1
+ game: baldursgate3
2
+ topic: ui.mcm
3
+ title: Mod Configuration Menu (MCM) blueprint schema and version floors
4
+ facts:
5
+ - id: bg3.ui.mcm.blueprint-file-placement
6
+ claim: MCM integration requires an MCM_blueprint.json file placed in the same folder as the mod's
7
+ meta.lsx; this JSON file defines the mod's settings structure (IDs, names, types, defaults)
8
+ that MCM uses to generate the UI and validate values.
9
+ status: community
10
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Quick-start guide
11
+ tags:
12
+ - mcm
13
+ - blueprint
14
+ - meta-lsx
15
+ - required-fields
16
+ - id: bg3.ui.mcm.dependency-recommended-in-meta-lsx
17
+ claim: "It is \"extremely recommended\" to declare MCM as a dependency in the mod's meta.lsx (rather
18
+ than only shipping MCM_blueprint.json with \"Optional\": true), so the game/mod managers
19
+ guarantee MCM loads before the dependent mod and don't require instructing users to order mods
20
+ manually."
21
+ status: community
22
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Quick-start guide,
23
+ §Integrating MCM into your mod
24
+ tags:
25
+ - mcm
26
+ - dependency
27
+ - meta-lsx
28
+ - load-order
29
+ - id: bg3.ui.mcm.dependency-version64-should-pin-dev-version
30
+ claim: When declaring MCM as a meta.lsx dependency, it is recommended to always set the required
31
+ version (Version64) to the MCM version actually used during development; MCM 1.14+ verifies
32
+ dependency versions at load and warns users who have an outdated version of a dependency
33
+ installed.
34
+ status: community
35
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Integrating MCM into
36
+ your mod ("It is also recommended to always set the required version (Version64) of MCM to the
37
+ version you're using"; "MCM 1.14+ also verifies dependencies' versions and warn users if they
38
+ have outdated versions")
39
+ tags:
40
+ - mcm
41
+ - dependency
42
+ - version-floor
43
+ - version64
44
+ - id: bg3.ui.mcm.schema-organizational-hierarchy
45
+ claim: 'The MCM blueprint schema is hierarchical: Tabs are the top-level units, Sections are
46
+ sub-divisions within tabs, and "Each tab can exclusively contain either Sections or standalone
47
+ Settings" — never both at the same tab level. Each Setting requires an Id ("A unique string
48
+ identifier"), a Name ("The readable name") and a Type ("Defines the data type"), which also
49
+ picks the widget rendered.'
50
+ status: community
51
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Schema main components
52
+ tags:
53
+ - mcm
54
+ - blueprint
55
+ - schema
56
+ - tabs
57
+ - sections
58
+ - settings
59
+ - id: bg3.ui.mcm.get-settings-value-by-id
60
+ claim: A mod author replaces its own settings-reading logic with MCM.Get("settingId") calls, using
61
+ the same Id string defined for that setting in MCM_blueprint.json, to read the current value
62
+ MCM manages.
63
+ status: community
64
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Quick-start guide
65
+ tags:
66
+ - mcm
67
+ - api
68
+ - mcm-get
69
+ - id: bg3.ui.mcm.use-mcm-api-not-internal-table
70
+ claim: Mod code should call the global MCM table's documented functions (e.g. MCM.Get) rather than
71
+ reaching into Mods.BG3MCM's internal implementation table directly, since internals are not a
72
+ stable API surface.
73
+ status: community
74
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Use the MCM API, not
75
+ Mods.BG3MCM internals
76
+ tags:
77
+ - mcm
78
+ - api
79
+ - stability
80
+ - id: bg3.ui.mcm.keybinding-support-since-1-19
81
+ claim: MCM's keybinding management feature (define/update/persist keybindings, register callbacks,
82
+ built-in conflict resolution) was added in MCM 1.19 — a mod targeting keybinding_v2 settings
83
+ needs a Version64 dependency floor of at least that version.
84
+ status: community
85
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Features for mod
86
+ authors ("NEW IN 1.19 - Keybinding management")
87
+ tags:
88
+ - mcm
89
+ - keybinding
90
+ - version-floor
91
+ - id: bg3.ui.mcm.store-api-dual-storage-backend-since-1-40
92
+ claim: "MCM's Store API for persisting arbitrary key-value data independent of the blueprint gained
93
+ multiple storage backends starting with MCM 1.40+: Script Extender ModVars (save-scoped) and
94
+ JSON files (global). JSON storage is the default; a value is only save-scoped instead of
95
+ global if storage = \"modvar\" is explicitly set, and the \"modvar\" backend is still noted as
96
+ work-in-progress."
97
+ status: community
98
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Store API ("Starting
99
+ with MCM version 1.40+, it supports multiple storage backends"; "JSON storage is the default";
100
+ "modvar is still a WIP")
101
+ tags:
102
+ - mcm
103
+ - store-api
104
+ - version-floor
105
+ - modvar
106
+ - json
107
+ - id: bg3.ui.mcm.store-storageconfig-mirrors-native-modvar-params
108
+ claim: Both MCM Store backends accept a storageConfig table using the exact same parameter names as
109
+ BG3SE's native ModVars (Client, Server, SyncToClient, SyncToServer, Persistent,
110
+ WriteableOnClient, WriteableOnServer) regardless of which backend (JSON or modvar) is actually
111
+ selected.
112
+ status: community
113
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Store API
114
+ tags:
115
+ - mcm
116
+ - store-api
117
+ - storageconfig
118
+ - modvar
119
+ - id: bg3.ui.mcm.ui-agnostic-works-without-imgui
120
+ claim: MCM is designed to function as a standalone configuration manager independent of its
121
+ IMGUI-based interface; a player who cannot see the IMGUI window (or if IMGUI support were
122
+ removed) still has a working MCM config manager underneath.
123
+ status: community
124
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Features for mod authors
125
+ tags:
126
+ - mcm
127
+ - ui-agnostic
128
+ - imgui
129
+ - id: bg3.ui.mcm.blueprint-schema-source-for-validation
130
+ claim: MCM_blueprint.json files can be written and validated against the published JSON schema at
131
+ raw.githubusercontent.com/AtilioA/BG3-MCM/main/.vscode/schema.json, which is kept up to date
132
+ with each MCM release; setting the schema up in an editor (via a "json.schemas" entry matching
133
+ "MCM_blueprint*.json") catches structural mistakes before runtime.
134
+ status: community
135
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §The MCM Schema > IDE
136
+ support
137
+ tags:
138
+ - mcm
139
+ - blueprint
140
+ - schema
141
+ - validation
142
+ - id: bg3.ui.mcm.settings-update-instantly-without-save-reload
143
+ claim: MCM-integrated settings update in real time as the player changes them in the UI, without
144
+ requiring a save reload — unlike a traditional settings file a mod might read only once at
145
+ load.
146
+ status: community
147
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Features for mod authors
148
+ tags:
149
+ - mcm
150
+ - settings
151
+ - real-time
152
+ - id: bg3.ui.mcm.semantic-versioning-major-means-breaking-blueprint-change
153
+ claim: MCM follows semantic versioning, and "MAJOR updates would probably mean introducing breaking
154
+ changes to blueprints" — so a MAJOR bump is the release to re-check a blueprint against, while
155
+ MINOR/PATCH releases are not expected to require blueprint changes.
156
+ status: community
157
+ source: wiki.bg3.community/en/Tutorials/Mod-Frameworks/mod-configuration-menu §Concepts
158
+ tags:
159
+ - mcm
160
+ - versioning
161
+ - blueprint