@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,786 @@
1
+ /**
2
+ * The once-every-ten-game-turns world upkeep helpers, ported statement by
3
+ * statement from reference/src/game-world.c process_world (Angband 4.2.6) plus
4
+ * player_update_light / player_over_exert (player-util.c) and compact_monsters
5
+ * (mon-make.c). The orchestrating processWorld / decreaseTimeouts stay in
6
+ * game/loop.ts (where the turn loop and HP/mana regen live); this module holds
7
+ * the individual steps so loop.ts reads as the upstream statement list.
8
+ *
9
+ * Every RNG-drawing step is reproduced in exact upstream order so the seeded
10
+ * stream is faithful for save determinism:
11
+ * - ambient monster: one_in_(alloc_monster_chance), drawn UNCONDITIONALLY each
12
+ * world tick (spawnAmbientMonster in mon-place.ts draws x-then-y per attempt);
13
+ * - damage over time: poison / cut are RNG-free, but each take_hit can draw the
14
+ * bloodlust death-save randint0(10) (state.rng is always threaded in);
15
+ * - bloodlust over-exert: randint0(100) per set PY_EXERT_* flag in SOURCE order
16
+ * (CON, FAINT, SCRAMBLE, CUT, CONF, HALLU, SLOW, HP), then randint1(amount);
17
+ * - black breath: three one_in_(2) always drawn in order when active;
18
+ * - faint: one_in_(10) then randint0(5); starvation: RNG-free;
19
+ * - exp drain: one_in_(10) then damroll(10,6) only when gated;
20
+ * - recharge / trap timeouts / town clock: RNG-free (randcalc AVERAGE);
21
+ * - compact_monsters(c, 64) on an overcrowded level: randint0(100) per
22
+ * candidate in the vicious-iteration order.
23
+ */
24
+
25
+ import { ELEM, MSG, OF, PF, PROJ, RF, STAT, TMD } from "../generated/index.js";
26
+ import type { Loc } from "../loc.js";
27
+ import type { GameObject } from "../obj/object.js";
28
+ import { tvalIsLight } from "../obj/object.js";
29
+ import { equipLearnElement, equipLearnFlag } from "../obj/knowledge.js";
30
+ import type { ProjectionInfo } from "../world/projection.js";
31
+ import { adjustDam } from "../world/projection.js";
32
+ import { invenDamage } from "./project-obj.js";
33
+ import {
34
+ numberCharging,
35
+ rechargeTimeout,
36
+ tvalCanHaveTimeout,
37
+ } from "../obj/recharge.js";
38
+ import type { TimedEffect } from "../player/types.js";
39
+ import type { PlayerTimedHooks } from "../player/timed.js";
40
+ import {
41
+ playerDecTimed,
42
+ playerIncTimed,
43
+ playerSetTimed,
44
+ playerTimedGradeEq,
45
+ } from "../player/timed.js";
46
+ import type {
47
+ DamageReduction,
48
+ TakeHitHooks,
49
+ TakeHitTarget,
50
+ } from "../player/take-hit.js";
51
+ import { playerApplyDamageReduction, takeHit } from "../player/take-hit.js";
52
+ import type { ExpDeps } from "../player/exp.js";
53
+ import { playerExpLose, playerStatDec } from "../player/exp.js";
54
+ import { turnEnergy } from "../mon/monster.js";
55
+ import { monsterIsUnique } from "../mon/predicate.js";
56
+ import { gearGet, gearObjectForUse } from "./gear.js";
57
+ import { floorPile } from "./floor.js";
58
+ import { monsterGroupChangeIndex } from "./mon-group.js";
59
+ import { disturb } from "./player-path.js";
60
+ import { DEFAULT_HITPOINT_WARN } from "./project-cast.js";
61
+ import { deleteMonster } from "./context.js";
62
+ import type { GameState } from "./context.js";
63
+
64
+ /** player-util.h PY_EXERT_* over-exertion bit flags. */
65
+ const PY_EXERT_CON = 0x01;
66
+ const PY_EXERT_FAINT = 0x02;
67
+ const PY_EXERT_SCRAMBLE = 0x04;
68
+ const PY_EXERT_CUT = 0x08;
69
+ const PY_EXERT_CONF = 0x10;
70
+ const PY_EXERT_HALLU = 0x20;
71
+ const PY_EXERT_SLOW = 0x40;
72
+ const PY_EXERT_HP = 0x80;
73
+
74
+ /**
75
+ * The process_world upkeep environment the world clock needs beyond the bare
76
+ * GameState: the bound timed-effect table (so decrements route through the
77
+ * grade / message machinery), the take_hit / timed hooks, the ambient-spawn and
78
+ * cave-illuminate hooks, and the experience deps. Installed by the session
79
+ * (wireGame) and the test harness.
80
+ */
81
+ export interface WorldClockEnv {
82
+ /** The bound player timed-effect table (player/bind.ts), indexed by TMD. */
83
+ timedTable: readonly TimedEffect[];
84
+ /** player_set_timed / player_dec_timed hooks (onMessage, onNotify). */
85
+ timedHooks?: PlayerTimedHooks;
86
+ /** take_hit consequences for the DoT sources (onDeath, onMessage, ...). */
87
+ takeHitHooks?: TakeHitHooks;
88
+ /** ExpDeps for player_exp_lose (black breath, exp drain). */
89
+ expDeps?: ExpDeps;
90
+ /**
91
+ * pick_and_place_distant_monster: place a random monster far from the player,
92
+ * returning whether one spawned. The one_in_(alloc_monster_chance) roll is
93
+ * drawn in processWorld whether or not this hook is present.
94
+ */
95
+ spawnAmbientMonster?: (state: GameState) => boolean;
96
+ /** cave_illuminate on the town dawn / nightfall boundary. */
97
+ caveIlluminate?: (state: GameState, dawn: boolean) => void;
98
+ /**
99
+ * The bound projection table (reg.projections), so player_take_terrain_damage
100
+ * can run adjust_dam(PROJ_FIRE, ...) against the player's fire resistance for
101
+ * fiery terrain (lava). Absent in bare test harnesses; terrain damage no-ops.
102
+ */
103
+ projections?: readonly ProjectionInfo[];
104
+ }
105
+
106
+ /** is_daytime (game-world.c L125): the first half of each day is daylight. */
107
+ export function isDaytime(turn: number, dayLength: number): boolean {
108
+ return turn % (10 * dayLength) < (10 * dayLength) / 2;
109
+ }
110
+
111
+ /** A standalone world message ("The sun has risen.", "You faint...", ...). */
112
+ function worldMsg(state: GameState, text: string): void {
113
+ const sink = state.world?.timedHooks?.onMessage;
114
+ if (sink) sink(text, "");
115
+ else state.msg?.(text);
116
+ }
117
+
118
+ /** player_of_has over the live derived state (racial + worn object flags). */
119
+ export function playerOfHasWorld(state: GameState, flag: number): boolean {
120
+ return state.playerState?.flags.has(flag) ?? false;
121
+ }
122
+
123
+ /** player_has over the live derived state (class / race player flags). */
124
+ export function playerHasWorld(state: GameState, flag: number): boolean {
125
+ return state.playerState?.pflags.has(flag) ?? false;
126
+ }
127
+
128
+ /** state.dam_red / state.perc_dam_red from the last calc_bonuses (else zero). */
129
+ function worldReduction(state: GameState): DamageReduction {
130
+ const ps = state.playerState;
131
+ if (!ps) return { damRed: 0, percDamRed: 0 };
132
+ return { damRed: ps.damRed, percDamRed: ps.percDamRed };
133
+ }
134
+
135
+ /** A TakeHitTarget view whose chp / is_dead writes back to the state. */
136
+ function worldTakeHitTarget(state: GameState): TakeHitTarget {
137
+ const p = state.actor.player;
138
+ return {
139
+ get chp(): number {
140
+ return p.chp;
141
+ },
142
+ set chp(v: number) {
143
+ p.chp = v;
144
+ },
145
+ mhp: p.mhp,
146
+ lev: p.lev,
147
+ get isDead(): boolean {
148
+ return state.isDead;
149
+ },
150
+ set isDead(v: boolean) {
151
+ state.isDead = v;
152
+ },
153
+ timed: p.timed,
154
+ /* Bug fix (verify t2verify__options-settings-screen): "hitpoint_warn" is
155
+ * not a boolean option name (it is the scalar OptionState.hitpointWarn
156
+ * field), so the old `state.options?.get("hitpoint_warn")` always
157
+ * returned false and the low-hp warning threshold collapsed to 0. */
158
+ hitpointWarn: state.options?.hitpointWarn ?? DEFAULT_HITPOINT_WARN,
159
+ };
160
+ }
161
+
162
+ /** player_apply_damage_reduction on the live player. */
163
+ export function applyWorldDamageReduction(state: GameState, dam: number): number {
164
+ return playerApplyDamageReduction(worldTakeHitTarget(state), worldReduction(state), dam);
165
+ }
166
+
167
+ /**
168
+ * take_hit on the live player, always threading state.rng so the bloodlust
169
+ * death-save randint0(10) (player-util.c L232) is drawn faithfully for every
170
+ * DoT source, not just the bloodlust over-exert block.
171
+ */
172
+ export function worldTakeHit(state: GameState, dam: number, killer: string): void {
173
+ const hooks: TakeHitHooks = {
174
+ rng: state.rng,
175
+ ...(state.world?.takeHitHooks ?? {}),
176
+ };
177
+ takeHit(worldTakeHitTarget(state), dam, killer, hooks);
178
+ }
179
+
180
+ /**
181
+ * player_check_terrain_damage (player-util.c:913-935): the fire damage a step
182
+ * onto fiery terrain (lava) would inflict right now. base 100+randint1(100),
183
+ * adjust_dam for the live fire resistance, OF_FEATHER halves. `actual` mirrors
184
+ * C's parameter: when true the mitigating fire-resist rune is learned
185
+ * (equip_learn_element, the actual damage path); when false (move_player's
186
+ * pre-move threshold/confirm check) nothing is learned. The RNG drawn is
187
+ * IDENTICAL either way, so calling this once for the pre-move check and once for
188
+ * the post-turn damage reproduces C's faithful double draw. Zero when the grid
189
+ * is not fiery or without a bound projection table.
190
+ */
191
+ export function playerCheckTerrainDamage(
192
+ state: GameState,
193
+ grid: Loc,
194
+ actual: boolean,
195
+ ): number {
196
+ if (!state.chunk.isFiery(grid)) return 0;
197
+ const projections = state.world?.projections;
198
+ if (!projections) return 0;
199
+
200
+ const res = state.playerState?.elInfo[ELEM.FIRE]?.resLevel ?? 0;
201
+ /* adjust_dam(actual=true): learn the fire-resist rune from the mitigation. */
202
+ if (actual) equipLearnElement(state.actor.player, state.runeEnv, PROJ.FIRE);
203
+ let dam = adjustDam(
204
+ state.rng,
205
+ projections,
206
+ PROJ.FIRE,
207
+ 100 + state.rng.randint1(100),
208
+ "randomise",
209
+ res,
210
+ );
211
+ /* Feather fall makes one lightfooted (player-util.c:926). */
212
+ if (playerOfHasWorld(state, OF.FEATHER)) dam = Math.trunc(dam / 2);
213
+ return dam;
214
+ }
215
+
216
+ /**
217
+ * player_take_terrain_damage (player-util.c:913-966): fiery terrain (lava) burns
218
+ * the player once per acted turn while they stand on it (called at the
219
+ * game-world.c:864 seam, after the command uses energy). Draws the actual fire
220
+ * damage via playerCheckTerrainDamage(actual=true), then damage reduction, the
221
+ * feature hurt message, inven_damage(PROJ_FIRE) on the RAW damage, and take_hit
222
+ * with the die message. Returns true if the player died.
223
+ */
224
+ export function playerTakeTerrainDamage(state: GameState): boolean {
225
+ const grid = state.actor.grid;
226
+ const dam = playerCheckTerrainDamage(state, grid, true);
227
+ if (dam <= 0) return false;
228
+
229
+ const feat = state.chunk.feature(grid);
230
+ /* Inventory damage is on the RAW incoming damage; the player takes the
231
+ * reduced amount (player-util.c:954-965). */
232
+ const reduced = applyWorldDamageReduction(state, dam);
233
+ const damText =
234
+ reduced > 0 && state.options?.get("show_damage") ? ` (${reduced})` : "";
235
+ worldMsg(state, `${feat.hurtMsg}${damText}`);
236
+ invenDamage(state, PROJ.FIRE, dam);
237
+ worldTakeHit(state, reduced, feat.dieMsg);
238
+ return state.isDead;
239
+ }
240
+
241
+ /**
242
+ * player_over_exert (player-util.c L820): random bad stuff from over-exertion.
243
+ * Tests each PY_EXERT_* flag in SOURCE if-block order (CON, FAINT, SCRAMBLE,
244
+ * CUT, CONF, HALLU, SLOW, HP), drawing randint0(100) per set flag and, on a
245
+ * hit, randint1(amount) (or the CON perm sub-roll). Returns true if the player
246
+ * died in the HP branch.
247
+ */
248
+ export function playerOverExert(
249
+ state: GameState,
250
+ flag: number,
251
+ chance: number,
252
+ amount: number,
253
+ ): boolean {
254
+ if (chance <= 0) return false;
255
+
256
+ const p = state.actor.player;
257
+ const rng = state.rng;
258
+ const env = state.world;
259
+ const table = env?.timedTable;
260
+ const thooks = env?.timedHooks ?? {};
261
+ const inc = (idx: number, amt: number, check: boolean): void => {
262
+ const eff = table?.[idx];
263
+ if (eff) playerIncTimed(p, eff, amt, true, true, check, thooks);
264
+ };
265
+
266
+ /* CON damage. */
267
+ if (flag & PY_EXERT_CON) {
268
+ if (rng.randint0(100) < chance) {
269
+ const perm = rng.randint0(100) < Math.trunc(chance / 2) && chance >= 50;
270
+ worldMsg(state, "You have damaged your health!");
271
+ playerStatDec(p, STAT.CON, perm);
272
+ }
273
+ }
274
+
275
+ /* Fainting. */
276
+ if (flag & PY_EXERT_FAINT) {
277
+ if (rng.randint0(100) < chance) {
278
+ worldMsg(state, "You faint from the effort!");
279
+ inc(TMD.PARALYZED, rng.randint1(amount), false);
280
+ }
281
+ }
282
+
283
+ /* Scrambled stats. */
284
+ if (flag & PY_EXERT_SCRAMBLE) {
285
+ if (rng.randint0(100) < chance) inc(TMD.SCRAMBLE, rng.randint1(amount), true);
286
+ }
287
+
288
+ /* Cut damage. */
289
+ if (flag & PY_EXERT_CUT) {
290
+ if (rng.randint0(100) < chance) {
291
+ worldMsg(state, "Wounds appear on your body!");
292
+ inc(TMD.CUT, rng.randint1(amount), false);
293
+ }
294
+ }
295
+
296
+ /* Confusion. */
297
+ if (flag & PY_EXERT_CONF) {
298
+ if (rng.randint0(100) < chance) inc(TMD.CONFUSED, rng.randint1(amount), true);
299
+ }
300
+
301
+ /* Hallucination. */
302
+ if (flag & PY_EXERT_HALLU) {
303
+ if (rng.randint0(100) < chance) inc(TMD.IMAGE, rng.randint1(amount), true);
304
+ }
305
+
306
+ /* Slowing. */
307
+ if (flag & PY_EXERT_SLOW) {
308
+ if (rng.randint0(100) < chance) {
309
+ worldMsg(state, "You feel suddenly lethargic.");
310
+ inc(TMD.SLOW, rng.randint1(amount), false);
311
+ }
312
+ }
313
+
314
+ /* HP. */
315
+ if (flag & PY_EXERT_HP) {
316
+ if (rng.randint0(100) < chance) {
317
+ const dam = applyWorldDamageReduction(state, rng.randint1(amount));
318
+ worldMsg(state, "You cry out in sudden pain!");
319
+ worldTakeHit(state, dam, "over-exertion");
320
+ }
321
+ }
322
+
323
+ return state.isDead;
324
+ }
325
+
326
+ /**
327
+ * Damage (or healing) over time (game-world.c L586-651): poison, cuts,
328
+ * bloodlust over-exert, timed heal and Black Breath, in order. Each take_hit
329
+ * can end the game; returns true when the player died so processWorld
330
+ * early-returns.
331
+ */
332
+ export function processDamageOverTime(state: GameState): boolean {
333
+ const p = state.actor.player;
334
+ const table = state.world?.timedTable;
335
+
336
+ /* Take damage from poison. */
337
+ if (p.timed[TMD.POISONED]) {
338
+ worldTakeHit(state, applyWorldDamageReduction(state, 1), "poison");
339
+ if (state.isDead) return true;
340
+ }
341
+
342
+ /* Take damage from cuts, worse from serious cuts. */
343
+ if (p.timed[TMD.CUT]) {
344
+ let i: number;
345
+ const cut = table?.[TMD.CUT];
346
+ if (playerHasWorld(state, PF.ROCK)) {
347
+ /* Rock players just maintain. */
348
+ i = 0;
349
+ } else if (
350
+ cut &&
351
+ (playerTimedGradeEq(p, cut, "Mortal Wound") ||
352
+ playerTimedGradeEq(p, cut, "Deep Gash"))
353
+ ) {
354
+ i = 3;
355
+ } else if (cut && playerTimedGradeEq(p, cut, "Severe Cut")) {
356
+ i = 2;
357
+ } else {
358
+ i = 1;
359
+ }
360
+ worldTakeHit(state, applyWorldDamageReduction(state, i), "a fatal wound");
361
+ if (state.isDead) return true;
362
+ }
363
+
364
+ /* Side effects of diminishing bloodlust. */
365
+ if (p.timed[TMD.BLOODLUST]) {
366
+ playerOverExert(
367
+ state,
368
+ PY_EXERT_HP | PY_EXERT_CUT | PY_EXERT_SLOW,
369
+ Math.max(0, 10 - (p.timed[TMD.BLOODLUST] ?? 0)),
370
+ Math.trunc(p.chp / 10),
371
+ );
372
+ if (state.isDead) return true;
373
+ }
374
+
375
+ /* Timed healing (EF_HEAL_HP "30": a clamped 30-HP heal with its message). */
376
+ if (p.timed[TMD.HEAL]) {
377
+ if (p.chp < p.mhp) {
378
+ const num = 30;
379
+ p.chp += num;
380
+ if (p.chp >= p.mhp) {
381
+ p.chp = p.mhp;
382
+ p.chpFrac = 0;
383
+ }
384
+ /* 15 <= 30 < 35 grade bucket (effect-handler-attack.c L243). */
385
+ worldMsg(state, "You feel much better.");
386
+ }
387
+ }
388
+
389
+ /* Effects of Black Breath: three separate one_in_(2) rolls in order. */
390
+ if (p.timed[TMD.BLACKBREATH]) {
391
+ if (state.rng.oneIn(2)) {
392
+ worldMsg(state, "The Black Breath sickens you.");
393
+ playerStatDec(p, STAT.CON, false);
394
+ }
395
+ if (state.rng.oneIn(2)) {
396
+ worldMsg(state, "The Black Breath saps your strength.");
397
+ playerStatDec(p, STAT.STR, false);
398
+ }
399
+ if (state.rng.oneIn(2)) {
400
+ /* Life draining. */
401
+ const drain =
402
+ 100 + Math.trunc(p.exp / 100) * state.z.lifeDrainPercent;
403
+ worldMsg(state, "The Black Breath dims your life force.");
404
+ playerExpLose(p, drain, false, expDepsOf(state));
405
+ }
406
+ }
407
+
408
+ return false;
409
+ }
410
+
411
+ /** A default ExpDeps ({ rng }) when the world env supplies none. */
412
+ function expDepsOf(state: GameState): ExpDeps {
413
+ return state.world?.expDeps ?? { rng: state.rng };
414
+ }
415
+
416
+ /**
417
+ * Digest (game-world.c L656-692): the normal turn%100 digestion, the ungated
418
+ * fast-metabolism drain while TMD_HEAL is active, and the gorged branch. All
419
+ * decrements route through player_dec_timed so hunger grade messages fire.
420
+ * Returns true when the gorged branch ran (PU_BONUS).
421
+ */
422
+ export function digestFood(state: GameState): boolean {
423
+ const p = state.actor.player;
424
+ const table = state.world?.timedTable;
425
+ const foodEff = table?.[TMD.FOOD];
426
+ if (!foodEff) return false;
427
+ const thooks = state.world?.timedHooks ?? {};
428
+ const dec = (v: number): void => {
429
+ playerDecTimed(p, foodEff, v, false, true, thooks);
430
+ };
431
+
432
+ if (!playerTimedGradeEq(p, foodEff, "Full")) {
433
+ /* Digest normally. */
434
+ if (state.turn % 100 === 0) {
435
+ /* Basic digestion rate based on speed. */
436
+ let i = turnEnergy(state.actor.speed, state.z.moveEnergy);
437
+ /* Adjust for food value. */
438
+ i = Math.trunc((i * 100) / state.z.foodValue);
439
+ /* Regeneration takes more food. */
440
+ if (playerOfHasWorld(state, OF.REGEN)) i *= 2;
441
+ /* Slow digestion takes less food. */
442
+ if (playerOfHasWorld(state, OF.SLOW_DIGEST)) i = Math.trunc(i / 2);
443
+ /* Minimal digestion. */
444
+ if (i < 1) i = 1;
445
+ dec(i);
446
+ }
447
+
448
+ /* Fast metabolism (ungated - runs every world tick while healing). */
449
+ if (p.timed[TMD.HEAL]) {
450
+ dec(8 * state.z.foodValue);
451
+ if ((p.timed[TMD.FOOD] ?? 0) < state.z.foodHungry) {
452
+ const healEff = table?.[TMD.HEAL];
453
+ if (healEff) playerSetTimed(p, healEff, 0, true, true, thooks);
454
+ }
455
+ }
456
+ return false;
457
+ }
458
+
459
+ /* Digest quickly when gorged. */
460
+ dec(Math.trunc(5000 / state.z.foodValue));
461
+ return true;
462
+ }
463
+
464
+ /**
465
+ * Faint or starving (game-world.c L694-716): a Faint player may pass out
466
+ * (one_in_(10) then randint0(5)); a Starving player takes take_hit. Returns
467
+ * true when the player died.
468
+ */
469
+ export function processFaintOrStarve(state: GameState): boolean {
470
+ const p = state.actor.player;
471
+ const table = state.world?.timedTable;
472
+ const foodEff = table?.[TMD.FOOD];
473
+ if (!foodEff) return false;
474
+
475
+ if (playerTimedGradeEq(p, foodEff, "Faint")) {
476
+ /* Faint occasionally. */
477
+ if (!p.timed[TMD.PARALYZED] && state.rng.oneIn(10)) {
478
+ worldMsg(state, "You faint from the lack of food.");
479
+ disturb(state);
480
+ const paralyzed = table?.[TMD.PARALYZED];
481
+ if (paralyzed) {
482
+ /* Faint (bypass free action). */
483
+ playerIncTimed(
484
+ p,
485
+ paralyzed,
486
+ 1 + state.rng.randint0(5),
487
+ true,
488
+ true,
489
+ false,
490
+ state.world?.timedHooks ?? {},
491
+ );
492
+ }
493
+ }
494
+ } else if (playerTimedGradeEq(p, foodEff, "Starving")) {
495
+ /* Calculate damage. */
496
+ const i = Math.trunc((state.z.foodStarve - (p.timed[TMD.FOOD] ?? 0)) / 10);
497
+ worldTakeHit(state, applyWorldDamageReduction(state, i), "starvation");
498
+ if (state.isDead) return true;
499
+ }
500
+
501
+ return false;
502
+ }
503
+
504
+ /**
505
+ * player_update_light (player-util.c L682): burn one turn of fuel in the
506
+ * wielded light, dim / out messages, and delete a burnt-out torch. Draws no
507
+ * RNG. Returns true when the light state changed enough to want a bonus recalc
508
+ * (the light went out or a torch was consumed).
509
+ */
510
+ export function playerUpdateLight(state: GameState): boolean {
511
+ const p = state.actor.player;
512
+ const lightSlot = p.body.slots.findIndex((s) => s.type === "LIGHT");
513
+ if (lightSlot < 0) return false;
514
+ const handle = p.equipment[lightSlot] ?? 0;
515
+ const obj = handle ? gearGet(state.gear, handle) : null;
516
+ let changed = false;
517
+
518
+ /* Burn some fuel in the current light. */
519
+ if (obj && tvalIsLight(obj.tval)) {
520
+ let burnFuel = true;
521
+
522
+ /* No wanton burning of light during the day in the town. */
523
+ if (state.chunk.depth === 0 && isDaytime(state.turn, state.z.dayLength)) {
524
+ burnFuel = false;
525
+ }
526
+ /* The NO_FUEL flag: well... */
527
+ if (obj.flags.has(OF.NO_FUEL)) burnFuel = false;
528
+
529
+ /* Use some fuel (except on artifacts, or during the day). */
530
+ if (burnFuel && obj.timeout > 0) {
531
+ obj.timeout--;
532
+
533
+ /* Special treatment when blind. */
534
+ if (p.timed[TMD.BLIND]) {
535
+ /* Save some light for later. */
536
+ if (obj.timeout === 0) obj.timeout++;
537
+ } else if (obj.timeout === 0) {
538
+ /* The light is now out. */
539
+ disturb(state);
540
+ worldMsg(state, "Your light has gone out!");
541
+ changed = true;
542
+
543
+ /* If it's a torch, now is the time to delete it. */
544
+ if (obj.flags.has(OF.BURNS_OUT)) {
545
+ gearObjectForUse(state.gear, p, handle, 1);
546
+ }
547
+ } else if (obj.timeout < 50 && obj.timeout % 20 === 0) {
548
+ /* The light is getting dim. */
549
+ disturb(state);
550
+ worldMsg(state, "Your light is growing faint.");
551
+ }
552
+ }
553
+ }
554
+
555
+ /* Calculate torch radius (PU_TORCH). */
556
+ return changed;
557
+ }
558
+
559
+ /**
560
+ * recharged_notice (game-world.c L147): tell the player when an inscribed ("!!")
561
+ * or (with notify_recharge) any item recharges. Message-only; no RNG.
562
+ */
563
+ function rechargedNotice(state: GameState, obj: GameObject, all: boolean): void {
564
+ let notify = state.options?.get("notify_recharge") ?? false;
565
+ if (!notify && obj.note && obj.note.includes("!!")) notify = true;
566
+ if (!notify) return;
567
+
568
+ disturb(state);
569
+ const name = obj.kind.name;
570
+ if (obj.number > 1) {
571
+ worldMsg(state, all ? `Your ${name} have recharged.` : `One of your ${name} has recharged.`);
572
+ } else if (obj.artifact) {
573
+ worldMsg(state, `The ${name} has recharged.`);
574
+ } else {
575
+ worldMsg(state, `Your ${name} has recharged.`);
576
+ }
577
+ }
578
+
579
+ /**
580
+ * recharge_objects (game-world.c L197): recharge activatable equipment, rods in
581
+ * the pack and rods on the floor. randcalc AVERAGE is deterministic, so no RNG.
582
+ */
583
+ export function rechargeObjects(state: GameState): void {
584
+ const rng = state.rng;
585
+ const p = state.actor.player;
586
+
587
+ /* Recharge equipment (activatable objects). */
588
+ for (const handle of p.equipment) {
589
+ if (!handle) continue;
590
+ const obj = gearGet(state.gear, handle);
591
+ if (!obj) continue;
592
+ if (rechargeTimeout(rng, obj)) rechargedNotice(state, obj, true);
593
+ }
594
+
595
+ /* Recharge the pack (rods only). */
596
+ for (const handle of state.gear.pack) {
597
+ const obj = gearGet(state.gear, handle);
598
+ if (!obj) continue;
599
+ const dischargedStack = numberCharging(rng, obj) === obj.number;
600
+ if (tvalCanHaveTimeout(obj.tval) && rechargeTimeout(rng, obj)) {
601
+ if (obj.timeout === 0) rechargedNotice(state, obj, true);
602
+ else if (dischargedStack) rechargedNotice(state, obj, false);
603
+ }
604
+ }
605
+
606
+ /* Recharge other level objects (rods on the floor). */
607
+ for (const pile of state.floor.values()) {
608
+ for (const obj of pile) {
609
+ if (tvalCanHaveTimeout(obj.tval)) rechargeTimeout(rng, obj);
610
+ }
611
+ }
612
+ }
613
+
614
+ /** equip_learn_flag(OF_DRAIN_EXP) through the live rune environment. */
615
+ export function processExpDrain(state: GameState): void {
616
+ const p = state.actor.player;
617
+ if (!playerOfHasWorld(state, OF.DRAIN_EXP)) return;
618
+
619
+ if (p.exp > 0 && state.rng.oneIn(10)) {
620
+ const d =
621
+ state.rng.damroll(10, 6) +
622
+ Math.trunc(p.exp / 100) * state.z.lifeDrainPercent;
623
+ playerExpLose(p, Math.trunc(d / 10), false, expDepsOf(state));
624
+ }
625
+
626
+ equipLearnFlag(p, state.runeEnv, OF.DRAIN_EXP);
627
+ }
628
+
629
+ /**
630
+ * play_ambient_sound (game-world.c L257): pick a MSG_AMBIENT_* by depth and
631
+ * day / night and emit it through state.sound.
632
+ */
633
+ export function playAmbientSound(state: GameState): void {
634
+ const depth = state.chunk.depth;
635
+ const day = isDaytime(state.turn, state.z.dayLength);
636
+ let msgt: string;
637
+ if (depth === 0) msgt = day ? "AMBIENT_DAY" : "AMBIENT_NITE";
638
+ else if (depth <= 20) msgt = "AMBIENT_DNG1";
639
+ else if (depth <= 40) msgt = "AMBIENT_DNG2";
640
+ else if (depth <= 60) msgt = "AMBIENT_DNG3";
641
+ else if (depth <= 80) msgt = "AMBIENT_DNG4";
642
+ else msgt = "AMBIENT_DNG5";
643
+ const idx = (MSG as Record<string, number>)[msgt];
644
+ if (idx !== undefined) state.sound?.(idx);
645
+ }
646
+
647
+ /**
648
+ * monster_index_move (mon-make.c L418): move the monster in slot i1 into slot
649
+ * i2, repairing every reference that names it by index.
650
+ *
651
+ * Only compact_monsters' excise pass calls this upstream, and the port did not
652
+ * have it at all - see compactMonsters below for why that mattered.
653
+ */
654
+ export function monsterIndexMove(
655
+ state: GameState,
656
+ i1: number,
657
+ i2: number,
658
+ ): void {
659
+ /* Do nothing. */
660
+ if (i1 === i2) return;
661
+
662
+ /* Old monster. */
663
+ const mon = state.monsters[i1];
664
+ if (!mon) return;
665
+
666
+ /* Update the cave. */
667
+ state.chunk.setMon(mon.grid, i2);
668
+
669
+ /* Update midx. */
670
+ mon.midx = i2;
671
+
672
+ /* Update group. Upstream quit()s on a miss and the monster_groups_verify()
673
+ * after it is unreachable; throwing is the port's quit. */
674
+ if (!monsterGroupChangeIndex(state, i2, i1)) {
675
+ throw new Error(`mon: bad monster group info moving ${i1} -> ${i2}`);
676
+ }
677
+
678
+ /* Repair objects being carried by monster. */
679
+ for (const obj of mon.heldObj) obj.heldMIdx = i2;
680
+
681
+ /* Move mimicked objects (heh). mon.mimickedObj is the port's presence
682
+ * marker; the live link is the floor object's mimickingMIdx (mon-place.ts
683
+ * createMimickedObject), and it sits on the monster's own grid. */
684
+ if (mon.mimickedObj) {
685
+ for (const obj of floorPile(state, mon.grid)) {
686
+ if (obj.mimickingMIdx === i1) obj.mimickingMIdx = i2;
687
+ }
688
+ }
689
+
690
+ /* Update the target, and the health bar. Upstream re-points both at
691
+ * cave_monster(c, i2), which after the memcpy below is this same monster; the
692
+ * port moves the object itself, so the Monster reference healthWho holds
693
+ * stays valid and only the numeric target needs rewriting. */
694
+ if (state.target.midx === i1) state.target.midx = i2;
695
+
696
+ /* Move monster, and wipe the hole. */
697
+ state.monsters[i2] = mon;
698
+ state.monsters[i1] = null;
699
+ }
700
+
701
+ /**
702
+ * compact_monsters (mon-make.c L482): when the monster list is overcrowded,
703
+ * delete num_to_compact monsters, getting more vicious each iteration, and then
704
+ * - ALWAYS - excise the holes so the list is dense again. Each candidate that
705
+ * survives the deletion pass draws randint0(100) (the saving throw), a variable
706
+ * number of draws that MUST be reproduced for save determinism on breeder-heavy
707
+ * levels.
708
+ *
709
+ * The excise pass at the bottom is not conditional on num_to_compact, and the
710
+ * port used to return early for num_to_compact == 0 on the reasoning that the
711
+ * "too many holes" call was RNG-free and "handled by slot reuse". Both halves
712
+ * were wrong: nothing reused slots (mon_pop appends below the cap, see
713
+ * context.ts), and so the port never excised a hole at all - under either
714
+ * argument. cave_monster_max therefore grew monotonically for the life of a
715
+ * level, which shifts every midx away from upstream's and, with mon_pop's bound
716
+ * in place, would hit level_monster_max far earlier than the C does.
717
+ */
718
+ export function compactMonsters(state: GameState, numToCompact: number): void {
719
+ /* Message, only if compacting (mon-make.c:489-491). */
720
+ if (numToCompact) state.msg?.("Compacting monsters...");
721
+
722
+ let numCompacted = 0;
723
+ for (let iter = 1; numCompacted < numToCompact; iter++) {
724
+ /* Get more vicious each iteration. */
725
+ const maxLev = 5 * iter;
726
+ /* Get closer each iteration. */
727
+ const minDis = 5 * (20 - iter);
728
+
729
+ for (let mIdx = 1; mIdx < state.monsters.length; mIdx++) {
730
+ const mon = state.monsters[mIdx];
731
+ /* Skip dead / empty slots. */
732
+ if (!mon) continue;
733
+ /* High level monsters start out immune. */
734
+ if (mon.race.level > maxLev) continue;
735
+ /* Ignore nearby monsters. */
736
+ if (minDis > 0 && mon.cdis < minDis) continue;
737
+
738
+ /* Saving throw chance. */
739
+ let chance = 90;
740
+ /* Only compact Quest monsters in emergencies. */
741
+ if (mon.race.flags.has(RF.QUESTOR) && iter < 1000) chance = 100;
742
+ /* Try not to compact unique monsters. */
743
+ if (monsterIsUnique(mon)) chance = 99;
744
+
745
+ /* All monsters get a saving throw. */
746
+ if (state.rng.randint0(100) < chance) continue;
747
+
748
+ /* Delete the monster. */
749
+ deleteMonster(state, mIdx);
750
+ numCompacted++;
751
+ }
752
+ }
753
+
754
+ /* Excise dead monsters (backwards!). monsterMax shrinks as we go, exactly as
755
+ * c->mon_max-- does, so the monster pulled down into a hole always comes from
756
+ * a slot this scan has already passed. */
757
+ for (let mIdx = state.monsters.length - 1; mIdx >= 1; mIdx--) {
758
+ /* Skip real monsters. */
759
+ if (state.monsters[mIdx]) continue;
760
+
761
+ /* Move last monster into open hole, and compress mon_max. */
762
+ monsterIndexMove(state, state.monsters.length - 1, mIdx);
763
+ state.monsters.length--;
764
+ }
765
+ }
766
+
767
+ /** cave_monster_count (cave.c): the number of live monsters. */
768
+ export function caveMonsterCount(state: GameState): number {
769
+ let n = 0;
770
+ for (let i = 1; i < state.monsters.length; i++) {
771
+ if (state.monsters[i]) n++;
772
+ }
773
+ return n;
774
+ }
775
+
776
+ /** The PY_EXERT_* over-exertion flags, exported for callers and tests. */
777
+ export const PY_EXERT = {
778
+ CON: PY_EXERT_CON,
779
+ FAINT: PY_EXERT_FAINT,
780
+ SCRAMBLE: PY_EXERT_SCRAMBLE,
781
+ CUT: PY_EXERT_CUT,
782
+ CONF: PY_EXERT_CONF,
783
+ HALLU: PY_EXERT_HALLU,
784
+ SLOW: PY_EXERT_SLOW,
785
+ HP: PY_EXERT_HP,
786
+ } as const;