@rpgm-tools/neo-angband-core 0.18.0 → 0.19.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 (848) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/perceive.d.ts.map +1 -1
  3. package/dist/agent/perceive.js +2 -2
  4. package/dist/agent/perceive.js.map +1 -1
  5. package/dist/combat/blow-vectors.d.ts +78 -0
  6. package/dist/combat/blow-vectors.d.ts.map +1 -0
  7. package/dist/combat/blow-vectors.fixtures.d.ts +19 -0
  8. package/dist/combat/blow-vectors.fixtures.d.ts.map +1 -0
  9. package/dist/combat/blow-vectors.fixtures.js +81 -0
  10. package/dist/combat/blow-vectors.fixtures.js.map +1 -0
  11. package/dist/combat/blow-vectors.js +195 -0
  12. package/dist/combat/blow-vectors.js.map +1 -0
  13. package/dist/combat/brand-slay.d.ts +22 -9
  14. package/dist/combat/brand-slay.d.ts.map +1 -1
  15. package/dist/combat/brand-slay.js +37 -10
  16. package/dist/combat/brand-slay.js.map +1 -1
  17. package/dist/combat/index.d.ts +1 -1
  18. package/dist/combat/index.js +1 -1
  19. package/dist/combat/melee.d.ts +25 -13
  20. package/dist/combat/melee.d.ts.map +1 -1
  21. package/dist/combat/melee.js +23 -19
  22. package/dist/combat/melee.js.map +1 -1
  23. package/dist/combat/mon-melee.d.ts +166 -7
  24. package/dist/combat/mon-melee.d.ts.map +1 -1
  25. package/dist/combat/mon-melee.js +469 -338
  26. package/dist/combat/mon-melee.js.map +1 -1
  27. package/dist/combat/ranged.d.ts +15 -13
  28. package/dist/combat/ranged.d.ts.map +1 -1
  29. package/dist/combat/ranged.js +31 -29
  30. package/dist/combat/ranged.js.map +1 -1
  31. package/dist/constants.d.ts +14 -0
  32. package/dist/constants.d.ts.map +1 -1
  33. package/dist/constants.js +14 -0
  34. package/dist/constants.js.map +1 -1
  35. package/dist/datafile.d.ts +48 -0
  36. package/dist/datafile.d.ts.map +1 -0
  37. package/dist/datafile.js +102 -0
  38. package/dist/datafile.js.map +1 -0
  39. package/dist/effects/effect-info-registry.d.ts +237 -0
  40. package/dist/effects/effect-info-registry.d.ts.map +1 -0
  41. package/dist/effects/effect-info-registry.js +138 -0
  42. package/dist/effects/effect-info-registry.js.map +1 -0
  43. package/dist/effects/effect-info-vectors.d.ts +92 -0
  44. package/dist/effects/effect-info-vectors.d.ts.map +1 -0
  45. package/dist/effects/effect-info-vectors.fixtures.d.ts +18 -0
  46. package/dist/effects/effect-info-vectors.fixtures.d.ts.map +1 -0
  47. package/dist/effects/effect-info-vectors.fixtures.js +51 -0
  48. package/dist/effects/effect-info-vectors.fixtures.js.map +1 -0
  49. package/dist/effects/effect-info-vectors.js +315 -0
  50. package/dist/effects/effect-info-vectors.js.map +1 -0
  51. package/dist/effects/effect-info.d.ts +5 -1
  52. package/dist/effects/effect-info.d.ts.map +1 -1
  53. package/dist/effects/effect-info.js +245 -143
  54. package/dist/effects/effect-info.js.map +1 -1
  55. package/dist/effects/effect.d.ts +4 -3
  56. package/dist/effects/effect.d.ts.map +1 -1
  57. package/dist/effects/effect.js +88 -70
  58. package/dist/effects/effect.js.map +1 -1
  59. package/dist/effects/handlers.d.ts +1 -1
  60. package/dist/effects/handlers.d.ts.map +1 -1
  61. package/dist/effects/handlers.js +5 -2
  62. package/dist/effects/handlers.js.map +1 -1
  63. package/dist/effects/interpreter.d.ts +11 -0
  64. package/dist/effects/interpreter.d.ts.map +1 -1
  65. package/dist/effects/interpreter.js +13 -0
  66. package/dist/effects/interpreter.js.map +1 -1
  67. package/dist/game/cave-cmd.d.ts +9 -5
  68. package/dist/game/cave-cmd.d.ts.map +1 -1
  69. package/dist/game/cave-cmd.js +56 -11
  70. package/dist/game/cave-cmd.js.map +1 -1
  71. package/dist/game/cave-square.d.ts +42 -0
  72. package/dist/game/cave-square.d.ts.map +1 -0
  73. package/dist/game/cave-square.js +73 -0
  74. package/dist/game/cave-square.js.map +1 -0
  75. package/dist/game/char-sheet.d.ts +12 -8
  76. package/dist/game/char-sheet.d.ts.map +1 -1
  77. package/dist/game/char-sheet.js +41 -8
  78. package/dist/game/char-sheet.js.map +1 -1
  79. package/dist/game/chest.d.ts +2 -3
  80. package/dist/game/chest.d.ts.map +1 -1
  81. package/dist/game/chest.js +17 -6
  82. package/dist/game/chest.js.map +1 -1
  83. package/dist/game/context.d.ts +213 -22
  84. package/dist/game/context.d.ts.map +1 -1
  85. package/dist/game/context.js +109 -17
  86. package/dist/game/context.js.map +1 -1
  87. package/dist/game/describe.d.ts +13 -0
  88. package/dist/game/describe.d.ts.map +1 -1
  89. package/dist/game/describe.js +32 -4
  90. package/dist/game/describe.js.map +1 -1
  91. package/dist/game/display.d.ts +97 -8
  92. package/dist/game/display.d.ts.map +1 -1
  93. package/dist/game/display.js +157 -13
  94. package/dist/game/display.js.map +1 -1
  95. package/dist/game/dump-level.d.ts.map +1 -1
  96. package/dist/game/dump-level.js +3 -2
  97. package/dist/game/dump-level.js.map +1 -1
  98. package/dist/game/effect-attack.d.ts.map +1 -1
  99. package/dist/game/effect-attack.js +36 -27
  100. package/dist/game/effect-attack.js.map +1 -1
  101. package/dist/game/effect-detect.d.ts +4 -4
  102. package/dist/game/effect-detect.d.ts.map +1 -1
  103. package/dist/game/effect-detect.js +42 -9
  104. package/dist/game/effect-detect.js.map +1 -1
  105. package/dist/game/effect-env.d.ts +7 -1
  106. package/dist/game/effect-env.d.ts.map +1 -1
  107. package/dist/game/effect-env.js +1 -0
  108. package/dist/game/effect-env.js.map +1 -1
  109. package/dist/game/effect-general.d.ts +5 -3
  110. package/dist/game/effect-general.d.ts.map +1 -1
  111. package/dist/game/effect-general.js +94 -43
  112. package/dist/game/effect-general.js.map +1 -1
  113. package/dist/game/effect-item.d.ts +2 -1
  114. package/dist/game/effect-item.d.ts.map +1 -1
  115. package/dist/game/effect-item.js +136 -82
  116. package/dist/game/effect-item.js.map +1 -1
  117. package/dist/game/effect-melee.d.ts +10 -4
  118. package/dist/game/effect-melee.d.ts.map +1 -1
  119. package/dist/game/effect-melee.js +44 -19
  120. package/dist/game/effect-melee.js.map +1 -1
  121. package/dist/game/effect-monster.d.ts +26 -4
  122. package/dist/game/effect-monster.d.ts.map +1 -1
  123. package/dist/game/effect-monster.js +52 -9
  124. package/dist/game/effect-monster.js.map +1 -1
  125. package/dist/game/effect-teleport.d.ts +58 -19
  126. package/dist/game/effect-teleport.d.ts.map +1 -1
  127. package/dist/game/effect-teleport.js +143 -27
  128. package/dist/game/effect-teleport.js.map +1 -1
  129. package/dist/game/effect-terrain.d.ts +1 -3
  130. package/dist/game/effect-terrain.d.ts.map +1 -1
  131. package/dist/game/effect-terrain.js +38 -22
  132. package/dist/game/effect-terrain.js.map +1 -1
  133. package/dist/game/equip-cmp.d.ts.map +1 -1
  134. package/dist/game/equip-cmp.js +10 -7
  135. package/dist/game/equip-cmp.js.map +1 -1
  136. package/dist/game/floor.d.ts +16 -4
  137. package/dist/game/floor.d.ts.map +1 -1
  138. package/dist/game/floor.js +22 -4
  139. package/dist/game/floor.js.map +1 -1
  140. package/dist/game/gear.d.ts +101 -13
  141. package/dist/game/gear.d.ts.map +1 -1
  142. package/dist/game/gear.js +183 -24
  143. package/dist/game/gear.js.map +1 -1
  144. package/dist/game/harness.d.ts +2 -1
  145. package/dist/game/harness.d.ts.map +1 -1
  146. package/dist/game/harness.js +12 -1
  147. package/dist/game/harness.js.map +1 -1
  148. package/dist/game/ignore-cmd.d.ts +47 -8
  149. package/dist/game/ignore-cmd.d.ts.map +1 -1
  150. package/dist/game/ignore-cmd.js +76 -8
  151. package/dist/game/ignore-cmd.js.map +1 -1
  152. package/dist/game/known.d.ts +223 -34
  153. package/dist/game/known.d.ts.map +1 -1
  154. package/dist/game/known.js +301 -67
  155. package/dist/game/known.js.map +1 -1
  156. package/dist/game/loop.d.ts +4 -3
  157. package/dist/game/loop.d.ts.map +1 -1
  158. package/dist/game/loop.js +49 -29
  159. package/dist/game/loop.js.map +1 -1
  160. package/dist/game/lore-color.d.ts.map +1 -1
  161. package/dist/game/lore-color.js +13 -1
  162. package/dist/game/lore-color.js.map +1 -1
  163. package/dist/game/mon-cast.d.ts +3 -4
  164. package/dist/game/mon-cast.d.ts.map +1 -1
  165. package/dist/game/mon-cast.js +30 -2
  166. package/dist/game/mon-cast.js.map +1 -1
  167. package/dist/game/mon-cmd.d.ts +4 -5
  168. package/dist/game/mon-cmd.d.ts.map +1 -1
  169. package/dist/game/mon-cmd.js +80 -27
  170. package/dist/game/mon-cmd.js.map +1 -1
  171. package/dist/game/mon-death.d.ts +8 -4
  172. package/dist/game/mon-death.d.ts.map +1 -1
  173. package/dist/game/mon-death.js +6 -9
  174. package/dist/game/mon-death.js.map +1 -1
  175. package/dist/game/mon-group.d.ts +9 -5
  176. package/dist/game/mon-group.d.ts.map +1 -1
  177. package/dist/game/mon-group.js +9 -5
  178. package/dist/game/mon-group.js.map +1 -1
  179. package/dist/game/mon-message.d.ts +90 -40
  180. package/dist/game/mon-message.d.ts.map +1 -1
  181. package/dist/game/mon-message.js +267 -59
  182. package/dist/game/mon-message.js.map +1 -1
  183. package/dist/game/mon-place.d.ts +11 -1
  184. package/dist/game/mon-place.d.ts.map +1 -1
  185. package/dist/game/mon-place.js +15 -3
  186. package/dist/game/mon-place.js.map +1 -1
  187. package/dist/game/mon-ranged.d.ts +2 -1
  188. package/dist/game/mon-ranged.d.ts.map +1 -1
  189. package/dist/game/mon-ranged.js +11 -5
  190. package/dist/game/mon-ranged.js.map +1 -1
  191. package/dist/game/mon-side.d.ts +3 -2
  192. package/dist/game/mon-side.d.ts.map +1 -1
  193. package/dist/game/mon-side.js +15 -14
  194. package/dist/game/mon-side.js.map +1 -1
  195. package/dist/game/monster-turn.d.ts +20 -10
  196. package/dist/game/monster-turn.d.ts.map +1 -1
  197. package/dist/game/monster-turn.js +110 -83
  198. package/dist/game/monster-turn.js.map +1 -1
  199. package/dist/game/notice.d.ts +36 -0
  200. package/dist/game/notice.d.ts.map +1 -0
  201. package/dist/game/notice.js +79 -0
  202. package/dist/game/notice.js.map +1 -0
  203. package/dist/game/obj-cmd.d.ts +14 -3
  204. package/dist/game/obj-cmd.d.ts.map +1 -1
  205. package/dist/game/obj-cmd.js +109 -35
  206. package/dist/game/obj-cmd.js.map +1 -1
  207. package/dist/game/obj-list.d.ts +13 -2
  208. package/dist/game/obj-list.d.ts.map +1 -1
  209. package/dist/game/obj-list.js +42 -27
  210. package/dist/game/obj-list.js.map +1 -1
  211. package/dist/game/object-inspect.d.ts +9 -0
  212. package/dist/game/object-inspect.d.ts.map +1 -1
  213. package/dist/game/object-inspect.js +4 -0
  214. package/dist/game/object-inspect.js.map +1 -1
  215. package/dist/game/pickup.d.ts +0 -2
  216. package/dist/game/pickup.d.ts.map +1 -1
  217. package/dist/game/pickup.js +18 -3
  218. package/dist/game/pickup.js.map +1 -1
  219. package/dist/game/player-side-vectors.d.ts +174 -0
  220. package/dist/game/player-side-vectors.d.ts.map +1 -0
  221. package/dist/game/player-side-vectors.fixtures.d.ts +33 -0
  222. package/dist/game/player-side-vectors.fixtures.d.ts.map +1 -0
  223. package/dist/game/player-side-vectors.fixtures.js +191 -0
  224. package/dist/game/player-side-vectors.fixtures.js.map +1 -0
  225. package/dist/game/player-side-vectors.js +292 -0
  226. package/dist/game/player-side-vectors.js.map +1 -0
  227. package/dist/game/player-side.d.ts +129 -1
  228. package/dist/game/player-side.d.ts.map +1 -1
  229. package/dist/game/player-side.js +520 -338
  230. package/dist/game/player-side.js.map +1 -1
  231. package/dist/game/player-turn.d.ts +26 -7
  232. package/dist/game/player-turn.d.ts.map +1 -1
  233. package/dist/game/player-turn.js +180 -33
  234. package/dist/game/player-turn.js.map +1 -1
  235. package/dist/game/poly.d.ts +38 -0
  236. package/dist/game/poly.d.ts.map +1 -0
  237. package/dist/game/poly.js +82 -0
  238. package/dist/game/poly.js.map +1 -0
  239. package/dist/game/project-cast.d.ts +20 -3
  240. package/dist/game/project-cast.d.ts.map +1 -1
  241. package/dist/game/project-cast.js +49 -6
  242. package/dist/game/project-cast.js.map +1 -1
  243. package/dist/game/project-feat-vectors.d.ts +124 -0
  244. package/dist/game/project-feat-vectors.d.ts.map +1 -0
  245. package/dist/game/project-feat-vectors.fixtures.d.ts +13 -0
  246. package/dist/game/project-feat-vectors.fixtures.d.ts.map +1 -0
  247. package/dist/game/project-feat-vectors.fixtures.js +94 -0
  248. package/dist/game/project-feat-vectors.fixtures.js.map +1 -0
  249. package/dist/game/project-feat-vectors.js +229 -0
  250. package/dist/game/project-feat-vectors.js.map +1 -0
  251. package/dist/game/project-feat.d.ts +53 -1
  252. package/dist/game/project-feat.d.ts.map +1 -1
  253. package/dist/game/project-feat.js +374 -247
  254. package/dist/game/project-feat.js.map +1 -1
  255. package/dist/game/project-monster.d.ts +21 -8
  256. package/dist/game/project-monster.d.ts.map +1 -1
  257. package/dist/game/project-monster.js +45 -21
  258. package/dist/game/project-monster.js.map +1 -1
  259. package/dist/game/project-obj.d.ts +62 -0
  260. package/dist/game/project-obj.d.ts.map +1 -1
  261. package/dist/game/project-obj.js +72 -41
  262. package/dist/game/project-obj.js.map +1 -1
  263. package/dist/game/project-player.d.ts +8 -0
  264. package/dist/game/project-player.d.ts.map +1 -1
  265. package/dist/game/project-player.js.map +1 -1
  266. package/dist/game/projection-handlers.d.ts +81 -0
  267. package/dist/game/projection-handlers.d.ts.map +1 -0
  268. package/dist/game/projection-handlers.js +93 -0
  269. package/dist/game/projection-handlers.js.map +1 -0
  270. package/dist/game/quest.d.ts +23 -0
  271. package/dist/game/quest.d.ts.map +1 -1
  272. package/dist/game/quest.js +42 -0
  273. package/dist/game/quest.js.map +1 -1
  274. package/dist/game/ranged-cmd.d.ts +13 -2
  275. package/dist/game/ranged-cmd.d.ts.map +1 -1
  276. package/dist/game/ranged-cmd.js +32 -15
  277. package/dist/game/ranged-cmd.js.map +1 -1
  278. package/dist/game/repeat.d.ts +78 -0
  279. package/dist/game/repeat.d.ts.map +1 -0
  280. package/dist/game/repeat.js +88 -0
  281. package/dist/game/repeat.js.map +1 -0
  282. package/dist/game/shape-inspect.d.ts +74 -0
  283. package/dist/game/shape-inspect.d.ts.map +1 -0
  284. package/dist/game/shape-inspect.js +114 -0
  285. package/dist/game/shape-inspect.js.map +1 -0
  286. package/dist/game/spell-cmd.d.ts +15 -4
  287. package/dist/game/spell-cmd.d.ts.map +1 -1
  288. package/dist/game/spell-cmd.js +35 -6
  289. package/dist/game/spell-cmd.js.map +1 -1
  290. package/dist/game/spoil.d.ts.map +1 -1
  291. package/dist/game/spoil.js +89 -40
  292. package/dist/game/spoil.js.map +1 -1
  293. package/dist/game/steal.d.ts +3 -3
  294. package/dist/game/steal.d.ts.map +1 -1
  295. package/dist/game/steal.js +9 -4
  296. package/dist/game/steal.js.map +1 -1
  297. package/dist/game/target-loop.d.ts +10 -4
  298. package/dist/game/target-loop.d.ts.map +1 -1
  299. package/dist/game/target-loop.js +14 -8
  300. package/dist/game/target-loop.js.map +1 -1
  301. package/dist/game/target.d.ts +4 -4
  302. package/dist/game/target.d.ts.map +1 -1
  303. package/dist/game/target.js +19 -8
  304. package/dist/game/target.js.map +1 -1
  305. package/dist/game/ui-entry.d.ts +63 -4
  306. package/dist/game/ui-entry.d.ts.map +1 -1
  307. package/dist/game/ui-entry.js +151 -23
  308. package/dist/game/ui-entry.js.map +1 -1
  309. package/dist/game/wizard.d.ts +23 -5
  310. package/dist/game/wizard.d.ts.map +1 -1
  311. package/dist/game/wizard.js +93 -11
  312. package/dist/game/wizard.js.map +1 -1
  313. package/dist/game/world.d.ts.map +1 -1
  314. package/dist/game/world.js +6 -0
  315. package/dist/game/world.js.map +1 -1
  316. package/dist/gen/cave.d.ts +49 -8
  317. package/dist/gen/cave.d.ts.map +1 -1
  318. package/dist/gen/cave.js +200 -28
  319. package/dist/gen/cave.js.map +1 -1
  320. package/dist/gen/generate.d.ts +54 -9
  321. package/dist/gen/generate.d.ts.map +1 -1
  322. package/dist/gen/generate.js +55 -8
  323. package/dist/gen/generate.js.map +1 -1
  324. package/dist/gen/glyph-vectors.d.ts +109 -0
  325. package/dist/gen/glyph-vectors.d.ts.map +1 -0
  326. package/dist/gen/glyph-vectors.fixtures.d.ts +18 -0
  327. package/dist/gen/glyph-vectors.fixtures.d.ts.map +1 -0
  328. package/dist/gen/glyph-vectors.fixtures.js +94 -0
  329. package/dist/gen/glyph-vectors.fixtures.js.map +1 -0
  330. package/dist/gen/glyph-vectors.js +218 -0
  331. package/dist/gen/glyph-vectors.js.map +1 -0
  332. package/dist/gen/glyph.d.ts +104 -0
  333. package/dist/gen/glyph.d.ts.map +1 -0
  334. package/dist/gen/glyph.js +72 -0
  335. package/dist/gen/glyph.js.map +1 -0
  336. package/dist/gen/room.d.ts +26 -2
  337. package/dist/gen/room.d.ts.map +1 -1
  338. package/dist/gen/room.js +414 -264
  339. package/dist/gen/room.js.map +1 -1
  340. package/dist/gen/util.d.ts +11 -2
  341. package/dist/gen/util.d.ts.map +1 -1
  342. package/dist/gen/util.js +31 -9
  343. package/dist/gen/util.js.map +1 -1
  344. package/dist/i18n/i18n.d.ts +207 -0
  345. package/dist/i18n/i18n.d.ts.map +1 -0
  346. package/dist/i18n/i18n.js +405 -0
  347. package/dist/i18n/i18n.js.map +1 -0
  348. package/dist/i18n/text.d.ts +62 -0
  349. package/dist/i18n/text.d.ts.map +1 -0
  350. package/dist/i18n/text.js +120 -0
  351. package/dist/i18n/text.js.map +1 -0
  352. package/dist/index.d.ts +25 -0
  353. package/dist/index.d.ts.map +1 -1
  354. package/dist/index.js +38 -0
  355. package/dist/index.js.map +1 -1
  356. package/dist/mod/extension.d.ts +115 -0
  357. package/dist/mod/extension.d.ts.map +1 -0
  358. package/dist/mod/extension.js +85 -0
  359. package/dist/mod/extension.js.map +1 -0
  360. package/dist/mod/ids.d.ts +10 -0
  361. package/dist/mod/ids.d.ts.map +1 -1
  362. package/dist/mod/ids.js +90 -21
  363. package/dist/mod/ids.js.map +1 -1
  364. package/dist/mod/record-keys.d.ts +43 -0
  365. package/dist/mod/record-keys.d.ts.map +1 -0
  366. package/dist/mod/record-keys.js +100 -0
  367. package/dist/mod/record-keys.js.map +1 -0
  368. package/dist/mod/registry-host.d.ts +472 -0
  369. package/dist/mod/registry-host.d.ts.map +1 -1
  370. package/dist/mod/registry-host.js +313 -0
  371. package/dist/mod/registry-host.js.map +1 -1
  372. package/dist/mod/save-blocks.d.ts +1 -1
  373. package/dist/mon/bind.d.ts.map +1 -1
  374. package/dist/mon/bind.js +6 -3
  375. package/dist/mon/bind.js.map +1 -1
  376. package/dist/mon/knowledge-groups.d.ts +0 -6
  377. package/dist/mon/knowledge-groups.d.ts.map +1 -1
  378. package/dist/mon/knowledge-groups.js +12 -8
  379. package/dist/mon/knowledge-groups.js.map +1 -1
  380. package/dist/mon/lore-describe.d.ts +46 -10
  381. package/dist/mon/lore-describe.d.ts.map +1 -1
  382. package/dist/mon/lore-describe.js +74 -22
  383. package/dist/mon/lore-describe.js.map +1 -1
  384. package/dist/mon/lore-file.d.ts +126 -0
  385. package/dist/mon/lore-file.d.ts.map +1 -0
  386. package/dist/mon/lore-file.js +291 -0
  387. package/dist/mon/lore-file.js.map +1 -0
  388. package/dist/mon/lore.d.ts +9 -3
  389. package/dist/mon/lore.d.ts.map +1 -1
  390. package/dist/mon/lore.js +9 -3
  391. package/dist/mon/lore.js.map +1 -1
  392. package/dist/mon/make.d.ts +4 -2
  393. package/dist/mon/make.d.ts.map +1 -1
  394. package/dist/mon/make.js +4 -2
  395. package/dist/mon/make.js.map +1 -1
  396. package/dist/mon/monster.d.ts +1 -1
  397. package/dist/mon/monster.js +1 -1
  398. package/dist/mon/predicate.d.ts +14 -9
  399. package/dist/mon/predicate.d.ts.map +1 -1
  400. package/dist/mon/predicate.js +14 -9
  401. package/dist/mon/predicate.js.map +1 -1
  402. package/dist/mon/project-mon.d.ts +16 -3
  403. package/dist/mon/project-mon.d.ts.map +1 -1
  404. package/dist/mon/project-mon.js +14 -5
  405. package/dist/mon/project-mon.js.map +1 -1
  406. package/dist/mon/steal.d.ts +31 -4
  407. package/dist/mon/steal.d.ts.map +1 -1
  408. package/dist/mon/steal.js +20 -7
  409. package/dist/mon/steal.js.map +1 -1
  410. package/dist/mon/take-hit.d.ts +8 -3
  411. package/dist/mon/take-hit.d.ts.map +1 -1
  412. package/dist/mon/take-hit.js +8 -3
  413. package/dist/mon/take-hit.js.map +1 -1
  414. package/dist/mon/timed.d.ts +15 -9
  415. package/dist/mon/timed.d.ts.map +1 -1
  416. package/dist/mon/timed.js +13 -8
  417. package/dist/mon/timed.js.map +1 -1
  418. package/dist/mon/types.d.ts +11 -4
  419. package/dist/mon/types.d.ts.map +1 -1
  420. package/dist/mon/types.js.map +1 -1
  421. package/dist/msg.d.ts +40 -1
  422. package/dist/msg.d.ts.map +1 -1
  423. package/dist/msg.js +42 -1
  424. package/dist/msg.js.map +1 -1
  425. package/dist/obj/artifact-fake.d.ts +46 -14
  426. package/dist/obj/artifact-fake.d.ts.map +1 -1
  427. package/dist/obj/artifact-fake.js +46 -17
  428. package/dist/obj/artifact-fake.js.map +1 -1
  429. package/dist/obj/bind.d.ts +23 -0
  430. package/dist/obj/bind.d.ts.map +1 -1
  431. package/dist/obj/bind.js +49 -9
  432. package/dist/obj/bind.js.map +1 -1
  433. package/dist/obj/desc-vectors.d.ts +68 -0
  434. package/dist/obj/desc-vectors.d.ts.map +1 -0
  435. package/dist/obj/desc-vectors.fixtures.d.ts +12 -0
  436. package/dist/obj/desc-vectors.fixtures.d.ts.map +1 -0
  437. package/dist/obj/desc-vectors.fixtures.js +95 -0
  438. package/dist/obj/desc-vectors.fixtures.js.map +1 -0
  439. package/dist/obj/desc-vectors.js +86 -0
  440. package/dist/obj/desc-vectors.js.map +1 -0
  441. package/dist/obj/desc.d.ts +17 -2
  442. package/dist/obj/desc.d.ts.map +1 -1
  443. package/dist/obj/desc.js +129 -54
  444. package/dist/obj/desc.js.map +1 -1
  445. package/dist/obj/effects-info.d.ts.map +1 -1
  446. package/dist/obj/effects-info.js +87 -58
  447. package/dist/obj/effects-info.js.map +1 -1
  448. package/dist/obj/fake-object.d.ts +70 -0
  449. package/dist/obj/fake-object.d.ts.map +1 -0
  450. package/dist/obj/fake-object.js +104 -0
  451. package/dist/obj/fake-object.js.map +1 -0
  452. package/dist/obj/ignore.d.ts +55 -12
  453. package/dist/obj/ignore.d.ts.map +1 -1
  454. package/dist/obj/ignore.js +68 -31
  455. package/dist/obj/ignore.js.map +1 -1
  456. package/dist/obj/knowledge.d.ts +46 -3
  457. package/dist/obj/knowledge.d.ts.map +1 -1
  458. package/dist/obj/knowledge.js +169 -151
  459. package/dist/obj/knowledge.js.map +1 -1
  460. package/dist/obj/known-object.d.ts +68 -8
  461. package/dist/obj/known-object.d.ts.map +1 -1
  462. package/dist/obj/known-object.js +90 -10
  463. package/dist/obj/known-object.js.map +1 -1
  464. package/dist/obj/make.d.ts +15 -4
  465. package/dist/obj/make.d.ts.map +1 -1
  466. package/dist/obj/make.js +49 -27
  467. package/dist/obj/make.js.map +1 -1
  468. package/dist/obj/object-info.d.ts +10 -0
  469. package/dist/obj/object-info.d.ts.map +1 -1
  470. package/dist/obj/object-info.js +93 -7
  471. package/dist/obj/object-info.js.map +1 -1
  472. package/dist/obj/object.d.ts +42 -4
  473. package/dist/obj/object.d.ts.map +1 -1
  474. package/dist/obj/object.js +362 -147
  475. package/dist/obj/object.js.map +1 -1
  476. package/dist/obj/power.d.ts +23 -4
  477. package/dist/obj/power.d.ts.map +1 -1
  478. package/dist/obj/power.js +231 -65
  479. package/dist/obj/power.js.map +1 -1
  480. package/dist/obj/randart-build.d.ts +27 -22
  481. package/dist/obj/randart-build.d.ts.map +1 -1
  482. package/dist/obj/randart-build.js +435 -357
  483. package/dist/obj/randart-build.js.map +1 -1
  484. package/dist/obj/randart-data.d.ts +62 -24
  485. package/dist/obj/randart-data.d.ts.map +1 -1
  486. package/dist/obj/randart-data.js +333 -189
  487. package/dist/obj/randart-data.js.map +1 -1
  488. package/dist/obj/randart-file.d.ts +21 -0
  489. package/dist/obj/randart-file.d.ts.map +1 -0
  490. package/dist/obj/randart-file.js +119 -0
  491. package/dist/obj/randart-file.js.map +1 -0
  492. package/dist/obj/randart-log.d.ts +63 -0
  493. package/dist/obj/randart-log.d.ts.map +1 -0
  494. package/dist/obj/randart-log.js +72 -0
  495. package/dist/obj/randart-log.js.map +1 -0
  496. package/dist/obj/randart-registry.d.ts +178 -0
  497. package/dist/obj/randart-registry.d.ts.map +1 -0
  498. package/dist/obj/randart-registry.js +140 -0
  499. package/dist/obj/randart-registry.js.map +1 -0
  500. package/dist/obj/randart-vectors.d.ts +97 -0
  501. package/dist/obj/randart-vectors.d.ts.map +1 -0
  502. package/dist/obj/randart-vectors.fixtures.d.ts +18 -0
  503. package/dist/obj/randart-vectors.fixtures.d.ts.map +1 -0
  504. package/dist/obj/randart-vectors.fixtures.js +50 -0
  505. package/dist/obj/randart-vectors.fixtures.js.map +1 -0
  506. package/dist/obj/randart-vectors.js +311 -0
  507. package/dist/obj/randart-vectors.js.map +1 -0
  508. package/dist/obj/randart.d.ts +53 -15
  509. package/dist/obj/randart.d.ts.map +1 -1
  510. package/dist/obj/randart.js +166 -44
  511. package/dist/obj/randart.js.map +1 -1
  512. package/dist/obj/rune-registry.d.ts +180 -0
  513. package/dist/obj/rune-registry.d.ts.map +1 -0
  514. package/dist/obj/rune-registry.js +161 -0
  515. package/dist/obj/rune-registry.js.map +1 -0
  516. package/dist/obj/rune-vectors.d.ts +99 -0
  517. package/dist/obj/rune-vectors.d.ts.map +1 -0
  518. package/dist/obj/rune-vectors.fixtures.d.ts +44 -0
  519. package/dist/obj/rune-vectors.fixtures.d.ts.map +1 -0
  520. package/dist/obj/rune-vectors.fixtures.js +125 -0
  521. package/dist/obj/rune-vectors.fixtures.js.map +1 -0
  522. package/dist/obj/rune-vectors.js +159 -0
  523. package/dist/obj/rune-vectors.js.map +1 -0
  524. package/dist/obj/tval-registry.d.ts +174 -0
  525. package/dist/obj/tval-registry.d.ts.map +1 -0
  526. package/dist/obj/tval-registry.js +151 -0
  527. package/dist/obj/tval-registry.js.map +1 -0
  528. package/dist/obj/tval-vectors.d.ts +85 -0
  529. package/dist/obj/tval-vectors.d.ts.map +1 -0
  530. package/dist/obj/tval-vectors.fixtures.d.ts +24 -0
  531. package/dist/obj/tval-vectors.fixtures.d.ts.map +1 -0
  532. package/dist/obj/tval-vectors.fixtures.js +41 -0
  533. package/dist/obj/tval-vectors.fixtures.js.map +1 -0
  534. package/dist/obj/tval-vectors.js +76 -0
  535. package/dist/obj/tval-vectors.js.map +1 -0
  536. package/dist/obj/types.d.ts +18 -7
  537. package/dist/obj/types.d.ts.map +1 -1
  538. package/dist/obj/types.js.map +1 -1
  539. package/dist/obj/value.d.ts.map +1 -1
  540. package/dist/obj/value.js +23 -20
  541. package/dist/obj/value.js.map +1 -1
  542. package/dist/parser.d.ts +116 -0
  543. package/dist/parser.d.ts.map +1 -0
  544. package/dist/parser.js +205 -0
  545. package/dist/parser.js.map +1 -0
  546. package/dist/player/bind.d.ts.map +1 -1
  547. package/dist/player/bind.js +3 -2
  548. package/dist/player/bind.js.map +1 -1
  549. package/dist/player/birth.d.ts +2 -1
  550. package/dist/player/birth.d.ts.map +1 -1
  551. package/dist/player/birth.js +2 -1
  552. package/dist/player/birth.js.map +1 -1
  553. package/dist/player/calcs.d.ts +58 -23
  554. package/dist/player/calcs.d.ts.map +1 -1
  555. package/dist/player/calcs.js +93 -36
  556. package/dist/player/calcs.js.map +1 -1
  557. package/dist/player/death.d.ts +50 -0
  558. package/dist/player/death.d.ts.map +1 -0
  559. package/dist/player/death.js +46 -0
  560. package/dist/player/death.js.map +1 -0
  561. package/dist/player/options-file.d.ts +129 -0
  562. package/dist/player/options-file.d.ts.map +1 -0
  563. package/dist/player/options-file.js +309 -0
  564. package/dist/player/options-file.js.map +1 -0
  565. package/dist/player/options.d.ts +2 -1
  566. package/dist/player/options.d.ts.map +1 -1
  567. package/dist/player/options.js +2 -1
  568. package/dist/player/options.js.map +1 -1
  569. package/dist/player/player.d.ts +50 -3
  570. package/dist/player/player.d.ts.map +1 -1
  571. package/dist/player/player.js +10 -1
  572. package/dist/player/player.js.map +1 -1
  573. package/dist/player/shape-lore.d.ts +11 -7
  574. package/dist/player/shape-lore.d.ts.map +1 -1
  575. package/dist/player/shape-lore.js +24 -11
  576. package/dist/player/shape-lore.js.map +1 -1
  577. package/dist/player/timed.d.ts +5 -3
  578. package/dist/player/timed.d.ts.map +1 -1
  579. package/dist/player/timed.js +11 -2
  580. package/dist/player/timed.js.map +1 -1
  581. package/dist/player/types.d.ts +29 -4
  582. package/dist/player/types.d.ts.map +1 -1
  583. package/dist/player/types.js +24 -1
  584. package/dist/player/types.js.map +1 -1
  585. package/dist/session/boot.d.ts +26 -2
  586. package/dist/session/boot.d.ts.map +1 -1
  587. package/dist/session/boot.js +21 -2
  588. package/dist/session/boot.js.map +1 -1
  589. package/dist/session/game.d.ts +15 -0
  590. package/dist/session/game.d.ts.map +1 -1
  591. package/dist/session/game.js +616 -140
  592. package/dist/session/game.js.map +1 -1
  593. package/dist/session/save-migrate.d.ts.map +1 -1
  594. package/dist/session/save-migrate.js +76 -1
  595. package/dist/session/save-migrate.js.map +1 -1
  596. package/dist/session/save.d.ts +75 -12
  597. package/dist/session/save.d.ts.map +1 -1
  598. package/dist/session/save.js +177 -18
  599. package/dist/session/save.js.map +1 -1
  600. package/dist/store/bind.d.ts +1 -1
  601. package/dist/store/bind.d.ts.map +1 -1
  602. package/dist/store/bind.js +4 -3
  603. package/dist/store/bind.js.map +1 -1
  604. package/dist/store/mass-produce-vectors.d.ts +40 -0
  605. package/dist/store/mass-produce-vectors.d.ts.map +1 -0
  606. package/dist/store/mass-produce-vectors.fixtures.d.ts +13 -0
  607. package/dist/store/mass-produce-vectors.fixtures.d.ts.map +1 -0
  608. package/dist/store/mass-produce-vectors.fixtures.js +52 -0
  609. package/dist/store/mass-produce-vectors.fixtures.js.map +1 -0
  610. package/dist/store/mass-produce-vectors.js +44 -0
  611. package/dist/store/mass-produce-vectors.js.map +1 -0
  612. package/dist/store/store.d.ts +104 -7
  613. package/dist/store/store.d.ts.map +1 -1
  614. package/dist/store/store.js +199 -77
  615. package/dist/store/store.js.map +1 -1
  616. package/dist/store/transact.d.ts +14 -5
  617. package/dist/store/transact.d.ts.map +1 -1
  618. package/dist/store/transact.js +17 -16
  619. package/dist/store/transact.js.map +1 -1
  620. package/dist/store/types.d.ts +3 -2
  621. package/dist/store/types.d.ts.map +1 -1
  622. package/dist/store/types.js +1 -1
  623. package/dist/version.d.ts +1 -1
  624. package/dist/version.js +1 -1
  625. package/dist/visuals/index.d.ts +1 -0
  626. package/dist/visuals/index.d.ts.map +1 -1
  627. package/dist/visuals/index.js +1 -0
  628. package/dist/visuals/index.js.map +1 -1
  629. package/dist/visuals/map-text.d.ts +8 -0
  630. package/dist/visuals/map-text.d.ts.map +1 -1
  631. package/dist/visuals/map-text.js +1 -1
  632. package/dist/visuals/map-text.js.map +1 -1
  633. package/dist/visuals/object-glyph.d.ts +56 -0
  634. package/dist/visuals/object-glyph.d.ts.map +1 -0
  635. package/dist/visuals/object-glyph.js +52 -0
  636. package/dist/visuals/object-glyph.js.map +1 -0
  637. package/dist/visuals/prefs.d.ts +14 -22
  638. package/dist/visuals/prefs.d.ts.map +1 -1
  639. package/dist/visuals/prefs.js +4 -23
  640. package/dist/visuals/prefs.js.map +1 -1
  641. package/dist/visuals/tile-prefs.d.ts +26 -0
  642. package/dist/visuals/tile-prefs.d.ts.map +1 -1
  643. package/dist/visuals/tile-prefs.js +28 -0
  644. package/dist/visuals/tile-prefs.js.map +1 -1
  645. package/dist/world/feature.d.ts +2 -1
  646. package/dist/world/feature.d.ts.map +1 -1
  647. package/dist/world/feature.js +2 -0
  648. package/dist/world/feature.js.map +1 -1
  649. package/dist/world/project.d.ts +10 -2
  650. package/dist/world/project.d.ts.map +1 -1
  651. package/dist/world/project.js +18 -6
  652. package/dist/world/project.js.map +1 -1
  653. package/dist/world/projection.d.ts +37 -3
  654. package/dist/world/projection.d.ts.map +1 -1
  655. package/dist/world/projection.js +69 -7
  656. package/dist/world/projection.js.map +1 -1
  657. package/dist/world/trap.d.ts +2 -1
  658. package/dist/world/trap.d.ts.map +1 -1
  659. package/dist/world/trap.js +2 -1
  660. package/dist/world/trap.js.map +1 -1
  661. package/dist/world/view.d.ts +1 -1
  662. package/dist/world/view.d.ts.map +1 -1
  663. package/dist/world/view.js +11 -3
  664. package/dist/world/view.js.map +1 -1
  665. package/package.json +1 -1
  666. package/src/agent/perceive.ts +2 -3
  667. package/src/combat/blow-vectors.fixtures.ts +99 -0
  668. package/src/combat/blow-vectors.json +482 -0
  669. package/src/combat/blow-vectors.ts +280 -0
  670. package/src/combat/brand-slay.ts +42 -11
  671. package/src/combat/index.ts +1 -1
  672. package/src/combat/melee.ts +37 -19
  673. package/src/combat/mon-melee.ts +611 -364
  674. package/src/combat/ranged.ts +43 -26
  675. package/src/constants.ts +15 -0
  676. package/src/datafile.ts +148 -0
  677. package/src/effects/effect-info-registry.ts +313 -0
  678. package/src/effects/effect-info-vectors.fixtures.ts +61 -0
  679. package/src/effects/effect-info-vectors.json +11532 -0
  680. package/src/effects/effect-info-vectors.ts +376 -0
  681. package/src/effects/effect-info.ts +1005 -859
  682. package/src/effects/effect.ts +96 -62
  683. package/src/effects/handlers.ts +5 -2
  684. package/src/effects/interpreter.ts +14 -0
  685. package/src/game/cave-cmd.ts +54 -11
  686. package/src/game/cave-square.ts +80 -0
  687. package/src/game/char-sheet.ts +59 -16
  688. package/src/game/chest.ts +25 -8
  689. package/src/game/context.ts +293 -27
  690. package/src/game/describe.ts +34 -4
  691. package/src/game/display.ts +215 -19
  692. package/src/game/dump-level.ts +3 -2
  693. package/src/game/effect-attack.ts +41 -28
  694. package/src/game/effect-detect.ts +45 -8
  695. package/src/game/effect-env.ts +8 -0
  696. package/src/game/effect-general.ts +110 -47
  697. package/src/game/effect-item.ts +1075 -999
  698. package/src/game/effect-melee.ts +51 -18
  699. package/src/game/effect-monster.ts +55 -9
  700. package/src/game/effect-teleport.ts +173 -38
  701. package/src/game/effect-terrain.ts +38 -22
  702. package/src/game/equip-cmp.ts +483 -480
  703. package/src/game/floor.ts +22 -4
  704. package/src/game/gear.ts +210 -21
  705. package/src/game/harness.ts +12 -1
  706. package/src/game/ignore-cmd.ts +96 -8
  707. package/src/game/known.ts +392 -73
  708. package/src/game/loop.ts +52 -27
  709. package/src/game/lore-color.ts +13 -1
  710. package/src/game/mon-cast.ts +31 -6
  711. package/src/game/mon-cmd.ts +95 -30
  712. package/src/game/mon-death.ts +14 -12
  713. package/src/game/mon-group.ts +9 -5
  714. package/src/game/mon-message.ts +363 -65
  715. package/src/game/mon-place.ts +15 -3
  716. package/src/game/mon-ranged.ts +14 -5
  717. package/src/game/mon-side.ts +16 -12
  718. package/src/game/monster-turn.ts +120 -87
  719. package/src/game/notice.ts +85 -0
  720. package/src/game/obj-cmd.ts +126 -37
  721. package/src/game/obj-list.ts +44 -26
  722. package/src/game/object-inspect.ts +13 -0
  723. package/src/game/pickup.ts +29 -5
  724. package/src/game/player-side-vectors.fixtures.ts +215 -0
  725. package/src/game/player-side-vectors.json +6914 -0
  726. package/src/game/player-side-vectors.ts +420 -0
  727. package/src/game/player-side.ts +622 -340
  728. package/src/game/player-turn.ts +228 -31
  729. package/src/game/poly.ts +107 -0
  730. package/src/game/project-cast.ts +63 -6
  731. package/src/game/project-feat-vectors.fixtures.ts +106 -0
  732. package/src/game/project-feat-vectors.json +6554 -0
  733. package/src/game/project-feat-vectors.ts +323 -0
  734. package/src/game/project-feat.ts +417 -248
  735. package/src/game/project-monster.ts +69 -30
  736. package/src/game/project-obj-vectors.json +1 -0
  737. package/src/game/project-obj.ts +115 -47
  738. package/src/game/project-player.ts +8 -0
  739. package/src/game/projection-handlers.ts +110 -0
  740. package/src/game/quest.ts +48 -0
  741. package/src/game/ranged-cmd.ts +45 -11
  742. package/src/game/repeat.ts +92 -0
  743. package/src/game/shape-inspect.ts +166 -0
  744. package/src/game/spell-cmd.ts +39 -6
  745. package/src/game/spoil.ts +92 -39
  746. package/src/game/steal.ts +9 -4
  747. package/src/game/target-loop.ts +14 -7
  748. package/src/game/target.ts +18 -7
  749. package/src/game/ui-entry.ts +172 -22
  750. package/src/game/wizard.ts +97 -10
  751. package/src/game/world.ts +6 -0
  752. package/src/gen/cave.ts +225 -26
  753. package/src/gen/generate.ts +62 -9
  754. package/src/gen/glyph-vectors.fixtures.ts +122 -0
  755. package/src/gen/glyph-vectors.json +5996 -0
  756. package/src/gen/glyph-vectors.ts +280 -0
  757. package/src/gen/glyph.ts +132 -0
  758. package/src/gen/room.ts +446 -265
  759. package/src/gen/util.ts +32 -9
  760. package/src/i18n/i18n.ts +492 -0
  761. package/src/i18n/text.ts +117 -0
  762. package/src/index.ts +307 -254
  763. package/src/mod/extension.ts +136 -0
  764. package/src/mod/ids.ts +92 -21
  765. package/src/mod/record-keys.ts +102 -0
  766. package/src/mod/registry-host.ts +1063 -234
  767. package/src/mon/bind.ts +14 -8
  768. package/src/mon/knowledge-groups.ts +12 -12
  769. package/src/mon/lore-describe.ts +93 -26
  770. package/src/mon/lore-file.ts +365 -0
  771. package/src/mon/lore.ts +9 -3
  772. package/src/mon/make.ts +4 -2
  773. package/src/mon/monster.ts +1 -1
  774. package/src/mon/predicate.ts +14 -9
  775. package/src/mon/project-mon.ts +23 -5
  776. package/src/mon/steal.ts +39 -7
  777. package/src/mon/take-hit.ts +8 -3
  778. package/src/mon/timed.ts +15 -9
  779. package/src/mon/types.ts +11 -4
  780. package/src/msg.ts +55 -1
  781. package/src/obj/artifact-fake.ts +47 -17
  782. package/src/obj/bind.ts +52 -9
  783. package/src/obj/desc-vectors.fixtures.ts +119 -0
  784. package/src/obj/desc-vectors.json +2360 -0
  785. package/src/obj/desc-vectors.ts +128 -0
  786. package/src/obj/desc.ts +159 -55
  787. package/src/obj/effects-info.ts +90 -59
  788. package/src/obj/fake-object.ts +135 -0
  789. package/src/obj/ignore.ts +95 -28
  790. package/src/obj/knowledge.ts +291 -139
  791. package/src/obj/known-object.ts +126 -11
  792. package/src/obj/make.ts +53 -29
  793. package/src/obj/object-info.ts +103 -6
  794. package/src/obj/object.ts +392 -151
  795. package/src/obj/power.ts +297 -59
  796. package/src/obj/randart-build.ts +1875 -1705
  797. package/src/obj/randart-data.ts +1547 -1344
  798. package/src/obj/randart-file.ts +130 -0
  799. package/src/obj/randart-log.ts +78 -0
  800. package/src/obj/randart-registry.ts +247 -0
  801. package/src/obj/randart-vectors.fixtures.ts +61 -0
  802. package/src/obj/randart-vectors.json +836 -0
  803. package/src/obj/randart-vectors.ts +369 -0
  804. package/src/obj/randart.ts +722 -552
  805. package/src/obj/rune-registry.ts +270 -0
  806. package/src/obj/rune-vectors.fixtures.ts +164 -0
  807. package/src/obj/rune-vectors.json +121 -0
  808. package/src/obj/rune-vectors.ts +229 -0
  809. package/src/obj/tval-kind-vectors.json +391 -0
  810. package/src/obj/tval-registry.ts +243 -0
  811. package/src/obj/tval-vectors.fixtures.ts +50 -0
  812. package/src/obj/tval-vectors.json +38 -0
  813. package/src/obj/tval-vectors.ts +126 -0
  814. package/src/obj/types.ts +18 -7
  815. package/src/obj/value.ts +26 -20
  816. package/src/parser.ts +214 -0
  817. package/src/player/bind.ts +5 -2
  818. package/src/player/birth.ts +2 -1
  819. package/src/player/calcs.ts +123 -42
  820. package/src/player/death.ts +78 -0
  821. package/src/player/options-file.ts +387 -0
  822. package/src/player/options.ts +2 -1
  823. package/src/player/player.ts +60 -4
  824. package/src/player/shape-lore.ts +33 -14
  825. package/src/player/timed.ts +14 -4
  826. package/src/player/types.ts +30 -4
  827. package/src/session/boot.ts +51 -1
  828. package/src/session/game.ts +720 -163
  829. package/src/session/save-migrate.ts +81 -1
  830. package/src/session/save.ts +264 -22
  831. package/src/store/bind.ts +4 -3
  832. package/src/store/mass-produce-vectors.fixtures.ts +64 -0
  833. package/src/store/mass-produce-vectors.json +1169 -0
  834. package/src/store/mass-produce-vectors.ts +67 -0
  835. package/src/store/store.ts +266 -63
  836. package/src/store/transact.ts +39 -16
  837. package/src/store/types.ts +3 -2
  838. package/src/version.ts +1 -1
  839. package/src/visuals/index.ts +1 -0
  840. package/src/visuals/map-text.ts +1 -1
  841. package/src/visuals/object-glyph.ts +76 -0
  842. package/src/visuals/prefs.ts +22 -32
  843. package/src/visuals/tile-prefs.ts +32 -0
  844. package/src/world/feature.ts +4 -1
  845. package/src/world/project.ts +19 -4
  846. package/src/world/projection.ts +79 -8
  847. package/src/world/trap.ts +25 -21
  848. package/src/world/view.ts +11 -1
