@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,766 @@
1
+ /**
2
+ * The projection-casting spine, the game-layer glue that makes the projection
3
+ * stack usable. It wires the two projection drivers - game/project-monster.ts
4
+ * (projectMonster) and game/project-player.ts (projectPlayer) - to the generic
5
+ * beam/bolt/ball/arc driver project() (world/project.ts) using the live
6
+ * GameState.
7
+ *
8
+ * castProjection is the core: it assembles project()'s ProjectHooks from the
9
+ * two drivers plus GameState (and the injected hooks for the genuinely
10
+ * downstream consequences those drivers defer - kills/drops/exp, polymorph,
11
+ * teleport, inventory damage, stat/exp drain, messages) and runs one
12
+ * projection. This is the single entry point the attack effect handlers (#18),
13
+ * monster spells (#19) and player spellcasting (#22) all dispatch a projection
14
+ * through. The flag-shape helpers (castBolt / castBeam / castBall) preset
15
+ * project()'s flags and radius exactly as the matching effect_handler_* in
16
+ * effect-handler-attack.c and delegate to it: castBolt / castBeam / castBall /
17
+ * castArc / castBreath / castShortBeam / castLine / castAlter / castSpot /
18
+ * castSphere / castStrike / castStar / castStarBall / castTouch / castSwarm /
19
+ * castProjectLos.
20
+ *
21
+ * The target grid is resolved by the caller. resolveAimedTarget ports the
22
+ * portable branches of get_target (effect-handler-attack.c L38): the player
23
+ * and no-source cases fully, and the monster case to the player's grid. The
24
+ * monster confused-direction / target-monster / decoy branches need the
25
+ * monster-spell targeting and decoys (both #19+), so #19 resolves those and
26
+ * passes the grid in.
27
+ *
28
+ * The player-projection actor (PlayerProjActor: resist levels, damage
29
+ * reduction, minus_ac) is supplied by the caller, exactly as PlayerActor's
30
+ * combat / defense views are, because calc_bonuses (which derives them) is
31
+ * deferred. basicPlayerActor builds the no-resist, no-reduction view over the
32
+ * live Player for callers and tests until calc_bonuses lands; take_hit's
33
+ * mutations (chp, is_dead) write back through it to the live player/state.
34
+ */
35
+
36
+ import { PF, TMD } from "../generated/index.js";
37
+ import { DIR_TARGET } from "../effects/interpreter.js";
38
+ import { DDGRID, DDGRID_DDD, loc, locEq, locSum } from "../loc.js";
39
+ import type { Loc } from "../loc.js";
40
+ import { monsterIsVisible } from "../mon/predicate.js";
41
+ import { PROJECT, project } from "../world/project.js";
42
+ import type {
43
+ BoltStep,
44
+ Projection,
45
+ ProjectHooks,
46
+ ProjectParams,
47
+ } from "../world/project.js";
48
+ import { los, squareIsView } from "../world/view.js";
49
+ import type { ProjectionInfo } from "../world/projection.js";
50
+ import type { DamageReduction } from "../player/take-hit.js";
51
+ import { monsterMax } from "./context.js";
52
+ import type { GameState } from "./context.js";
53
+ import { destroyDecoy, monsterGetTarget } from "./effect-mon-origin.js";
54
+ import { projectMonster } from "./project-monster.js";
55
+ import type { ProjectMonsterHooks } from "./project-monster.js";
56
+ import { updateSmartLearn } from "../mon/spell.js";
57
+ import { buildSmartLearnEnv } from "./mon-cast.js";
58
+ import { projectPlayer } from "./project-player.js";
59
+ import { projectObject } from "./project-obj.js";
60
+ import { projectFeature } from "./project-feat.js";
61
+ import { squareIsBelievedWall } from "./known.js";
62
+ import type { PlayerProjActor, ProjectPlayerHooks } from "./project-player.js";
63
+
64
+ /** option.c: op_ptr->hitpoint_warn default (0..9). Canonical in player/options. */
65
+ import { DEFAULT_HITPOINT_WARN } from "../player/options.js";
66
+ export { DEFAULT_HITPOINT_WARN };
67
+
68
+ /**
69
+ * The projection source, unified across the two drivers. Built from a struct
70
+ * source with playerCastSource / monsterCastSource, or by hand.
71
+ */
72
+ export interface CastSource {
73
+ /** origin.what == SRC_PLAYER. */
74
+ isPlayer: boolean;
75
+ /** origin.what == SRC_MONSTER. */
76
+ isMonster: boolean;
77
+ /** origin.which.monster (midx); 0 when the source is not a monster. */
78
+ monster: number;
79
+ /** origin_get_loc(origin): the projection's start grid. */
80
+ grid: Loc;
81
+ /** player_has(PF_CHARM): boosts a player projection's effects vs animals. */
82
+ charm?: boolean;
83
+ /** monster_is_visible(source): false hides an unseen monster source. */
84
+ monsterVisible?: boolean;
85
+ /** kb_str death cause for take_hit ("an orc", "a trap", "yourself"). */
86
+ killer?: string;
87
+ /** Monster spell power, forwarded to the player side-effect handler. */
88
+ power?: number;
89
+ /** origin.what == SRC_TRAP (FORCE's on-the-trap centre jitter). */
90
+ isTrap?: boolean;
91
+ }
92
+
93
+ /** source_player(): a player-origin cast from the live player grid. */
94
+ export function playerCastSource(
95
+ state: GameState,
96
+ opts: { charm?: boolean; killer?: string } = {},
97
+ ): CastSource {
98
+ return {
99
+ isPlayer: true,
100
+ isMonster: false,
101
+ monster: 0,
102
+ grid: state.actor.grid,
103
+ /* project-mon.c L1346: player_has(PF_CHARM), not a caller default. */
104
+ charm:
105
+ opts.charm ??
106
+ (state.playerState?.pflags.has(PF.CHARM) ??
107
+ (state.actor.player.race.pflags.has(PF.CHARM) ||
108
+ state.actor.player.cls.pflags.has(PF.CHARM))),
109
+ killer: opts.killer ?? "yourself",
110
+ };
111
+ }
112
+
113
+ /** source_monster(midx): a monster-origin cast from that monster's grid. */
114
+ export function monsterCastSource(
115
+ state: GameState,
116
+ midx: number,
117
+ opts: { killer?: string; power?: number } = {},
118
+ ): CastSource {
119
+ const mon = state.monsters[midx] ?? null;
120
+ return {
121
+ isPlayer: false,
122
+ isMonster: true,
123
+ monster: midx,
124
+ grid: mon ? mon.grid : loc(-1, -1),
125
+ monsterVisible: mon ? monsterIsVisible(mon) : false,
126
+ killer: opts.killer ?? "a monster",
127
+ power: opts.power ?? 0,
128
+ };
129
+ }
130
+
131
+ /** The consequences and UI seams a cast defers to its caller. */
132
+ export interface CastHooks {
133
+ /** project_m's deferred consequences (kills, poly, teleport, messages). */
134
+ monster?: ProjectMonsterHooks;
135
+ /** project_p's deferred consequences (side effects, take_hit, messages). */
136
+ player?: ProjectPlayerHooks;
137
+ /** UI: one traveled bolt/beam step (suppressed when the player is blind). */
138
+ onBolt?: (step: BoltStep, typ: number, beam: boolean) => void;
139
+ /** UI: the whole blast, once, before per-grid effects. */
140
+ onBlast?: (proj: Projection, typ: number) => void;
141
+ /** Recall / health-track the single monster a player projection hit. */
142
+ onTrackMonster?: (grid: Loc) => void;
143
+ }
144
+
145
+ /** Everything a cast needs beyond the source and the shot parameters. */
146
+ export interface CastContext {
147
+ /** The bound projection table (world/projection.ts bindProjections). */
148
+ projections: readonly ProjectionInfo[];
149
+ /** z_info->max_range. */
150
+ maxRange: number;
151
+ /** The player-projection actor (resist / reduction view; see module doc). */
152
+ playerActor: PlayerProjActor;
153
+ hooks?: CastHooks;
154
+ /**
155
+ * World seams for project_o / project_f (floor destruction, stone-to-mud,
156
+ * trap and door effects). When absent, PROJECT.ITEM / PROJECT.GRID
157
+ * projections skip objects and terrain (the pre-#20/#21 behaviour).
158
+ */
159
+ worldEnv?: import("./project-feat.js").ProjectFeatEnv;
160
+ }
161
+
162
+ /**
163
+ * basicPlayerActor: the no-resist, no-reduction player-projection view over the
164
+ * live Player, for callers and tests until calc_bonuses (el_info, dam_red,
165
+ * perc_dam_red, minus_ac) lands. chp and is_dead are live so take_hit's
166
+ * mutations write back to the player and the game state.
167
+ */
168
+ export function basicPlayerActor(
169
+ state: GameState,
170
+ opts: {
171
+ /** state.el_info[type].res_level from the live derived state. */
172
+ resistLevel?: (type: number) => number;
173
+ /** state.dam_red / perc_dam_red from the live derived state. */
174
+ reduction?: () => DamageReduction;
175
+ /** minus_ac(p): damage a worn armour piece to acid, returning the halving
176
+ * flag (obj-gear.c L376-438). Default no armour effect. */
177
+ minusAc?: () => boolean;
178
+ } = {},
179
+ ): PlayerProjActor {
180
+ const p = state.actor.player;
181
+ return {
182
+ get chp(): number {
183
+ return p.chp;
184
+ },
185
+ set chp(v: number) {
186
+ p.chp = v;
187
+ },
188
+ get mhp(): number {
189
+ return p.mhp;
190
+ },
191
+ get lev(): number {
192
+ return p.lev;
193
+ },
194
+ get isDead(): boolean {
195
+ return state.isDead;
196
+ },
197
+ set isDead(v: boolean) {
198
+ state.isDead = v;
199
+ },
200
+ timed: p.timed,
201
+ hitpointWarn: DEFAULT_HITPOINT_WARN,
202
+ resistLevel: opts.resistLevel ?? ((): number => 0),
203
+ get reduction(): DamageReduction {
204
+ return opts.reduction ? opts.reduction() : { damRed: 0, percDamRed: 0 };
205
+ },
206
+ minusAc: opts.minusAc ?? ((): boolean => false),
207
+ };
208
+ }
209
+
210
+ /**
211
+ * get_target (effect-handler-attack.c L38) for the aimed bolt/beam family.
212
+ * Returns the target grid and whether PROJECT_PLAY should be set (get_target
213
+ * sets it for monster and no-source projections so they can hit the player).
214
+ *
215
+ * - SRC_PLAYER: DIR_TARGET with an acquired target aims at it; otherwise the
216
+ * adjacent grid in `dir`. The target system (target_okay / target_get) is
217
+ * deferred (#24), so the acquired grid is passed in as `aimed`.
218
+ * - SRC_MONSTER: monsterGetTarget resolves confusion's random direction (one
219
+ * randint1(100) draw always made, matching the upstream RNG stream), then a
220
+ * targeted monster, the decoy, or the player.
221
+ * - default (SRC_NONE / trap / object): aims at the player, sets PROJECT_PLAY.
222
+ */
223
+ export function resolveAimedTarget(
224
+ state: GameState,
225
+ source: CastSource,
226
+ dir: number,
227
+ aimed?: Loc,
228
+ ): { grid: Loc; play: boolean } {
229
+ if (source.isPlayer) {
230
+ if (dir === DIR_TARGET && aimed) return { grid: aimed, play: false };
231
+ return { grid: locSum(state.actor.grid, DDGRID[dir] ?? loc(0, 0)), play: false };
232
+ }
233
+ if (source.isMonster) {
234
+ return { grid: monsterGetTarget(state, state.rng, source.monster), play: true };
235
+ }
236
+ /* No-source projections target the player and may hit them. */
237
+ return { grid: state.actor.grid, play: true };
238
+ }
239
+
240
+ /**
241
+ * castProjection: assemble project()'s hooks from the two drivers plus the live
242
+ * GameState and fire one projection at `target`. `flg` is the fully-resolved
243
+ * PROJECT_* flag set; `rad` is 0 for a bolt/beam or the ball/arc radius. Returns
244
+ * project()'s notice value (the player observed some effect). This is the seam
245
+ * every attack effect, monster spell and player spell dispatches through.
246
+ */
247
+ export function castProjection(
248
+ state: GameState,
249
+ cctx: CastContext,
250
+ source: CastSource,
251
+ target: Loc,
252
+ dam: number,
253
+ typ: number,
254
+ flg: number,
255
+ rad: number,
256
+ degreesOfArc = 0,
257
+ diameterOfSource = 0,
258
+ ): boolean {
259
+ const hooks = cctx.hooks ?? {};
260
+
261
+ const monCtx = {
262
+ state,
263
+ projections: cctx.projections,
264
+ origin: {
265
+ isPlayer: source.isPlayer,
266
+ monster: source.monster,
267
+ grid: source.grid,
268
+ charm: source.charm ?? false,
269
+ },
270
+ hooks: hooks.monster ?? {},
271
+ };
272
+
273
+ const plCtx = {
274
+ rng: state.rng,
275
+ actor: cctx.playerActor,
276
+ playerGrid: state.actor.grid,
277
+ projections: cctx.projections,
278
+ origin: {
279
+ isPlayer: source.isPlayer,
280
+ isMonster: source.isMonster,
281
+ ...(source.monsterVisible !== undefined
282
+ ? { monsterVisible: source.monsterVisible }
283
+ : {}),
284
+ killer: source.killer ?? "a bug",
285
+ /* origin_get_loc + SRC_TRAP, for the FORCE thrust centre. */
286
+ grid: source.grid,
287
+ ...(source.isTrap !== undefined ? { isTrap: source.isTrap } : {}),
288
+ },
289
+ power: source.power ?? 0,
290
+ /* update_smart_learn (mon-util.c L788): a monster-source projection that
291
+ * hits the player lets the monster learn the player's resist/flag for that
292
+ * GF type. Merge the per-cast smartLearn hook onto the player hooks for
293
+ * monster sources only. With birth_ai_learn off, updateSmartLearn returns
294
+ * before drawing RNG (equipLearn* aside), so default play is unchanged. */
295
+ hooks: {
296
+ ...(hooks.player ?? {}),
297
+ ...(source.isMonster && source.monster > 0
298
+ ? {
299
+ smartLearn: (typ: number): void => {
300
+ const mon = state.monsters[source.monster];
301
+ if (mon) {
302
+ updateSmartLearn(state.rng, mon, buildSmartLearnEnv(state), 0, 0, typ);
303
+ }
304
+ },
305
+ }
306
+ : {}),
307
+ },
308
+ };
309
+
310
+ const projectHooks: ProjectHooks = {
311
+ onMonster: (dist, g, d, t, f) => projectMonster(monCtx, dist, g, d, t, f),
312
+ onPlayer: (dist, g, d, t, self) => {
313
+ /* project_p (project-player.c L822): a damaging projection that reaches
314
+ * the player's decoy grid destroys it, whether or not the player is
315
+ * there. */
316
+ if (d && state.decoy && locEq(g, state.decoy)) {
317
+ destroyDecoy(state, cctx.worldEnv?.trapDeps, (text) =>
318
+ cctx.worldEnv?.msg?.(text),
319
+ );
320
+ }
321
+ return projectPlayer(plCtx, dist, g, d, t, self);
322
+ },
323
+ playerIsDead: () => cctx.playerActor.isDead,
324
+ ...(hooks.onTrackMonster ? { onTrackMonster: hooks.onTrackMonster } : {}),
325
+ ...(hooks.onBolt ? { onBolt: hooks.onBolt } : {}),
326
+ ...(hooks.onBlast ? { onBlast: hooks.onBlast } : {}),
327
+ /* project_o / project_f over the live floor piles and terrain. */
328
+ ...(cctx.worldEnv
329
+ ? {
330
+ onObject: (dist: number, g: Loc, d: number, t: number): boolean =>
331
+ projectObject(state, dist, g, d, t, cctx.worldEnv),
332
+ onFeature: (dist: number, g: Loc, d: number, t: number): boolean =>
333
+ projectFeature(state, dist, g, d, t, cctx.worldEnv),
334
+ }
335
+ : {}),
336
+ };
337
+
338
+ const params: ProjectParams = {
339
+ origin: source.grid,
340
+ finish: target,
341
+ rad,
342
+ typ,
343
+ flg,
344
+ dam,
345
+ maxRange: cctx.maxRange,
346
+ sourceIsPlayer: source.isPlayer,
347
+ blind: cctx.playerActor.timed[TMD.BLIND]! > 0,
348
+ degreesOfArc,
349
+ diameterOfSource,
350
+ believedWall: (grid) => squareIsBelievedWall(state, grid),
351
+ };
352
+
353
+ return project(state.chunk, params, projectHooks);
354
+ }
355
+
356
+ /**
357
+ * effect_handler_BOLT: a bolt that stops at the first monster. project_aimed
358
+ * adds PROJECT_THRU; get_target adds PROJECT_PLAY for a non-player source.
359
+ */
360
+ export function castBolt(
361
+ state: GameState,
362
+ cctx: CastContext,
363
+ source: CastSource,
364
+ target: Loc,
365
+ dam: number,
366
+ typ: number,
367
+ extraFlg = 0,
368
+ ): boolean {
369
+ let flg = PROJECT.STOP | PROJECT.KILL | PROJECT.THRU;
370
+ if (!source.isPlayer) flg |= PROJECT.PLAY;
371
+ /* BOLT_AWARE adds PROJECT_AWARE when the caster is aware of the effect
372
+ (effect-handler-attack.c:402), so the hit is "obvious" and does not try to
373
+ ID its source. */
374
+ flg |= extraFlg;
375
+ return castProjection(state, cctx, source, target, dam, typ, flg, 0);
376
+ }
377
+
378
+ /**
379
+ * effect_handler_BEAM: a beam that passes through monsters. As castBolt but
380
+ * PROJECT_BEAM instead of PROJECT_STOP.
381
+ */
382
+ export function castBeam(
383
+ state: GameState,
384
+ cctx: CastContext,
385
+ source: CastSource,
386
+ target: Loc,
387
+ dam: number,
388
+ typ: number,
389
+ ): boolean {
390
+ let flg = PROJECT.BEAM | PROJECT.KILL | PROJECT.THRU;
391
+ if (!source.isPlayer) flg |= PROJECT.PLAY;
392
+ return castProjection(state, cctx, source, target, dam, typ, flg, 0);
393
+ }
394
+
395
+ /**
396
+ * effect_handler_BALL: an exploding ball. A monster source adds PROJECT_PLAY
397
+ * and drops STOP/THRU so it detonates on the player; a player source drops
398
+ * STOP/THRU only when a specific target was acquired (aimedAtTarget), so a
399
+ * bare-direction ball still stops at the first obstacle. `rad` defaults to 2
400
+ * upstream; the caller applies any powerful-monster or player-level radius
401
+ * bonus before calling.
402
+ */
403
+ export function castBall(
404
+ state: GameState,
405
+ cctx: CastContext,
406
+ source: CastSource,
407
+ target: Loc,
408
+ dam: number,
409
+ typ: number,
410
+ rad = 2,
411
+ opts: { aimedAtTarget?: boolean } = {},
412
+ ): boolean {
413
+ let flg =
414
+ PROJECT.THRU | PROJECT.STOP | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
415
+ if (source.isMonster) {
416
+ flg |= PROJECT.PLAY;
417
+ flg &= ~(PROJECT.STOP | PROJECT.THRU);
418
+ } else if (source.isPlayer && opts.aimedAtTarget) {
419
+ flg &= ~(PROJECT.STOP | PROJECT.THRU);
420
+ }
421
+ return castProjection(state, cctx, source, target, dam, typ, flg, rad);
422
+ }
423
+
424
+ /**
425
+ * effect_handler_LINE (L173): a beam that also affects grids (e.g. light).
426
+ * As castBeam but with PROJECT_GRID.
427
+ */
428
+ export function castLine(
429
+ state: GameState,
430
+ cctx: CastContext,
431
+ source: CastSource,
432
+ target: Loc,
433
+ dam: number,
434
+ typ: number,
435
+ ): boolean {
436
+ let flg = PROJECT.BEAM | PROJECT.GRID | PROJECT.KILL | PROJECT.THRU;
437
+ if (!source.isPlayer) flg |= PROJECT.PLAY;
438
+ return castProjection(state, cctx, source, target, dam, typ, flg, 0);
439
+ }
440
+
441
+ /**
442
+ * effect_handler_ALTER (L186): affect grids and objects, not monsters, with no
443
+ * damage (door/wall alteration). PROJECT_BEAM | GRID | ITEM (+THRU from
444
+ * project_aimed).
445
+ */
446
+ export function castAlter(
447
+ state: GameState,
448
+ cctx: CastContext,
449
+ source: CastSource,
450
+ target: Loc,
451
+ typ: number,
452
+ ): boolean {
453
+ let flg = PROJECT.BEAM | PROJECT.GRID | PROJECT.ITEM | PROJECT.THRU;
454
+ if (!source.isPlayer) flg |= PROJECT.PLAY;
455
+ return castProjection(state, cctx, source, target, 0, typ, flg, 0);
456
+ }
457
+
458
+ /** diameter_of_source for an arc/breath of the given width (arc.c geometry). */
459
+ function arcDiameter(baseDiameter: number, degreesOfArc: number): number {
460
+ let d = baseDiameter;
461
+ if (degreesOfArc < 60) d = Math.trunc((d * 60) / degreesOfArc);
462
+ return d > 25 ? 25 : d;
463
+ }
464
+
465
+ /**
466
+ * effect_handler_ARC (L789): a cone from the caster. PROJECT_ARC | GRID | ITEM |
467
+ * KILL (+PLAY for a monster source). A radius of 0 means no fixed limit
468
+ * (z_info->max_range). The arc's energy source diameter starts at 4 and widens
469
+ * as the cone narrows, so a tight arc dissipates more slowly. degrees_of_arc is
470
+ * clamped to a minimum of 20.
471
+ */
472
+ export function castArc(
473
+ state: GameState,
474
+ cctx: CastContext,
475
+ source: CastSource,
476
+ target: Loc,
477
+ dam: number,
478
+ typ: number,
479
+ rad: number,
480
+ degreesOfArc: number,
481
+ ): boolean {
482
+ let flg = PROJECT.ARC | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
483
+ if (source.isMonster) flg |= PROJECT.PLAY;
484
+ const degrees = Math.max(degreesOfArc, 20);
485
+ const r = rad === 0 ? cctx.maxRange : rad;
486
+ const diameter = arcDiameter(4, degrees);
487
+ return castProjection(state, cctx, source, target, dam, typ, flg, r, degrees, diameter);
488
+ }
489
+
490
+ /**
491
+ * effect_handler_BREATH (L681): breathe an element in a cone. Like castArc, but
492
+ * a powerful monster breathes at full strength further out (source diameter
493
+ * 4 -> 6 before the arc-width widening). The damage (breath_dam) and the
494
+ * "You breathe X" message are the caller's (#19); a radius of 0 means
495
+ * z_info->max_range.
496
+ */
497
+ export function castBreath(
498
+ state: GameState,
499
+ cctx: CastContext,
500
+ source: CastSource,
501
+ target: Loc,
502
+ dam: number,
503
+ typ: number,
504
+ degreesOfArc: number,
505
+ opts: { radius?: number; powerful?: boolean } = {},
506
+ ): boolean {
507
+ let flg = PROJECT.ARC | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
508
+ if (source.isMonster) flg |= PROJECT.PLAY;
509
+ const degrees = Math.max(degreesOfArc, 20);
510
+ const rad = opts.radius && opts.radius > 0 ? opts.radius : cctx.maxRange;
511
+ /* Powerful monsters breathe at full strength further out. */
512
+ const baseDiameter = opts.powerful ? Math.trunc((4 * 3) / 2) : 4;
513
+ const diameter = arcDiameter(baseDiameter, degrees);
514
+ return castProjection(state, cctx, source, target, dam, typ, flg, rad, degrees, diameter);
515
+ }
516
+
517
+ /**
518
+ * effect_handler_SHORT_BEAM (L852): a fixed-length beam. PROJECT_ARC with
519
+ * degrees 0 and a positive radius is normalised to a beam by project(); the
520
+ * source diameter equals the radius so it is full strength for its whole
521
+ * length. The caller applies any player-level radius bonus (rad += lev / other).
522
+ */
523
+ export function castShortBeam(
524
+ state: GameState,
525
+ cctx: CastContext,
526
+ source: CastSource,
527
+ target: Loc,
528
+ dam: number,
529
+ typ: number,
530
+ rad: number,
531
+ ): boolean {
532
+ let flg = PROJECT.ARC | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
533
+ if (source.isMonster) flg |= PROJECT.PLAY;
534
+ const diameter = rad > 25 ? 25 : rad;
535
+ return castProjection(state, cctx, source, target, dam, typ, flg, rad, 0, diameter);
536
+ }
537
+
538
+ /**
539
+ * effect_handler_LASH (L899): a whip crack or spit - a finite-length beam at
540
+ * full strength for its whole length (source diameter = radius), affecting
541
+ * grids, objects, monsters AND the player (monsters lash the player).
542
+ * The caller computes the blow-derived damage and lash element.
543
+ */
544
+ export function castLash(
545
+ state: GameState,
546
+ cctx: CastContext,
547
+ source: CastSource,
548
+ target: Loc,
549
+ dam: number,
550
+ typ: number,
551
+ rad: number,
552
+ ): boolean {
553
+ const flg =
554
+ PROJECT.ARC |
555
+ PROJECT.GRID |
556
+ PROJECT.ITEM |
557
+ PROJECT.KILL |
558
+ PROJECT.PLAY;
559
+ const diameter = rad > 25 ? 25 : rad;
560
+ return castProjection(state, cctx, source, target, dam, typ, flg, rad, 0, diameter);
561
+ }
562
+
563
+ /**
564
+ * effect_handler_SPOT (L545): explode on the player's own grid, hitting the
565
+ * player (PROJECT_PLAY | SELF), grids, objects and monsters. The source
566
+ * diameter equals the radius. The caller applies any player-level radius bonus.
567
+ */
568
+ export function castSpot(
569
+ state: GameState,
570
+ cctx: CastContext,
571
+ source: CastSource,
572
+ dam: number,
573
+ typ: number,
574
+ rad: number,
575
+ ): boolean {
576
+ const flg =
577
+ PROJECT.STOP |
578
+ PROJECT.PLAY |
579
+ PROJECT.GRID |
580
+ PROJECT.ITEM |
581
+ PROJECT.KILL |
582
+ PROJECT.SELF;
583
+ return castProjection(state, cctx, source, state.actor.grid, dam, typ, flg, rad, 0, rad);
584
+ }
585
+
586
+ /**
587
+ * effect_handler_SPHERE (L571): a ball from the player's grid with an explicit
588
+ * source diameter (full strength out to that diameter). Affects grids, objects
589
+ * and monsters, but not the player.
590
+ */
591
+ export function castSphere(
592
+ state: GameState,
593
+ cctx: CastContext,
594
+ source: CastSource,
595
+ dam: number,
596
+ typ: number,
597
+ rad: number,
598
+ diameterOfSource: number,
599
+ ): boolean {
600
+ const flg = PROJECT.STOP | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
601
+ return castProjection(
602
+ state,
603
+ cctx,
604
+ source,
605
+ state.actor.grid,
606
+ dam,
607
+ typ,
608
+ flg,
609
+ rad,
610
+ 0,
611
+ diameterOfSource,
612
+ );
613
+ }
614
+
615
+ /**
616
+ * effect_handler_STRIKE (L1001): drop a ball on the target from above
617
+ * (PROJECT_JUMP, no travel path). Affects grids, objects and monsters.
618
+ */
619
+ export function castStrike(
620
+ state: GameState,
621
+ cctx: CastContext,
622
+ source: CastSource,
623
+ target: Loc,
624
+ dam: number,
625
+ typ: number,
626
+ rad: number,
627
+ ): boolean {
628
+ const flg = PROJECT.JUMP | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
629
+ return castProjection(state, cctx, source, target, dam, typ, flg, rad);
630
+ }
631
+
632
+ /**
633
+ * effect_handler_STAR (L1032): a beam in each of the eight compass directions
634
+ * from the player. Affects grids and monsters. Returns whether any beam was
635
+ * noticed.
636
+ */
637
+ export function castStar(
638
+ state: GameState,
639
+ cctx: CastContext,
640
+ source: CastSource,
641
+ dam: number,
642
+ typ: number,
643
+ ): boolean {
644
+ const flg = PROJECT.THRU | PROJECT.BEAM | PROJECT.GRID | PROJECT.KILL;
645
+ /* Describe unless blind (effect-handler-attack.c:1041). */
646
+ if (!(cctx.playerActor.timed[TMD.BLIND]! > 0)) {
647
+ cctx.worldEnv?.msg?.("Light shoots in all directions!");
648
+ }
649
+ let notice = false;
650
+ for (const off of DDGRID_DDD) {
651
+ const target = locSum(state.actor.grid, off);
652
+ if (castProjection(state, cctx, source, target, dam, typ, flg, 0)) notice = true;
653
+ }
654
+ return notice;
655
+ }
656
+
657
+ /**
658
+ * effect_handler_STAR_BALL (L1062): a ball in each of the eight compass
659
+ * directions from the player. Affects grids, objects and monsters.
660
+ */
661
+ export function castStarBall(
662
+ state: GameState,
663
+ cctx: CastContext,
664
+ source: CastSource,
665
+ dam: number,
666
+ typ: number,
667
+ rad: number,
668
+ ): boolean {
669
+ const flg =
670
+ PROJECT.STOP | PROJECT.THRU | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
671
+ let notice = false;
672
+ for (const off of DDGRID_DDD) {
673
+ const target = locSum(state.actor.grid, off);
674
+ if (castProjection(state, cctx, source, target, dam, typ, flg, rad)) notice = true;
675
+ }
676
+ return notice;
677
+ }
678
+
679
+ /**
680
+ * project_touch (L112): a radius-1 (or given) ball centred on the player,
681
+ * affecting grids, objects and monsters but hidden from bolt visuals
682
+ * (PROJECT_HIDE). PROJECT_AWARE is set when the player is aware of the effect.
683
+ * The monster-source decoy / target-monster branches of effect_handler_TOUCH
684
+ * are deferred (#19); this is the base player-centred touch.
685
+ */
686
+ export function castTouch(
687
+ state: GameState,
688
+ cctx: CastContext,
689
+ source: CastSource,
690
+ dam: number,
691
+ typ: number,
692
+ rad: number,
693
+ aware: boolean,
694
+ ): boolean {
695
+ let flg =
696
+ PROJECT.GRID | PROJECT.KILL | PROJECT.HIDE | PROJECT.ITEM | PROJECT.THRU;
697
+ if (aware) flg |= PROJECT.AWARE;
698
+ const r = rad > 0 ? rad : 1;
699
+ return castProjection(state, cctx, source, state.actor.grid, dam, typ, flg, r);
700
+ }
701
+
702
+ /**
703
+ * effect_handler_SWARM (L974): fire `num` non-jumping balls at the same target
704
+ * (targeting an absolute grid so a monster's death does not move the aim).
705
+ * Always player-sourced. Returns whether any shot was noticed.
706
+ */
707
+ export function castSwarm(
708
+ state: GameState,
709
+ cctx: CastContext,
710
+ source: CastSource,
711
+ target: Loc,
712
+ dam: number,
713
+ typ: number,
714
+ rad: number,
715
+ num: number,
716
+ ): boolean {
717
+ const flg =
718
+ PROJECT.THRU | PROJECT.STOP | PROJECT.GRID | PROJECT.ITEM | PROJECT.KILL;
719
+ let notice = false;
720
+ for (let n = num; n > 0; n--) {
721
+ if (castProjection(state, cctx, source, target, dam, typ, flg, rad)) notice = true;
722
+ }
723
+ return notice;
724
+ }
725
+
726
+ /**
727
+ * effect_handler_PROJECT_LOS (L1088): apply a jump projection to every monster
728
+ * in line of sight of the origin. The projection source is always the player
729
+ * (damage is attributed to them), exactly as upstream. `excludeMonster` is the
730
+ * currently-acting monster (cave->mon_current), skipped so a monster casting
731
+ * this does not hit itself; `originGrid` defaults to the player's grid.
732
+ */
733
+ export function castProjectLos(
734
+ state: GameState,
735
+ cctx: CastContext,
736
+ source: CastSource,
737
+ dam: number,
738
+ typ: number,
739
+ opts: {
740
+ originGrid?: Loc;
741
+ excludeMonster?: number;
742
+ useView?: boolean;
743
+ aware?: boolean;
744
+ } = {},
745
+ ): boolean {
746
+ /* PROJECT_LOS_AWARE (effect-handler-attack.c:1125-1159) adds PROJECT_AWARE
747
+ when the caster is aware and gates on square_isview (the player's field of
748
+ view) instead of los() from the origin. */
749
+ let flg = PROJECT.JUMP | PROJECT.KILL | PROJECT.HIDE;
750
+ if (opts.aware) flg |= PROJECT.AWARE;
751
+ const originGrid = opts.originGrid ?? state.actor.grid;
752
+ const exclude = opts.excludeMonster ?? 0;
753
+ let notice = false;
754
+ const max = monsterMax(state);
755
+ for (let i = 1; i < max; i++) {
756
+ const mon = state.monsters[i];
757
+ if (!mon) continue;
758
+ if (i === exclude) continue;
759
+ const visible = opts.useView
760
+ ? squareIsView(state.chunk, mon.grid)
761
+ : los(state.chunk, originGrid, mon.grid);
762
+ if (!visible) continue;
763
+ if (castProjection(state, cctx, source, mon.grid, dam, typ, flg, 0)) notice = true;
764
+ }
765
+ return notice;
766
+ }