@rpgm-tools/neo-angband-core 0.10.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 (1183) hide show
  1. package/LICENSE.md +43 -0
  2. package/README.md +80 -0
  3. package/dist/agent/act.d.ts +22 -0
  4. package/dist/agent/act.d.ts.map +1 -0
  5. package/dist/agent/act.js +88 -0
  6. package/dist/agent/act.js.map +1 -0
  7. package/dist/agent/controller.d.ts +34 -0
  8. package/dist/agent/controller.d.ts.map +1 -0
  9. package/dist/agent/controller.js +90 -0
  10. package/dist/agent/controller.js.map +1 -0
  11. package/dist/agent/events.d.ts +27 -0
  12. package/dist/agent/events.d.ts.map +1 -0
  13. package/dist/agent/events.js +31 -0
  14. package/dist/agent/events.js.map +1 -0
  15. package/dist/agent/index.d.ts +17 -0
  16. package/dist/agent/index.d.ts.map +1 -0
  17. package/dist/agent/index.js +15 -0
  18. package/dist/agent/index.js.map +1 -0
  19. package/dist/agent/perceive.d.ts +21 -0
  20. package/dist/agent/perceive.d.ts.map +1 -0
  21. package/dist/agent/perceive.js +386 -0
  22. package/dist/agent/perceive.js.map +1 -0
  23. package/dist/agent/types.d.ts +436 -0
  24. package/dist/agent/types.d.ts.map +1 -0
  25. package/dist/agent/types.js +63 -0
  26. package/dist/agent/types.js.map +1 -0
  27. package/dist/bitflag.d.ts +199 -0
  28. package/dist/bitflag.d.ts.map +1 -0
  29. package/dist/bitflag.js +478 -0
  30. package/dist/bitflag.js.map +1 -0
  31. package/dist/cmd.d.ts +164 -0
  32. package/dist/cmd.d.ts.map +1 -0
  33. package/dist/cmd.js +350 -0
  34. package/dist/cmd.js.map +1 -0
  35. package/dist/color.d.ts +104 -0
  36. package/dist/color.d.ts.map +1 -0
  37. package/dist/color.js +240 -0
  38. package/dist/color.js.map +1 -0
  39. package/dist/combat/brand-slay.d.ts +119 -0
  40. package/dist/combat/brand-slay.d.ts.map +1 -0
  41. package/dist/combat/brand-slay.js +264 -0
  42. package/dist/combat/brand-slay.js.map +1 -0
  43. package/dist/combat/hit.d.ts +198 -0
  44. package/dist/combat/hit.d.ts.map +1 -0
  45. package/dist/combat/hit.js +310 -0
  46. package/dist/combat/hit.js.map +1 -0
  47. package/dist/combat/index.d.ts +15 -0
  48. package/dist/combat/index.d.ts.map +1 -0
  49. package/dist/combat/index.js +15 -0
  50. package/dist/combat/index.js.map +1 -0
  51. package/dist/combat/melee.d.ts +261 -0
  52. package/dist/combat/melee.d.ts.map +1 -0
  53. package/dist/combat/melee.js +402 -0
  54. package/dist/combat/melee.js.map +1 -0
  55. package/dist/combat/mon-melee.d.ts +233 -0
  56. package/dist/combat/mon-melee.d.ts.map +1 -0
  57. package/dist/combat/mon-melee.js +883 -0
  58. package/dist/combat/mon-melee.js.map +1 -0
  59. package/dist/combat/ranged.d.ts +89 -0
  60. package/dist/combat/ranged.d.ts.map +1 -0
  61. package/dist/combat/ranged.js +253 -0
  62. package/dist/combat/ranged.js.map +1 -0
  63. package/dist/constants.d.ts +134 -0
  64. package/dist/constants.d.ts.map +1 -0
  65. package/dist/constants.js +171 -0
  66. package/dist/constants.js.map +1 -0
  67. package/dist/dice.d.ts +91 -0
  68. package/dist/dice.d.ts.map +1 -0
  69. package/dist/dice.js +424 -0
  70. package/dist/dice.js.map +1 -0
  71. package/dist/effects/effect-choice.d.ts +15 -0
  72. package/dist/effects/effect-choice.d.ts.map +1 -0
  73. package/dist/effects/effect-choice.js +18 -0
  74. package/dist/effects/effect-choice.js.map +1 -0
  75. package/dist/effects/effect-info.d.ts +124 -0
  76. package/dist/effects/effect-info.d.ts.map +1 -0
  77. package/dist/effects/effect-info.js +706 -0
  78. package/dist/effects/effect-info.js.map +1 -0
  79. package/dist/effects/effect.d.ts +165 -0
  80. package/dist/effects/effect.d.ts.map +1 -0
  81. package/dist/effects/effect.js +452 -0
  82. package/dist/effects/effect.js.map +1 -0
  83. package/dist/effects/handlers.d.ts +70 -0
  84. package/dist/effects/handlers.d.ts.map +1 -0
  85. package/dist/effects/handlers.js +394 -0
  86. package/dist/effects/handlers.js.map +1 -0
  87. package/dist/effects/interpreter.d.ts +291 -0
  88. package/dist/effects/interpreter.d.ts.map +1 -0
  89. package/dist/effects/interpreter.js +325 -0
  90. package/dist/effects/interpreter.js.map +1 -0
  91. package/dist/events.d.ts +188 -0
  92. package/dist/events.d.ts.map +1 -0
  93. package/dist/events.js +138 -0
  94. package/dist/events.js.map +1 -0
  95. package/dist/expression.d.ts +83 -0
  96. package/dist/expression.d.ts.map +1 -0
  97. package/dist/expression.js +333 -0
  98. package/dist/expression.js.map +1 -0
  99. package/dist/game/cave-cmd.d.ts +195 -0
  100. package/dist/game/cave-cmd.d.ts.map +1 -0
  101. package/dist/game/cave-cmd.js +968 -0
  102. package/dist/game/cave-cmd.js.map +1 -0
  103. package/dist/game/char-sheet.d.ts +189 -0
  104. package/dist/game/char-sheet.d.ts.map +1 -0
  105. package/dist/game/char-sheet.js +381 -0
  106. package/dist/game/char-sheet.js.map +1 -0
  107. package/dist/game/chest.d.ts +94 -0
  108. package/dist/game/chest.d.ts.map +1 -0
  109. package/dist/game/chest.js +267 -0
  110. package/dist/game/chest.js.map +1 -0
  111. package/dist/game/context.d.ts +970 -0
  112. package/dist/game/context.d.ts.map +1 -0
  113. package/dist/game/context.js +353 -0
  114. package/dist/game/context.js.map +1 -0
  115. package/dist/game/curse-tick.d.ts +35 -0
  116. package/dist/game/curse-tick.d.ts.map +1 -0
  117. package/dist/game/curse-tick.js +100 -0
  118. package/dist/game/curse-tick.js.map +1 -0
  119. package/dist/game/describe.d.ts +20 -0
  120. package/dist/game/describe.d.ts.map +1 -0
  121. package/dist/game/describe.js +45 -0
  122. package/dist/game/describe.js.map +1 -0
  123. package/dist/game/display.d.ts +196 -0
  124. package/dist/game/display.d.ts.map +1 -0
  125. package/dist/game/display.js +684 -0
  126. package/dist/game/display.js.map +1 -0
  127. package/dist/game/dump-level.d.ts +37 -0
  128. package/dist/game/dump-level.d.ts.map +1 -0
  129. package/dist/game/dump-level.js +110 -0
  130. package/dist/game/dump-level.js.map +1 -0
  131. package/dist/game/effect-attack.d.ts +36 -0
  132. package/dist/game/effect-attack.d.ts.map +1 -0
  133. package/dist/game/effect-attack.js +694 -0
  134. package/dist/game/effect-attack.js.map +1 -0
  135. package/dist/game/effect-detect.d.ts +34 -0
  136. package/dist/game/effect-detect.d.ts.map +1 -0
  137. package/dist/game/effect-detect.js +456 -0
  138. package/dist/game/effect-detect.js.map +1 -0
  139. package/dist/game/effect-env.d.ts +77 -0
  140. package/dist/game/effect-env.d.ts.map +1 -0
  141. package/dist/game/effect-env.js +166 -0
  142. package/dist/game/effect-env.js.map +1 -0
  143. package/dist/game/effect-game-env.d.ts +76 -0
  144. package/dist/game/effect-game-env.d.ts.map +1 -0
  145. package/dist/game/effect-game-env.js +23 -0
  146. package/dist/game/effect-game-env.js.map +1 -0
  147. package/dist/game/effect-general.d.ts +98 -0
  148. package/dist/game/effect-general.d.ts.map +1 -0
  149. package/dist/game/effect-general.js +914 -0
  150. package/dist/game/effect-general.js.map +1 -0
  151. package/dist/game/effect-item.d.ts +124 -0
  152. package/dist/game/effect-item.d.ts.map +1 -0
  153. package/dist/game/effect-item.js +789 -0
  154. package/dist/game/effect-item.js.map +1 -0
  155. package/dist/game/effect-melee.d.ts +43 -0
  156. package/dist/game/effect-melee.d.ts.map +1 -0
  157. package/dist/game/effect-melee.js +477 -0
  158. package/dist/game/effect-melee.js.map +1 -0
  159. package/dist/game/effect-mon-origin.d.ts +67 -0
  160. package/dist/game/effect-mon-origin.d.ts.map +1 -0
  161. package/dist/game/effect-mon-origin.js +164 -0
  162. package/dist/game/effect-mon-origin.js.map +1 -0
  163. package/dist/game/effect-monster.d.ts +29 -0
  164. package/dist/game/effect-monster.d.ts.map +1 -0
  165. package/dist/game/effect-monster.js +281 -0
  166. package/dist/game/effect-monster.js.map +1 -0
  167. package/dist/game/effect-summon.d.ts +37 -0
  168. package/dist/game/effect-summon.d.ts.map +1 -0
  169. package/dist/game/effect-summon.js +113 -0
  170. package/dist/game/effect-summon.js.map +1 -0
  171. package/dist/game/effect-teleport.d.ts +130 -0
  172. package/dist/game/effect-teleport.d.ts.map +1 -0
  173. package/dist/game/effect-teleport.js +529 -0
  174. package/dist/game/effect-teleport.js.map +1 -0
  175. package/dist/game/effect-terrain.d.ts +91 -0
  176. package/dist/game/effect-terrain.d.ts.map +1 -0
  177. package/dist/game/effect-terrain.js +812 -0
  178. package/dist/game/effect-terrain.js.map +1 -0
  179. package/dist/game/energy.d.ts +45 -0
  180. package/dist/game/energy.d.ts.map +1 -0
  181. package/dist/game/energy.js +51 -0
  182. package/dist/game/energy.js.map +1 -0
  183. package/dist/game/equip-cmp.d.ts +138 -0
  184. package/dist/game/equip-cmp.d.ts.map +1 -0
  185. package/dist/game/equip-cmp.js +363 -0
  186. package/dist/game/equip-cmp.js.map +1 -0
  187. package/dist/game/floor.d.ts +182 -0
  188. package/dist/game/floor.d.ts.map +1 -0
  189. package/dist/game/floor.js +435 -0
  190. package/dist/game/floor.js.map +1 -0
  191. package/dist/game/gear.d.ts +408 -0
  192. package/dist/game/gear.d.ts.map +1 -0
  193. package/dist/game/gear.js +1037 -0
  194. package/dist/game/gear.js.map +1 -0
  195. package/dist/game/harness.d.ts +61 -0
  196. package/dist/game/harness.d.ts.map +1 -0
  197. package/dist/game/harness.js +198 -0
  198. package/dist/game/harness.js.map +1 -0
  199. package/dist/game/history.d.ts +49 -0
  200. package/dist/game/history.d.ts.map +1 -0
  201. package/dist/game/history.js +55 -0
  202. package/dist/game/history.js.map +1 -0
  203. package/dist/game/ignore-cmd.d.ts +42 -0
  204. package/dist/game/ignore-cmd.d.ts.map +1 -0
  205. package/dist/game/ignore-cmd.js +59 -0
  206. package/dist/game/ignore-cmd.js.map +1 -0
  207. package/dist/game/inscription-confirm.d.ts +80 -0
  208. package/dist/game/inscription-confirm.d.ts.map +1 -0
  209. package/dist/game/inscription-confirm.js +95 -0
  210. package/dist/game/inscription-confirm.js.map +1 -0
  211. package/dist/game/known.d.ts +297 -0
  212. package/dist/game/known.d.ts.map +1 -0
  213. package/dist/game/known.js +849 -0
  214. package/dist/game/known.js.map +1 -0
  215. package/dist/game/loop.d.ts +139 -0
  216. package/dist/game/loop.d.ts.map +1 -0
  217. package/dist/game/loop.js +631 -0
  218. package/dist/game/loop.js.map +1 -0
  219. package/dist/game/lore-color.d.ts +25 -0
  220. package/dist/game/lore-color.d.ts.map +1 -0
  221. package/dist/game/lore-color.js +95 -0
  222. package/dist/game/lore-color.js.map +1 -0
  223. package/dist/game/mon-cast.d.ts +150 -0
  224. package/dist/game/mon-cast.d.ts.map +1 -0
  225. package/dist/game/mon-cast.js +301 -0
  226. package/dist/game/mon-cast.js.map +1 -0
  227. package/dist/game/mon-cmd.d.ts +51 -0
  228. package/dist/game/mon-cmd.d.ts.map +1 -0
  229. package/dist/game/mon-cmd.js +670 -0
  230. package/dist/game/mon-cmd.js.map +1 -0
  231. package/dist/game/mon-death.d.ts +143 -0
  232. package/dist/game/mon-death.d.ts.map +1 -0
  233. package/dist/game/mon-death.js +328 -0
  234. package/dist/game/mon-death.js.map +1 -0
  235. package/dist/game/mon-group.d.ts +81 -0
  236. package/dist/game/mon-group.d.ts.map +1 -0
  237. package/dist/game/mon-group.js +323 -0
  238. package/dist/game/mon-group.js.map +1 -0
  239. package/dist/game/mon-list.d.ts +85 -0
  240. package/dist/game/mon-list.d.ts.map +1 -0
  241. package/dist/game/mon-list.js +154 -0
  242. package/dist/game/mon-list.js.map +1 -0
  243. package/dist/game/mon-message.d.ts +100 -0
  244. package/dist/game/mon-message.d.ts.map +1 -0
  245. package/dist/game/mon-message.js +336 -0
  246. package/dist/game/mon-message.js.map +1 -0
  247. package/dist/game/mon-place.d.ts +226 -0
  248. package/dist/game/mon-place.d.ts.map +1 -0
  249. package/dist/game/mon-place.js +642 -0
  250. package/dist/game/mon-place.js.map +1 -0
  251. package/dist/game/mon-ranged.d.ts +87 -0
  252. package/dist/game/mon-ranged.d.ts.map +1 -0
  253. package/dist/game/mon-ranged.js +353 -0
  254. package/dist/game/mon-ranged.js.map +1 -0
  255. package/dist/game/mon-shape.d.ts +43 -0
  256. package/dist/game/mon-shape.d.ts.map +1 -0
  257. package/dist/game/mon-shape.js +115 -0
  258. package/dist/game/mon-shape.js.map +1 -0
  259. package/dist/game/mon-side.d.ts +63 -0
  260. package/dist/game/mon-side.d.ts.map +1 -0
  261. package/dist/game/mon-side.js +403 -0
  262. package/dist/game/mon-side.js.map +1 -0
  263. package/dist/game/monster-turn.d.ts +195 -0
  264. package/dist/game/monster-turn.d.ts.map +1 -0
  265. package/dist/game/monster-turn.js +1560 -0
  266. package/dist/game/monster-turn.js.map +1 -0
  267. package/dist/game/obj-cmd.d.ts +453 -0
  268. package/dist/game/obj-cmd.d.ts.map +1 -0
  269. package/dist/game/obj-cmd.js +1530 -0
  270. package/dist/game/obj-cmd.js.map +1 -0
  271. package/dist/game/obj-list.d.ts +92 -0
  272. package/dist/game/obj-list.d.ts.map +1 -0
  273. package/dist/game/obj-list.js +251 -0
  274. package/dist/game/obj-list.js.map +1 -0
  275. package/dist/game/object-inspect.d.ts +37 -0
  276. package/dist/game/object-inspect.d.ts.map +1 -0
  277. package/dist/game/object-inspect.js +106 -0
  278. package/dist/game/object-inspect.js.map +1 -0
  279. package/dist/game/pickup.d.ts +126 -0
  280. package/dist/game/pickup.d.ts.map +1 -0
  281. package/dist/game/pickup.js +367 -0
  282. package/dist/game/pickup.js.map +1 -0
  283. package/dist/game/player-path.d.ts +133 -0
  284. package/dist/game/player-path.d.ts.map +1 -0
  285. package/dist/game/player-path.js +1268 -0
  286. package/dist/game/player-path.js.map +1 -0
  287. package/dist/game/player-side.d.ts +59 -0
  288. package/dist/game/player-side.d.ts.map +1 -0
  289. package/dist/game/player-side.js +506 -0
  290. package/dist/game/player-side.js.map +1 -0
  291. package/dist/game/player-turn.d.ts +161 -0
  292. package/dist/game/player-turn.d.ts.map +1 -0
  293. package/dist/game/player-turn.js +739 -0
  294. package/dist/game/player-turn.js.map +1 -0
  295. package/dist/game/project-cast.d.ts +268 -0
  296. package/dist/game/project-cast.d.ts.map +1 -0
  297. package/dist/game/project-cast.js +496 -0
  298. package/dist/game/project-cast.js.map +1 -0
  299. package/dist/game/project-feat.d.ts +47 -0
  300. package/dist/game/project-feat.d.ts.map +1 -0
  301. package/dist/game/project-feat.js +350 -0
  302. package/dist/game/project-feat.js.map +1 -0
  303. package/dist/game/project-monster.d.ts +106 -0
  304. package/dist/game/project-monster.d.ts.map +1 -0
  305. package/dist/game/project-monster.js +272 -0
  306. package/dist/game/project-monster.js.map +1 -0
  307. package/dist/game/project-obj.d.ts +60 -0
  308. package/dist/game/project-obj.d.ts.map +1 -0
  309. package/dist/game/project-obj.js +245 -0
  310. package/dist/game/project-obj.js.map +1 -0
  311. package/dist/game/project-player.d.ts +120 -0
  312. package/dist/game/project-player.d.ts.map +1 -0
  313. package/dist/game/project-player.js +108 -0
  314. package/dist/game/project-player.js.map +1 -0
  315. package/dist/game/quest.d.ts +101 -0
  316. package/dist/game/quest.d.ts.map +1 -0
  317. package/dist/game/quest.js +192 -0
  318. package/dist/game/quest.js.map +1 -0
  319. package/dist/game/ranged-cmd.d.ts +32 -0
  320. package/dist/game/ranged-cmd.d.ts.map +1 -0
  321. package/dist/game/ranged-cmd.js +372 -0
  322. package/dist/game/ranged-cmd.js.map +1 -0
  323. package/dist/game/scheduler.d.ts +47 -0
  324. package/dist/game/scheduler.d.ts.map +1 -0
  325. package/dist/game/scheduler.js +141 -0
  326. package/dist/game/scheduler.js.map +1 -0
  327. package/dist/game/spell-cmd.d.ts +104 -0
  328. package/dist/game/spell-cmd.d.ts.map +1 -0
  329. package/dist/game/spell-cmd.js +320 -0
  330. package/dist/game/spell-cmd.js.map +1 -0
  331. package/dist/game/spoil.d.ts +28 -0
  332. package/dist/game/spoil.d.ts.map +1 -0
  333. package/dist/game/spoil.js +435 -0
  334. package/dist/game/spoil.js.map +1 -0
  335. package/dist/game/steal.d.ts +35 -0
  336. package/dist/game/steal.d.ts.map +1 -0
  337. package/dist/game/steal.js +145 -0
  338. package/dist/game/steal.js.map +1 -0
  339. package/dist/game/take-hit-hooks.d.ts +52 -0
  340. package/dist/game/take-hit-hooks.d.ts.map +1 -0
  341. package/dist/game/take-hit-hooks.js +127 -0
  342. package/dist/game/take-hit-hooks.js.map +1 -0
  343. package/dist/game/target-loop.d.ts +119 -0
  344. package/dist/game/target-loop.d.ts.map +1 -0
  345. package/dist/game/target-loop.js +408 -0
  346. package/dist/game/target-loop.js.map +1 -0
  347. package/dist/game/target.d.ts +133 -0
  348. package/dist/game/target.d.ts.map +1 -0
  349. package/dist/game/target.js +353 -0
  350. package/dist/game/target.js.map +1 -0
  351. package/dist/game/thrust.d.ts +37 -0
  352. package/dist/game/thrust.d.ts.map +1 -0
  353. package/dist/game/thrust.js +155 -0
  354. package/dist/game/thrust.js.map +1 -0
  355. package/dist/game/trap.d.ts +218 -0
  356. package/dist/game/trap.d.ts.map +1 -0
  357. package/dist/game/trap.js +618 -0
  358. package/dist/game/trap.js.map +1 -0
  359. package/dist/game/ui-entry.d.ts +282 -0
  360. package/dist/game/ui-entry.d.ts.map +1 -0
  361. package/dist/game/ui-entry.js +1838 -0
  362. package/dist/game/ui-entry.js.map +1 -0
  363. package/dist/game/wizard.d.ts +654 -0
  364. package/dist/game/wizard.d.ts.map +1 -0
  365. package/dist/game/wizard.js +1323 -0
  366. package/dist/game/wizard.js.map +1 -0
  367. package/dist/game/world.d.ts +183 -0
  368. package/dist/game/world.d.ts.map +1 -0
  369. package/dist/game/world.js +685 -0
  370. package/dist/game/world.js.map +1 -0
  371. package/dist/gen/cave.d.ts +247 -0
  372. package/dist/gen/cave.d.ts.map +1 -0
  373. package/dist/gen/cave.js +2406 -0
  374. package/dist/gen/cave.js.map +1 -0
  375. package/dist/gen/gen-monster.d.ts +151 -0
  376. package/dist/gen/gen-monster.d.ts.map +1 -0
  377. package/dist/gen/gen-monster.js +473 -0
  378. package/dist/gen/gen-monster.js.map +1 -0
  379. package/dist/gen/generate.d.ts +240 -0
  380. package/dist/gen/generate.d.ts.map +1 -0
  381. package/dist/gen/generate.js +358 -0
  382. package/dist/gen/generate.js.map +1 -0
  383. package/dist/gen/room.d.ts +160 -0
  384. package/dist/gen/room.d.ts.map +1 -0
  385. package/dist/gen/room.js +1910 -0
  386. package/dist/gen/room.js.map +1 -0
  387. package/dist/gen/util.d.ts +466 -0
  388. package/dist/gen/util.d.ts.map +1 -0
  389. package/dist/gen/util.js +1553 -0
  390. package/dist/gen/util.js.map +1 -0
  391. package/dist/generated/dun-profiles.d.ts +44 -0
  392. package/dist/generated/dun-profiles.d.ts.map +1 -0
  393. package/dist/generated/dun-profiles.js +28 -0
  394. package/dist/generated/dun-profiles.js.map +1 -0
  395. package/dist/generated/effects.d.ts +1021 -0
  396. package/dist/generated/effects.d.ts.map +1 -0
  397. package/dist/generated/effects.js +239 -0
  398. package/dist/generated/effects.js.map +1 -0
  399. package/dist/generated/elements.d.ts +83 -0
  400. package/dist/generated/elements.d.ts.map +1 -0
  401. package/dist/generated/elements.js +60 -0
  402. package/dist/generated/elements.js.map +1 -0
  403. package/dist/generated/equip-slots.d.ts +104 -0
  404. package/dist/generated/equip-slots.d.ts.map +1 -0
  405. package/dist/generated/equip-slots.js +34 -0
  406. package/dist/generated/equip-slots.js.map +1 -0
  407. package/dist/generated/history-types.d.ts +52 -0
  408. package/dist/generated/history-types.d.ts.map +1 -0
  409. package/dist/generated/history-types.js +32 -0
  410. package/dist/generated/history-types.js.map +1 -0
  411. package/dist/generated/ignore-types.d.ts +116 -0
  412. package/dist/generated/ignore-types.d.ts.map +1 -0
  413. package/dist/generated/ignore-types.js +64 -0
  414. package/dist/generated/ignore-types.js.map +1 -0
  415. package/dist/generated/index.d.ts +32 -0
  416. package/dist/generated/index.d.ts.map +1 -0
  417. package/dist/generated/index.js +33 -0
  418. package/dist/generated/index.js.map +1 -0
  419. package/dist/generated/kind-flags.d.ts +72 -0
  420. package/dist/generated/kind-flags.d.ts.map +1 -0
  421. package/dist/generated/kind-flags.js +42 -0
  422. package/dist/generated/kind-flags.js.map +1 -0
  423. package/dist/generated/message.d.ts +624 -0
  424. package/dist/generated/message.d.ts.map +1 -0
  425. package/dist/generated/message.js +318 -0
  426. package/dist/generated/message.js.map +1 -0
  427. package/dist/generated/mon-message.d.ts +386 -0
  428. package/dist/generated/mon-message.d.ts.map +1 -0
  429. package/dist/generated/mon-message.js +136 -0
  430. package/dist/generated/mon-message.js.map +1 -0
  431. package/dist/generated/mon-race-flags.d.ts +433 -0
  432. package/dist/generated/mon-race-flags.d.ts.map +1 -0
  433. package/dist/generated/mon-race-flags.js +180 -0
  434. package/dist/generated/mon-race-flags.js.map +1 -0
  435. package/dist/generated/mon-spells.d.ts +380 -0
  436. package/dist/generated/mon-spells.d.ts.map +1 -0
  437. package/dist/generated/mon-spells.js +196 -0
  438. package/dist/generated/mon-spells.js.map +1 -0
  439. package/dist/generated/mon-temp-flags.d.ts +52 -0
  440. package/dist/generated/mon-temp-flags.d.ts.map +1 -0
  441. package/dist/generated/mon-temp-flags.js +32 -0
  442. package/dist/generated/mon-temp-flags.js.map +1 -0
  443. package/dist/generated/mon-timed.d.ts +118 -0
  444. package/dist/generated/mon-timed.d.ts.map +1 -0
  445. package/dist/generated/mon-timed.js +32 -0
  446. package/dist/generated/mon-timed.js.map +1 -0
  447. package/dist/generated/object-flags.d.ts +169 -0
  448. package/dist/generated/object-flags.d.ts.map +1 -0
  449. package/dist/generated/object-flags.js +93 -0
  450. package/dist/generated/object-flags.js.map +1 -0
  451. package/dist/generated/object-modifiers.d.ts +50 -0
  452. package/dist/generated/object-modifiers.d.ts.map +1 -0
  453. package/dist/generated/object-modifiers.js +41 -0
  454. package/dist/generated/object-modifiers.js.map +1 -0
  455. package/dist/generated/options.d.ts +284 -0
  456. package/dist/generated/options.d.ts.map +1 -0
  457. package/dist/generated/options.js +102 -0
  458. package/dist/generated/options.js.map +1 -0
  459. package/dist/generated/origins.d.ts +138 -0
  460. package/dist/generated/origins.d.ts.map +1 -0
  461. package/dist/generated/origins.js +62 -0
  462. package/dist/generated/origins.js.map +1 -0
  463. package/dist/generated/parser-errors.d.ts +264 -0
  464. package/dist/generated/parser-errors.d.ts.map +1 -0
  465. package/dist/generated/parser-errors.js +138 -0
  466. package/dist/generated/parser-errors.js.map +1 -0
  467. package/dist/generated/player-flags.d.ts +62 -0
  468. package/dist/generated/player-flags.d.ts.map +1 -0
  469. package/dist/generated/player-flags.js +46 -0
  470. package/dist/generated/player-flags.js.map +1 -0
  471. package/dist/generated/player-timed.d.ts +273 -0
  472. package/dist/generated/player-timed.d.ts.map +1 -0
  473. package/dist/generated/player-timed.js +116 -0
  474. package/dist/generated/player-timed.js.map +1 -0
  475. package/dist/generated/projections.d.ts +130 -0
  476. package/dist/generated/projections.d.ts.map +1 -0
  477. package/dist/generated/projections.js +101 -0
  478. package/dist/generated/projections.js.map +1 -0
  479. package/dist/generated/randart-properties.d.ts +388 -0
  480. package/dist/generated/randart-properties.d.ts.map +1 -0
  481. package/dist/generated/randart-properties.js +200 -0
  482. package/dist/generated/randart-properties.js.map +1 -0
  483. package/dist/generated/room-flags.d.ts +21 -0
  484. package/dist/generated/room-flags.d.ts.map +1 -0
  485. package/dist/generated/room-flags.js +19 -0
  486. package/dist/generated/room-flags.js.map +1 -0
  487. package/dist/generated/rooms.d.ts +122 -0
  488. package/dist/generated/rooms.d.ts.map +1 -0
  489. package/dist/generated/rooms.js +48 -0
  490. package/dist/generated/rooms.js.map +1 -0
  491. package/dist/generated/square-flags.d.ts +96 -0
  492. package/dist/generated/square-flags.d.ts.map +1 -0
  493. package/dist/generated/square-flags.js +54 -0
  494. package/dist/generated/square-flags.js.map +1 -0
  495. package/dist/generated/stats.d.ts +23 -0
  496. package/dist/generated/stats.d.ts.map +1 -0
  497. package/dist/generated/stats.js +20 -0
  498. package/dist/generated/stats.js.map +1 -0
  499. package/dist/generated/terrain-flags.d.ts +136 -0
  500. package/dist/generated/terrain-flags.d.ts.map +1 -0
  501. package/dist/generated/terrain-flags.js +74 -0
  502. package/dist/generated/terrain-flags.js.map +1 -0
  503. package/dist/generated/terrain.d.ts +83 -0
  504. package/dist/generated/terrain.d.ts.map +1 -0
  505. package/dist/generated/terrain.js +60 -0
  506. package/dist/generated/terrain.js.map +1 -0
  507. package/dist/generated/trap-flags.d.ts +68 -0
  508. package/dist/generated/trap-flags.d.ts.map +1 -0
  509. package/dist/generated/trap-flags.js +40 -0
  510. package/dist/generated/trap-flags.js.map +1 -0
  511. package/dist/generated/tvals.d.ts +152 -0
  512. package/dist/generated/tvals.d.ts.map +1 -0
  513. package/dist/generated/tvals.js +82 -0
  514. package/dist/generated/tvals.js.map +1 -0
  515. package/dist/generated/ui-entry-renderers.d.ts +62 -0
  516. package/dist/generated/ui-entry-renderers.d.ts.map +1 -0
  517. package/dist/generated/ui-entry-renderers.js +22 -0
  518. package/dist/generated/ui-entry-renderers.js.map +1 -0
  519. package/dist/guard.d.ts +43 -0
  520. package/dist/guard.d.ts.map +1 -0
  521. package/dist/guard.js +65 -0
  522. package/dist/guard.js.map +1 -0
  523. package/dist/host/args.d.ts +129 -0
  524. package/dist/host/args.d.ts.map +1 -0
  525. package/dist/host/args.js +251 -0
  526. package/dist/host/args.js.map +1 -0
  527. package/dist/host/bridge.d.ts +61 -0
  528. package/dist/host/bridge.d.ts.map +1 -0
  529. package/dist/host/bridge.js +176 -0
  530. package/dist/host/bridge.js.map +1 -0
  531. package/dist/host/index.d.ts +18 -0
  532. package/dist/host/index.d.ts.map +1 -0
  533. package/dist/host/index.js +18 -0
  534. package/dist/host/index.js.map +1 -0
  535. package/dist/host/io.d.ts +169 -0
  536. package/dist/host/io.d.ts.map +1 -0
  537. package/dist/host/io.js +137 -0
  538. package/dist/host/io.js.map +1 -0
  539. package/dist/host/memory.d.ts +56 -0
  540. package/dist/host/memory.d.ts.map +1 -0
  541. package/dist/host/memory.js +105 -0
  542. package/dist/host/memory.js.map +1 -0
  543. package/dist/host/raw.d.ts +114 -0
  544. package/dist/host/raw.d.ts.map +1 -0
  545. package/dist/host/raw.js +107 -0
  546. package/dist/host/raw.js.map +1 -0
  547. package/dist/index.d.ts +180 -0
  548. package/dist/index.d.ts.map +1 -0
  549. package/dist/index.js +222 -0
  550. package/dist/index.js.map +1 -0
  551. package/dist/loc.d.ts +63 -0
  552. package/dist/loc.d.ts.map +1 -0
  553. package/dist/loc.js +128 -0
  554. package/dist/loc.js.map +1 -0
  555. package/dist/mod/hooks.d.ts +204 -0
  556. package/dist/mod/hooks.d.ts.map +1 -0
  557. package/dist/mod/hooks.js +161 -0
  558. package/dist/mod/hooks.js.map +1 -0
  559. package/dist/mod/ids.d.ts +160 -0
  560. package/dist/mod/ids.d.ts.map +1 -0
  561. package/dist/mod/ids.js +343 -0
  562. package/dist/mod/ids.js.map +1 -0
  563. package/dist/mod/registry-host.d.ts +156 -0
  564. package/dist/mod/registry-host.d.ts.map +1 -0
  565. package/dist/mod/registry-host.js +142 -0
  566. package/dist/mod/registry-host.js.map +1 -0
  567. package/dist/mod/save-blocks.d.ts +201 -0
  568. package/dist/mod/save-blocks.d.ts.map +1 -0
  569. package/dist/mod/save-blocks.js +640 -0
  570. package/dist/mod/save-blocks.js.map +1 -0
  571. package/dist/mod/vocabulary.d.ts +104 -0
  572. package/dist/mod/vocabulary.d.ts.map +1 -0
  573. package/dist/mod/vocabulary.js +0 -0
  574. package/dist/mod/vocabulary.js.map +1 -0
  575. package/dist/mon/bind.d.ts +266 -0
  576. package/dist/mon/bind.d.ts.map +1 -0
  577. package/dist/mon/bind.js +610 -0
  578. package/dist/mon/bind.js.map +1 -0
  579. package/dist/mon/desc.d.ts +72 -0
  580. package/dist/mon/desc.d.ts.map +1 -0
  581. package/dist/mon/desc.js +237 -0
  582. package/dist/mon/desc.js.map +1 -0
  583. package/dist/mon/knowledge-groups.d.ts +61 -0
  584. package/dist/mon/knowledge-groups.d.ts.map +1 -0
  585. package/dist/mon/knowledge-groups.js +121 -0
  586. package/dist/mon/knowledge-groups.js.map +1 -0
  587. package/dist/mon/lore-describe.d.ts +216 -0
  588. package/dist/mon/lore-describe.d.ts.map +1 -0
  589. package/dist/mon/lore-describe.js +1105 -0
  590. package/dist/mon/lore-describe.js.map +1 -0
  591. package/dist/mon/lore.d.ts +117 -0
  592. package/dist/mon/lore.d.ts.map +1 -0
  593. package/dist/mon/lore.js +221 -0
  594. package/dist/mon/lore.js.map +1 -0
  595. package/dist/mon/make.d.ts +147 -0
  596. package/dist/mon/make.d.ts.map +1 -0
  597. package/dist/mon/make.js +353 -0
  598. package/dist/mon/make.js.map +1 -0
  599. package/dist/mon/monster.d.ts +94 -0
  600. package/dist/mon/monster.d.ts.map +1 -0
  601. package/dist/mon/monster.js +90 -0
  602. package/dist/mon/monster.js.map +1 -0
  603. package/dist/mon/predicate.d.ts +87 -0
  604. package/dist/mon/predicate.d.ts.map +1 -0
  605. package/dist/mon/predicate.js +190 -0
  606. package/dist/mon/predicate.js.map +1 -0
  607. package/dist/mon/project-mon.d.ts +129 -0
  608. package/dist/mon/project-mon.d.ts.map +1 -0
  609. package/dist/mon/project-mon.js +652 -0
  610. package/dist/mon/project-mon.js.map +1 -0
  611. package/dist/mon/spell.d.ts +155 -0
  612. package/dist/mon/spell.d.ts.map +1 -0
  613. package/dist/mon/spell.js +355 -0
  614. package/dist/mon/spell.js.map +1 -0
  615. package/dist/mon/steal.d.ts +112 -0
  616. package/dist/mon/steal.d.ts.map +1 -0
  617. package/dist/mon/steal.js +163 -0
  618. package/dist/mon/steal.js.map +1 -0
  619. package/dist/mon/summon.d.ts +62 -0
  620. package/dist/mon/summon.d.ts.map +1 -0
  621. package/dist/mon/summon.js +111 -0
  622. package/dist/mon/summon.js.map +1 -0
  623. package/dist/mon/take-hit.d.ts +75 -0
  624. package/dist/mon/take-hit.d.ts.map +1 -0
  625. package/dist/mon/take-hit.js +122 -0
  626. package/dist/mon/take-hit.js.map +1 -0
  627. package/dist/mon/timed.d.ts +74 -0
  628. package/dist/mon/timed.d.ts.map +1 -0
  629. package/dist/mon/timed.js +219 -0
  630. package/dist/mon/timed.js.map +1 -0
  631. package/dist/mon/types.d.ts +252 -0
  632. package/dist/mon/types.d.ts.map +1 -0
  633. package/dist/mon/types.js +46 -0
  634. package/dist/mon/types.js.map +1 -0
  635. package/dist/msg.d.ts +71 -0
  636. package/dist/msg.d.ts.map +1 -0
  637. package/dist/msg.js +126 -0
  638. package/dist/msg.js.map +1 -0
  639. package/dist/obj/artifact-fake.d.ts +39 -0
  640. package/dist/obj/artifact-fake.d.ts.map +1 -0
  641. package/dist/obj/artifact-fake.js +52 -0
  642. package/dist/obj/artifact-fake.js.map +1 -0
  643. package/dist/obj/artifact-known.d.ts +50 -0
  644. package/dist/obj/artifact-known.d.ts.map +1 -0
  645. package/dist/obj/artifact-known.js +55 -0
  646. package/dist/obj/artifact-known.js.map +1 -0
  647. package/dist/obj/bind.d.ts +219 -0
  648. package/dist/obj/bind.d.ts.map +1 -0
  649. package/dist/obj/bind.js +1239 -0
  650. package/dist/obj/bind.js.map +1 -0
  651. package/dist/obj/chest.d.ts +91 -0
  652. package/dist/obj/chest.d.ts.map +1 -0
  653. package/dist/obj/chest.js +220 -0
  654. package/dist/obj/chest.js.map +1 -0
  655. package/dist/obj/desc.d.ts +79 -0
  656. package/dist/obj/desc.d.ts.map +1 -0
  657. package/dist/obj/desc.js +602 -0
  658. package/dist/obj/desc.js.map +1 -0
  659. package/dist/obj/effects-info.d.ts +78 -0
  660. package/dist/obj/effects-info.d.ts.map +1 -0
  661. package/dist/obj/effects-info.js +240 -0
  662. package/dist/obj/effects-info.js.map +1 -0
  663. package/dist/obj/flavor.d.ts +68 -0
  664. package/dist/obj/flavor.d.ts.map +1 -0
  665. package/dist/obj/flavor.js +201 -0
  666. package/dist/obj/flavor.js.map +1 -0
  667. package/dist/obj/ignore.d.ts +143 -0
  668. package/dist/obj/ignore.d.ts.map +1 -0
  669. package/dist/obj/ignore.js +345 -0
  670. package/dist/obj/ignore.js.map +1 -0
  671. package/dist/obj/knowledge.d.ts +520 -0
  672. package/dist/obj/knowledge.d.ts.map +1 -0
  673. package/dist/obj/knowledge.js +1364 -0
  674. package/dist/obj/knowledge.js.map +1 -0
  675. package/dist/obj/known-object.d.ts +293 -0
  676. package/dist/obj/known-object.d.ts.map +1 -0
  677. package/dist/obj/known-object.js +532 -0
  678. package/dist/obj/known-object.js.map +1 -0
  679. package/dist/obj/make.d.ts +292 -0
  680. package/dist/obj/make.d.ts.map +1 -0
  681. package/dist/obj/make.js +1055 -0
  682. package/dist/obj/make.js.map +1 -0
  683. package/dist/obj/object-info.d.ts +188 -0
  684. package/dist/obj/object-info.d.ts.map +1 -0
  685. package/dist/obj/object-info.js +1407 -0
  686. package/dist/obj/object-info.js.map +1 -0
  687. package/dist/obj/object.d.ts +335 -0
  688. package/dist/obj/object.d.ts.map +1 -0
  689. package/dist/obj/object.js +1051 -0
  690. package/dist/obj/object.js.map +1 -0
  691. package/dist/obj/power.d.ts +65 -0
  692. package/dist/obj/power.d.ts.map +1 -0
  693. package/dist/obj/power.js +580 -0
  694. package/dist/obj/power.js.map +1 -0
  695. package/dist/obj/randart-build.d.ts +223 -0
  696. package/dist/obj/randart-build.d.ts.map +1 -0
  697. package/dist/obj/randart-build.js +1444 -0
  698. package/dist/obj/randart-build.js.map +1 -0
  699. package/dist/obj/randart-data.d.ts +179 -0
  700. package/dist/obj/randart-data.d.ts.map +1 -0
  701. package/dist/obj/randart-data.js +1153 -0
  702. package/dist/obj/randart-data.js.map +1 -0
  703. package/dist/obj/randart.d.ts +128 -0
  704. package/dist/obj/randart.d.ts.map +1 -0
  705. package/dist/obj/randart.js +458 -0
  706. package/dist/obj/randart.js.map +1 -0
  707. package/dist/obj/randname.d.ts +33 -0
  708. package/dist/obj/randname.d.ts.map +1 -0
  709. package/dist/obj/randname.js +116 -0
  710. package/dist/obj/randname.js.map +1 -0
  711. package/dist/obj/recharge.d.ts +28 -0
  712. package/dist/obj/recharge.d.ts.map +1 -0
  713. package/dist/obj/recharge.js +52 -0
  714. package/dist/obj/recharge.js.map +1 -0
  715. package/dist/obj/types.d.ts +584 -0
  716. package/dist/obj/types.d.ts.map +1 -0
  717. package/dist/obj/types.js +104 -0
  718. package/dist/obj/types.js.map +1 -0
  719. package/dist/obj/value.d.ts +64 -0
  720. package/dist/obj/value.d.ts.map +1 -0
  721. package/dist/obj/value.js +176 -0
  722. package/dist/obj/value.js.map +1 -0
  723. package/dist/player/abilities.d.ts +57 -0
  724. package/dist/player/abilities.d.ts.map +1 -0
  725. package/dist/player/abilities.js +118 -0
  726. package/dist/player/abilities.js.map +1 -0
  727. package/dist/player/best-digger.d.ts +42 -0
  728. package/dist/player/best-digger.d.ts.map +1 -0
  729. package/dist/player/best-digger.js +89 -0
  730. package/dist/player/best-digger.js.map +1 -0
  731. package/dist/player/bind.d.ts +270 -0
  732. package/dist/player/bind.d.ts.map +1 -0
  733. package/dist/player/bind.js +698 -0
  734. package/dist/player/bind.js.map +1 -0
  735. package/dist/player/birth.d.ts +258 -0
  736. package/dist/player/birth.d.ts.map +1 -0
  737. package/dist/player/birth.js +639 -0
  738. package/dist/player/birth.js.map +1 -0
  739. package/dist/player/calcs.d.ts +403 -0
  740. package/dist/player/calcs.d.ts.map +1 -0
  741. package/dist/player/calcs.js +1189 -0
  742. package/dist/player/calcs.js.map +1 -0
  743. package/dist/player/combat-regen.d.ts +14 -0
  744. package/dist/player/combat-regen.d.ts.map +1 -0
  745. package/dist/player/combat-regen.js +29 -0
  746. package/dist/player/combat-regen.js.map +1 -0
  747. package/dist/player/exp.d.ts +96 -0
  748. package/dist/player/exp.d.ts.map +1 -0
  749. package/dist/player/exp.js +229 -0
  750. package/dist/player/exp.js.map +1 -0
  751. package/dist/player/history.d.ts +91 -0
  752. package/dist/player/history.d.ts.map +1 -0
  753. package/dist/player/history.js +145 -0
  754. package/dist/player/history.js.map +1 -0
  755. package/dist/player/options.d.ts +123 -0
  756. package/dist/player/options.d.ts.map +1 -0
  757. package/dist/player/options.js +199 -0
  758. package/dist/player/options.js.map +1 -0
  759. package/dist/player/player.d.ts +242 -0
  760. package/dist/player/player.d.ts.map +1 -0
  761. package/dist/player/player.js +119 -0
  762. package/dist/player/player.js.map +1 -0
  763. package/dist/player/shape-lore.d.ts +56 -0
  764. package/dist/player/shape-lore.d.ts.map +1 -0
  765. package/dist/player/shape-lore.js +221 -0
  766. package/dist/player/shape-lore.js.map +1 -0
  767. package/dist/player/spell.d.ts +146 -0
  768. package/dist/player/spell.d.ts.map +1 -0
  769. package/dist/player/spell.js +519 -0
  770. package/dist/player/spell.js.map +1 -0
  771. package/dist/player/take-hit.d.ts +87 -0
  772. package/dist/player/take-hit.d.ts.map +1 -0
  773. package/dist/player/take-hit.js +99 -0
  774. package/dist/player/take-hit.js.map +1 -0
  775. package/dist/player/timed.d.ts +205 -0
  776. package/dist/player/timed.d.ts.map +1 -0
  777. package/dist/player/timed.js +310 -0
  778. package/dist/player/timed.js.map +1 -0
  779. package/dist/player/types.d.ts +390 -0
  780. package/dist/player/types.d.ts.map +1 -0
  781. package/dist/player/types.js +51 -0
  782. package/dist/player/types.js.map +1 -0
  783. package/dist/rational.d.ts +99 -0
  784. package/dist/rational.d.ts.map +1 -0
  785. package/dist/rational.js +345 -0
  786. package/dist/rational.js.map +1 -0
  787. package/dist/rng.d.ts +168 -0
  788. package/dist/rng.d.ts.map +1 -0
  789. package/dist/rng.js +404 -0
  790. package/dist/rng.js.map +1 -0
  791. package/dist/save/buffer.d.ts +120 -0
  792. package/dist/save/buffer.d.ts.map +1 -0
  793. package/dist/save/buffer.js +238 -0
  794. package/dist/save/buffer.js.map +1 -0
  795. package/dist/save/compress.d.ts +79 -0
  796. package/dist/save/compress.d.ts.map +1 -0
  797. package/dist/save/compress.js +97 -0
  798. package/dist/save/compress.js.map +1 -0
  799. package/dist/save/description.d.ts +61 -0
  800. package/dist/save/description.d.ts.map +1 -0
  801. package/dist/save/description.js +51 -0
  802. package/dist/save/description.js.map +1 -0
  803. package/dist/save/integrity.d.ts +59 -0
  804. package/dist/save/integrity.d.ts.map +1 -0
  805. package/dist/save/integrity.js +103 -0
  806. package/dist/save/integrity.js.map +1 -0
  807. package/dist/score/display.d.ts +40 -0
  808. package/dist/score/display.d.ts.map +1 -0
  809. package/dist/score/display.js +86 -0
  810. package/dist/score/display.js.map +1 -0
  811. package/dist/score/score.d.ts +166 -0
  812. package/dist/score/score.d.ts.map +1 -0
  813. package/dist/score/score.js +244 -0
  814. package/dist/score/score.js.map +1 -0
  815. package/dist/score/types.d.ts +98 -0
  816. package/dist/score/types.d.ts.map +1 -0
  817. package/dist/score/types.js +27 -0
  818. package/dist/score/types.js.map +1 -0
  819. package/dist/session/boot.d.ts +207 -0
  820. package/dist/session/boot.d.ts.map +1 -0
  821. package/dist/session/boot.js +151 -0
  822. package/dist/session/boot.js.map +1 -0
  823. package/dist/session/game.d.ts +257 -0
  824. package/dist/session/game.d.ts.map +1 -0
  825. package/dist/session/game.js +2880 -0
  826. package/dist/session/game.js.map +1 -0
  827. package/dist/session/save.d.ts +847 -0
  828. package/dist/session/save.d.ts.map +1 -0
  829. package/dist/session/save.js +1306 -0
  830. package/dist/session/save.js.map +1 -0
  831. package/dist/sound/engine.d.ts +146 -0
  832. package/dist/sound/engine.d.ts.map +1 -0
  833. package/dist/sound/engine.js +332 -0
  834. package/dist/sound/engine.js.map +1 -0
  835. package/dist/sound/index.d.ts +13 -0
  836. package/dist/sound/index.d.ts.map +1 -0
  837. package/dist/sound/index.js +13 -0
  838. package/dist/sound/index.js.map +1 -0
  839. package/dist/sound/sound-prefs-data.d.ts +10 -0
  840. package/dist/sound/sound-prefs-data.d.ts.map +1 -0
  841. package/dist/sound/sound-prefs-data.js +165 -0
  842. package/dist/sound/sound-prefs-data.js.map +1 -0
  843. package/dist/sound/types.d.ts +64 -0
  844. package/dist/sound/types.d.ts.map +1 -0
  845. package/dist/sound/types.js +23 -0
  846. package/dist/sound/types.js.map +1 -0
  847. package/dist/store/bind.d.ts +43 -0
  848. package/dist/store/bind.d.ts.map +1 -0
  849. package/dist/store/bind.js +130 -0
  850. package/dist/store/bind.js.map +1 -0
  851. package/dist/store/price.d.ts +27 -0
  852. package/dist/store/price.d.ts.map +1 -0
  853. package/dist/store/price.js +81 -0
  854. package/dist/store/price.js.map +1 -0
  855. package/dist/store/store-cmd.d.ts +51 -0
  856. package/dist/store/store-cmd.d.ts.map +1 -0
  857. package/dist/store/store-cmd.js +73 -0
  858. package/dist/store/store-cmd.js.map +1 -0
  859. package/dist/store/store.d.ts +156 -0
  860. package/dist/store/store.d.ts.map +1 -0
  861. package/dist/store/store.js +616 -0
  862. package/dist/store/store.js.map +1 -0
  863. package/dist/store/transact.d.ts +198 -0
  864. package/dist/store/transact.d.ts.map +1 -0
  865. package/dist/store/transact.js +383 -0
  866. package/dist/store/transact.js.map +1 -0
  867. package/dist/store/types.d.ts +101 -0
  868. package/dist/store/types.d.ts.map +1 -0
  869. package/dist/store/types.js +14 -0
  870. package/dist/store/types.js.map +1 -0
  871. package/dist/version.d.ts +25 -0
  872. package/dist/version.d.ts.map +1 -0
  873. package/dist/version.js +25 -0
  874. package/dist/version.js.map +1 -0
  875. package/dist/visuals/engine.d.ts +223 -0
  876. package/dist/visuals/engine.d.ts.map +1 -0
  877. package/dist/visuals/engine.js +357 -0
  878. package/dist/visuals/engine.js.map +1 -0
  879. package/dist/visuals/glyph-table.d.ts +112 -0
  880. package/dist/visuals/glyph-table.d.ts.map +1 -0
  881. package/dist/visuals/glyph-table.js +156 -0
  882. package/dist/visuals/glyph-table.js.map +1 -0
  883. package/dist/visuals/grafmode-data.d.ts +4 -0
  884. package/dist/visuals/grafmode-data.d.ts.map +1 -0
  885. package/dist/visuals/grafmode-data.js +88 -0
  886. package/dist/visuals/grafmode-data.js.map +1 -0
  887. package/dist/visuals/grafmode.d.ts +83 -0
  888. package/dist/visuals/grafmode.d.ts.map +1 -0
  889. package/dist/visuals/grafmode.js +82 -0
  890. package/dist/visuals/grafmode.js.map +1 -0
  891. package/dist/visuals/index.d.ts +19 -0
  892. package/dist/visuals/index.d.ts.map +1 -0
  893. package/dist/visuals/index.js +19 -0
  894. package/dist/visuals/index.js.map +1 -0
  895. package/dist/visuals/map-text.d.ts +79 -0
  896. package/dist/visuals/map-text.d.ts.map +1 -0
  897. package/dist/visuals/map-text.js +122 -0
  898. package/dist/visuals/map-text.js.map +1 -0
  899. package/dist/visuals/pref-expr.d.ts +56 -0
  900. package/dist/visuals/pref-expr.d.ts.map +1 -0
  901. package/dist/visuals/pref-expr.js +173 -0
  902. package/dist/visuals/pref-expr.js.map +1 -0
  903. package/dist/visuals/prefs.d.ts +280 -0
  904. package/dist/visuals/prefs.d.ts.map +1 -0
  905. package/dist/visuals/prefs.js +835 -0
  906. package/dist/visuals/prefs.js.map +1 -0
  907. package/dist/visuals/tile-prefs.d.ts +132 -0
  908. package/dist/visuals/tile-prefs.d.ts.map +1 -0
  909. package/dist/visuals/tile-prefs.js +105 -0
  910. package/dist/visuals/tile-prefs.js.map +1 -0
  911. package/dist/world/chunk.d.ts +195 -0
  912. package/dist/world/chunk.d.ts.map +1 -0
  913. package/dist/world/chunk.js +422 -0
  914. package/dist/world/chunk.js.map +1 -0
  915. package/dist/world/feature.d.ts +86 -0
  916. package/dist/world/feature.d.ts.map +1 -0
  917. package/dist/world/feature.js +153 -0
  918. package/dist/world/feature.js.map +1 -0
  919. package/dist/world/flow.d.ts +33 -0
  920. package/dist/world/flow.d.ts.map +1 -0
  921. package/dist/world/flow.js +115 -0
  922. package/dist/world/flow.js.map +1 -0
  923. package/dist/world/project.d.ts +176 -0
  924. package/dist/world/project.d.ts.map +1 -0
  925. package/dist/world/project.js +543 -0
  926. package/dist/world/project.js.map +1 -0
  927. package/dist/world/projection.d.ts +100 -0
  928. package/dist/world/projection.d.ts.map +1 -0
  929. package/dist/world/projection.js +152 -0
  930. package/dist/world/projection.js.map +1 -0
  931. package/dist/world/scatter.d.ts +25 -0
  932. package/dist/world/scatter.d.ts.map +1 -0
  933. package/dist/world/scatter.js +54 -0
  934. package/dist/world/scatter.js.map +1 -0
  935. package/dist/world/trap.d.ts +84 -0
  936. package/dist/world/trap.d.ts.map +1 -0
  937. package/dist/world/trap.js +106 -0
  938. package/dist/world/trap.js.map +1 -0
  939. package/dist/world/view.d.ts +60 -0
  940. package/dist/world/view.d.ts.map +1 -0
  941. package/dist/world/view.js +436 -0
  942. package/dist/world/view.js.map +1 -0
  943. package/dist/z-queue.d.ts +133 -0
  944. package/dist/z-queue.d.ts.map +1 -0
  945. package/dist/z-queue.js +283 -0
  946. package/dist/z-queue.js.map +1 -0
  947. package/package.json +75 -0
  948. package/src/agent/act.ts +114 -0
  949. package/src/agent/controller.ts +109 -0
  950. package/src/agent/events.ts +47 -0
  951. package/src/agent/index.ts +36 -0
  952. package/src/agent/perceive.ts +440 -0
  953. package/src/agent/types.ts +464 -0
  954. package/src/bitflag.ts +536 -0
  955. package/src/cmd.ts +547 -0
  956. package/src/color.ts +267 -0
  957. package/src/combat/brand-slay.ts +360 -0
  958. package/src/combat/hit.ts +471 -0
  959. package/src/combat/index.ts +15 -0
  960. package/src/combat/melee.ts +728 -0
  961. package/src/combat/mon-melee.ts +1153 -0
  962. package/src/combat/ranged.ts +397 -0
  963. package/src/constants.ts +324 -0
  964. package/src/dice.ts +467 -0
  965. package/src/effects/effect-choice.ts +32 -0
  966. package/src/effects/effect-info.ts +859 -0
  967. package/src/effects/effect.ts +560 -0
  968. package/src/effects/handlers.ts +452 -0
  969. package/src/effects/interpreter.ts +603 -0
  970. package/src/events.ts +317 -0
  971. package/src/expression.ts +360 -0
  972. package/src/game/cave-cmd.ts +1147 -0
  973. package/src/game/char-sheet.ts +557 -0
  974. package/src/game/chest.ts +348 -0
  975. package/src/game/context.ts +1218 -0
  976. package/src/game/curse-tick.ts +130 -0
  977. package/src/game/describe.ts +62 -0
  978. package/src/game/display.ts +838 -0
  979. package/src/game/dump-level.ts +114 -0
  980. package/src/game/effect-attack.ts +746 -0
  981. package/src/game/effect-detect.ts +542 -0
  982. package/src/game/effect-env.ts +252 -0
  983. package/src/game/effect-game-env.ts +86 -0
  984. package/src/game/effect-general.ts +1122 -0
  985. package/src/game/effect-item.ts +999 -0
  986. package/src/game/effect-melee.ts +557 -0
  987. package/src/game/effect-mon-origin.ts +196 -0
  988. package/src/game/effect-monster.ts +310 -0
  989. package/src/game/effect-summon.ts +161 -0
  990. package/src/game/effect-teleport.ts +645 -0
  991. package/src/game/effect-terrain.ts +881 -0
  992. package/src/game/energy.ts +61 -0
  993. package/src/game/equip-cmp.ts +476 -0
  994. package/src/game/floor.ts +524 -0
  995. package/src/game/gear.ts +1352 -0
  996. package/src/game/harness.ts +270 -0
  997. package/src/game/history.ts +78 -0
  998. package/src/game/ignore-cmd.ts +68 -0
  999. package/src/game/inscription-confirm.ts +115 -0
  1000. package/src/game/known.ts +960 -0
  1001. package/src/game/loop.ts +671 -0
  1002. package/src/game/lore-color.ts +108 -0
  1003. package/src/game/mon-cast.ts +409 -0
  1004. package/src/game/mon-cmd.ts +767 -0
  1005. package/src/game/mon-death.ts +459 -0
  1006. package/src/game/mon-group.ts +368 -0
  1007. package/src/game/mon-list.ts +213 -0
  1008. package/src/game/mon-message.ts +359 -0
  1009. package/src/game/mon-place.ts +1012 -0
  1010. package/src/game/mon-ranged.ts +405 -0
  1011. package/src/game/mon-shape.ts +161 -0
  1012. package/src/game/mon-side.ts +511 -0
  1013. package/src/game/monster-turn.ts +1750 -0
  1014. package/src/game/obj-cmd.ts +1970 -0
  1015. package/src/game/obj-list.ts +302 -0
  1016. package/src/game/object-inspect.ts +162 -0
  1017. package/src/game/pickup.ts +483 -0
  1018. package/src/game/player-path.ts +1434 -0
  1019. package/src/game/player-side.ts +555 -0
  1020. package/src/game/player-turn.ts +852 -0
  1021. package/src/game/project-cast.ts +766 -0
  1022. package/src/game/project-feat.ts +386 -0
  1023. package/src/game/project-monster.ts +407 -0
  1024. package/src/game/project-obj.ts +298 -0
  1025. package/src/game/project-player.ts +236 -0
  1026. package/src/game/quest.ts +248 -0
  1027. package/src/game/ranged-cmd.ts +417 -0
  1028. package/src/game/scheduler.ts +150 -0
  1029. package/src/game/spell-cmd.ts +404 -0
  1030. package/src/game/spoil.ts +562 -0
  1031. package/src/game/steal.ts +169 -0
  1032. package/src/game/take-hit-hooks.ts +152 -0
  1033. package/src/game/target-loop.ts +501 -0
  1034. package/src/game/target.ts +424 -0
  1035. package/src/game/thrust.ts +174 -0
  1036. package/src/game/trap.ts +791 -0
  1037. package/src/game/ui-entry.ts +2075 -0
  1038. package/src/game/wizard.ts +1760 -0
  1039. package/src/game/world.ts +786 -0
  1040. package/src/gen/cave.ts +2858 -0
  1041. package/src/gen/gen-monster.ts +592 -0
  1042. package/src/gen/generate.ts +523 -0
  1043. package/src/gen/room.ts +2213 -0
  1044. package/src/gen/util.ts +1958 -0
  1045. package/src/generated/dun-profiles.ts +30 -0
  1046. package/src/generated/effects.ts +241 -0
  1047. package/src/generated/elements.ts +62 -0
  1048. package/src/generated/equip-slots.ts +36 -0
  1049. package/src/generated/history-types.ts +34 -0
  1050. package/src/generated/ignore-types.ts +66 -0
  1051. package/src/generated/index.ts +33 -0
  1052. package/src/generated/kind-flags.ts +44 -0
  1053. package/src/generated/message.ts +320 -0
  1054. package/src/generated/mon-message.ts +138 -0
  1055. package/src/generated/mon-race-flags.ts +182 -0
  1056. package/src/generated/mon-spells.ts +198 -0
  1057. package/src/generated/mon-temp-flags.ts +34 -0
  1058. package/src/generated/mon-timed.ts +34 -0
  1059. package/src/generated/object-flags.ts +95 -0
  1060. package/src/generated/object-modifiers.ts +43 -0
  1061. package/src/generated/options.ts +104 -0
  1062. package/src/generated/origins.ts +64 -0
  1063. package/src/generated/parser-errors.ts +140 -0
  1064. package/src/generated/player-flags.ts +48 -0
  1065. package/src/generated/player-timed.ts +118 -0
  1066. package/src/generated/projections.ts +103 -0
  1067. package/src/generated/randart-properties.ts +202 -0
  1068. package/src/generated/room-flags.ts +21 -0
  1069. package/src/generated/rooms.ts +50 -0
  1070. package/src/generated/square-flags.ts +56 -0
  1071. package/src/generated/stats.ts +22 -0
  1072. package/src/generated/terrain-flags.ts +76 -0
  1073. package/src/generated/terrain.ts +62 -0
  1074. package/src/generated/trap-flags.ts +42 -0
  1075. package/src/generated/tvals.ts +84 -0
  1076. package/src/generated/ui-entry-renderers.ts +24 -0
  1077. package/src/guard.ts +70 -0
  1078. package/src/host/args.ts +334 -0
  1079. package/src/host/bridge.ts +193 -0
  1080. package/src/host/index.ts +18 -0
  1081. package/src/host/io.ts +239 -0
  1082. package/src/host/memory.ts +134 -0
  1083. package/src/host/raw.ts +190 -0
  1084. package/src/index.ts +250 -0
  1085. package/src/loc.ts +157 -0
  1086. package/src/mod/hooks.ts +278 -0
  1087. package/src/mod/ids.ts +390 -0
  1088. package/src/mod/registry-host.ts +258 -0
  1089. package/src/mod/save-blocks.ts +787 -0
  1090. package/src/mod/vocabulary.ts +0 -0
  1091. package/src/mon/bind.ts +899 -0
  1092. package/src/mon/desc.ts +212 -0
  1093. package/src/mon/knowledge-groups.ts +164 -0
  1094. package/src/mon/lore-describe.ts +1414 -0
  1095. package/src/mon/lore.ts +306 -0
  1096. package/src/mon/make.ts +422 -0
  1097. package/src/mon/monster.ts +161 -0
  1098. package/src/mon/predicate.ts +220 -0
  1099. package/src/mon/project-mon.ts +855 -0
  1100. package/src/mon/spell.ts +418 -0
  1101. package/src/mon/steal.ts +246 -0
  1102. package/src/mon/summon.ts +145 -0
  1103. package/src/mon/take-hit.ts +195 -0
  1104. package/src/mon/timed.ts +300 -0
  1105. package/src/mon/types.ts +286 -0
  1106. package/src/msg.ts +146 -0
  1107. package/src/obj/artifact-fake.ts +63 -0
  1108. package/src/obj/artifact-known.ts +69 -0
  1109. package/src/obj/bind.ts +1345 -0
  1110. package/src/obj/chest.ts +249 -0
  1111. package/src/obj/desc.ts +699 -0
  1112. package/src/obj/effects-info.ts +349 -0
  1113. package/src/obj/flavor.ts +256 -0
  1114. package/src/obj/ignore.ts +387 -0
  1115. package/src/obj/knowledge.ts +1577 -0
  1116. package/src/obj/known-object.ts +718 -0
  1117. package/src/obj/make.ts +1367 -0
  1118. package/src/obj/object-info.ts +1737 -0
  1119. package/src/obj/object.ts +1296 -0
  1120. package/src/obj/power.ts +674 -0
  1121. package/src/obj/randart-build.ts +1705 -0
  1122. package/src/obj/randart-data.ts +1344 -0
  1123. package/src/obj/randart.ts +552 -0
  1124. package/src/obj/randname.ts +128 -0
  1125. package/src/obj/recharge.ts +62 -0
  1126. package/src/obj/types.ts +559 -0
  1127. package/src/obj/value.ts +215 -0
  1128. package/src/player/abilities.ts +142 -0
  1129. package/src/player/best-digger.ts +118 -0
  1130. package/src/player/bind.ts +1021 -0
  1131. package/src/player/birth.ts +794 -0
  1132. package/src/player/calcs.ts +1522 -0
  1133. package/src/player/combat-regen.ts +33 -0
  1134. package/src/player/exp.ts +275 -0
  1135. package/src/player/history.ts +211 -0
  1136. package/src/player/options.ts +244 -0
  1137. package/src/player/player.ts +356 -0
  1138. package/src/player/shape-lore.ts +250 -0
  1139. package/src/player/spell.ts +627 -0
  1140. package/src/player/take-hit.ts +173 -0
  1141. package/src/player/timed.ts +482 -0
  1142. package/src/player/types.ts +415 -0
  1143. package/src/rational.ts +388 -0
  1144. package/src/rng.ts +476 -0
  1145. package/src/save/buffer.ts +287 -0
  1146. package/src/save/compress.ts +132 -0
  1147. package/src/save/description.ts +70 -0
  1148. package/src/save/integrity.ts +133 -0
  1149. package/src/score/display.ts +125 -0
  1150. package/src/score/score.ts +341 -0
  1151. package/src/score/types.ts +104 -0
  1152. package/src/session/boot.ts +338 -0
  1153. package/src/session/game.ts +3712 -0
  1154. package/src/session/save.ts +2074 -0
  1155. package/src/sound/engine.ts +375 -0
  1156. package/src/sound/index.ts +13 -0
  1157. package/src/sound/sound-prefs-data.ts +173 -0
  1158. package/src/sound/types.ts +68 -0
  1159. package/src/store/bind.ts +145 -0
  1160. package/src/store/price.ts +97 -0
  1161. package/src/store/store-cmd.ts +73 -0
  1162. package/src/store/store.ts +723 -0
  1163. package/src/store/transact.ts +644 -0
  1164. package/src/store/types.ts +110 -0
  1165. package/src/version.ts +26 -0
  1166. package/src/visuals/engine.ts +444 -0
  1167. package/src/visuals/glyph-table.ts +191 -0
  1168. package/src/visuals/grafmode-data.ts +90 -0
  1169. package/src/visuals/grafmode.ts +123 -0
  1170. package/src/visuals/index.ts +19 -0
  1171. package/src/visuals/map-text.ts +152 -0
  1172. package/src/visuals/pref-expr.ts +182 -0
  1173. package/src/visuals/prefs.ts +981 -0
  1174. package/src/visuals/tile-prefs.ts +183 -0
  1175. package/src/world/chunk.ts +531 -0
  1176. package/src/world/feature.ts +215 -0
  1177. package/src/world/flow.ts +128 -0
  1178. package/src/world/project.ts +687 -0
  1179. package/src/world/projection.ts +228 -0
  1180. package/src/world/scatter.ts +72 -0
  1181. package/src/world/trap.ts +155 -0
  1182. package/src/world/view.ts +513 -0
  1183. package/src/z-queue.ts +300 -0
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Player spells, ported from reference/src/player-spell.c (Angband 4.2.6)
3
+ * plus the spell-related pieces of player-calcs.c (calc_mana, calc_spells,
4
+ * average_spell_stat) and init.c's write_book_kind (spellbook object kinds
5
+ * are created FROM the class book definitions, exactly as upstream does at
6
+ * class-parse time - object.txt carries no book kinds).
7
+ *
8
+ * This module is pure player/object domain logic: learning, fail chances,
9
+ * mana, book lookups. The cast itself (running a spell's effect chain
10
+ * against the live GameState) lives in game/spell-cmd.ts, the same split as
11
+ * monster spells (mon/spell.ts vs game/mon-cast.ts).
12
+ */
13
+ import type { ObjRegistry } from "../obj/bind.js";
14
+ import type { GameObject } from "../obj/object.js";
15
+ import type { ClassBook, ClassSpell, MagicRealm, PlayerClass } from "./types.js";
16
+ import type { Player } from "./player.js";
17
+ /** PY_SPELL_ flags (player.h). */
18
+ export declare const PY_SPELL: {
19
+ readonly LEARNED: 1;
20
+ readonly WORKED: 2;
21
+ readonly FORGOTTEN: 4;
22
+ };
23
+ /** Stat Table (INT/WIS) -- minimum spell failure rate (player-spell.c L49). */
24
+ export declare const adj_mag_fail: readonly number[];
25
+ /** Stat Table (INT/WIS) -- failure rate adjustment (player-spell.c L94). */
26
+ export declare const adj_mag_stat: readonly number[];
27
+ /**
28
+ * Create (or find) the object kind for every class book and stamp the
29
+ * numeric tval/sval back onto the bound ClassBook, exactly as upstream
30
+ * creates book kinds at class-parse time. Books shared between classes
31
+ * (e.g. the priest and paladin prayer books) resolve to one kind. Run once
32
+ * per bound registry, BEFORE building the allocation tables, so books
33
+ * generate in the dungeon with their book-properties commonness.
34
+ */
35
+ export declare function registerBookKinds(reg: ObjRegistry, classes: readonly PlayerClass[]): void;
36
+ /** player_spells_init: size the spell flag/order arrays for the class. */
37
+ export declare function playerSpellsInit(player: Player): void;
38
+ /** class_magic_realms: the distinct realms the class casts from. */
39
+ export declare function classMagicRealms(cls: PlayerClass): MagicRealm[];
40
+ /** player_object_to_book: the class book an object is, or null. */
41
+ export declare function playerObjectToBook(player: Player, obj: GameObject): ClassBook | null;
42
+ /** spell_by_index: the class spell with the given class-wide sidx. */
43
+ export declare function spellByIndex(cls: PlayerClass, index: number): ClassSpell | null;
44
+ /** spell_collect_from_book: the sidx list of a book object's spells. */
45
+ export declare function spellCollectFromBook(player: Player, obj: GameObject): number[];
46
+ /** spell_book_count_spells over a tester. */
47
+ export declare function spellBookCountSpells(player: Player, obj: GameObject, tester: (player: Player, spell: number) => boolean): number;
48
+ /** spell_okay_to_cast. */
49
+ /**
50
+ * spell_okay_list (player-spell.c L320) is upstream's "does ANY spell in this
51
+ * list pass `spell_test`" fold over spellOkayToCast / spellOkayToStudy. Its one
52
+ * caller is spell_menu_new (ui-spell.c:233), which refuses to build the menu
53
+ * when no listed spell qualifies; the web shell's equivalent is the
54
+ * `items.every((it) => it.disabled)` check in castSpell / studySpell.
55
+ */
56
+ export declare function spellOkayToCast(player: Player, spell: number): boolean;
57
+ /** spell_okay_to_study. */
58
+ export declare function spellOkayToStudy(player: Player, spellIndex: number): boolean;
59
+ /** spell_okay_to_browse. */
60
+ export declare function spellOkayToBrowse(player: Player, spellIndex: number): boolean;
61
+ /**
62
+ * obj_can_browse (obj-util.c L775) over obj_kind_can_browse (L762): a book of
63
+ * one of this class's own realms. The BROWSE book picker's item_tester
64
+ * (ui-spell.c L340).
65
+ */
66
+ export declare function objCanBrowse(player: Player, obj: GameObject): boolean;
67
+ /**
68
+ * obj_can_cast_from (obj-util.c L780): browsable AND holding at least one
69
+ * spell that passes spell_okay_to_cast. This - not obj_can_browse - is
70
+ * do_cmd_cast's book item_tester (cmd-obj.c L1129), so a book of the right
71
+ * realm whose spells are all still unlearned is NEVER offered, and the
72
+ * remaining books keep the letters they would have in the C.
73
+ */
74
+ export declare function objCanCastFrom(player: Player, obj: GameObject): boolean;
75
+ /**
76
+ * obj_can_study (obj-util.c L786): browsable AND holding at least one spell
77
+ * that passes spell_okay_to_study. do_cmd_study_spell's / do_cmd_study_book's
78
+ * book item_tester (cmd-obj.c L1187 / L1215) and the filter
79
+ * player_book_has_unlearned_spells scans with (player-util.c L1330).
80
+ */
81
+ export declare function objCanStudy(player: Player, obj: GameObject): boolean;
82
+ /** average_spell_stat: the mean casting-stat index over the class realms. */
83
+ export declare function averageSpellStat(cls: PlayerClass, statInd: readonly number[]): number;
84
+ /** Hooks for unported inputs to spell_chance; all optional. */
85
+ export interface SpellChanceEnv {
86
+ /** player_has(PF_ZERO_FAIL / PF_UNLIGHT / PF_BEAM): class pflags. */
87
+ hasPf?: (pf: number) => boolean;
88
+ /** square_islit(cave, player->grid) for the UNLIGHT penalty. */
89
+ gridIsLit?: () => boolean;
90
+ /**
91
+ * player_of_has(p, OF_AFRAID) (player-spell.c:424): fear from ANY source -
92
+ * the timed TMD_AFRAID synonym OR an OF_AFRAID object/intrinsic flag. The
93
+ * game caller passes the computed player_state flags here; when omitted the
94
+ * fallback reads timed[TMD_AFRAID] only, which misses equipment-borne fear.
95
+ */
96
+ afraid?: () => boolean;
97
+ }
98
+ /**
99
+ * spell_chance: the percentage failure chance for a spell, from base fail,
100
+ * level and casting-stat adjustments, low mana, fear, stunning and amnesia.
101
+ */
102
+ export declare function spellChance(player: Player, statInd: readonly number[], spellIndex: number, env?: SpellChanceEnv): number;
103
+ /** spell_learn: learn a spell and append it to the learn order. */
104
+ export declare function spellLearn(player: Player, spellIndex: number, msg?: (text: string) => void): void;
105
+ /**
106
+ * calc_spells (player-calcs.c L1268): how many spells the player may learn,
107
+ * forgetting or remembering spells as the allowance and level change.
108
+ * Updates player.upkeep.newSpells.
109
+ */
110
+ export declare function calcSpells(player: Player, statInd: readonly number[], msg?: (text: string) => void): void;
111
+ /**
112
+ * state->cumber_armor on its own (player-calcs.c:1524-1529): is the worn armour
113
+ * heavy enough over the class allowance to cost this player mana? Split out of
114
+ * calcMana so a caller that must NOT disturb msp/csp - loading a save, where
115
+ * maximum mana is restored rather than recomputed - can still derive the flag
116
+ * the encumbrance messages diff against.
117
+ */
118
+ export declare function cumberArmorFrom(player: Player, armorWeight: number): boolean;
119
+ /**
120
+ * calc_mana (player-calcs.c L1480): maximum mana from effective levels and
121
+ * the casting stat, penalized by heavy armor over the class allowance.
122
+ * `armorWeight` is the summed weight of worn body armor (the caller sums
123
+ * the non-weapon/bow/ring/amulet/light slots). Updates msp and clamps csp.
124
+ *
125
+ * Returns state->cumber_armor (L1503, L1528) - true when the worn armour is
126
+ * heavy enough to cost mana. Upstream stores it on player_state; the port's
127
+ * PlayerState carries the same field but calcBonuses cannot fill it (the mana
128
+ * calc runs in the session layer afterwards), so it is returned here for the
129
+ * caller to record. It had been left permanently false, which is why the
130
+ * armour-encumbrance messages could never fire even once they existed.
131
+ */
132
+ export declare function calcMana(player: Player, statInd: readonly number[], armorWeight: number): boolean;
133
+ /**
134
+ * player_restore_mana (player.c:351) - DEAD IN 4.2.6.
135
+ *
136
+ * Nothing calls it anywhere in the reference tree. The mana-restoring effects
137
+ * all take the RESTORE_MANA path in effect-handler-general.c, which does its
138
+ * own arithmetic and prints its own message; this function's
139
+ * "You feel some of your energies returning." never reaches an upstream
140
+ * player. Returns whether csp actually moved, as the C does.
141
+ *
142
+ * @param msg upstream's unconditional msg(); optional here so a caller can
143
+ * route it, since core has no ambient message sink at this layer.
144
+ */
145
+ export declare function playerRestoreMana(player: Player, amt: number, msg?: (text: string) => void): boolean;
146
+ //# sourceMappingURL=spell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spell.d.ts","sourceRoot":"","sources":["../../src/player/spell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO1C,kCAAkC;AAClC,eAAO,MAAM,QAAQ;;;;CAA4D,CAAC;AAElF,+EAA+E;AAC/E,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAGzC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAGzC,CAAC;AA0BF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,IAAI,CAyFN;AAMD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKrD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,EAAE,CAS/D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,SAAS,GAAG,IAAI,CAKlB;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAC1B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,IAAI,CAUnB;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,MAAM,EAAE,CAIV;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GACjD,MAAM,CAIR;AAED,0BAA0B;AAC1B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,2BAA2B;AAC3B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E;AAED,4BAA4B;AAC5B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAG7E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAErE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAKpE;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,CAOR;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,cAAmB,GACvB,MAAM,CAgDR;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CAsBN;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CA2FN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAmCT;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,OAAO,CAOT"}
@@ -0,0 +1,519 @@
1
+ /**
2
+ * Player spells, ported from reference/src/player-spell.c (Angband 4.2.6)
3
+ * plus the spell-related pieces of player-calcs.c (calc_mana, calc_spells,
4
+ * average_spell_stat) and init.c's write_book_kind (spellbook object kinds
5
+ * are created FROM the class book definitions, exactly as upstream does at
6
+ * class-parse time - object.txt carries no book kinds).
7
+ *
8
+ * This module is pure player/object domain logic: learning, fail chances,
9
+ * mana, book lookups. The cast itself (running a spell's effect chain
10
+ * against the live GameState) lives in game/spell-cmd.ts, the same split as
11
+ * monster spells (mon/spell.ts vs game/mon-cast.ts).
12
+ */
13
+ import { TMD, PF, TVAL_ENTRIES } from "../generated/index.js";
14
+ import { newElemInfo, newModifiersRv, newOfFlags } from "../obj/types.js";
15
+ import { adj_mag_mana, adj_mag_study } from "./calcs.js";
16
+ /* ------------------------------------------------------------------ *
17
+ * Constants and tables.
18
+ * ------------------------------------------------------------------ */
19
+ /** PY_SPELL_ flags (player.h). */
20
+ export const PY_SPELL = { LEARNED: 0x01, WORKED: 0x02, FORGOTTEN: 0x04 };
21
+ /** Stat Table (INT/WIS) -- minimum spell failure rate (player-spell.c L49). */
22
+ export const adj_mag_fail = [
23
+ 99, 99, 99, 99, 99, 50, 30, 20, 15, 12, 11, 10, 9, 8, 7, 6, 6, 5, 5, 5, 4, 4,
24
+ 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0,
25
+ ];
26
+ /** Stat Table (INT/WIS) -- failure rate adjustment (player-spell.c L94). */
27
+ export const adj_mag_stat = [
28
+ -5, -4, -3, -3, -2, -1, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
29
+ 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57,
30
+ ];
31
+ const at = (table, i) => table[Math.max(0, Math.min(i, table.length - 1))] ?? 0;
32
+ function tvalByTextName(name) {
33
+ const idx = TVAL_ENTRIES.findIndex((t) => t.textName === name);
34
+ if (idx < 0)
35
+ throw new Error(`spell: unknown book tval "${name}"`);
36
+ return idx;
37
+ }
38
+ /**
39
+ * Create (or find) the object kind for every class book and stamp the
40
+ * numeric tval/sval back onto the bound ClassBook, exactly as upstream
41
+ * creates book kinds at class-parse time. Books shared between classes
42
+ * (e.g. the priest and paladin prayer books) resolve to one kind. Run once
43
+ * per bound registry, BEFORE building the allocation tables, so books
44
+ * generate in the dungeon with their book-properties commonness.
45
+ */
46
+ export function registerBookKinds(reg, classes) {
47
+ for (const cls of classes) {
48
+ for (const book of cls.magic.books) {
49
+ const tval = tvalByTextName(book.tval);
50
+ /* Check we haven't already made this book. */
51
+ const existing = reg.kinds.find((k) => k.tval === tval && k.name === book.name);
52
+ if (existing) {
53
+ book.tvalIdx = tval;
54
+ book.sval = existing.sval;
55
+ continue;
56
+ }
57
+ /* The next sval for this tval. */
58
+ let sval = 0;
59
+ for (const k of reg.kinds) {
60
+ if (k.tval === tval && k.sval > sval)
61
+ sval = k.sval;
62
+ }
63
+ sval += 1;
64
+ const base = reg.bases[tval];
65
+ if (!base)
66
+ throw new Error(`spell: no object base for tval ${tval}`);
67
+ const graphics = book.graphics;
68
+ const props = book.properties;
69
+ let allocMin = 0;
70
+ let allocMax = 0;
71
+ if (props?.minmax) {
72
+ const m = /^(\d+)\s+to\s+(\d+)$/.exec(props.minmax);
73
+ if (m) {
74
+ allocMin = parseInt(m[1], 10);
75
+ allocMax = parseInt(m[2], 10);
76
+ }
77
+ }
78
+ const kind = {
79
+ name: book.name,
80
+ text: "",
81
+ base,
82
+ kidx: reg.kinds.length,
83
+ tval,
84
+ sval,
85
+ pval: { base: 0, dice: 0, sides: 0, mBonus: 0 },
86
+ toH: { base: 0, dice: 0, sides: 0, mBonus: 0 },
87
+ toD: { base: 0, dice: 0, sides: 0, mBonus: 0 },
88
+ toA: { base: 0, dice: 0, sides: 0, mBonus: 0 },
89
+ ac: 0,
90
+ dd: 1,
91
+ ds: 1,
92
+ weight: 30,
93
+ cost: props?.cost ?? 0,
94
+ flags: newOfFlags(),
95
+ kindFlags: base.kindFlags.clone(),
96
+ modifiers: newModifiersRv(),
97
+ elInfo: newElemInfo(),
98
+ brands: null,
99
+ slays: null,
100
+ curses: null,
101
+ dAttr: graphics?.color ?? "R",
102
+ dChar: graphics?.glyph ?? "*",
103
+ allocProb: props?.common ?? 0,
104
+ allocMin,
105
+ allocMax,
106
+ level: allocMin,
107
+ activation: null,
108
+ effect: null,
109
+ power: 0,
110
+ effectMsg: "",
111
+ visMsg: "",
112
+ time: { base: 0, dice: 0, sides: 0, mBonus: 0 },
113
+ charge: { base: 0, dice: 0, sides: 0, mBonus: 0 },
114
+ genMultProb: 0,
115
+ stackSize: { base: 1, dice: 0, sides: 0, mBonus: 0 },
116
+ };
117
+ /* NOTE ON ORDER (init.c:208-232 write_book_kind): upstream creates book
118
+ * kinds while parsing class.txt - BEFORE the special-artifact dummies -
119
+ * and bumps ordinary_kind_max with each one, so upstream's k_info runs
120
+ * [object.txt kinds][books][INSTA_ART dummies] and "kidx >=
121
+ * ordinary_kind_max" means exactly "is a dummy". Here the dummies are
122
+ * appended during bindCore and the books after it, so books sit ABOVE
123
+ * ordinaryKindCount. Anything that wants "is this a special-artifact
124
+ * dummy?" must therefore test the INSTA_ART flag, not the index - which
125
+ * is what flavorInit does when it marks the ordinary kinds aware. */
126
+ reg.kinds.push(kind);
127
+ book.tvalIdx = tval;
128
+ book.sval = sval;
129
+ }
130
+ }
131
+ }
132
+ /* ------------------------------------------------------------------ *
133
+ * player-spell.c proper.
134
+ * ------------------------------------------------------------------ */
135
+ /** player_spells_init: size the spell flag/order arrays for the class. */
136
+ export function playerSpellsInit(player) {
137
+ const num = player.cls.magic.totalSpells;
138
+ if (!num)
139
+ return;
140
+ player.spellFlags = new Array(num).fill(0);
141
+ player.spellOrder = new Array(num).fill(99);
142
+ }
143
+ /** class_magic_realms: the distinct realms the class casts from. */
144
+ export function classMagicRealms(cls) {
145
+ const realms = [];
146
+ if (!cls.magic.totalSpells)
147
+ return realms;
148
+ for (const book of cls.magic.books) {
149
+ if (!realms.some((r) => r.name === book.realm.name)) {
150
+ realms.push(book.realm);
151
+ }
152
+ }
153
+ return realms;
154
+ }
155
+ /** player_object_to_book: the class book an object is, or null. */
156
+ export function playerObjectToBook(player, obj) {
157
+ for (const book of player.cls.magic.books) {
158
+ if (obj.tval === book.tvalIdx && obj.sval === book.sval)
159
+ return book;
160
+ }
161
+ return null;
162
+ }
163
+ /** spell_by_index: the class spell with the given class-wide sidx. */
164
+ export function spellByIndex(cls, index) {
165
+ const magic = cls.magic;
166
+ if (index < 0 || index >= magic.totalSpells)
167
+ return null;
168
+ let book = 0;
169
+ let count = 0;
170
+ while (count + (magic.books[book]?.numSpells ?? 0) - 1 < index) {
171
+ count += magic.books[book].numSpells;
172
+ book++;
173
+ }
174
+ return magic.books[book]?.spells[index - count] ?? null;
175
+ }
176
+ /** spell_collect_from_book: the sidx list of a book object's spells. */
177
+ export function spellCollectFromBook(player, obj) {
178
+ const book = playerObjectToBook(player, obj);
179
+ if (!book)
180
+ return [];
181
+ return book.spells.map((s) => s.sidx);
182
+ }
183
+ /** spell_book_count_spells over a tester. */
184
+ export function spellBookCountSpells(player, obj, tester) {
185
+ const book = playerObjectToBook(player, obj);
186
+ if (!book)
187
+ return 0;
188
+ return book.spells.filter((s) => tester(player, s.sidx)).length;
189
+ }
190
+ /** spell_okay_to_cast. */
191
+ /**
192
+ * spell_okay_list (player-spell.c L320) is upstream's "does ANY spell in this
193
+ * list pass `spell_test`" fold over spellOkayToCast / spellOkayToStudy. Its one
194
+ * caller is spell_menu_new (ui-spell.c:233), which refuses to build the menu
195
+ * when no listed spell qualifies; the web shell's equivalent is the
196
+ * `items.every((it) => it.disabled)` check in castSpell / studySpell.
197
+ */
198
+ export function spellOkayToCast(player, spell) {
199
+ return ((player.spellFlags[spell] ?? 0) & PY_SPELL.LEARNED) !== 0;
200
+ }
201
+ /** spell_okay_to_study. */
202
+ export function spellOkayToStudy(player, spellIndex) {
203
+ const spell = spellByIndex(player.cls, spellIndex);
204
+ return (spell !== null &&
205
+ spell.level <= player.lev &&
206
+ ((player.spellFlags[spellIndex] ?? 0) & PY_SPELL.LEARNED) === 0);
207
+ }
208
+ /** spell_okay_to_browse. */
209
+ export function spellOkayToBrowse(player, spellIndex) {
210
+ const spell = spellByIndex(player.cls, spellIndex);
211
+ return spell !== null && spell.level < 99;
212
+ }
213
+ /**
214
+ * obj_can_browse (obj-util.c L775) over obj_kind_can_browse (L762): a book of
215
+ * one of this class's own realms. The BROWSE book picker's item_tester
216
+ * (ui-spell.c L340).
217
+ */
218
+ export function objCanBrowse(player, obj) {
219
+ return playerObjectToBook(player, obj) !== null;
220
+ }
221
+ /**
222
+ * obj_can_cast_from (obj-util.c L780): browsable AND holding at least one
223
+ * spell that passes spell_okay_to_cast. This - not obj_can_browse - is
224
+ * do_cmd_cast's book item_tester (cmd-obj.c L1129), so a book of the right
225
+ * realm whose spells are all still unlearned is NEVER offered, and the
226
+ * remaining books keep the letters they would have in the C.
227
+ */
228
+ export function objCanCastFrom(player, obj) {
229
+ return (objCanBrowse(player, obj) &&
230
+ spellBookCountSpells(player, obj, spellOkayToCast) > 0);
231
+ }
232
+ /**
233
+ * obj_can_study (obj-util.c L786): browsable AND holding at least one spell
234
+ * that passes spell_okay_to_study. do_cmd_study_spell's / do_cmd_study_book's
235
+ * book item_tester (cmd-obj.c L1187 / L1215) and the filter
236
+ * player_book_has_unlearned_spells scans with (player-util.c L1330).
237
+ */
238
+ export function objCanStudy(player, obj) {
239
+ return (objCanBrowse(player, obj) &&
240
+ spellBookCountSpells(player, obj, spellOkayToStudy) > 0);
241
+ }
242
+ /** average_spell_stat: the mean casting-stat index over the class realms. */
243
+ export function averageSpellStat(cls, statInd) {
244
+ const realms = classMagicRealms(cls);
245
+ const count = realms.length;
246
+ if (!count)
247
+ return 0;
248
+ let sum = 0;
249
+ for (const r of realms)
250
+ sum += statInd[r.stat] ?? 0;
251
+ return Math.trunc((sum + count - 1) / count);
252
+ }
253
+ /**
254
+ * spell_chance: the percentage failure chance for a spell, from base fail,
255
+ * level and casting-stat adjustments, low mana, fear, stunning and amnesia.
256
+ */
257
+ export function spellChance(player, statInd, spellIndex, env = {}) {
258
+ if (!player.cls.magic.totalSpells)
259
+ return 100;
260
+ const spell = spellByIndex(player.cls, spellIndex);
261
+ if (!spell)
262
+ return 100;
263
+ const hasPf = env.hasPf ?? ((pf) => player.cls.pflags.has(pf));
264
+ const statIdx = statInd[spell.realm.stat] ?? 0;
265
+ /* Base rate, adjusted by effective level and the casting stat. */
266
+ let chance = spell.fail;
267
+ chance -= 3 * (player.lev - spell.level);
268
+ chance -= at(adj_mag_stat, statIdx);
269
+ /* Not enough mana to cast. */
270
+ if (spell.mana > player.csp)
271
+ chance += 5 * (spell.mana - player.csp);
272
+ /* Get the minimum failure rate for the casting stat level. */
273
+ let minfail = at(adj_mag_fail, statIdx);
274
+ /* Non zero-fail characters never get better than 5 percent. */
275
+ if (!hasPf(PF.ZERO_FAIL) && minfail < 5)
276
+ minfail = 5;
277
+ /* Necromancers are punished by being on lit squares. */
278
+ if (hasPf(PF.UNLIGHT) && (env.gridIsLit?.() ?? false))
279
+ chance += 25;
280
+ /* Fear makes spells harder (before minfail). Upstream reads player_of_has(
281
+ * OF_AFRAID); the fallback below covers only the timed synonym, so the game
282
+ * caller supplies env.afraid from the computed player_state flags. */
283
+ const afraid = env.afraid ?? (() => (player.timed[TMD.AFRAID] ?? 0) > 0);
284
+ if (afraid())
285
+ chance += 20;
286
+ /* Minimal and maximal failure rate. */
287
+ if (chance < minfail)
288
+ chance = minfail;
289
+ if (chance > 50)
290
+ chance = 50;
291
+ /* Stunning makes spells harder (after minfail). */
292
+ const stun = player.timed[TMD.STUN] ?? 0;
293
+ if (stun > 50)
294
+ chance += 25;
295
+ else if (stun)
296
+ chance += 15;
297
+ /* Amnesia makes spells very difficult. */
298
+ if ((player.timed[TMD.AMNESIA] ?? 0) > 0) {
299
+ chance = 50 + Math.trunc(chance / 2);
300
+ }
301
+ /* Always a 5 percent chance of working. */
302
+ if (chance > 95)
303
+ chance = 95;
304
+ return chance;
305
+ }
306
+ /** spell_learn: learn a spell and append it to the learn order. */
307
+ export function spellLearn(player, spellIndex, msg) {
308
+ const spell = spellByIndex(player.cls, spellIndex);
309
+ if (!spell)
310
+ return;
311
+ player.spellFlags[spellIndex] = (player.spellFlags[spellIndex] ?? 0) | PY_SPELL.LEARNED;
312
+ /* Find the next open entry in spell_order[]. */
313
+ for (let i = 0; i < player.cls.magic.totalSpells; i++) {
314
+ if (player.spellOrder[i] === 99) {
315
+ player.spellOrder[i] = spellIndex;
316
+ break;
317
+ }
318
+ }
319
+ msg?.(`You have learned the ${spell.realm.spellNoun} of ${spell.name}.`);
320
+ player.upkeep.newSpells--;
321
+ if (player.upkeep.newSpells > 0) {
322
+ msg?.(`You can learn ${player.upkeep.newSpells} more ${spell.realm.spellNoun}` +
323
+ `${player.upkeep.newSpells !== 1 ? "s" : ""}.`);
324
+ }
325
+ }
326
+ /* ------------------------------------------------------------------ *
327
+ * calc_spells / calc_mana (player-calcs.c).
328
+ * ------------------------------------------------------------------ */
329
+ /**
330
+ * calc_spells (player-calcs.c L1268): how many spells the player may learn,
331
+ * forgetting or remembering spells as the allowance and level change.
332
+ * Updates player.upkeep.newSpells.
333
+ */
334
+ export function calcSpells(player, statInd, msg) {
335
+ const magic = player.cls.magic;
336
+ const numTotal = magic.totalSpells;
337
+ if (!numTotal)
338
+ return;
339
+ /* Save the new_spells value (player-calcs.c:1288) for the change check. */
340
+ const oldSpells = player.upkeep.newSpells;
341
+ /* Determine the number of spells allowed. */
342
+ let levels = player.lev - magic.spellFirst + 1;
343
+ if (levels < 0)
344
+ levels = 0;
345
+ const percentSpells = at(adj_mag_study, averageSpellStat(player.cls, statInd));
346
+ const numAllowed = Math.trunc((percentSpells * levels + 50) / 100);
347
+ /* Count the number of spells we know. */
348
+ let numKnown = 0;
349
+ for (let j = 0; j < numTotal; j++) {
350
+ if ((player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED)
351
+ numKnown++;
352
+ }
353
+ player.upkeep.newSpells = numAllowed - numKnown;
354
+ /* Forget spells which are too hard. */
355
+ for (let i = numTotal - 1; i >= 0; i--) {
356
+ const j = player.spellOrder[i] ?? 99;
357
+ if (j >= 99)
358
+ continue;
359
+ const spell = spellByIndex(player.cls, j);
360
+ if (!spell || spell.level <= player.lev)
361
+ continue;
362
+ if ((player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED) {
363
+ player.spellFlags[j] =
364
+ ((player.spellFlags[j] ?? 0) | PY_SPELL.FORGOTTEN) & ~PY_SPELL.LEARNED;
365
+ msg?.(`You have forgotten the ${spell.realm.spellNoun} of ${spell.name}.`);
366
+ player.upkeep.newSpells++;
367
+ }
368
+ }
369
+ /* Forget spells if we know too many spells. */
370
+ for (let i = numTotal - 1; i >= 0; i--) {
371
+ if (player.upkeep.newSpells >= 0)
372
+ break;
373
+ const j = player.spellOrder[i] ?? 99;
374
+ if (j >= 99)
375
+ continue;
376
+ const spell = spellByIndex(player.cls, j);
377
+ if (spell && (player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED) {
378
+ player.spellFlags[j] =
379
+ ((player.spellFlags[j] ?? 0) | PY_SPELL.FORGOTTEN) & ~PY_SPELL.LEARNED;
380
+ msg?.(`You have forgotten the ${spell.realm.spellNoun} of ${spell.name}.`);
381
+ player.upkeep.newSpells++;
382
+ }
383
+ }
384
+ /* Check for spells to remember. */
385
+ for (let i = 0; i < numTotal; i++) {
386
+ if (player.upkeep.newSpells <= 0)
387
+ break;
388
+ const j = player.spellOrder[i] ?? 99;
389
+ if (j >= 99)
390
+ break;
391
+ const spell = spellByIndex(player.cls, j);
392
+ if (!spell || spell.level > player.lev)
393
+ continue;
394
+ if ((player.spellFlags[j] ?? 0) & PY_SPELL.FORGOTTEN) {
395
+ player.spellFlags[j] =
396
+ ((player.spellFlags[j] ?? 0) & ~PY_SPELL.FORGOTTEN) | PY_SPELL.LEARNED;
397
+ msg?.(`You have remembered the ${spell.realm.spellNoun} of ${spell.name}.`);
398
+ player.upkeep.newSpells--;
399
+ }
400
+ }
401
+ /* Cannot learn more spells than exist. */
402
+ let learnable = 0;
403
+ for (let j = 0; j < numTotal; j++) {
404
+ const spell = spellByIndex(player.cls, j);
405
+ if (!spell || spell.level > player.lev || spell.level === 0)
406
+ continue;
407
+ if ((player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED)
408
+ continue;
409
+ learnable++;
410
+ }
411
+ if (player.upkeep.newSpells > learnable) {
412
+ player.upkeep.newSpells = learnable;
413
+ }
414
+ /* Spell count changed: announce the new allowance (player-calcs.c:1433-1466).
415
+ The realm spell_noun list is pluralised only when >1 new spell. The
416
+ old!=new guard means load/boot recalcs (newSpells restored from save) stay
417
+ silent - only a real change (level-up, stat shift) speaks. */
418
+ if (oldSpells !== player.upkeep.newSpells && player.upkeep.newSpells > 0) {
419
+ const realms = classMagicRealms(player.cls);
420
+ const plural = player.upkeep.newSpells > 1;
421
+ const suffix = plural ? "s" : "";
422
+ let buf = realms.length > 0 ? `${realms[0].spellNoun}${suffix}` : "spells";
423
+ for (let i = 1; i < realms.length; i++) {
424
+ buf += i < realms.length - 1 ? ", " : " or ";
425
+ buf += `${realms[i].spellNoun}${suffix}`;
426
+ }
427
+ msg?.(`You can learn ${player.upkeep.newSpells} more ${buf}.`);
428
+ }
429
+ }
430
+ /**
431
+ * state->cumber_armor on its own (player-calcs.c:1524-1529): is the worn armour
432
+ * heavy enough over the class allowance to cost this player mana? Split out of
433
+ * calcMana so a caller that must NOT disturb msp/csp - loading a save, where
434
+ * maximum mana is restored rather than recomputed - can still derive the flag
435
+ * the encumbrance messages diff against.
436
+ */
437
+ export function cumberArmorFrom(player, armorWeight) {
438
+ if (!player.cls.magic.totalSpells)
439
+ return false;
440
+ return Math.trunc((armorWeight - player.cls.magic.spellWeight) / 10) > 0;
441
+ }
442
+ /**
443
+ * calc_mana (player-calcs.c L1480): maximum mana from effective levels and
444
+ * the casting stat, penalized by heavy armor over the class allowance.
445
+ * `armorWeight` is the summed weight of worn body armor (the caller sums
446
+ * the non-weapon/bow/ring/amulet/light slots). Updates msp and clamps csp.
447
+ *
448
+ * Returns state->cumber_armor (L1503, L1528) - true when the worn armour is
449
+ * heavy enough to cost mana. Upstream stores it on player_state; the port's
450
+ * PlayerState carries the same field but calcBonuses cannot fill it (the mana
451
+ * calc runs in the session layer afterwards), so it is returned here for the
452
+ * caller to record. It had been left permanently false, which is why the
453
+ * armour-encumbrance messages could never fire even once they existed.
454
+ */
455
+ export function calcMana(player, statInd, armorWeight) {
456
+ if (!player.cls.magic.totalSpells) {
457
+ player.msp = 0;
458
+ player.csp = 0;
459
+ player.cspFrac = 0;
460
+ /* A non-caster leaves cumber_armor at its L1503 reset (L1483-1487 returns
461
+ * before the armour weigh-in). */
462
+ return false;
463
+ }
464
+ /* Extract "effective" player level. */
465
+ const levels = player.lev - player.cls.magic.spellFirst + 1;
466
+ let msp = 0;
467
+ if (levels > 0) {
468
+ msp = 1;
469
+ msp += Math.trunc((at(adj_mag_mana, averageSpellStat(player.cls, statInd)) * levels) / 100);
470
+ }
471
+ /* Heavy armor penalizes mana (L1524-1532). */
472
+ const over = Math.trunc((armorWeight - player.cls.magic.spellWeight) / 10);
473
+ const cumberArmor = cumberArmorFrom(player, armorWeight);
474
+ if (cumberArmor)
475
+ msp -= over;
476
+ if (msp < 0)
477
+ msp = 0;
478
+ if (player.msp !== msp) {
479
+ player.msp = msp;
480
+ if (player.csp >= msp) {
481
+ player.csp = msp;
482
+ player.cspFrac = 0;
483
+ }
484
+ }
485
+ return cumberArmor;
486
+ }
487
+ /* ------------------------------------------------------------------ *
488
+ * DEAD CODE IN ANGBAND 4.2.6, ported and cordoned.
489
+ *
490
+ * Everything below this line has NO CALLER in the reference tree. It is
491
+ * ported because the port is a translation of 4.2.6, not of the reachable
492
+ * subset of 4.2.6: a mod, a future upstream release, or a reader comparing the
493
+ * two trees should find the function where the C has it, behaving as the C
494
+ * says. Nothing in core may call these - if a caller ever appears upstream,
495
+ * the call-site census (packages/cli/src/call-census.ts) will report the port
496
+ * symbol as unused and the pairing can be made then.
497
+ * ------------------------------------------------------------------ */
498
+ /**
499
+ * player_restore_mana (player.c:351) - DEAD IN 4.2.6.
500
+ *
501
+ * Nothing calls it anywhere in the reference tree. The mana-restoring effects
502
+ * all take the RESTORE_MANA path in effect-handler-general.c, which does its
503
+ * own arithmetic and prints its own message; this function's
504
+ * "You feel some of your energies returning." never reaches an upstream
505
+ * player. Returns whether csp actually moved, as the C does.
506
+ *
507
+ * @param msg upstream's unconditional msg(); optional here so a caller can
508
+ * route it, since core has no ambient message sink at this layer.
509
+ */
510
+ export function playerRestoreMana(player, amt, msg) {
511
+ const oldCsp = player.csp;
512
+ player.csp += amt;
513
+ if (player.csp > player.msp)
514
+ player.csp = player.msp;
515
+ /* PR_MANA redraw is the front end's business. */
516
+ msg?.("You feel some of your energies returning.");
517
+ return player.csp !== oldCsp;
518
+ }
519
+ //# sourceMappingURL=spell.js.map