@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,883 @@
1
+ /**
2
+ * Monster melee attacks against the player, ported from
3
+ * reference/src/mon-attack.c (make_attack_normal, monster_critical, check_hit,
4
+ * chance_of_monster_hit, adjust_dam_armor) and the RBE_ blow-effect handlers
5
+ * in reference/src/mon-blows.c (Angband 4.2.6).
6
+ *
7
+ * The blow loop, to-hit test, monster critical, per-blow damage roll and the
8
+ * cut/stun rolls are ported faithfully. Blow EFFECTS resolve one of two ways:
9
+ *
10
+ * - When a world-touching MonBlowEnv is injected (the live game), every
11
+ * melee_effect_handler_* runs its real consequences inline in the EXACT
12
+ * upstream RNG order: adjust_dam elemental resist rolls (env.elementalDam),
13
+ * inven_damage, player_apply_damage_reduction on the HP dealt, and all the
14
+ * status / stat / exp / theft / disenchant / earthquake / knockback effects.
15
+ * This is the analog of project-player's onSideEffects seam: combat/ stays
16
+ * worldless, and game/mon-side.ts (makeMonBlowEnv) supplies the environment.
17
+ * The unreduced context->damage drives the side-effect math and the cut/stun
18
+ * critical; only the HP actually subtracted goes through damage reduction.
19
+ *
20
+ * - When no env is injected (the worldless harness / unit tests), the effects
21
+ * that need the player timed / resist / inventory / stat systems are recorded
22
+ * as structured BlowSideEffect intents (the "stub log"), exactly as before.
23
+ *
24
+ * Additional per-blow rolls now ported inside the blow loop: the protection
25
+ * from evil repel (randint0(100) drawn when PROTEVIL is up vs an evil monster),
26
+ * the PARALYZE damage=1 pre-clamp, and the "player moved" early-out (a blow that
27
+ * relocates the player via earthquake / knockback skips the remaining blows).
28
+ *
29
+ * DEFERRED (ledgered in parity/ledger/combat-melee.yaml): monster lore /
30
+ * smart-learn, monster-vs-monster melee (monster_attack_monster), react_to_slay
31
+ * blocking a theft (the item is stolen regardless; no RNG impact), and attaching
32
+ * stolen gold/items to the monster's held-object pile (monster_carry, coordinated
33
+ * with the loot-drops gap; the item/gold is still removed from the player and no
34
+ * RNG is drawn by the attach).
35
+ */
36
+ import { locEq } from "../loc.js";
37
+ import { ELEM, MON_TMD, PROJ, RF, STAT, TMD } from "../generated/index.js";
38
+ import { STUN_DAM_REDUCTION, STUN_HIT_REDUCTION, testHit } from "./hit.js";
39
+ /* ------------------------------------------------------------------ *
40
+ * Shared math (mon-attack.c)
41
+ * ------------------------------------------------------------------ */
42
+ /**
43
+ * chance_of_monster_hit_base: a monster's to-hit from race level and the
44
+ * blow's power.
45
+ */
46
+ export function chanceOfMonsterHitBase(level, effectPower) {
47
+ return Math.max(level, 1) * 3 + effectPower;
48
+ }
49
+ /**
50
+ * chance_of_monster_hit: the base value, reduced if the monster is stunned.
51
+ */
52
+ export function chanceOfMonsterHit(mon, level, effectPower) {
53
+ let toHit = chanceOfMonsterHitBase(level, effectPower);
54
+ if ((mon.mTimed[MON_TMD.STUN] ?? 0) > 0) {
55
+ toHit = Math.trunc((toHit * (100 - STUN_HIT_REDUCTION)) / 100);
56
+ }
57
+ return toHit;
58
+ }
59
+ /**
60
+ * check_hit: does an attack with the given to-hit land on the player? Uses the
61
+ * player's total AC (state.ac + state.to_a).
62
+ */
63
+ export function checkHit(rng, toHit, def) {
64
+ return testHit(rng, toHit, def.ac + def.toA);
65
+ }
66
+ /**
67
+ * adjust_dam_armor: physical damage remaining after armor (mon-attack.c).
68
+ */
69
+ export function adjustDamArmor(damage, ac) {
70
+ return damage - Math.trunc((damage * (ac < 240 ? ac : 240)) / 400);
71
+ }
72
+ /**
73
+ * monster_critical: the "cut/stun" critical tier of a monster blow. All hits
74
+ * doing >= 95% of the maximum possible (and >= 20, or sometimes N) qualify.
75
+ * Returns a tier 0..(6+extra) used to index the cut/stun amount tables.
76
+ */
77
+ export function monsterCritical(rng, dice, rlev, dam) {
78
+ let max = 0;
79
+ const total = rng.randcalc(dice, rlev, "maximise");
80
+ /* Must do at least 95% of perfect */
81
+ if (dam < Math.trunc((total * 19) / 20))
82
+ return 0;
83
+ /* Weak blows rarely work */
84
+ if (dam < 20 && rng.randint0(100) >= dam)
85
+ return 0;
86
+ /* Perfect damage */
87
+ if (dam === total)
88
+ max++;
89
+ /* Super-charge */
90
+ if (dam >= 20) {
91
+ while (rng.randint0(100) < 2)
92
+ max++;
93
+ }
94
+ /* Critical damage */
95
+ if (dam > 45)
96
+ return 6 + max;
97
+ if (dam > 33)
98
+ return 5 + max;
99
+ if (dam > 25)
100
+ return 4 + max;
101
+ if (dam > 18)
102
+ return 3 + max;
103
+ if (dam > 11)
104
+ return 2 + max;
105
+ return 1 + max;
106
+ }
107
+ /** Cut amount for a monster_critical tier (make_attack_normal cut switch). */
108
+ function cutAmount(rng, tier) {
109
+ switch (tier) {
110
+ case 0:
111
+ return 0;
112
+ case 1:
113
+ return rng.randint1(5);
114
+ case 2:
115
+ return rng.randint1(5) + 5;
116
+ case 3:
117
+ return rng.randint1(20) + 20;
118
+ case 4:
119
+ return rng.randint1(50) + 50;
120
+ case 5:
121
+ return rng.randint1(100) + 100;
122
+ case 6:
123
+ return 300;
124
+ default:
125
+ return 500;
126
+ }
127
+ }
128
+ /** Stun amount for a monster_critical tier (make_attack_normal stun switch). */
129
+ function stunAmount(rng, tier) {
130
+ switch (tier) {
131
+ case 0:
132
+ return 0;
133
+ case 1:
134
+ return rng.randint1(5);
135
+ case 2:
136
+ return rng.randint1(10) + 10;
137
+ case 3:
138
+ return rng.randint1(20) + 20;
139
+ case 4:
140
+ return rng.randint1(30) + 30;
141
+ case 5:
142
+ return rng.randint1(40) + 40;
143
+ case 6:
144
+ return 100;
145
+ default:
146
+ return 200;
147
+ }
148
+ }
149
+ const ELEMENT_OF_EFFECT = {
150
+ ACID: "ACID",
151
+ ELEC: "ELEC",
152
+ FIRE: "FIRE",
153
+ COLD: "COLD",
154
+ POISON: "POIS",
155
+ };
156
+ const STAT_OF_EFFECT = {
157
+ LOSE_STR: "STR",
158
+ LOSE_INT: "INT",
159
+ LOSE_WIS: "WIS",
160
+ LOSE_DEX: "DEX",
161
+ LOSE_CON: "CON",
162
+ };
163
+ /** Experience-drain effects: OF_HOLD_LIFE resist chance and base drain dice. */
164
+ const EXP_DRAIN = {
165
+ EXP_10: { holdChance: 95, dice: 10 },
166
+ EXP_20: { holdChance: 90, dice: 20 },
167
+ EXP_40: { holdChance: 75, dice: 40 },
168
+ EXP_80: { holdChance: 50, dice: 80 },
169
+ };
170
+ /**
171
+ * monster_blow_method_action (mon-blows.c L74): pick one of the blow method's
172
+ * action messages via randint0(num_messages) and substitute the player-target
173
+ * tags. Returns null when the method carries no messages (act == NULL upstream,
174
+ * which yields the "You take N damage." fallback).
175
+ *
176
+ * The randint0(num_messages) draw is ALWAYS performed so the RNG stream matches
177
+ * upstream whether or not the message is shown. randint0 (Rand_div) short-
178
+ * circuits for num_messages <= 1, so only the multi-message methods (INSULT and
179
+ * MOAN, 8 each) consume any RNG here; every other blow is byte-identical.
180
+ *
181
+ * For a blow against the player (upstream midx < 0) the tags resolve to the
182
+ * fixed second-person words, not a monster_desc: {target}->you, {oftarget}->
183
+ * your, {has}->have (mon-blows.c L116-152).
184
+ */
185
+ function monsterBlowMethodAction(method, rng) {
186
+ const n = method.messages.length;
187
+ if (n === 0)
188
+ return null;
189
+ const choice = rng.randint0(n);
190
+ const raw = method.messages[choice] ?? method.messages[0];
191
+ return raw
192
+ .replace(/\{target\}/g, "you")
193
+ .replace(/\{oftarget\}/g, "your")
194
+ .replace(/\{has\}/g, "have");
195
+ }
196
+ /**
197
+ * display_blow_message_vs_player (mon-blows.c L194): show "m_name act." for a
198
+ * blow that lands on the player, with the " (N)" damage suffix when show_damage
199
+ * is on and the blow dealt HP. When `sink` is null (the worldless recording
200
+ * path) the message is drawn but not emitted, so both paths consume RNG
201
+ * identically. The fullstop is dropped when the action ends in "'" or "!".
202
+ */
203
+ function displayBlowMessageVsPlayer(rng, method, reduced, monName, showDamage, sink) {
204
+ const act = monsterBlowMethodAction(method, rng);
205
+ if (!sink)
206
+ return;
207
+ /* msgt(method->msgt, ...) (mon-blows.c L206-213): the blow line plays the
208
+ * method's sound channel (blow_methods.txt msg:, e.g. MON_HIT). */
209
+ if (act !== null) {
210
+ const fullstop = act.endsWith("'") || act.endsWith("!") ? "" : ".";
211
+ const tail = reduced > 0 && showDamage ? ` (${reduced})` : "";
212
+ sink(`${monName} ${act}${fullstop}${tail}`, method.msgt);
213
+ }
214
+ else if (reduced > 0 && showDamage) {
215
+ sink(`You take ${reduced} damage.`, method.msgt);
216
+ }
217
+ }
218
+ /**
219
+ * Live-path blow message: emit "The kobold hits you." through the env sink
220
+ * immediately before take_hit (display_blow_message_vs_player, called from every
221
+ * damage-dealing melee_effect_handler in mon-blows.c).
222
+ */
223
+ function emitBlowMessageLive(env, ctx, reduced) {
224
+ displayBlowMessageVsPlayer(ctx.rng, ctx.method, reduced, env.monName, env.showDamage, (text, msgt) => env.msg(text, msgt));
225
+ }
226
+ /**
227
+ * Recording-path blow message: perform the randint0(num_messages) draw without
228
+ * emitting (the worldless intent-recording path has no sink or monster name).
229
+ * Keeps the two paths in RNG lock-step; for every multi-message method in the
230
+ * vanilla data (INSULT / MOAN) the draw is the effect's first RNG event, so its
231
+ * position matches upstream.
232
+ */
233
+ function drawBlowMessage(ctx) {
234
+ displayBlowMessageVsPlayer(ctx.rng, ctx.method, 0, "", false, null);
235
+ }
236
+ /**
237
+ * Resolve one RBE_ blow effect: compute the HP damage the effect deals to the
238
+ * player (context->damage after the handler runs) and record any timed /
239
+ * stat / inventory / elemental side-effect intents.
240
+ */
241
+ function resolveBlowEffect(name, ctx) {
242
+ const { rng, baseDamage, ac, rlev, phys } = ctx;
243
+ const side = [];
244
+ /* display_blow_message_vs_player draws randint0(num_messages) before take_hit
245
+ * in every handler; hoisted here for the worldless path (no-op for the single-
246
+ * message methods, first RNG event for the INSULT / MOAN effects). */
247
+ drawBlowMessage(ctx);
248
+ /* Elemental blows: physical component to HP; elemental component deferred. */
249
+ if (name === "ACID" || name === "ELEC" || name === "FIRE" || name === "COLD") {
250
+ const physical = phys ? adjustDamArmor(baseDamage, ac + 50) : 0;
251
+ side.push({
252
+ kind: "elemental",
253
+ element: ELEMENT_OF_EFFECT[name],
254
+ damage: baseDamage,
255
+ });
256
+ return { hpDamage: physical, obvious: true, sideEffects: side };
257
+ }
258
+ switch (name) {
259
+ case "NONE":
260
+ return { hpDamage: 0, obvious: true, sideEffects: side };
261
+ case "HURT":
262
+ return {
263
+ hpDamage: adjustDamArmor(baseDamage, ac),
264
+ obvious: true,
265
+ sideEffects: side,
266
+ };
267
+ case "POISON": {
268
+ const physical = phys ? adjustDamArmor(baseDamage, ac + 50) : 0;
269
+ side.push({ kind: "elemental", element: "POIS", damage: baseDamage });
270
+ side.push({
271
+ kind: "timed",
272
+ effect: "POISONED",
273
+ amount: 5 + rng.randint1(rlev),
274
+ });
275
+ return { hpDamage: physical, obvious: true, sideEffects: side };
276
+ }
277
+ case "DISENCHANT":
278
+ side.push({ kind: "disenchant" });
279
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
280
+ case "DRAIN_CHARGES":
281
+ side.push({ kind: "drainCharges" });
282
+ return { hpDamage: baseDamage, obvious: false, sideEffects: side };
283
+ case "EAT_GOLD":
284
+ side.push({ kind: "eatGold" });
285
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
286
+ case "EAT_ITEM":
287
+ side.push({ kind: "eatItem" });
288
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
289
+ case "EAT_FOOD":
290
+ side.push({ kind: "eatFood" });
291
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
292
+ case "EAT_LIGHT":
293
+ side.push({ kind: "eatLight" });
294
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
295
+ case "BLIND":
296
+ side.push({
297
+ kind: "timed",
298
+ effect: "BLIND",
299
+ amount: 10 + rng.randint1(rlev),
300
+ });
301
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
302
+ case "CONFUSE":
303
+ side.push({
304
+ kind: "timed",
305
+ effect: "CONFUSED",
306
+ amount: 3 + rng.randint1(rlev),
307
+ });
308
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
309
+ case "TERRIFY":
310
+ side.push({
311
+ kind: "timed",
312
+ effect: "AFRAID",
313
+ amount: 3 + rng.randint1(rlev),
314
+ });
315
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
316
+ case "PARALYZE":
317
+ side.push({
318
+ kind: "timed",
319
+ effect: "PARALYZED",
320
+ amount: 3 + rng.randint1(rlev),
321
+ });
322
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
323
+ case "LOSE_STR":
324
+ case "LOSE_INT":
325
+ case "LOSE_WIS":
326
+ case "LOSE_DEX":
327
+ case "LOSE_CON":
328
+ side.push({ kind: "drainStat", stat: STAT_OF_EFFECT[name] });
329
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
330
+ case "LOSE_ALL":
331
+ for (const stat of ["STR", "DEX", "CON", "INT", "WIS"]) {
332
+ side.push({ kind: "drainStat", stat });
333
+ }
334
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
335
+ case "SHATTER": {
336
+ const hp = adjustDamArmor(baseDamage, ac);
337
+ /* monster_damage_target() returns immediately on death (mon-blows.c
338
+ * L1095), before either SHATTER side-effect gate or its RNG draw. */
339
+ if (ctx.willPlayerDie?.(hp)) {
340
+ return { hpDamage: hp, obvious: true, sideEffects: side };
341
+ }
342
+ if (hp > 23) {
343
+ side.push({ kind: "earthquake", radius: Math.trunc(hp / 12) });
344
+ }
345
+ if (hp > 100) {
346
+ const value = hp - 100;
347
+ if (rng.randint1(value) > 40) {
348
+ side.push({ kind: "knockback", distance: 1 + Math.trunc(value / 40) });
349
+ }
350
+ }
351
+ return { hpDamage: hp, obvious: true, sideEffects: side };
352
+ }
353
+ case "EXP_10":
354
+ case "EXP_20":
355
+ case "EXP_40":
356
+ case "EXP_80": {
357
+ const spec = EXP_DRAIN[name];
358
+ /* damroll(N, 6) is evaluated as the handler's argument. */
359
+ const amount = rng.damroll(spec.dice, 6);
360
+ side.push({ kind: "loseExp", holdChance: spec.holdChance, amount });
361
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
362
+ }
363
+ case "HALLU":
364
+ side.push({
365
+ kind: "timed",
366
+ effect: "IMAGE",
367
+ amount: 3 + rng.randint1(Math.trunc(rlev / 2)),
368
+ });
369
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
370
+ case "BLACK_BREATH":
371
+ if (rng.oneIn(5)) {
372
+ side.push({
373
+ kind: "timed",
374
+ effect: "BLACKBREATH",
375
+ amount: Math.trunc(baseDamage / 10),
376
+ });
377
+ }
378
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
379
+ default:
380
+ /* Unknown effect: deal the base damage, as the fallthrough would. */
381
+ return { hpDamage: baseDamage, obvious: true, sideEffects: side };
382
+ }
383
+ }
384
+ /**
385
+ * melee_handler_for_blow_effect (mon-blows.c:1191): upstream's name -> handler
386
+ * table, as a list. The two switch statements in this file (resolveBlowEffect
387
+ * for the recording path, resolveBlowEffectLive for the live path) are the
388
+ * handlers themselves; this list is the table's key set, so a test can prove the
389
+ * mapping total against the pack in both directions.
390
+ *
391
+ * Upstream's table has exactly these 30 entries (mon-blows.c:1197-1226) and
392
+ * blow_effects.txt defines exactly the same 30 names, so a NULL handler (which
393
+ * upstream reports as "ERROR: Effect handler not found", mon-attack.c:650/841)
394
+ * is unreachable with vanilla data.
395
+ */
396
+ export const RESOLVED_BLOW_EFFECTS = [
397
+ "NONE",
398
+ "HURT",
399
+ "POISON",
400
+ "DISENCHANT",
401
+ "DRAIN_CHARGES",
402
+ "EAT_GOLD",
403
+ "EAT_ITEM",
404
+ "EAT_FOOD",
405
+ "EAT_LIGHT",
406
+ "ACID",
407
+ "ELEC",
408
+ "FIRE",
409
+ "COLD",
410
+ "BLIND",
411
+ "CONFUSE",
412
+ "TERRIFY",
413
+ "PARALYZE",
414
+ "LOSE_STR",
415
+ "LOSE_INT",
416
+ "LOSE_WIS",
417
+ "LOSE_DEX",
418
+ "LOSE_CON",
419
+ "LOSE_ALL",
420
+ "SHATTER",
421
+ "EXP_10",
422
+ "EXP_20",
423
+ "EXP_40",
424
+ "EXP_80",
425
+ "HALLU",
426
+ "BLACK_BREATH",
427
+ ];
428
+ /* ------------------------------------------------------------------ *
429
+ * Live blow-effect resolution (mon-blows.c handlers with a MonBlowEnv)
430
+ * ------------------------------------------------------------------ */
431
+ /** effect name -> { proj: PROJ_ value, elem: ELEM_ value } for elementals. */
432
+ const ELEMENTAL_OF_EFFECT = {
433
+ ACID: { proj: PROJ.ACID, elem: ELEM.ACID },
434
+ ELEC: { proj: PROJ.ELEC, elem: ELEM.ELEC },
435
+ FIRE: { proj: PROJ.FIRE, elem: ELEM.FIRE },
436
+ COLD: { proj: PROJ.COLD, elem: ELEM.COLD },
437
+ POISON: { proj: PROJ.POIS, elem: ELEM.POIS },
438
+ };
439
+ /** The "You are covered in acid!" flavour lines (melee_effect_elemental). */
440
+ const ELEMENTAL_MESSAGE = {
441
+ ACID: "You are covered in acid!",
442
+ ELEC: "You are struck by electricity!",
443
+ FIRE: "You are enveloped in flames!",
444
+ COLD: "You are covered with frost!",
445
+ };
446
+ const STAT_OF_LIVE_EFFECT = {
447
+ LOSE_STR: STAT.STR,
448
+ LOSE_INT: STAT.INT,
449
+ LOSE_WIS: STAT.WIS,
450
+ LOSE_DEX: STAT.DEX,
451
+ LOSE_CON: STAT.CON,
452
+ };
453
+ /**
454
+ * melee_effect_elemental (mon-blows.c L417): physical vs elemental, the larger
455
+ * to HP, inven_damage on the elemental component. RNG order: [adjust_dam
456
+ * denominator] then [inven_damage per-item saves].
457
+ */
458
+ function applyElemental(env, name, ctx, pure) {
459
+ if (pure) {
460
+ const line = ELEMENTAL_MESSAGE[name];
461
+ if (line)
462
+ env.msg(line);
463
+ }
464
+ const map = ELEMENTAL_OF_EFFECT[name];
465
+ const physical = ctx.phys ? adjustDamArmor(ctx.baseDamage, ctx.ac + 50) : 0;
466
+ const elementalDam = env.elementalDam(map.proj, ctx.baseDamage);
467
+ const contextDamage = physical > elementalDam ? physical : elementalDam;
468
+ if (elementalDam > 0) {
469
+ env.invenDamage(map.elem, Math.min(elementalDam * 5, 300));
470
+ }
471
+ let reducedDamage = 0;
472
+ if (contextDamage > 0) {
473
+ reducedDamage = env.applyReduction(contextDamage);
474
+ emitBlowMessageLive(env, ctx, reducedDamage);
475
+ env.takeHit(reducedDamage);
476
+ }
477
+ env.finishElemental?.();
478
+ return { contextDamage, reducedDamage };
479
+ }
480
+ /**
481
+ * Resolve one RBE_ blow effect for real, running each mon-blows.c handler in
482
+ * the exact upstream RNG order and applying HP through the env. Returns the
483
+ * (unreduced) context->damage for the cut/stun critical, the reduced HP dealt,
484
+ * and context->blinked. The PARALYZE damage=1 pre-clamp is applied by the
485
+ * caller before this runs (mon-blows.c L1020).
486
+ */
487
+ function resolveBlowEffectLive(name, ctx, env) {
488
+ const { rng, baseDamage, ac, rlev } = ctx;
489
+ const done = (contextDamage, reducedDamage, blinked = false) => ({ contextDamage, reducedDamage, obvious: true, blinked });
490
+ /* Elemental blows (pure). */
491
+ if (name === "ACID" || name === "ELEC" || name === "FIRE" || name === "COLD") {
492
+ const r = applyElemental(env, name, ctx, true);
493
+ return done(r.contextDamage, r.reducedDamage);
494
+ }
495
+ switch (name) {
496
+ case "NONE":
497
+ /* melee_effect_handler_NONE (mon-blows.c L638): show the message (with
498
+ * its randint0(num_messages) draw) for a no-damage hit; no take_hit. */
499
+ emitBlowMessageLive(env, ctx, 0);
500
+ return done(0, 0);
501
+ case "HURT": {
502
+ const cd = adjustDamArmor(baseDamage, ac);
503
+ const reduced = env.applyReduction(cd);
504
+ emitBlowMessageLive(env, ctx, reduced);
505
+ env.takeHit(reduced);
506
+ return done(cd, reduced);
507
+ }
508
+ case "POISON": {
509
+ const r = applyElemental(env, name, ctx, false);
510
+ if (!env.playerDied) {
511
+ /* player_inc_timed(TMD_POISONED, 5 + randint1(rlev)). */
512
+ env.incTimed(TMD.POISONED, 5 + rng.randint1(rlev), true);
513
+ }
514
+ return done(r.contextDamage, r.reducedDamage);
515
+ }
516
+ case "DISENCHANT": {
517
+ const reduced = env.applyReduction(baseDamage);
518
+ emitBlowMessageLive(env, ctx, reduced);
519
+ env.takeHit(reduced);
520
+ if (!env.playerDied && !env.resists(ELEM.DISEN))
521
+ env.disenchant();
522
+ return done(baseDamage, reduced);
523
+ }
524
+ case "DRAIN_CHARGES": {
525
+ const reduced = env.applyReduction(baseDamage);
526
+ emitBlowMessageLive(env, ctx, reduced);
527
+ env.takeHit(reduced);
528
+ if (!env.playerDied)
529
+ env.drainCharges(rlev);
530
+ return done(baseDamage, reduced);
531
+ }
532
+ case "EAT_GOLD": {
533
+ const reduced = env.applyReduction(baseDamage);
534
+ emitBlowMessageLive(env, ctx, reduced);
535
+ env.takeHit(reduced);
536
+ if (env.playerDied)
537
+ return done(baseDamage, reduced);
538
+ const blinked = env.eatGold();
539
+ return done(baseDamage, reduced, blinked);
540
+ }
541
+ case "EAT_ITEM": {
542
+ /* monster_damage_target(context, false): returns only on death. */
543
+ const reduced = env.applyReduction(baseDamage);
544
+ emitBlowMessageLive(env, ctx, reduced);
545
+ env.takeHit(reduced);
546
+ if (env.playerDied)
547
+ return done(baseDamage, reduced);
548
+ const r = env.eatItem();
549
+ return done(baseDamage, reduced, r.blinked);
550
+ }
551
+ case "EAT_FOOD": {
552
+ const reduced = env.applyReduction(baseDamage);
553
+ emitBlowMessageLive(env, ctx, reduced);
554
+ env.takeHit(reduced);
555
+ if (!env.playerDied)
556
+ env.eatFood();
557
+ return done(baseDamage, reduced);
558
+ }
559
+ case "EAT_LIGHT": {
560
+ const reduced = env.applyReduction(baseDamage);
561
+ emitBlowMessageLive(env, ctx, reduced);
562
+ env.takeHit(reduced);
563
+ if (!env.playerDied)
564
+ env.eatLight();
565
+ return done(baseDamage, reduced);
566
+ }
567
+ case "BLIND": {
568
+ /* melee_effect_timed: duration arg drawn first, then damage, no save. */
569
+ const amount = 10 + rng.randint1(rlev);
570
+ const reduced = env.applyReduction(baseDamage);
571
+ emitBlowMessageLive(env, ctx, reduced);
572
+ env.takeHit(reduced);
573
+ if (!env.playerDied)
574
+ env.incTimed(TMD.BLIND, amount, true);
575
+ return done(baseDamage, reduced);
576
+ }
577
+ case "CONFUSE": {
578
+ const amount = 3 + rng.randint1(rlev);
579
+ const reduced = env.applyReduction(baseDamage);
580
+ emitBlowMessageLive(env, ctx, reduced);
581
+ env.takeHit(reduced);
582
+ if (!env.playerDied)
583
+ env.incTimed(TMD.CONFUSED, amount, true);
584
+ return done(baseDamage, reduced);
585
+ }
586
+ case "TERRIFY": {
587
+ const amount = 3 + rng.randint1(rlev);
588
+ const reduced = env.applyReduction(baseDamage);
589
+ emitBlowMessageLive(env, ctx, reduced);
590
+ env.takeHit(reduced);
591
+ if (!env.playerDied) {
592
+ if (env.saveVsSkill())
593
+ env.msg("You stand your ground!");
594
+ else
595
+ env.incTimed(TMD.AFRAID, amount, true);
596
+ }
597
+ return done(baseDamage, reduced);
598
+ }
599
+ case "PARALYZE": {
600
+ const amount = 3 + rng.randint1(rlev);
601
+ const reduced = env.applyReduction(baseDamage);
602
+ emitBlowMessageLive(env, ctx, reduced);
603
+ env.takeHit(reduced);
604
+ if (!env.playerDied) {
605
+ if (env.saveVsSkill())
606
+ env.msg("You resist the effects!");
607
+ else
608
+ env.incTimed(TMD.PARALYZED, amount, true);
609
+ }
610
+ return done(baseDamage, reduced);
611
+ }
612
+ case "LOSE_STR":
613
+ case "LOSE_INT":
614
+ case "LOSE_WIS":
615
+ case "LOSE_DEX":
616
+ case "LOSE_CON": {
617
+ const reduced = env.applyReduction(baseDamage);
618
+ emitBlowMessageLive(env, ctx, reduced);
619
+ env.takeHit(reduced);
620
+ if (!env.playerDied)
621
+ env.drainStat(STAT_OF_LIVE_EFFECT[name]);
622
+ return done(baseDamage, reduced);
623
+ }
624
+ case "LOSE_ALL": {
625
+ const reduced = env.applyReduction(baseDamage);
626
+ emitBlowMessageLive(env, ctx, reduced);
627
+ env.takeHit(reduced);
628
+ if (!env.playerDied) {
629
+ env.drainStat(STAT.STR);
630
+ env.drainStat(STAT.DEX);
631
+ env.drainStat(STAT.CON);
632
+ env.drainStat(STAT.INT);
633
+ env.drainStat(STAT.WIS);
634
+ }
635
+ return done(baseDamage, reduced);
636
+ }
637
+ case "SHATTER": {
638
+ const cd = adjustDamArmor(baseDamage, ac);
639
+ const reduced = env.applyReduction(cd);
640
+ emitBlowMessageLive(env, ctx, reduced);
641
+ env.takeHit(reduced);
642
+ if (env.playerDied)
643
+ return done(cd, reduced);
644
+ if (cd > 23)
645
+ env.earthquake(Math.trunc(cd / 12));
646
+ if (cd > 100) {
647
+ const value = cd - 100;
648
+ if (rng.randint1(value) > 40)
649
+ env.thrust(1 + Math.trunc(value / 40));
650
+ }
651
+ return done(cd, reduced);
652
+ }
653
+ case "EXP_10":
654
+ case "EXP_20":
655
+ case "EXP_40":
656
+ case "EXP_80": {
657
+ const spec = EXP_DRAIN[name];
658
+ /* damroll(N, 6) is evaluated as the handler's argument, before take_hit. */
659
+ const drainAmount = rng.damroll(spec.dice, 6);
660
+ const reduced = env.applyReduction(baseDamage);
661
+ emitBlowMessageLive(env, ctx, reduced);
662
+ env.takeHit(reduced);
663
+ if (!env.playerDied)
664
+ env.drainExp(spec.holdChance, drainAmount);
665
+ return done(baseDamage, reduced);
666
+ }
667
+ case "HALLU": {
668
+ const reduced = env.applyReduction(baseDamage);
669
+ emitBlowMessageLive(env, ctx, reduced);
670
+ env.takeHit(reduced);
671
+ if (!env.playerDied) {
672
+ env.incTimed(TMD.IMAGE, 3 + rng.randint1(Math.trunc(rlev / 2)), true);
673
+ }
674
+ return done(baseDamage, reduced);
675
+ }
676
+ case "BLACK_BREATH": {
677
+ const reduced = env.applyReduction(baseDamage);
678
+ emitBlowMessageLive(env, ctx, reduced);
679
+ env.takeHit(reduced);
680
+ if (!env.playerDied && rng.oneIn(5)) {
681
+ env.incTimed(TMD.BLACKBREATH, Math.trunc(baseDamage / 10), false);
682
+ }
683
+ return done(baseDamage, reduced);
684
+ }
685
+ default: {
686
+ /* Unknown effect: deal the base damage, as the fallthrough would. */
687
+ const reduced = env.applyReduction(baseDamage);
688
+ emitBlowMessageLive(env, ctx, reduced);
689
+ env.takeHit(reduced);
690
+ return done(baseDamage, reduced);
691
+ }
692
+ }
693
+ }
694
+ /* ------------------------------------------------------------------ *
695
+ * make_attack_normal
696
+ * ------------------------------------------------------------------ */
697
+ /** Zero random_value, for blows that carry no damage dice. */
698
+ const ZERO_RV = { base: 0, dice: 0, sides: 0, mBonus: 0 };
699
+ /**
700
+ * make_attack_normal: run all of the monster's blows against the player. When
701
+ * `opts.env` is supplied the blow effects apply for real (HP through
702
+ * player_apply_damage_reduction / take_hit, plus every status / stat / theft /
703
+ * terrain consequence in the exact upstream RNG order); otherwise HP damage is
704
+ * applied to `defender.chp` and the rest is recorded as BlowSideEffect intents.
705
+ * Stops early if the player dies or a blow relocates the player.
706
+ */
707
+ export function monMeleeAttack(rng, mon, defender, def, opts = {}) {
708
+ /* Not allowed to attack. */
709
+ if (mon.race.flags.has(RF.NEVER_BLOW)) {
710
+ return {
711
+ attacked: false,
712
+ blows: [],
713
+ totalDamage: 0,
714
+ playerDied: false,
715
+ sideEffects: [],
716
+ };
717
+ }
718
+ const env = opts.env;
719
+ const rlev = mon.race.level >= 1 ? mon.race.level : 1;
720
+ const stunned = (mon.mTimed[MON_TMD.STUN] ?? 0) > 0;
721
+ const blows = [];
722
+ const allSide = [];
723
+ let totalDamage = 0;
724
+ let playerDied = false;
725
+ let blinked = false;
726
+ for (const blow of mon.race.blows) {
727
+ /* No more attacks. */
728
+ if (!blow.method)
729
+ break;
730
+ if (playerDied)
731
+ break;
732
+ /* p->grid at the start of the blow (mon-attack.c L568). */
733
+ const pgrid = env ? env.playerGrid() : null;
734
+ const effectName = blow.effect.name;
735
+ /* Monster hits player (a "NONE" effect always connects, no to-hit roll). */
736
+ const hit = effectName === "NONE" ||
737
+ checkHit(rng, chanceOfMonsterHit(mon, mon.race.level, blow.effect.power), def);
738
+ if (!hit) {
739
+ /* Visible monster missed the player: announce it (mon-attack.c L718). No
740
+ * RNG is drawn; unseen monsters and no-miss methods stay silent. */
741
+ if (env && env.monVisible && blow.method.miss) {
742
+ env.msg(`${env.monName} misses you.`);
743
+ }
744
+ blows.push({
745
+ hit: false,
746
+ effect: effectName,
747
+ method: blow.method.name,
748
+ damage: 0,
749
+ sideEffects: [],
750
+ obvious: false,
751
+ });
752
+ continue;
753
+ }
754
+ /* Apply "protection from evil" (mon-attack.c L597): an evil monster is
755
+ * repelled on a high roll. The randint0(100) draw happens only when the
756
+ * guard conditions hold, matching the C short-circuit order. */
757
+ if ((defender.timed[TMD.PROTEVIL] ?? 0) > 0 &&
758
+ mon.race.flags.has(RF.EVIL) &&
759
+ defender.lev >= rlev &&
760
+ rng.randint0(100) + defender.lev > 50) {
761
+ env?.msg(`${mon.race.name} is repelled.`);
762
+ continue;
763
+ }
764
+ /* Roll dice, reduce when the attacker is stunned. */
765
+ const diceRv = blow.dice ? blow.dice.randomValue() : ZERO_RV;
766
+ let damage = blow.dice ? rng.randcalc(diceRv, rlev, "randomise") : 0;
767
+ if (stunned) {
768
+ damage = Math.trunc((damage * (100 - STUN_DAM_REDUCTION)) / 100);
769
+ }
770
+ /* PARALYZE pre-clamp (mon-blows.c L1020): a paralysed player always takes
771
+ * at least 1 damage, so paralysis cannot be perma-locked at 0 damage. */
772
+ if (effectName === "PARALYZE" &&
773
+ (defender.timed[TMD.PARALYZED] ?? 0) > 0 &&
774
+ damage < 1) {
775
+ damage = 1;
776
+ }
777
+ const blowCtx = {
778
+ rng,
779
+ baseDamage: damage,
780
+ ac: def.ac + def.toA,
781
+ rlev,
782
+ phys: blow.method.phys,
783
+ method: blow.method,
784
+ /* The worldless path applies hpDamage after resolveBlowEffect(), unlike
785
+ * C's monster_damage_target(); predict its return value for handlers
786
+ * that must stop before later RNG draws (mon-blows.c L1095). */
787
+ ...(env
788
+ ? {}
789
+ : { willPlayerDie: (pendingDamage) => defender.chp - pendingDamage < 0 }),
790
+ };
791
+ /* context->damage after the handler (unreduced; feeds the cut/stun crit). */
792
+ let contextDamage;
793
+ /* The HP actually dealt this blow (reported / totalled). */
794
+ let dealtDamage;
795
+ let obvious;
796
+ const blowSide = [];
797
+ if (env) {
798
+ const res = resolveBlowEffectLive(effectName, blowCtx, env);
799
+ contextDamage = res.contextDamage;
800
+ dealtDamage = res.reducedDamage;
801
+ obvious = res.obvious;
802
+ if (res.blinked)
803
+ blinked = true;
804
+ if (dealtDamage > 0)
805
+ totalDamage += dealtDamage;
806
+ if (env.playerDied)
807
+ playerDied = true;
808
+ }
809
+ else {
810
+ const res = resolveBlowEffect(effectName, blowCtx);
811
+ contextDamage = res.hpDamage;
812
+ dealtDamage = res.hpDamage;
813
+ obvious = res.obvious;
814
+ for (const s of res.sideEffects)
815
+ blowSide.push(s);
816
+ if (res.hpDamage > 0) {
817
+ defender.chp -= res.hpDamage;
818
+ totalDamage += res.hpDamage;
819
+ if (defender.chp < 0)
820
+ playerDied = true;
821
+ }
822
+ }
823
+ /* Cut and stun (only one of the two), keyed off the UNREDUCED damage. */
824
+ let doCut = blow.method.cut;
825
+ let doStun = blow.method.stun;
826
+ if (playerDied) {
827
+ doCut = false;
828
+ doStun = false;
829
+ }
830
+ if (doCut && doStun) {
831
+ if (rng.randint0(100) < 50)
832
+ doCut = false;
833
+ else
834
+ doStun = false;
835
+ }
836
+ if (doCut) {
837
+ const tier = monsterCritical(rng, diceRv, rlev, contextDamage);
838
+ const amt = cutAmount(rng, tier);
839
+ if (amt) {
840
+ if (env)
841
+ env.incTimed(TMD.CUT, amt, true);
842
+ else
843
+ blowSide.push({ kind: "timed", effect: "CUT", amount: amt });
844
+ }
845
+ }
846
+ if (doStun) {
847
+ const tier = monsterCritical(rng, diceRv, rlev, contextDamage);
848
+ const amt = stunAmount(rng, tier);
849
+ if (amt) {
850
+ if (env)
851
+ env.incTimed(TMD.STUN, amt, true);
852
+ else
853
+ blowSide.push({ kind: "timed", effect: "STUN", amount: amt });
854
+ }
855
+ }
856
+ for (const s of blowSide)
857
+ allSide.push(s);
858
+ blows.push({
859
+ hit: true,
860
+ effect: effectName,
861
+ method: blow.method.name,
862
+ damage: dealtDamage,
863
+ sideEffects: blowSide,
864
+ obvious,
865
+ });
866
+ /* Skip the other blows if the player has moved (mon-attack.c L736): an
867
+ * earthquake or knockback relocated the player mid-loop. */
868
+ if (env && pgrid && !locEq(env.playerGrid(), pgrid))
869
+ break;
870
+ }
871
+ /* Blink away (mon-attack.c L740): a monster that stole gold / an item
872
+ * teleports after all its blows resolve. */
873
+ if (env && blinked)
874
+ env.blinkAway();
875
+ return {
876
+ attacked: true,
877
+ blows,
878
+ totalDamage,
879
+ playerDied,
880
+ sideEffects: allSide,
881
+ };
882
+ }
883
+ //# sourceMappingURL=mon-melee.js.map