@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,402 @@
1
+ /**
2
+ * Player melee attacks, ported from reference/src/player-attack.c (Angband
3
+ * 4.2.6): chance_of_melee_hit(_base), melee_damage, py_attack_real and the
4
+ * py_attack blow loop. Standard (non-O) combat only.
5
+ *
6
+ * The upstream `struct player` carries a computed `struct player_state`
7
+ * (calc_bonuses) with to_h/to_d/ac/num_blows/skills/stat_ind; the port's
8
+ * Player does not yet compute that (player/calcs.ts defers it). Combat
9
+ * therefore takes an explicit PlayerCombatState alongside the Player, exactly
10
+ * as upstream separates `p` from `p->state`. num_blows is likewise injected.
11
+ *
12
+ * Knowledge / learning side effects (equip_learn_on_melee_attack,
13
+ * learn_brand_slay_from_melee) are wired at the GAME layer around pyAttack
14
+ * (game/player-turn.ts, game/cave-cmd.ts), keeping this module pure combat
15
+ * math; see obj/knowledge.ts and parity/ledger/obj-knowledge.yaml.
16
+ *
17
+ * Damage now routes through the shared mon_take_hit primitive (mon/take-hit.ts)
18
+ * so a blow generates monster fear (gap 2.4); the full py_attack side-effect
19
+ * suite (gap 2.5) - blow_side_effects (TMD_ATT_CONF), the vampiric drain
20
+ * (TMD_ATT_VAMP), OF_IMPACT earthquakes, bloodlust over-exertion, the
21
+ * shapechange verb, splash, shield bash and the PF_COMBAT_REGEN mana reward -
22
+ * is interleaved at the faithful RNG points via optional MeleeEffectHooks. A
23
+ * caller supplying no hooks (e.g. the effect handlers) still rolls fear but
24
+ * skips the state-mutating side effects, exactly as those simplified paths do.
25
+ *
26
+ * DEFERRED (ledgered in parity/ledger/combat-melee.yaml):
27
+ * - Message text/formatting (the combat code returns the HitType key only).
28
+ *
29
+ * O-combat (birth_percent_damage) IS ported: oMeleeDamage / o_critical_melee,
30
+ * gated in pyAttackReal at the same point upstream branches (player-attack.c
31
+ * L803/L811/L826). With the option off the path is byte-identical to standard.
32
+ */
33
+ import { objectWeightOne } from "../obj/object.js";
34
+ import { MON_TMD } from "../generated/index.js";
35
+ import { monsterIsLiving } from "../mon/predicate.js";
36
+ import { monTakeHit, monsterWake } from "../mon/take-hit.js";
37
+ import { MON_TMD_FLG_NOTIFY, monClearTimed } from "../mon/timed.js";
38
+ import { SKILL } from "../player/types.js";
39
+ import { adj_dex_th, adj_str_td } from "../player/calcs.js";
40
+ import { BTH_PLUS_ADJ, applyDeadliness, criticalMelee, oCriticalMelee, testHit, } from "./hit.js";
41
+ import { getMonsterBrandMultiplier, improveAttackModifier, objectToDam, objectToHit, } from "./brand-slay.js";
42
+ function skill(state, idx) {
43
+ return state.skills[idx] ?? 0;
44
+ }
45
+ function critActor(p, state) {
46
+ return {
47
+ lev: p.lev,
48
+ toH: state.toH,
49
+ meleeSkill: skill(state, SKILL.TO_HIT_MELEE),
50
+ bowSkill: skill(state, SKILL.TO_HIT_BOW),
51
+ throwSkill: skill(state, SKILL.TO_HIT_THROW),
52
+ };
53
+ }
54
+ /**
55
+ * chance_of_melee_hit_base: the player's melee to-hit before the target.
56
+ */
57
+ export function chanceOfMeleeHitBase(state, weapon) {
58
+ const bonus = state.toH + (weapon ? objectToHit(weapon) : 0) + (state.blessWield ? 2 : 0);
59
+ return skill(state, SKILL.TO_HIT_MELEE) + bonus * BTH_PLUS_ADJ;
60
+ }
61
+ /**
62
+ * chance_of_melee_hit: to-hit against a specific monster (half if unseen).
63
+ */
64
+ export function chanceOfMeleeHit(state, weapon, monVisible) {
65
+ const chance = chanceOfMeleeHitBase(state, weapon);
66
+ return monVisible ? chance : Math.trunc(chance / 2);
67
+ }
68
+ /**
69
+ * melee_damage: base weapon dice, times the best slay or brand multiplier,
70
+ * plus the weapon's to-dam. Standard (non-O) combat.
71
+ */
72
+ export function meleeDamage(rng, mon, weapon, brand, slay, brands, slays) {
73
+ let dmg = weapon ? rng.damroll(weapon.dd, weapon.ds) : 1;
74
+ if (slay) {
75
+ dmg *= slays[slay].multiplier;
76
+ }
77
+ else if (brand) {
78
+ dmg *= getMonsterBrandMultiplier(mon, brands[brand], false);
79
+ }
80
+ if (weapon)
81
+ dmg += objectToDam(weapon);
82
+ return dmg;
83
+ }
84
+ /**
85
+ * o_melee_damage (player-attack.c L501): the birth_percent_damage melee path.
86
+ * Deadliness and the slay/brand o_multiplier add extra SIDES to the damage
87
+ * dice; criticals add extra DICE. Unlike the standard path, the player's
88
+ * to-dam (player_damage_bonus) is folded in here via deadliness, so the caller
89
+ * must NOT add state.toD afterwards (upstream skips it under the option gate).
90
+ *
91
+ * RNG order, matching upstream exactly:
92
+ * 1. randint0(10000) - the fractional-sides roll (drawn even when unarmed).
93
+ * 2. (weapon only) o_critical_melee: randint1(chance_den) crit test, then on
94
+ * a crit the one_in_ level walk.
95
+ * 3. damroll(dice, sides).
96
+ */
97
+ export function oMeleeDamage(rng, state, mon, weapon, brand, slay, brands, slays) {
98
+ let dice = weapon ? weapon.dd : 1;
99
+ let add = 0;
100
+ /* Average value of a single damage die, x10. */
101
+ let dieAverage = Math.trunc((10 * ((weapon ? weapon.ds : 1) + 1)) / 2);
102
+ /* Slays/brands inflate the average (10x) and contribute a flat add. Melee
103
+ * prefers a slay over a brand (player-attack.c L512: `if (s) ... else if`). */
104
+ if (slay) {
105
+ const oMult = slays[slay].oMultiplier;
106
+ dieAverage *= oMult;
107
+ add = oMult - 10;
108
+ }
109
+ else if (brand) {
110
+ const bmult = getMonsterBrandMultiplier(mon, brands[brand], true);
111
+ dieAverage *= bmult;
112
+ add = bmult - 10;
113
+ }
114
+ else {
115
+ dieAverage *= 10;
116
+ }
117
+ /* Apply deadliness (x100) from to_d + weapon to-dam. */
118
+ const deadliness = state.toD + (weapon ? objectToDam(weapon) : 0);
119
+ dieAverage = applyDeadliness(dieAverage, Math.min(deadliness, 150));
120
+ /* Sides per die, with a fractional-sides roll. */
121
+ let sides = 2 * dieAverage - 10000;
122
+ const extra = rng.randint0(10000) < sides % 10000;
123
+ sides = Math.trunc(sides / 10000);
124
+ sides += extra ? 1 : 0;
125
+ /* Criticals add dice (excluded for unarmed; upstream leaves msg at MSG_HIT). */
126
+ let msg = "HIT";
127
+ if (weapon) {
128
+ const crit = oCriticalMelee(rng, chanceOfMeleeHitBase(state, weapon), mon);
129
+ dice += crit.addDice;
130
+ msg = crit.msg;
131
+ }
132
+ let dmg = rng.damroll(dice, sides);
133
+ dmg += add;
134
+ return { damage: dmg, msg };
135
+ }
136
+ /**
137
+ * py_attack_real: a single melee blow against the monster (player-attack.c
138
+ * L717). Mutates mon.hp on a damaging hit (through mon_take_hit, which also
139
+ * rolls fear), and interleaves the blow side effects via opts.hooks at the
140
+ * faithful RNG points. Returns the blow outcome; blow.monsterDied is the
141
+ * upstream `stop` value and blow.fear is mon_take_hit's *fear out-param.
142
+ */
143
+ export function pyAttackReal(rng, p, state, weapon, mon, brands, slays, opts = {}) {
144
+ const monVisible = opts.monVisible ?? true;
145
+ const h = opts.hooks;
146
+ /* An afraid player cannot attack (player-attack.c L752). */
147
+ if (opts.afraid) {
148
+ return {
149
+ hit: false, damage: 0, msg: "MISS", verb: "afraid",
150
+ brand: 0, slay: 0, monsterDied: false, stopAttack: false, fear: false,
151
+ };
152
+ }
153
+ /* Disturb the monster: monster_wake(mon, false, 100) + clear any Hold
154
+ * (player-attack.c L759-760). Draws randint0(100); mon_take_hit's own
155
+ * non-fatal wake later re-draws, exactly as upstream. */
156
+ monsterWake(rng, mon, false, 100);
157
+ monClearTimed(rng, mon, MON_TMD.HOLD, MON_TMD_FLG_NOTIFY);
158
+ const th = h?.takeHit;
159
+ /* See if the player hit. */
160
+ const success = testHit(rng, chanceOfMeleeHit(state, weapon, monVisible), mon.race.ac);
161
+ if (!success) {
162
+ /* Small chance of bloodlust side-effects on a miss (player-attack.c L770). */
163
+ if (h?.bloodlust && rng.oneIn(50))
164
+ h.overExertScramble?.();
165
+ return {
166
+ hit: false, damage: 0, msg: "MISS", verb: weapon ? "hit" : "punch",
167
+ brand: 0, slay: 0, monsterDied: false, stopAttack: false, fear: false,
168
+ };
169
+ }
170
+ const weight = weapon ? objectWeightOne(weapon) : 0;
171
+ const oCombat = opts.percentDamage ?? false;
172
+ /* Best attack from all slays or brands on all non-launcher equipment.
173
+ * improve_attack_modifier reads birth_percent_damage internally to pick the
174
+ * comparison multiplier, so the O flag is threaded here too (no RNG). */
175
+ const mod = { brand: 0, slay: 0, verb: weapon ? "hit" : "punch" };
176
+ for (const off of opts.offhand ?? []) {
177
+ improveAttackModifier(off, mon, brands, slays, mod, false, oCombat);
178
+ }
179
+ if (weapon) {
180
+ improveAttackModifier(weapon, mon, brands, slays, mod, false, oCombat);
181
+ }
182
+ /* improve_attack_modifier(p, NULL, ...) for temporary brands/slays. */
183
+ improveAttackModifier(null, mon, brands, slays, mod, false, oCombat, h?.temp);
184
+ /* Get the damage. The option gate matches upstream player-attack.c
185
+ * L803/L811/L826: the standard branch computes base damage, criticals, then
186
+ * adds player_damage_bonus; the O branch folds all of that into oMeleeDamage
187
+ * (to_d enters via deadliness) and skips the trailing state.toD. */
188
+ let dmg;
189
+ let msg;
190
+ if (!oCombat) {
191
+ dmg = meleeDamage(rng, mon, weapon, mod.brand, mod.slay, brands, slays);
192
+ msg = "HIT";
193
+ if (weapon) {
194
+ const crit = criticalMelee(rng, critActor(p, state), mon, weight, objectToHit(weapon), dmg);
195
+ dmg = crit.damage;
196
+ msg = crit.msg;
197
+ }
198
+ /* Apply the player damage bonus (player_damage_bonus = state->to_d). */
199
+ dmg += state.toD;
200
+ }
201
+ else {
202
+ const o = oMeleeDamage(rng, state, mon, weapon, mod.brand, mod.slay, brands, slays);
203
+ dmg = o.damage;
204
+ msg = o.msg;
205
+ }
206
+ /* Splash damage and earthquakes (player-attack.c L814): splash is computed
207
+ * upstream (weight * dmg / 100) but blow_after_effects ignores its splash
208
+ * parameter - an upstream quirk, so nothing to apply. do_quake needs
209
+ * OF_IMPACT and dmg > 50, and learns the flag immediately (L818). */
210
+ const doQuake = Boolean(h?.impact) && dmg > 50;
211
+ if (doQuake)
212
+ h?.learnImpact?.();
213
+ /* Substitute shape-specific blows for shapechanged players (L830): a random
214
+ * shape blow verb replaces the attack verb (drawn even at zero damage). */
215
+ if (h?.shapeBlows && h.shapeBlows.length > 0) {
216
+ mod.verb = h.shapeBlows[rng.randint0(h.shapeBlows.length)];
217
+ }
218
+ /* No negative damage; change verb if no damage done. */
219
+ if (dmg <= 0) {
220
+ dmg = 0;
221
+ msg = "MISS";
222
+ mod.verb = "fail to harm";
223
+ }
224
+ /* Pre-damage side effects: blow_side_effects (player-attack.c L864). The
225
+ * confusion brand clears itself and confuses the monster. */
226
+ if (h?.attConf) {
227
+ h.clearAttConf?.();
228
+ /* mon_inc_timed(mon, MON_TMD_CONF, 10 + randint0(p->lev) / 10, NOTIFY). */
229
+ const dur = 10 + Math.trunc(rng.randint0(p.lev) / 10);
230
+ h.confuseMonster?.(mon, dur);
231
+ }
232
+ /* Damage, check for hp drain, fear and death (player-attack.c L867). */
233
+ const drain = Math.min(mon.hp, dmg);
234
+ const res = monTakeHit(rng, mon, dmg, null, th ?? {});
235
+ const died = res.died;
236
+ let stop = died;
237
+ let fear = res.fear;
238
+ /* Small chance of bloodlust side-effects on a hit (player-attack.c L871). */
239
+ if (h?.bloodlust && rng.oneIn(50))
240
+ h.overExertCon?.();
241
+ /* Vampiric drain: heal by the damage drained if the monster lives (L877). */
242
+ if (!stop && h?.attVamp && monsterIsLiving(mon)) {
243
+ h.healPlayer?.(drain);
244
+ }
245
+ /* A dead monster is not frightened (player-attack.c L883). */
246
+ if (stop)
247
+ fear = false;
248
+ /* Post-damage effects: blow_after_effects earthquake (player-attack.c L887). */
249
+ if (doQuake && h?.earthquake) {
250
+ h.earthquake();
251
+ /* Monster may be dead or moved by the quake. */
252
+ if (h.monsterGone?.() ?? false)
253
+ stop = true;
254
+ }
255
+ return {
256
+ hit: true,
257
+ damage: dmg,
258
+ msg,
259
+ verb: mod.verb,
260
+ brand: mod.brand,
261
+ slay: mod.slay,
262
+ monsterDied: died,
263
+ stopAttack: stop,
264
+ fear,
265
+ };
266
+ }
267
+ /**
268
+ * attempt_shield_bash (player-attack.c L897): before the blows, a shield-bash
269
+ * character may slam the monster with the shield - damage, stun/confusion
270
+ * rolls, and a possible stumble that costs part of the turn. Duration rolls
271
+ * for stun/confusion are drawn whenever their condition trips, even if the
272
+ * caller supplies no monster-timed hook, keeping the RNG stream faithful.
273
+ */
274
+ function attemptShieldBash(rng, p, state, weapon, mon, deps, takeHit, moveEnergy) {
275
+ const none = { died: false, fear: false, energyLost: 0 };
276
+ const shield = deps.shield;
277
+ const nblows = Math.trunc(state.numBlows / 100);
278
+ /* Bashing chance depends on melee skill, DEX, and a level bonus. */
279
+ let bashChance = Math.trunc(skill(state, SKILL.TO_HIT_MELEE) / 8) +
280
+ Math.trunc((adj_dex_th[deps.dexInd] ?? 0) / 2);
281
+ /* No shield, no bash. */
282
+ if (!shield)
283
+ return none;
284
+ /* Monster is too pathetic, don't bother. */
285
+ if (mon.race.level < Math.trunc(p.lev / 2))
286
+ return none;
287
+ /* Players bash more often when they see a real need. */
288
+ if (!weapon) {
289
+ /* Unarmed... */
290
+ bashChance *= 4;
291
+ }
292
+ else if (weapon.dd * weapon.ds * nblows < shield.dd * shield.ds * 3) {
293
+ /* ... or armed with a puny weapon. */
294
+ bashChance *= 2;
295
+ }
296
+ /* Try to get in a shield bash. */
297
+ if (bashChance <= rng.randint0(200 + mon.race.level)) {
298
+ return none;
299
+ }
300
+ /* Calculate attack quality, a mix of momentum and accuracy. */
301
+ const bashQuality = Math.trunc(skill(state, SKILL.TO_HIT_MELEE) / 4) +
302
+ Math.trunc(deps.playerWt / 8) +
303
+ Math.trunc(deps.totalWeight / 80) +
304
+ Math.trunc(objectWeightOne(shield) / 2);
305
+ /* Calculate damage. Big shields are deadly. */
306
+ let bashDam = rng.damroll(shield.dd, shield.ds);
307
+ /* Multiply by quality and experience factors. */
308
+ bashDam *= Math.trunc(bashQuality / 40) + Math.trunc(p.lev / 14);
309
+ /* Strength bonus. */
310
+ bashDam += adj_str_td[deps.strInd] ?? 0;
311
+ /* Paranoia. */
312
+ if (bashDam <= 0)
313
+ return none;
314
+ bashDam = Math.min(bashDam, 125);
315
+ deps.msg?.(deps.showDamage
316
+ ? `You get in a shield bash! (${bashDam})`
317
+ : "You get in a shield bash!");
318
+ /* Encourage the player to keep wearing that heavy shield. */
319
+ if (rng.randint1(bashDam) > 30 + rng.randint1(Math.trunc(bashDam / 2))) {
320
+ deps.msg?.("WHAMM!");
321
+ }
322
+ /* Damage, check for fear and death. */
323
+ const res = monTakeHit(rng, mon, bashDam, null, takeHit);
324
+ if (res.died)
325
+ return { died: true, fear: false, energyLost: 0 };
326
+ const fear = res.fear;
327
+ /* Stunning (duration drawn whenever the condition trips). */
328
+ if (bashQuality + p.lev > rng.randint1(200 + mon.race.level * 8)) {
329
+ const dur = rng.randint0(Math.trunc(p.lev / 5)) + 4;
330
+ deps.stunMonster?.(mon, dur);
331
+ }
332
+ /* Confusion. */
333
+ if (bashQuality + p.lev > rng.randint1(300 + mon.race.level * 12)) {
334
+ const dur = rng.randint0(Math.trunc(p.lev / 5)) + 4;
335
+ deps.confuseMonster?.(mon, dur);
336
+ }
337
+ /* The player will sometimes stumble. */
338
+ let energyLost = 0;
339
+ if (35 + (adj_dex_th[deps.dexInd] ?? 0) < rng.randint1(60)) {
340
+ const lost = rng.randint1(50) + 25;
341
+ /* Lose 26-75% of a turn due to stumbling after shield bash. */
342
+ deps.msg?.("You stumble!");
343
+ energyLost = Math.trunc((lost * moveEnergy) / 100);
344
+ }
345
+ return { died: false, fear, energyLost };
346
+ }
347
+ /**
348
+ * py_attack (player-attack.c L988): land blows until the next blow would
349
+ * exceed the energy available for a single turn, or the monster dies.
350
+ * blow_energy = 100 * move_energy / num_blows; energy defaults to a full
351
+ * turn's worth. Runs the PF_COMBAT_REGEN mana reward and the shield bash
352
+ * before the blow loop, accumulates the fear flag across blows, and reports
353
+ * the delayed "flees in terror" condition and the energy actually used.
354
+ */
355
+ export function pyAttack(rng, p, state, weapon, mon, brands, slays, opts = {}) {
356
+ const moveEnergy = opts.moveEnergy ?? 100;
357
+ const availEnergy = Math.min(opts.energy ?? moveEnergy, moveEnergy);
358
+ /* Guard a degenerate num_blows against a zero-energy infinite loop. */
359
+ const blowEnergy = Math.max(1, Math.trunc((100 * moveEnergy) / state.numBlows));
360
+ const h = opts.hooks;
361
+ const monVisible = opts.monVisible ?? true;
362
+ const blows = [];
363
+ let totalDamage = 0;
364
+ let slain = false;
365
+ let fear = false;
366
+ let used = 0;
367
+ /* Reward BGs with 5% of max SPs, min 1/2 point (player-attack.c L1002). */
368
+ h?.combatRegen?.();
369
+ /* Player attempts a shield bash if they can, and if monster is visible and
370
+ * not too pathetic (player-attack.c L1009). */
371
+ if (h?.shieldBash && monVisible) {
372
+ const bash = attemptShieldBash(rng, p, state, weapon, mon, h.shieldBash, h.takeHit ?? {}, moveEnergy);
373
+ if (bash.died) {
374
+ /* Monster may die: py_attack returns without any blows. */
375
+ return {
376
+ blows, totalDamage, monsterDied: true, monsterFled: false,
377
+ energyUsed: used,
378
+ };
379
+ }
380
+ fear = fear || bash.fear;
381
+ used += bash.energyLost;
382
+ }
383
+ let died = false;
384
+ while (availEnergy - used >= blowEnergy && !slain) {
385
+ const blow = pyAttackReal(rng, p, state, weapon, mon, brands, slays, opts);
386
+ blows.push(blow);
387
+ totalDamage += blow.damage;
388
+ fear = fear || blow.fear;
389
+ if (blow.monsterDied) {
390
+ died = true;
391
+ /* py_attack_real: if (stop) (*fear) = false clears the shared flag. */
392
+ fear = false;
393
+ }
394
+ if (blow.stopAttack)
395
+ slain = true;
396
+ used += blowEnergy;
397
+ }
398
+ /* Hack - delay fear messages (player-attack.c L1023). */
399
+ const monsterFled = fear && monVisible;
400
+ return { blows, totalDamage, monsterDied: died, monsterFled, energyUsed: used };
401
+ }
402
+ //# sourceMappingURL=melee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"melee.js","sourceRoot":"","sources":["../../src/combat/melee.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
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 type { Rng, RandomValue } from "../rng.js";
37
+ import type { Loc } from "../loc.js";
38
+ import type { Monster } from "../mon/monster.js";
39
+ import type { Player } from "../player/player.js";
40
+ /** A defender's combat AC contribution (upstream p->state.ac + p->state.to_a). */
41
+ export interface DefenderState {
42
+ /** state->ac. */
43
+ ac: number;
44
+ /** state->to_a. */
45
+ toA: number;
46
+ }
47
+ /**
48
+ * A recorded blow side effect ("stub log"): the intent a fully-modelled
49
+ * player-timed / resist / inventory system would apply. `element` and status
50
+ * `amount` durations use the exact upstream formulas.
51
+ */
52
+ export type BlowSideEffect = {
53
+ kind: "timed";
54
+ effect: string;
55
+ amount: number;
56
+ } | {
57
+ kind: "drainStat";
58
+ stat: string;
59
+ } | {
60
+ kind: "loseExp";
61
+ holdChance: number;
62
+ amount: number;
63
+ } | {
64
+ kind: "drainCharges";
65
+ } | {
66
+ kind: "eatGold";
67
+ } | {
68
+ kind: "eatItem";
69
+ } | {
70
+ kind: "eatFood";
71
+ } | {
72
+ kind: "eatLight";
73
+ } | {
74
+ kind: "disenchant";
75
+ } | {
76
+ kind: "elemental";
77
+ element: string;
78
+ damage: number;
79
+ } | {
80
+ kind: "earthquake";
81
+ radius: number;
82
+ } | {
83
+ kind: "knockback";
84
+ distance: number;
85
+ };
86
+ /** The outcome of a single monster blow. */
87
+ export interface MonBlow {
88
+ hit: boolean;
89
+ /** RBE_ effect name (e.g. "HURT", "POISON"). */
90
+ effect: string;
91
+ /** RBM_ method name (e.g. "HIT", "CLAW"). */
92
+ method: string;
93
+ /** HP damage actually dealt to the player. */
94
+ damage: number;
95
+ sideEffects: BlowSideEffect[];
96
+ obvious: boolean;
97
+ }
98
+ /** The outcome of a full monster attack (make_attack_normal). */
99
+ export interface MonMeleeAttack {
100
+ /** false only when RF_NEVER_BLOW blocked the attack entirely. */
101
+ attacked: boolean;
102
+ blows: MonBlow[];
103
+ totalDamage: number;
104
+ playerDied: boolean;
105
+ /** Aggregated side-effect intents across all blows. */
106
+ sideEffects: BlowSideEffect[];
107
+ }
108
+ /**
109
+ * The world-touching environment a monster blow needs: the analog of
110
+ * project-player's onSideEffects hook. It keeps combat/ worldless - when
111
+ * absent, monMeleeAttack falls back to the stub-log intents. Implemented by
112
+ * game/mon-side.ts (makeMonBlowEnv), bound to the attacking monster.
113
+ */
114
+ export interface MonBlowEnv {
115
+ /** p->grid, read to detect the "player moved" mid-loop break. */
116
+ playerGrid(): Loc;
117
+ /** player_apply_damage_reduction(p, dam): the HP actually taken. */
118
+ applyReduction(dam: number): number;
119
+ /** take_hit(p, reducedDam, ddesc): subtract HP, set is_dead. */
120
+ takeHit(reducedDam: number): void;
121
+ /** Flush pure-element smart-learn after the complete elemental sequence. */
122
+ finishElemental?: () => void;
123
+ /** p->is_dead after the last takeHit. */
124
+ readonly playerDied: boolean;
125
+ /** msg(): route a blow message to the game's sink. An optional msgt (the
126
+ * blow method's sound channel, e.g. MON_HIT) plays the typed sound. */
127
+ msg(text: string, msgt?: string): void;
128
+ /** monster_desc(mon, MDESC_STANDARD): "The kobold" / "Something", for the
129
+ * per-blow "m_name act." message (drawn once per attack, no RNG). */
130
+ readonly monName: string;
131
+ /** OPT(p, show_damage): append the " (N)" suffix to the blow message. */
132
+ readonly showDamage: boolean;
133
+ /** monster_is_visible(mon): gates the "%s misses you." message (a visible
134
+ * monster's missed blow is announced; an unseen one is silent). */
135
+ readonly monVisible: boolean;
136
+ /** adjust_dam(p, proj, dam, RANDOMISE): elemental damage after resists. */
137
+ elementalDam(proj: number, dam: number): number;
138
+ /** inven_damage(p, elem, cperc): pack casualties from an elemental hit. */
139
+ invenDamage(elem: number, cperc: number): void;
140
+ /** player_resists(p, elem): el_info[elem].res_level > 0. */
141
+ resists(elem: number): boolean;
142
+ /** player_inc_timed(p, tmd, amount, ..., check): returns whether noticed. */
143
+ incTimed(tmd: number, amount: number, check: boolean): boolean;
144
+ /** randint0(100) < p->state.skills[SKILL_SAVE] (the melee saving throw). */
145
+ saveVsSkill(): boolean;
146
+ /** effect_simple(EF_DRAIN_STAT): sustain check then player_stat_dec. */
147
+ drainStat(stat: number): void;
148
+ /** player_of_has(p, OF_HOLD_LIFE). */
149
+ hasHoldLife(): boolean;
150
+ /** melee_effect_experience's HOLD_LIFE gate and player_exp_lose. */
151
+ drainExp(chance: number, drainAmount: number): void;
152
+ /** DRAIN_CHARGES: drain a random charged wand/staff, healing the monster. */
153
+ drainCharges(rlev: number): void;
154
+ /** EAT_GOLD: save-or-steal the player's gold; returns context->blinked. */
155
+ eatGold(): boolean;
156
+ /** EAT_ITEM: save-or-steal a pack item; returns blinked / obvious. */
157
+ eatItem(): {
158
+ blinked: boolean;
159
+ obvious: boolean;
160
+ };
161
+ /** EAT_FOOD: eat a random edible pack item. */
162
+ eatFood(): void;
163
+ /** EAT_LIGHT: EF_DRAIN_LIGHT "250+1d250". */
164
+ eatLight(): void;
165
+ /** EF_DISENCHANT on the player's equipment. */
166
+ disenchant(): void;
167
+ /** EF_EARTHQUAKE centred on the monster, given radius. */
168
+ earthquake(radius: number): void;
169
+ /** thrust_away(monster grid, player grid, dist). */
170
+ thrust(dist: number): void;
171
+ /** Blink the monster away (EF_TELEPORT max_sight*2+5) after the blows. */
172
+ blinkAway(): void;
173
+ }
174
+ /** Options for a monster melee attack. */
175
+ export interface MonMeleeOptions {
176
+ /** monster_is_visible(mon); affects only messaging (DEFERRED). */
177
+ monVisible?: boolean;
178
+ /**
179
+ * The world-touching blow environment (game/mon-side.ts), bound to the
180
+ * attacking monster. When present, blow effects apply for real in upstream
181
+ * RNG order; the `rng` argument MUST be the same stream this env draws from
182
+ * (state.rng), because the env's reused helpers (adjust_dam, inven_damage,
183
+ * ...) draw from it and interleave with this driver's own rolls.
184
+ */
185
+ env?: MonBlowEnv;
186
+ }
187
+ /**
188
+ * chance_of_monster_hit_base: a monster's to-hit from race level and the
189
+ * blow's power.
190
+ */
191
+ export declare function chanceOfMonsterHitBase(level: number, effectPower: number): number;
192
+ /**
193
+ * chance_of_monster_hit: the base value, reduced if the monster is stunned.
194
+ */
195
+ export declare function chanceOfMonsterHit(mon: Monster, level: number, effectPower: number): number;
196
+ /**
197
+ * check_hit: does an attack with the given to-hit land on the player? Uses the
198
+ * player's total AC (state.ac + state.to_a).
199
+ */
200
+ export declare function checkHit(rng: Rng, toHit: number, def: DefenderState): boolean;
201
+ /**
202
+ * adjust_dam_armor: physical damage remaining after armor (mon-attack.c).
203
+ */
204
+ export declare function adjustDamArmor(damage: number, ac: number): number;
205
+ /**
206
+ * monster_critical: the "cut/stun" critical tier of a monster blow. All hits
207
+ * doing >= 95% of the maximum possible (and >= 20, or sometimes N) qualify.
208
+ * Returns a tier 0..(6+extra) used to index the cut/stun amount tables.
209
+ */
210
+ export declare function monsterCritical(rng: Rng, dice: RandomValue, rlev: number, dam: number): number;
211
+ /**
212
+ * melee_handler_for_blow_effect (mon-blows.c:1191): upstream's name -> handler
213
+ * table, as a list. The two switch statements in this file (resolveBlowEffect
214
+ * for the recording path, resolveBlowEffectLive for the live path) are the
215
+ * handlers themselves; this list is the table's key set, so a test can prove the
216
+ * mapping total against the pack in both directions.
217
+ *
218
+ * Upstream's table has exactly these 30 entries (mon-blows.c:1197-1226) and
219
+ * blow_effects.txt defines exactly the same 30 names, so a NULL handler (which
220
+ * upstream reports as "ERROR: Effect handler not found", mon-attack.c:650/841)
221
+ * is unreachable with vanilla data.
222
+ */
223
+ export declare const RESOLVED_BLOW_EFFECTS: readonly string[];
224
+ /**
225
+ * make_attack_normal: run all of the monster's blows against the player. When
226
+ * `opts.env` is supplied the blow effects apply for real (HP through
227
+ * player_apply_damage_reduction / take_hit, plus every status / stat / theft /
228
+ * terrain consequence in the exact upstream RNG order); otherwise HP damage is
229
+ * applied to `defender.chp` and the rest is recorded as BlowSideEffect intents.
230
+ * Stops early if the player dies or a blow relocates the player.
231
+ */
232
+ export declare function monMeleeAttack(rng: Rng, mon: Monster, defender: Player, def: DefenderState, opts?: MonMeleeOptions): MonMeleeAttack;
233
+ //# sourceMappingURL=mon-melee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mon-melee.d.ts","sourceRoot":"","sources":["../../src/combat/mon-melee.ts"],"names":[],"mappings":"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"}