@@ -0,0 +1,102 @@
1
+ import { ELEMENT_ENTRIES, OBJECT_MODIFIER_ENTRIES, STAT_ENTRIES, } from "./generated/index.js";
2
+ /** OBJ_MOD_MAX: the stats come first, then list-object-modifiers.h. */
3
+ const OBJ_MOD_NAMES = [
4
+ ...STAT_ENTRIES.map((e) => e.name),
5
+ ...OBJECT_MODIFIER_ENTRIES.map((e) => e.name),
6
+ ];
7
+ /**
8
+ * write_flags (datafile.c:482-514): `intro` followed by the set flags' names,
9
+ * " | "-separated, wrapped at ~60 characters.
10
+ */
11
+ export function writeFlags(intro, flags, size, names) {
12
+ const lines = [];
13
+ let buf = "";
14
+ let pointer = 0;
15
+ for (let flag = flags.next(1); flag > 0 && flag < size * 8; flag = flags.next(flag + 1)) {
16
+ if (buf.length > 0) {
17
+ buf += " | ";
18
+ pointer += 3;
19
+ }
20
+ /* "If no name, we're past the real flags" - and the trailing " | " stays. */
21
+ const name = names[flag];
22
+ if (name === undefined)
23
+ break;
24
+ buf += name;
25
+ pointer += name.length;
26
+ if (pointer >= 60) {
27
+ lines.push(`${intro}${buf}\n`);
28
+ buf = "";
29
+ pointer = 0;
30
+ }
31
+ }
32
+ /* "Print remaining flags if any", gated on pointer rather than on buf. */
33
+ if (pointer)
34
+ lines.push(`${intro}${buf}\n`);
35
+ return lines.join("");
36
+ }
37
+ /**
38
+ * write_mods (datafile.c:520-563): `values:` lines for every non-zero modifier,
39
+ * as NAME[value].
40
+ *
41
+ * `pointer += 5` for the "[%d]" regardless of how many digits the value has -
42
+ * upstream's own approximation, kept because it is what decides where the line
43
+ * breaks.
44
+ */
45
+ export function writeMods(values) {
46
+ const lines = [];
47
+ let buf = "";
48
+ let pointer = 0;
49
+ for (let i = 0; i < OBJ_MOD_NAMES.length; i++) {
50
+ const v = values[i] ?? 0;
51
+ if (v === 0)
52
+ continue;
53
+ if (buf.length > 0) {
54
+ buf += " | ";
55
+ pointer += 3;
56
+ }
57
+ const name = OBJ_MOD_NAMES[i];
58
+ buf += `${name}[${String(v)}]`;
59
+ pointer += name.length + 5;
60
+ if (pointer >= 60) {
61
+ lines.push(`values:${buf}\n`);
62
+ buf = "";
63
+ pointer = 0;
64
+ }
65
+ }
66
+ if (pointer)
67
+ lines.push(`values:${buf}\n`);
68
+ return lines.join("");
69
+ }
70
+ /**
71
+ * write_elements (datafile.c:569-610): `values:` lines for every element with a
72
+ * non-zero resistance level, as RES_NAME[level].
73
+ *
74
+ * `pointer += strlen(name) + 4` counts "RES_" but the value still only counts
75
+ * as 5 - the same approximation as write_mods.
76
+ */
77
+ export function writeElements(elInfo) {
78
+ const lines = [];
79
+ let buf = "";
80
+ let pointer = 0;
81
+ for (let i = 0; i < ELEMENT_ENTRIES.length; i++) {
82
+ const level = elInfo[i]?.resLevel ?? 0;
83
+ if (level === 0)
84
+ continue;
85
+ if (buf.length > 0) {
86
+ buf += " | ";
87
+ pointer += 3;
88
+ }
89
+ const name = ELEMENT_ENTRIES[i].name;
90
+ buf += `RES_${name}[${String(level)}]`;
91
+ pointer += name.length + 4 + 5;
92
+ if (pointer >= 60) {
93
+ lines.push(`values:${buf}\n`);
94
+ buf = "";
95
+ pointer = 0;
96
+ }
97
+ }
98
+ if (pointer)
99
+ lines.push(`values:${buf}\n`);
100
+ return lines.join("");
101
+ }
102
+ //# sourceMappingURL=datafile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datafile.js","sourceRoot":"","sources":["../src/datafile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * The EFFECT INFO registry: everything the game SAYS about an effect, and how a
3
+ * gamedata `type:` name becomes its integer subtype.
4
+ *
5
+ * WHY THIS IS A REGISTRY. `registry:effect` already let a mod register a handler
6
+ * for a brand-new effect code and have it DO something. What it could not do was
7
+ * let the game describe it. Four closed `switch` statements stood in the way,
8
+ * and each failed silently rather than loudly:
9
+ *
10
+ * - `effectMenuName` (effect-info.ts, keyed on the EFINFO_* flag) returned ""
11
+ * for an unknown flag, so a mod's effect showed a BLANK ROW in the "Activate
12
+ * which item?" and spell menus.
13
+ * - `formatEffectDesc` (effect-info.ts, same key) returned "" as well, so
14
+ * object recall and spell descriptions said nothing at all about it.
15
+ * - the activation summary walker (obj/effects-info.ts, keyed on the effect
16
+ * CODE) counted it "unsummarized", so a randart activation built from a mod
17
+ * effect could never be recognised as duplicating an intrinsic property.
18
+ * - `effectSubtype` (effect.ts, keyed on the EF index) returned -1 for every
19
+ * name, so a mod's effect could take NO named subtype - only a bare integer.
20
+ *
21
+ * FOUR TABLES, THREE KEYS, and they are separate because upstream's keys are.
22
+ * The EFINFO_* flag is a property of the effect's ENTRY (many effects share one
23
+ * flag: twenty flags cover a hundred and twelve effects), the summary walker
24
+ * keys on the effect's own code, and subtype decoding keys on the effect index.
25
+ * Collapsing them would force a mod to register the same behaviour three times
26
+ * under three spellings.
27
+ *
28
+ * WHY MODULE-LEVEL. Ruled 2026-08-09: disabling a mod always takes effect on the
29
+ * next RELOAD (exiting mod management prompts to save and reload). A toggle can
30
+ * therefore never need to apply to a running session, so a module-level table
31
+ * cannot violate the mod default policy.
32
+ *
33
+ * What actually clears it is the reload itself: a fresh page is a fresh module
34
+ * instance, and the host installs each plugin at most once per realm
35
+ * (`installedPluginIds` in web/main.ts is never cleared). So a disabled mod's
36
+ * registrations are gone on the next boot because the table they lived in is.
37
+ * `resetEffectInfoRegistry()` is the same restoration WITHOUT a fresh realm -
38
+ * core's arms back, every mod registration dropped - which is what a test needs
39
+ * in order to prove the mod default policy holds here rather than assert it.
40
+ * It has no production caller and is not meant to acquire one: calling it
41
+ * mid-session would strip a running mod's handlers, which is precisely the
42
+ * live-toggle behaviour the ruling says must not happen.
43
+ *
44
+ * ORDER AND RNG. Core's handlers are the case bodies lifted unchanged. Nothing
45
+ * here draws: upstream's `effect_describe` calls `dice_roll()` to populate the
46
+ * random_value it formats, and the port substitutes `Dice.randomValue()` at
47
+ * every such site precisely so that rendering a menu row cannot perturb the
48
+ * stream (see effect-info.ts's header). A mod handler receives the already
49
+ * computed value and has no Rng to reach, so that property survives the seam.
50
+ */
51
+ import type { RandomValue } from "../rng.js";
52
+ import type { ProjectionInfo } from "../world/projection.js";
53
+ import type { EffectObjectProperty } from "../obj/randart-build.js";
54
+ import type { EffectRecordJson } from "../obj/types.js";
55
+ import type { GameState } from "../game/context.js";
56
+ import type { ItemRequest } from "../game/effect-item.js";
57
+ import type { Effect, EffectCode, SubtypeInjections } from "./effect.js";
58
+ /** The projection strings an effect's subtype selects, "" when out of range. */
59
+ export interface EffectProjectionText {
60
+ /** projections[subtype].desc - EFINFO_SEEN / _BOLT / _BOLTD / _TOUCH. */
61
+ readonly desc: string;
62
+ /** projections[subtype].player_desc - EFINFO_BALL / _SPOT / _BREATH / _SHORT. */
63
+ readonly playerDesc: string;
64
+ /** projections[subtype].lash_desc - EFINFO_LASH. */
65
+ readonly lashDesc: string;
66
+ }
67
+ /** What a menu-name handler is given (effect_get_menu_name, effects-info.c L583). */
68
+ export interface EffectMenuContext {
69
+ /** The effect being named. */
70
+ readonly effect: Effect;
71
+ /** base_descs[index].menu_name: the raw format string. */
72
+ readonly fmt: string;
73
+ /** sprintf(fmt, ...) - the format string with its arguments filled in. */
74
+ format(...args: Array<string | number>): string;
75
+ /** The effect's dice as a random_value, zeroed when it has none. */
76
+ readonly value: RandomValue;
77
+ /** randcalc(value, level, AVERAGE) - no RNG is drawn. */
78
+ average(level?: number): number;
79
+ /** projections[subtype], with "" for an out-of-range subtype. */
80
+ readonly proj: EffectProjectionText;
81
+ /** timed_effects[subtype].desc, "" when the host supplied no lookup. */
82
+ timedDesc(): string;
83
+ /** The stat property name for the subtype, "" when unavailable. */
84
+ statName(): string;
85
+ /** summon_desc(subtype), "" when unavailable. */
86
+ summonDesc(): string;
87
+ /** z_info->food_value scaled full / hungry thresholds (EFINFO_FOOD). */
88
+ readonly foodFull: number;
89
+ readonly foodHungry: number;
90
+ }
91
+ /** What a description handler is given (effect_describe's body, L384-548). */
92
+ export interface EffectDescContext {
93
+ /** The effect being described. */
94
+ readonly effect: Effect;
95
+ /** base_descs[index].desc: the raw format string. */
96
+ readonly desc: string;
97
+ /** sprintf(desc, ...) - the format string with its arguments filled in. */
98
+ format(...args: Array<string | number>): string;
99
+ /** The random_value in force (an earlier SET_VALUE's, or the effect's own). */
100
+ readonly value: RandomValue;
101
+ /** format_dice_string(value) as the caller already computed it. */
102
+ readonly diceString: string;
103
+ /** format_dice_string(value, multiplier) - EFINFO_FOOD's turn count. */
104
+ diceStringTimes(multiplier: number): string;
105
+ /** The device-skill boost percentage in force. */
106
+ readonly devSkillBoost: number;
107
+ /** append_damage(value, boost) - defaults to the boost in force. */
108
+ appendDamage(boost?: number): string;
109
+ /** randcalc(value, level, AVERAGE) - no RNG is drawn. */
110
+ average(level?: number): number;
111
+ /** projections[subtype], with "" for an out-of-range subtype. */
112
+ readonly proj: EffectProjectionText;
113
+ /** timed_effects[subtype].desc, "" when the host supplied no lookup. */
114
+ timedDesc(): string;
115
+ /** The stat property name for the subtype, "" when unavailable. */
116
+ statName(): string;
117
+ /** summon_desc(subtype), "" when unavailable. */
118
+ summonDesc(): string;
119
+ /** player->lev, 0 when the host supplied none (EFINFO_SHORT). */
120
+ readonly playerLevel: number;
121
+ /** z_info->food_value, 100 upstream (EFINFO_FOOD). */
122
+ readonly foodValue: number;
123
+ }
124
+ /**
125
+ * What one EFINFO_* flag means. Both halves are optional, and an absent half
126
+ * is upstream's own behaviour for an unhandled flag: "" - which is why a mod
127
+ * that supplies only `describe` still gets a blank menu row, and should say so
128
+ * to itself rather than be surprised.
129
+ */
130
+ export interface EffectTextHandler {
131
+ /** The row text in the activate / cast menus. */
132
+ menuName?(ctx: EffectMenuContext): string;
133
+ /** The sentence in object recall and spell descriptions. */
134
+ describe?(ctx: EffectDescContext): string;
135
+ }
136
+ /** EFPROP kinds and the resolved timed data, as the walker sees them. */
137
+ export interface ActivationSummaryContext {
138
+ /** The compiled effect record being walked. */
139
+ readonly record: EffectRecordJson;
140
+ /** Append one summarized object property. */
141
+ add(idx: number, reslevelMin: number, reslevelMax: number, kind: number): void;
142
+ /** summarize_cure for the record's `type` (a no-op for an unknown name). */
143
+ summarizeCure(name: string | undefined): void;
144
+ /** The temp-resist / brand / slay / conflict half of an increase. */
145
+ summarizeTimedInc(name: string | undefined): void;
146
+ /** dice_evaluate(dice, 0, MAXIMISE) for this record, honouring SET_VALUE. */
147
+ timedValue(): number;
148
+ /** Whether the pack has a player_timed record under this name. */
149
+ knownTimed(name: string | undefined): boolean;
150
+ /** OF_NO_TELEPORT's index, for the teleport family. */
151
+ readonly ofNoTeleport: number;
152
+ /** Remember (or forget) the dice a later timed effect reads: SET/CLEAR_VALUE. */
153
+ setRememberedDice(dice: string | undefined): void;
154
+ /** Count this record as contributing no object property. */
155
+ markUnsummarized(): void;
156
+ }
157
+ /**
158
+ * One arm of effect_summarize_properties. Returning nothing is "this effect
159
+ * relates to no object property", which the walker records as unsummarized -
160
+ * so a handler that means "deliberately nothing" must still say so by calling
161
+ * `markUnsummarized()`, exactly as the ported default arm does.
162
+ */
163
+ export type ActivationSummaryHandler = (ctx: ActivationSummaryContext) => void;
164
+ /** The shape the walker produces, re-exported so a caller need not reach in. */
165
+ export type ActivationSummaryResult = {
166
+ props: EffectObjectProperty[];
167
+ unsummarizedCount: number;
168
+ };
169
+ /**
170
+ * How one effect turns a gamedata `type:` NAME into its integer subtype.
171
+ * Return null (not -1) for "this name means nothing to me", so the caller can
172
+ * tell a handler that declined from one that resolved the name to -1.
173
+ */
174
+ export type EffectSubtypeHandler = (type: string, inject: SubtypeInjections) => number | null;
175
+ /**
176
+ * Which item an effect prompts for, when it consumes one. Return null for
177
+ * "this effect chooses no item" - which is what BRAND_WEAPON, CURSE_ARMOR,
178
+ * CURSE_WEAPON and ACQUIRE do, because they pick their own target.
179
+ */
180
+ export type EffectRequestHandler = (subtype: number, state: GameState) => ItemRequest | null;
181
+ /**
182
+ * One keyed table. Written once and used five times, because the five differ
183
+ * only in their key and handler types - five hand-copied blocks would be five
184
+ * places for `handlerFor` to drift from `set`.
185
+ */
186
+ export declare class EffectInfoTable<K, H> {
187
+ private readonly table;
188
+ /** Install (or replace) the handler for one key. */
189
+ set(key: K, handler: H): void;
190
+ /**
191
+ * The handler installed for a key right now, or null. This is what a mod
192
+ * calls to WRAP core - keep the returned handler, install its own, and call
193
+ * through - instead of only replacing it.
194
+ */
195
+ handlerFor(key: K): H | null;
196
+ /** Whether anything handles this key. */
197
+ has(key: K): boolean;
198
+ /** Every key handled, in registration order (core's first). */
199
+ keys(): readonly K[];
200
+ }
201
+ /**
202
+ * Everything the game says about an effect, in five tables under three keys.
203
+ *
204
+ * `text` is keyed on the EFINFO_* flag because that is what upstream's two
205
+ * switches key on: twenty flags describe a hundred and twelve effects, and an
206
+ * effect that behaves like an existing one for display purposes reuses its
207
+ * flag rather than repeating it. `summary` is keyed on the effect CODE, and
208
+ * `subtype` / `request` on the effect INDEX (or a mod's string code).
209
+ */
210
+ export declare class EffectInfoRegistry {
211
+ /** The menu row and the recall sentence, keyed on the EFINFO_* flag. */
212
+ readonly text: EffectInfoTable<string, EffectTextHandler>;
213
+ /** effect_summarize_properties' arms, keyed on the effect code. */
214
+ readonly summary: EffectInfoTable<string, ActivationSummaryHandler>;
215
+ /** effect_subtype's arms, keyed on the effect index (or a mod code). */
216
+ readonly subtype: EffectInfoTable<EffectCode, EffectSubtypeHandler>;
217
+ /** requestForEffect's arms, keyed on the effect index (or a mod code). */
218
+ readonly request: EffectInfoTable<EffectCode, EffectRequestHandler>;
219
+ }
220
+ /** ProjectionInfo as the text handlers read it. */
221
+ export type ProjectionTextSource = readonly Pick<ProjectionInfo, "desc" | "playerDesc" | "lashDesc">[];
222
+ /**
223
+ * Install a set of core arms, now and on every reset. Called at module scope by
224
+ * effect-info.ts, obj/effects-info.ts, effects/effect.ts and
225
+ * game/effect-item.ts; a MOD never calls this - it registers through the
226
+ * capability-gated facade, whose registrations a reset deliberately drops.
227
+ */
228
+ export declare function seedEffectInfo(seed: (reg: EffectInfoRegistry) => void): void;
229
+ /** The live registry. Module-level; see this file's header for why that is safe. */
230
+ export declare function effectInfoRegistry(): EffectInfoRegistry;
231
+ /**
232
+ * Back to core's arms alone, dropping every mod registration - the same state a
233
+ * reload produces, without needing a fresh realm. No production caller by
234
+ * design; see this file's header.
235
+ */
236
+ export declare function resetEffectInfoRegistry(): void;
237
+ //# sourceMappingURL=effect-info-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-info-registry.d.ts","sourceRoot":"","sources":["../../src/effects/effect-info-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * The EFFECT INFO registry: everything the game SAYS about an effect, and how a
3
+ * gamedata `type:` name becomes its integer subtype.
4
+ *
5
+ * WHY THIS IS A REGISTRY. `registry:effect` already let a mod register a handler
6
+ * for a brand-new effect code and have it DO something. What it could not do was
7
+ * let the game describe it. Four closed `switch` statements stood in the way,
8
+ * and each failed silently rather than loudly:
9
+ *
10
+ * - `effectMenuName` (effect-info.ts, keyed on the EFINFO_* flag) returned ""
11
+ * for an unknown flag, so a mod's effect showed a BLANK ROW in the "Activate
12
+ * which item?" and spell menus.
13
+ * - `formatEffectDesc` (effect-info.ts, same key) returned "" as well, so
14
+ * object recall and spell descriptions said nothing at all about it.
15
+ * - the activation summary walker (obj/effects-info.ts, keyed on the effect
16
+ * CODE) counted it "unsummarized", so a randart activation built from a mod
17
+ * effect could never be recognised as duplicating an intrinsic property.
18
+ * - `effectSubtype` (effect.ts, keyed on the EF index) returned -1 for every
19
+ * name, so a mod's effect could take NO named subtype - only a bare integer.
20
+ *
21
+ * FOUR TABLES, THREE KEYS, and they are separate because upstream's keys are.
22
+ * The EFINFO_* flag is a property of the effect's ENTRY (many effects share one
23
+ * flag: twenty flags cover a hundred and twelve effects), the summary walker
24
+ * keys on the effect's own code, and subtype decoding keys on the effect index.
25
+ * Collapsing them would force a mod to register the same behaviour three times
26
+ * under three spellings.
27
+ *
28
+ * WHY MODULE-LEVEL. Ruled 2026-08-09: disabling a mod always takes effect on the
29
+ * next RELOAD (exiting mod management prompts to save and reload). A toggle can
30
+ * therefore never need to apply to a running session, so a module-level table
31
+ * cannot violate the mod default policy.
32
+ *
33
+ * What actually clears it is the reload itself: a fresh page is a fresh module
34
+ * instance, and the host installs each plugin at most once per realm
35
+ * (`installedPluginIds` in web/main.ts is never cleared). So a disabled mod's
36
+ * registrations are gone on the next boot because the table they lived in is.
37
+ * `resetEffectInfoRegistry()` is the same restoration WITHOUT a fresh realm -
38
+ * core's arms back, every mod registration dropped - which is what a test needs
39
+ * in order to prove the mod default policy holds here rather than assert it.
40
+ * It has no production caller and is not meant to acquire one: calling it
41
+ * mid-session would strip a running mod's handlers, which is precisely the
42
+ * live-toggle behaviour the ruling says must not happen.
43
+ *
44
+ * ORDER AND RNG. Core's handlers are the case bodies lifted unchanged. Nothing
45
+ * here draws: upstream's `effect_describe` calls `dice_roll()` to populate the
46
+ * random_value it formats, and the port substitutes `Dice.randomValue()` at
47
+ * every such site precisely so that rendering a menu row cannot perturb the
48
+ * stream (see effect-info.ts's header). A mod handler receives the already
49
+ * computed value and has no Rng to reach, so that property survives the seam.
50
+ */
51
+ /* ------------------------------------------------------------------ *
52
+ * The tables.
53
+ * ------------------------------------------------------------------ */
54
+ /**
55
+ * One keyed table. Written once and used five times, because the five differ
56
+ * only in their key and handler types - five hand-copied blocks would be five
57
+ * places for `handlerFor` to drift from `set`.
58
+ */
59
+ export class EffectInfoTable {
60
+ table = new Map();
61
+ /** Install (or replace) the handler for one key. */
62
+ set(key, handler) {
63
+ this.table.set(key, handler);
64
+ }
65
+ /**
66
+ * The handler installed for a key right now, or null. This is what a mod
67
+ * calls to WRAP core - keep the returned handler, install its own, and call
68
+ * through - instead of only replacing it.
69
+ */
70
+ handlerFor(key) {
71
+ return this.table.get(key) ?? null;
72
+ }
73
+ /** Whether anything handles this key. */
74
+ has(key) {
75
+ return this.table.has(key);
76
+ }
77
+ /** Every key handled, in registration order (core's first). */
78
+ keys() {
79
+ return [...this.table.keys()];
80
+ }
81
+ }
82
+ /**
83
+ * Everything the game says about an effect, in five tables under three keys.
84
+ *
85
+ * `text` is keyed on the EFINFO_* flag because that is what upstream's two
86
+ * switches key on: twenty flags describe a hundred and twelve effects, and an
87
+ * effect that behaves like an existing one for display purposes reuses its
88
+ * flag rather than repeating it. `summary` is keyed on the effect CODE, and
89
+ * `subtype` / `request` on the effect INDEX (or a mod's string code).
90
+ */
91
+ export class EffectInfoRegistry {
92
+ /** The menu row and the recall sentence, keyed on the EFINFO_* flag. */
93
+ text = new EffectInfoTable();
94
+ /** effect_summarize_properties' arms, keyed on the effect code. */
95
+ summary = new EffectInfoTable();
96
+ /** effect_subtype's arms, keyed on the effect index (or a mod code). */
97
+ subtype = new EffectInfoTable();
98
+ /** requestForEffect's arms, keyed on the effect index (or a mod code). */
99
+ request = new EffectInfoTable();
100
+ }
101
+ /* ------------------------------------------------------------------ *
102
+ * The live registry.
103
+ * ------------------------------------------------------------------ */
104
+ /**
105
+ * Core's own seeders. Each of the four modules that OWNS a table registers its
106
+ * arms here at import time, and each is also the only module that READS its
107
+ * table - so "the module is loaded" and "core's arms are installed" cannot come
108
+ * apart. That is the point: a seeder somebody has to remember to call is a
109
+ * seeder that gets forgotten on one path, and the failure mode here is silent
110
+ * (every effect describes itself as "").
111
+ */
112
+ const seeders = [];
113
+ let live = new EffectInfoRegistry();
114
+ /**
115
+ * Install a set of core arms, now and on every reset. Called at module scope by
116
+ * effect-info.ts, obj/effects-info.ts, effects/effect.ts and
117
+ * game/effect-item.ts; a MOD never calls this - it registers through the
118
+ * capability-gated facade, whose registrations a reset deliberately drops.
119
+ */
120
+ export function seedEffectInfo(seed) {
121
+ seeders.push(seed);
122
+ seed(live);
123
+ }
124
+ /** The live registry. Module-level; see this file's header for why that is safe. */
125
+ export function effectInfoRegistry() {
126
+ return live;
127
+ }
128
+ /**
129
+ * Back to core's arms alone, dropping every mod registration - the same state a
130
+ * reload produces, without needing a fresh realm. No production caller by
131
+ * design; see this file's header.
132
+ */
133
+ export function resetEffectInfoRegistry() {
134
+ live = new EffectInfoRegistry();
135
+ for (const seed of seeders)
136
+ seed(live);
137
+ }
138
+ //# sourceMappingURL=effect-info-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-info-registry.js","sourceRoot":"","sources":["../../src/effects/effect-info-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAgKH;;wEAEwE;AAExE;;;;GAIG;AACH,MAAM,OAAO,eAAe;IACT,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEzC,oDAAoD;IACpD,GAAG,CAAC,GAAM,EAAE,OAAU;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,yCAAyC;IACzC,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAC/D,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAC7B,wEAAwE;IAC/D,IAAI,GAAG,IAAI,eAAe,EAA6B,CAAC;IACjE,mEAAmE;IAC1D,OAAO,GAAG,IAAI,eAAe,EAAoC,CAAC;IAC3E,wEAAwE;IAC/D,OAAO,GAAG,IAAI,eAAe,EAAoC,CAAC;IAC3E,0EAA0E;IACjE,OAAO,GAAG,IAAI,eAAe,EAAoC,CAAC;CAC5E;AAQD;;wEAEwE;AAExE;;;;;;;GAOG;AACH,MAAM,OAAO,GAA6C,EAAE,CAAC;AAE7D,IAAI,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuC;IACpE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,CAAC,IAAI,CAAC,CAAC;AACb,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Golden vectors for EFFECT INFO: the five closed switches of MOD_REACH gap 17.
3
+ *
4
+ * WHY THIS EXISTS. Five `switch` statements decide everything the game says
5
+ * about an effect, and each one is closed against a code it has never heard of:
6
+ *
7
+ * - `effectMenuName` (effect-info.ts, keyed on the EFINFO_* flag) - the row
8
+ * text in the "Activate which item?" / spell menus.
9
+ * - `formatEffectDesc` (effect-info.ts, same key) - effect_describe's body,
10
+ * the sentence in object recall and spell descriptions.
11
+ * - the activation summary walker (obj/effects-info.ts, keyed on the effect
12
+ * CODE) - which object properties an activation grants, read by
13
+ * remove_contradictory_activation.
14
+ * - `effectSubtype` (effect.ts, keyed on the EF index) - how a gamedata
15
+ * `type:` NAME becomes the integer subtype.
16
+ *
17
+ * Turning them into keyed registries is a refactor of every string the player
18
+ * reads about an effect, so what has to be proven is not "the effect tests still
19
+ * pass" but "every effect, at every subtype and dice shape the port can build,
20
+ * still produces exactly the same text".
21
+ *
22
+ * NO RNG PROBE HERE, AND THAT IS A MEASURED CLAIM, NOT AN OVERSIGHT. The glyph
23
+ * vectors carry one because level generation draws; this path does not. Upstream
24
+ * `effect_describe` calls `dice_roll()` to populate the random_value it formats;
25
+ * the port substitutes `Dice.randomValue()` at every such site precisely so that
26
+ * rendering a menu row cannot perturb the stream (see effect-info.ts's header).
27
+ * There is no Rng threaded into any of these functions to probe. What is at risk
28
+ * is the TEXT, so the text is what is recorded.
29
+ *
30
+ * THE DEPS ARE SYNTHETIC ON PURPOSE. `timedDesc`, `statName`, `summonDesc` and
31
+ * the projection table are injected, so the real pack would add nothing to
32
+ * dispatch coverage - and stub values that are DISTINCT per index ("tmd7",
33
+ * "proj3-player") are strictly better at catching an arm that reads the wrong
34
+ * field, which real prose ("poison", "a lash of fire") can hide. The activation
35
+ * summary is the exception: it resolves TMD names through the real compiled
36
+ * player_timed records, so those are injected as fixtures.
37
+ *
38
+ * Regenerate with `node packages/core/scripts/gen-effect-info-vectors.mjs` -
39
+ * which OVERWRITES the evidence, so only do it when the change is intended and
40
+ * say so in the commit.
41
+ */
42
+ import type { ActivationSummarizerDeps } from "../obj/effects-info.js";
43
+ /**
44
+ * One recorded call. Flat and all-string so a diff names the effect and the
45
+ * scenario that moved rather than reflowing a nested object.
46
+ */
47
+ export interface EffectInfoVector {
48
+ /** Which switch this exercises: "menu" | "desc" | "summary" | "subtype". */
49
+ kind: string;
50
+ /** The effect: an EFFECT_ENTRIES name, or a chain label for "summary". */
51
+ effect: string;
52
+ /** The inputs, spelled out. */
53
+ scenario: string;
54
+ /** What the code produced, as a string ("null" for a null return). */
55
+ out: string;
56
+ }
57
+ /** What the activation-summary vectors need from the shipped pack. */
58
+ export interface EffectInfoVectorFixtures {
59
+ /** The real deps makeActivationSummarizer is bound with at the session site. */
60
+ summarizerDeps(): ActivationSummarizerDeps;
61
+ /** Every TMD name of the pack, in index order - the summary's real keys. */
62
+ timedNames(): readonly string[];
63
+ }
64
+ /** effect_get_menu_name over every effect at every scenario. */
65
+ export declare function computeMenuVectors(): EffectInfoVector[];
66
+ /**
67
+ * effect_describe over every effect at every scenario, `onlyFirst` so exactly
68
+ * one pass through formatEffectDesc is recorded per vector.
69
+ */
70
+ export declare function computeDescVectors(): EffectInfoVector[];
71
+ /**
72
+ * The chained arms of effect_describe - RANDOM and SELECT walk their
73
+ * sub-effects through create_nested_effect_description, which calls the same
74
+ * switch from a second call site. A chain of BREATHs with matching dice is the
75
+ * combining arm; a mixed chain is the "or"-joined arm.
76
+ */
77
+ export declare function computeChainVectors(): EffectInfoVector[];
78
+ /**
79
+ * effect_summarize_properties over chains that reach all twelve arms of the
80
+ * activation walker, against the real compiled player_timed records.
81
+ */
82
+ export declare function computeSummaryVectors(fixtures: EffectInfoVectorFixtures): EffectInfoVector[];
83
+ /**
84
+ * effect_subtype: every effect index against every subtype NAME any effect
85
+ * accepts, plus the numeric and garbage paths. -1 means "no such subtype for
86
+ * this effect", and a refactor that widens or narrows that is exactly what
87
+ * this catches.
88
+ */
89
+ export declare function computeSubtypeVectors(): EffectInfoVector[];
90
+ /** Every family, in a stable order. */
91
+ export declare function computeEffectInfoVectors(fixtures: EffectInfoVectorFixtures): EffectInfoVector[];
92
+ //# sourceMappingURL=effect-info-vectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-info-vectors.d.ts","sourceRoot":"","sources":["../../src/effects/effect-info-vectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAKH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAOvE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,sEAAsE;AACtE,MAAM,WAAW,wBAAwB;IACvC,gFAAgF;IAChF,cAAc,IAAI,wBAAwB,CAAC;IAC3C,4EAA4E;IAC5E,UAAU,IAAI,SAAS,MAAM,EAAE,CAAC;CACjC;AAiFD,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CAiBvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CAqBvD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,EAAE,CA8BxD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,wBAAwB,GACjC,gBAAgB,EAAE,CAwDpB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAqD1D;AAED,uCAAuC;AACvC,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,wBAAwB,GACjC,gBAAgB,EAAE,CAQpB"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The pack-derived half of the effect-info vectors.
3
+ *
4
+ * SEPARATE FILE, and it reads the disk: keeping node:fs out of
5
+ * `effect-info-vectors.ts` means that module stays importable from anywhere.
6
+ * ONE copy, shared by `effect-info-vectors.test.ts` and by
7
+ * `scripts/gen-effect-info-vectors.mjs`, so the test and the generator cannot
8
+ * disagree about what they are measuring.
9
+ *
10
+ * Only the activation summary needs this. The menu-name, description and
11
+ * subtype families take their lookups as injected deps and are recorded against
12
+ * synthetic ones (see the header of effect-info-vectors.ts for why that is the
13
+ * stronger choice there); the summary resolves real TMD names against the real
14
+ * compiled player_timed records, so it gets the real pack.
15
+ */
16
+ import type { EffectInfoVectorFixtures } from "./effect-info-vectors.js";
17
+ export declare function effectInfoVectorFixtures(): EffectInfoVectorFixtures;
18
+ //# sourceMappingURL=effect-info-vectors.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-info-vectors.fixtures.d.ts","sourceRoot":"","sources":["../../src/effects/effect-info-vectors.fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAYzE,wBAAgB,wBAAwB,IAAI,wBAAwB,CA2BnE"}