@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,739 @@
1
+ /**
2
+ * The player-action layer: a string-keyed action registry and the
3
+ * process_player() command pump, ported from reference/src/cmd-core.c
4
+ * (cmdq_pop / the command dispatch), game-world.c (process_player and
5
+ * process_player_cleanup: player->energy -= energy_use) and the move/attack
6
+ * path of cmd-cave.c / player-util.c / player-attack.c (Angband 4.2.6).
7
+ *
8
+ * The registry is the moddability seam (decision 13): a command code maps to
9
+ * an action that mutates the game state and returns the energy it spent
10
+ * (0 = a free, non-turn-consuming command). Mods add or replace codes without
11
+ * touching the core. The built-in actions cover walk (move / melee an
12
+ * adjacent monster), hold/rest (spend a turn in place) and the stair commands
13
+ * (signal a level change). Every other command code is registered as a stub
14
+ * that spends no energy and is ledgered as deferred.
15
+ *
16
+ * process_player() reads queued commands through the injected provider
17
+ * (state.nextCommand) so the loop never blocks on real input, and drains free
18
+ * commands until one uses energy or the queue empties, exactly as the
19
+ * upstream do-while around cmdq_pop.
20
+ */
21
+ import { FEAT, MON_MSG, MON_TMD, MSG, OF, PF, STAT, TF, TMD, TRF } from "../generated/index.js";
22
+ import { DDGRID, DDGRID_DDD, locSum } from "../loc.js";
23
+ import { pyAttack } from "../combat/melee.js";
24
+ import { learnBrandSlayFromMelee } from "../combat/brand-slay.js";
25
+ import { getLore } from "../mon/lore.js";
26
+ import { MDESC, monsterDesc } from "../mon/desc.js";
27
+ import { monsterIsCamouflaged, monsterIsObvious, monsterIsVisible, } from "../mon/predicate.js";
28
+ import { monsterWake } from "../mon/take-hit.js";
29
+ import { MON_TMD_FLG_NOTIFY, monIncTimed } from "../mon/timed.js";
30
+ import { equipLearnFlag, equipLearnOnMeleeAttack } from "../obj/knowledge.js";
31
+ import { playerClearTimed, playerTimedGradeEq } from "../player/timed.js";
32
+ import { arenaInterceptDeath, deleteMonster, movePlayer, squareMonster } from "./context.js";
33
+ import { gearGet } from "./gear.js";
34
+ import { floorPile } from "./floor.js";
35
+ import { isTrappedChest } from "../obj/chest.js";
36
+ import { knownIsClosedDoor, knownIsEnterable, knownIsRubble, knownObject, squareForget, squareIsKnown, squareMemorize, } from "./known.js";
37
+ import { squareIsSeen } from "../world/view.js";
38
+ import { playerConfuseDir } from "./obj-cmd.js";
39
+ import { disturb } from "./player-path.js";
40
+ import { playerAdjustManaPrecise } from "./loop.js";
41
+ import { formatMonsterMessage } from "./mon-message.js";
42
+ import { squareIsWebbed, squareRemoveAllTraps, squareTrap } from "./trap.js";
43
+ import { PY_EXERT, playerCheckTerrainDamage, playerOverExert } from "./world.js";
44
+ /**
45
+ * The action registry (moddable command table). Built-ins can be replaced and
46
+ * new codes added; unknown codes fall back to a no-energy stub.
47
+ */
48
+ export class ActionRegistry {
49
+ actions = new Map();
50
+ /** Register (or replace) the action for a command code. */
51
+ register(code, action) {
52
+ this.actions.set(code, action);
53
+ }
54
+ has(code) {
55
+ return this.actions.has(code);
56
+ }
57
+ /** The action for a code, or undefined if none is registered. */
58
+ get(code) {
59
+ return this.actions.get(code);
60
+ }
61
+ codes() {
62
+ return Array.from(this.actions.keys());
63
+ }
64
+ }
65
+ /** Install the melee side-effect dependencies on the state (session wiring). */
66
+ export function installMeleeSideEffects(state, deps) {
67
+ state.meleeSideDeps = deps;
68
+ }
69
+ /** player_has over the computed player state, else race/class pflags. */
70
+ function playerHasPf(state, pf) {
71
+ const ps = state.playerState;
72
+ if (ps)
73
+ return ps.pflags.has(pf);
74
+ const p = state.actor.player;
75
+ return p.race.pflags.has(pf) || p.cls.pflags.has(pf);
76
+ }
77
+ /** player_of_has over the computed player state flags (equip + innate). */
78
+ function playerOfHasFlag(state, of) {
79
+ return state.playerState?.flags.has(of) ?? false;
80
+ }
81
+ /**
82
+ * Build the py_attack side-effect hooks (player-attack.c:669-1012) for an
83
+ * attack on `mon` at its current grid: the confusion brand, vampiric drain,
84
+ * bloodlust over-exertion, impact quake, shapechange verbs, shield bash and
85
+ * COMBAT_REGEN reward, each reading the live GameState. Wiring-dependent
86
+ * pieces (earthquake / heal effects, temporary brands) come from the
87
+ * installed MeleeSideDeps.
88
+ */
89
+ export function buildMeleeHooks(state, mon) {
90
+ const p = state.actor.player;
91
+ const deps = state.meleeSideDeps ?? {};
92
+ const grid = mon.grid;
93
+ const hooks = {
94
+ takeHit: {
95
+ ...(state.becomeAware ? { becomeAware: state.becomeAware } : {}),
96
+ },
97
+ /* Confusion attack (blow_side_effects, player-attack.c:672-677). */
98
+ attConf: (p.timed[TMD.ATT_CONF] ?? 0) > 0,
99
+ clearAttConf: () => {
100
+ /* player_clear_timed(p, TMD_ATT_CONF, true, false): route through the
101
+ * grade machinery for the on-end message when the world env is wired. */
102
+ const eff = state.world?.timedTable?.[TMD.ATT_CONF];
103
+ if (eff) {
104
+ playerClearTimed(p, eff, true, false, state.world?.timedHooks ?? {});
105
+ }
106
+ else {
107
+ p.timed[TMD.ATT_CONF] = 0;
108
+ }
109
+ },
110
+ confuseMonster: (m, dur) => {
111
+ monIncTimed(state.rng, m, MON_TMD.CONF, dur, MON_TMD_FLG_NOTIFY);
112
+ },
113
+ /* Vampiric drain (player-attack.c:877-881). */
114
+ attVamp: (p.timed[TMD.ATT_VAMP] ?? 0) > 0,
115
+ healPlayer: (amount) => {
116
+ if (deps.healHp) {
117
+ deps.healHp(amount);
118
+ return;
119
+ }
120
+ /* EF_HEAL_HP fallback: constant amount, no RNG. */
121
+ if (p.chp >= p.mhp || amount <= 0)
122
+ return;
123
+ p.chp += amount;
124
+ if (p.chp >= p.mhp) {
125
+ p.chp = p.mhp;
126
+ p.chpFrac = 0;
127
+ }
128
+ if (amount < 5)
129
+ state.msg?.("You feel a little better.");
130
+ else if (amount < 15)
131
+ state.msg?.("You feel better.");
132
+ else if (amount < 35)
133
+ state.msg?.("You feel much better.");
134
+ else
135
+ state.msg?.("You feel very good.");
136
+ },
137
+ /* Bloodlust over-exertion (player-attack.c:770-774, 871-874). */
138
+ bloodlust: (p.timed[TMD.BLOODLUST] ?? 0) > 0,
139
+ overExertScramble: () => {
140
+ state.msg?.("You feel strange...");
141
+ playerOverExert(state, PY_EXERT.SCRAMBLE, 20, 20);
142
+ },
143
+ overExertCon: () => {
144
+ state.msg?.("You feel something give way!");
145
+ playerOverExert(state, PY_EXERT.CON, 20, 0);
146
+ },
147
+ /* Impact earthquakes (player-attack.c:816-819, blow_after_effects). */
148
+ impact: playerOfHasFlag(state, OF.IMPACT),
149
+ learnImpact: () => {
150
+ equipLearnFlag(p, state.runeEnv, OF.IMPACT);
151
+ },
152
+ ...(deps.earthquake
153
+ ? {
154
+ earthquake: deps.earthquake,
155
+ monsterGone: () => squareMonster(state, grid) !== mon,
156
+ }
157
+ : {}),
158
+ ...(deps.temp ? { temp: deps.temp } : {}),
159
+ };
160
+ /* Shapechange blow substitution (player-attack.c:831-838). */
161
+ if (p.shape && p.shape.name !== "normal" && p.shape.blows.length > 0) {
162
+ hooks.shapeBlows = p.shape.blows;
163
+ }
164
+ /* Reward BGs with 5% of max SPs, min 1/2 point (player-attack.c:1002). */
165
+ if (playerHasPf(state, PF.COMBAT_REGEN)) {
166
+ hooks.combatRegen = () => {
167
+ const spGain = Math.trunc((Math.max(p.msp, 10) * 16384) / 5);
168
+ playerAdjustManaPrecise(p, spGain);
169
+ };
170
+ }
171
+ /* Shield bash (player-attack.c:897-978, attempt_shield_bash). */
172
+ if (playerHasPf(state, PF.SHIELD_BASH)) {
173
+ const armSlot = p.body.slots.findIndex((s) => s.type === "SHIELD");
174
+ const shield = armSlot >= 0 ? gearGet(state.gear, p.equipment[armSlot] ?? 0) : null;
175
+ hooks.shieldBash = {
176
+ shield,
177
+ dexInd: state.statInd?.[STAT.DEX] ?? 0,
178
+ strInd: state.statInd?.[STAT.STR] ?? 0,
179
+ playerWt: p.wt,
180
+ totalWeight: p.upkeep.totalWeight,
181
+ showDamage: state.options?.get("show_damage") ?? false,
182
+ msg: (text) => state.msg?.(text),
183
+ stunMonster: (m, dur) => {
184
+ monIncTimed(state.rng, m, MON_TMD.STUN, dur, 0);
185
+ },
186
+ confuseMonster: (m, dur) => {
187
+ monIncTimed(state.rng, m, MON_TMD.CONF, dur, 0);
188
+ },
189
+ };
190
+ }
191
+ return hooks;
192
+ }
193
+ /**
194
+ * The shared player-melee path: learn-on-attack wrapping, py_attack with the
195
+ * full side-effect hooks, the delayed "flees in terror" message, and kill
196
+ * handling. Returns the energy used (py_attack's energy_use). Used by the walk
197
+ * command and the bloodlust random attack.
198
+ */
199
+ export function attackMonster(state, target) {
200
+ /* Learning from the attack (player-attack.c L822 equip_learn_on_melee_
201
+ * attack; obj-slays.c learn_brand_slay_from_melee). */
202
+ const deps = state.meleeSideDeps ?? {};
203
+ const monVisible = monsterIsVisible(target);
204
+ /* health_track (player-attack.c:745-749): hitting something visible makes it
205
+ * the tracked monster, which is what puts it on the sidebar's health bar. This
206
+ * was absent, and melee is the commonest way a player acquires a tracked
207
+ * monster - so the bar stayed blank unless you explicitly targeted. Upstream
208
+ * does it per blow inside py_attack_real; the assignment is idempotent, so
209
+ * once before the blow loop is behaviourally identical. */
210
+ if (monVisible)
211
+ state.healthWho = target;
212
+ learnBrandSlayFromMelee(state.actor.player, state.runeEnv, state.actor.weapon, {
213
+ race: target.race,
214
+ visible: monVisible,
215
+ lore: getLore(state.lore, target.race),
216
+ }, deps.temp);
217
+ const result = pyAttack(state.rng, state.actor.player, state.actor.combat, state.actor.weapon, target, state.brands, state.slays, {
218
+ /* chance_of_melee_hit halves unseen targets (player-attack.c:104-109),
219
+ * and py_attack's delayed fear message uses the same visibility. */
220
+ monVisible,
221
+ /* player_of_has(p, OF_AFRAID): py_attack_real refuses the blow and prints
222
+ * "You are too afraid to attack X!" (player-attack.c L752). For obvious
223
+ * monsters do_cmd_walk_test short-circuits before this; the check here
224
+ * covers the invisible-monster walk and open/close/tunnel/alter-into-a-
225
+ * monster (attackBlocker), which upstream routes straight to py_attack. */
226
+ afraid: playerOfHasFlag(state, OF.AFRAID),
227
+ percentDamage: state.options?.get("birth_percent_damage") ?? false,
228
+ /* avail_energy = MIN(p->energy, move_energy); process_player only runs
229
+ * with energy >= move_energy, so the full-turn default is upstream's
230
+ * value at every real call site. */
231
+ moveEnergy: state.z.moveEnergy,
232
+ hooks: buildMeleeHooks(state, target),
233
+ });
234
+ equipLearnOnMeleeAttack(state.actor.player, state.runeEnv);
235
+ /* py_attack message slice: hand the blow-by-blow result to the shell for
236
+ * faithful "You hit/miss/slay the X" text (combat returns HitType keys
237
+ * only). Before deletion so the monster name is still resolvable. */
238
+ state.onMelee?.(target, result);
239
+ /* Hack - delay fear messages (player-attack.c:1023). */
240
+ if (result.monsterFled) {
241
+ const flee = formatMonsterMessage(target, MON_MSG.FLEE_IN_TERROR);
242
+ if (flee)
243
+ state.msg?.(flee);
244
+ }
245
+ if (result.monsterDied && !arenaInterceptDeath(state, target)) {
246
+ state.onPlayerKill?.(target);
247
+ deleteMonster(state, target.midx);
248
+ }
249
+ return result.energyUsed;
250
+ }
251
+ /**
252
+ * energy_per_move (player-util.c:323-328): the energy one step costs, taking
253
+ * extra moves (state->num_moves, OBJ_MOD_MOVES) into account.
254
+ */
255
+ export function energyPerMove(state) {
256
+ const num = state.playerState?.numMoves ?? 0;
257
+ const energy = state.z.moveEnergy;
258
+ return Math.trunc((energy * (1 + Math.abs(num) - num)) / (1 + Math.abs(num)));
259
+ }
260
+ /**
261
+ * player_attack_random_monster (player-util.c:794-813): melee a random
262
+ * adjacent monster ("You angrily lash out at a nearby foe!"). Draws the
263
+ * starting direction BEFORE the confusion check, as upstream declares
264
+ * `dir = randint0(8)` in the initializer. Returns the energy used, or -1 when
265
+ * no monster was attacked (the command proceeds normally).
266
+ */
267
+ export function playerAttackRandomMonster(state) {
268
+ const p = state.actor.player;
269
+ let dir = state.rng.randint0(8);
270
+ /* Confused players get a free pass. */
271
+ if ((p.timed[TMD.CONFUSED] ?? 0) > 0)
272
+ return -1;
273
+ /* Look for a monster, attack. */
274
+ for (let i = 0; i < 8; i++, dir++) {
275
+ const grid = locSum(state.actor.grid, DDGRID_DDD[dir % 8]);
276
+ const mon = squareMonster(state, grid);
277
+ if (mon && !monsterIsCamouflaged(mon)) {
278
+ /* Upstream sets energy_use = move_energy here, but py_attack resets it
279
+ * to zero and re-accumulates per blow (an upstream quirk preserved:
280
+ * the assignment is dead). */
281
+ state.msg?.("You angrily lash out at a nearby foe!");
282
+ return attackMonster(state, mon);
283
+ }
284
+ }
285
+ return -1;
286
+ }
287
+ /**
288
+ * walk: melee an adjacent monster (py_attack) or step onto a passable grid,
289
+ * refreshing FOV via the injected hook. Returns move_energy when the turn is
290
+ * spent, 0 when blocked by a wall (a bump uses no energy).
291
+ */
292
+ /**
293
+ * move_player's pre-step damaging-terrain check (cmd-cave.c L1156-1180), factored
294
+ * out for the web shell to run BEFORE it queues a walk so it can block on the
295
+ * yes/no confirm (the core walk action is synchronous and cannot await UI).
296
+ *
297
+ * Returns the feature's walk_msg when a deliberate (non-running) step onto fiery
298
+ * terrain (lava) would cost more than a third of current HP, so the shell prompts
299
+ * "Really step in?" and, on "no", cancels the move without spending a turn; null
300
+ * otherwise. Faithful conditions: only when the target grid is actually stepped
301
+ * onto (not a wall bump, not a monster attack) and the player is not confused
302
+ * (a confused player is never prompted). Like C, playerCheckTerrainDamage(false)
303
+ * is drawn whenever an unconfused player steps onto fiery terrain - prompt or not
304
+ * - which, with the post-turn damage draw, reproduces C's double draw; it learns
305
+ * no rune. The running-into-lava run_msg branch is a documented follow-up.
306
+ */
307
+ export function walkTerrainPrompt(state, rawDir) {
308
+ if (rawDir < 1 || rawDir > 9 || rawDir === 5)
309
+ return null;
310
+ /* move_player only checks damaging terrain when not confused (cmd-cave.c
311
+ * L1157); a confused player is never prompted and draws no terrain-check RNG
312
+ * here (the randomised direction and any damage happen later in walkAction). */
313
+ if ((state.actor.player.timed[TMD.CONFUSED] ?? 0) > 0)
314
+ return null;
315
+ const offset = DDGRID[rawDir];
316
+ const next = {
317
+ x: state.actor.grid.x + offset.x,
318
+ y: state.actor.grid.y + offset.y,
319
+ };
320
+ if (!state.chunk.inBounds(next))
321
+ return null;
322
+ /* The confirm is on move_player's actual-step branch, after the monster-attack
323
+ * and wall branches: no prompt when attacking a monster or bumping a wall. */
324
+ if (squareMonster(state, next))
325
+ return null;
326
+ if (!state.chunk.isPassable(next))
327
+ return null;
328
+ if (!state.chunk.isFiery(next))
329
+ return null;
330
+ const dam = playerCheckTerrainDamage(state, next, false);
331
+ /* Non-running walk: prompt only when the step costs more than a third of the
332
+ * player's current HP (cmd-cave.c L1174-1177). */
333
+ if (dam > Math.trunc(state.actor.player.chp / 3)) {
334
+ return state.chunk.feature(next).walkMsg;
335
+ }
336
+ return null;
337
+ }
338
+ export function walkAction(state, cmd) {
339
+ const rawDir = cmd.dir;
340
+ if (rawDir === undefined || rawDir < 1 || rawDir > 9 || rawDir === 5)
341
+ return 0;
342
+ /*
343
+ * The port merges do_cmd_walk and move_player into one action; upstream's
344
+ * run_step (player-path.c:2042) calls move_player DIRECTLY, skipping
345
+ * do_cmd_walk's preamble. `fromRun` says which caller this is, and the one
346
+ * place it currently changes behaviour is the known-blocked-grid wording
347
+ * below. The other two preamble steps are unreachable from a run either way:
348
+ * runAction refuses to start while confused (so player_confuse_dir cannot
349
+ * redirect a run step) and clears the web underfoot before the first step (and
350
+ * run_test treats a web ahead as a wall).
351
+ */
352
+ const fromRun = cmd.args?.["fromRun"] === true;
353
+ /*
354
+ * do_cmd_walk / do_cmd_jump (cmd-cave.c:1288-1297 / 1328-1337): standing in
355
+ * a web clears the web and spends the turn in place - no movement.
356
+ */
357
+ if (!fromRun && squareIsWebbed(state, state.actor.grid)) {
358
+ state.msg?.("You clear the web.");
359
+ /* square_remove_all_traps_of_type(web->tidx) (cmd-cave.c:1294). */
360
+ const web = squareTrap(state, state.actor.grid).find((t) => t.kind.flags.has(TRF.WEB) || t.kind.desc === "web");
361
+ squareRemoveAllTraps(state, state.actor.grid, web?.tidx ?? -1);
362
+ return state.z.moveEnergy;
363
+ }
364
+ /* do_cmd_walk (cmd-cave.c L1299-1302): confusion randomises the direction.
365
+ * When it redirects ("You are confused."), the move spends a full turn even
366
+ * if it dead-ends against a wall (energy_use is set to move_energy before the
367
+ * walkability test). The bump-open wrapper (installCaveCommands) applies
368
+ * confusion up front and sets confusedApplied so the RNG is drawn once; a
369
+ * direct caller (jump, borg, tests) rolls it here. */
370
+ let dir = rawDir;
371
+ let confused = false;
372
+ if (!cmd.confusedApplied) {
373
+ dir = playerConfuseDir(state, rawDir);
374
+ confused = dir !== rawDir;
375
+ }
376
+ const offset = DDGRID[dir];
377
+ const next = { x: state.actor.grid.x + offset.x, y: state.actor.grid.y + offset.y };
378
+ if (!state.chunk.inBounds(next))
379
+ return confused ? state.z.moveEnergy : 0;
380
+ const target = squareMonster(state, next);
381
+ if (target) {
382
+ /* move_player (cmd-cave.c L1071): a camouflaged monster in the way
383
+ * surprises the player instead of being attacked - reveal it and wake it,
384
+ * matching upstream's become_aware + monster_wake(mon, false, 100). */
385
+ if (monsterIsCamouflaged(target)) {
386
+ state.becomeAware?.(target);
387
+ monsterWake(state.rng, target, false, 100);
388
+ return state.z.moveEnergy;
389
+ }
390
+ /* do_cmd_walk_test (cmd-cave.c L1213-1226): an afraid player refuses to
391
+ * attack an obvious (visible, non-camouflaged) monster - it prints "You are
392
+ * too afraid to attack X!", learns OF_AFRAID from equipment, and makes no
393
+ * move. do_cmd_walk sets energy only AFTER the test passes, so an unconfused
394
+ * refusal costs nothing; a confused walk already spent its full turn. An
395
+ * invisible monster is not obvious, so it falls through to py_attack, whose
396
+ * own afraid branch (player-attack.c L752) fires there instead. */
397
+ if (monsterIsObvious(target) && playerOfHasFlag(state, OF.AFRAID)) {
398
+ state.msg?.(`You are too afraid to attack ${monsterDesc(target, MDESC.DEFAULT)}!`, "AFRAID");
399
+ state.sound?.(MSG.AFRAID);
400
+ equipLearnFlag(state.actor.player, state.runeEnv, OF.AFRAID);
401
+ return confused ? state.z.moveEnergy : 0;
402
+ }
403
+ /* py_attack: the shared melee path with the full blow side-effect suite.
404
+ * Energy is py_attack's own energy_use (blow_energy per blow), which may
405
+ * be less than a full turn, exactly as upstream. */
406
+ return attackMonster(state, target);
407
+ }
408
+ /* Bump into a wall: no step, no energy.
409
+ * A mod may take the walk over through the walkBlockedByDiggable hook
410
+ * (mod/hooks.ts) - the QoL mod digs here. autoDigStep returns null having drawn
411
+ * NO RNG when no mod supplied one, so faithful core still just bumps. */
412
+ if (!state.chunk.isPassable(next)) {
413
+ /* `!== null`, not `> 0`: a mod may handle the walk and charge ZERO energy
414
+ * (mod/hooks.ts), and `> 0` silently threw that case away by treating it as
415
+ * "no mod supplied one". */
416
+ const dug = state.autoDigStep?.(state, next) ?? null;
417
+ if (dug !== null)
418
+ return dug;
419
+ /*
420
+ * Upstream splits this by whether the player already KNOWS the grid, and
421
+ * the port previously used the known-grid wording for both cases.
422
+ *
423
+ * Unknown: do_cmd_walk_test lets the walk proceed (cmd-cave.c:1231-1232),
424
+ * so move_player runs and takes its own !square_ispassable branch
425
+ * (:1092-1106) - "You FEEL a wall blocking your way", because the player
426
+ * cannot see it - and MEMORIZES the grid. That mapping side effect is how
427
+ * you feel your way along an unlit corridor, and it was missing entirely:
428
+ * bumping an unseen wall left it unmapped forever and announced the wall as
429
+ * though it had been in plain sight.
430
+ *
431
+ * Known: do_cmd_walk_test messages "in the way!" and refuses the move
432
+ * (:1240-1253), reconciling player memory with what is really there.
433
+ *
434
+ * A closed door is silent in the KNOWN case only - the walk override
435
+ * (installCaveCommands) opens it (move_player's alter branch, :1079-1083) -
436
+ * so the base action stays a safe fallback when the override is absent
437
+ * (borg / unit tests). An UNKNOWN closed door does get its own line.
438
+ */
439
+ disturb(state);
440
+ const rubble = state.chunk.isRubble(next);
441
+ const door = state.chunk.isClosedDoor(next);
442
+ if (!squareIsKnown(state, next)) {
443
+ state.msg?.(rubble
444
+ ? "You feel a pile of rubble blocking your way."
445
+ : door
446
+ ? "You feel a door blocking your way."
447
+ : "You feel a wall blocking your way.", "HITWALL");
448
+ /* square_memorize + square_light_spot at each of :1096, :1100, :1104. */
449
+ squareMemorize(state, next);
450
+ }
451
+ else if (fromRun) {
452
+ /*
453
+ * move_player's OWN known-grid branch (cmd-cave.c:1108-1130), whose
454
+ * wording differs from do_cmd_walk_test's above: "blocking your way", not
455
+ * "in the way!". It is reached only when something other than a deliberate
456
+ * walk drives move_player, because a deliberate walk is refused by
457
+ * do_cmd_walk_test before move_player runs. In 4.2.6 that leaves exactly
458
+ * one route - run_step (player-path.c:2042). The whirlwind
459
+ * (effect-handler-attack.c:1838) is NOT a second route, contrary to the
460
+ * census note: it tests square_ispassable on every candidate grid and
461
+ * says "The way is barred." rather than moving into one.
462
+ *
463
+ * A closed door reports here too (unlike the walk case, where the walk
464
+ * override opens it), because run_step passes disarm only for a trap.
465
+ */
466
+ state.msg?.(rubble
467
+ ? "There is a pile of rubble blocking your way."
468
+ : door
469
+ ? "There is a door blocking your way."
470
+ : "There is a wall blocking your way.", "HITWALL");
471
+ /* The same memory reconciliation, per branch (:1112-1129). */
472
+ if (rubble) {
473
+ if (!knownIsRubble(state, next))
474
+ squareMemorize(state, next);
475
+ }
476
+ else if (door) {
477
+ if (!knownIsClosedDoor(state, next))
478
+ squareMemorize(state, next);
479
+ }
480
+ else if (knownIsEnterable(state, next)) {
481
+ squareForget(state, next);
482
+ }
483
+ }
484
+ else if (!door) {
485
+ state.msg?.(rubble
486
+ ? "There is a pile of rubble in the way!"
487
+ : "There is a wall in the way!", "HITWALL");
488
+ /* The memory reconciliation upstream performs alongside each message: a
489
+ * remembered floor/rubble/door that turns out to be a wall is forgotten
490
+ * (:1252-1257), and rubble the player misremembered is re-memorized
491
+ * (:1243-1246). */
492
+ if (rubble) {
493
+ if (!knownIsRubble(state, next))
494
+ squareMemorize(state, next);
495
+ }
496
+ else if (knownIsEnterable(state, next)) {
497
+ squareForget(state, next);
498
+ }
499
+ }
500
+ /* A confused redirect into a wall still spends the turn (cmd-cave.c
501
+ * L1300-1302); a deliberate bump refunds all energy. */
502
+ return confused ? state.z.moveEnergy : 0;
503
+ }
504
+ movePlayer(state, next);
505
+ if (state.updateFov)
506
+ state.updateFov(state);
507
+ search(state); /* player_handle_post_move (player-util.c:1633-1634). */
508
+ /* Autopickup on the new grid (upstream queues CMD_AUTOPICKUP; its energy
509
+ * cost is folded into this step, see game/pickup.ts). */
510
+ const pickupCost = state.autoPickup ? state.autoPickup(state) : 0;
511
+ /* Trap / terrain consequences of the step (move_player -> hit_trap). */
512
+ state.onPlayerMoved?.(state, next);
513
+ /* energy_per_move (cmd-cave.c move_player L1163 via player-util.c:323):
514
+ * extra-moves items make steps cheaper (gap 2.3). */
515
+ return energyPerMove(state) + pickupCost;
516
+ }
517
+ /**
518
+ * jump (do_cmd_jump, cmd-cave.c:1319): "walk into a trap" - identical to
519
+ * do_cmd_walk except move_player is called with disarm=false (cmd-cave.c:1351),
520
+ * so a known disarmable trap is stepped onto rather than auto-disarmed. The
521
+ * cave-cmd walk wrapper only auto-disarms for code "walk"; jump falls through
522
+ * to the step path.
523
+ */
524
+ export function jumpAction(state, cmd) {
525
+ return walkAction(state, cmd);
526
+ }
527
+ /**
528
+ * search (player-util.c:1680-1715): reveal adjacent secret doors and the
529
+ * traps on known chests. The only RNG is place_closed_door's one_in_(4), then
530
+ * randint1(7) on success, once per discovered door in y/x scan order.
531
+ */
532
+ export function search(state) {
533
+ const p = state.actor.player;
534
+ if ((p.timed[TMD.BLIND] ?? 0) > 0 ||
535
+ !squareIsSeen(state.chunk, state.actor.grid) ||
536
+ (p.timed[TMD.CONFUSED] ?? 0) > 0 ||
537
+ (p.timed[TMD.IMAGE] ?? 0) > 0)
538
+ return;
539
+ for (let y = state.actor.grid.y - 1; y <= state.actor.grid.y + 1; y++) {
540
+ for (let x = state.actor.grid.x - 1; x <= state.actor.grid.x + 1; x++) {
541
+ const grid = { x, y };
542
+ if (!state.chunk.inBoundsFully(grid))
543
+ continue;
544
+ const flags = state.chunk.feature(grid).flags;
545
+ if (flags.has(TF.DOOR_ANY) && flags.has(TF.ROCK)) {
546
+ state.msg?.("You have found a secret door.");
547
+ state.chunk.setFeat(grid, FEAT.CLOSED);
548
+ if (state.rng.oneIn(4)) {
549
+ state.setDoorLock?.(grid, state.rng.randint1(7));
550
+ }
551
+ disturb(state);
552
+ }
553
+ /*
554
+ * The C tests knowledge PER OBJECT (`if (!obj->known || ...) continue;`),
555
+ * which has no exact analogue here: this port's object memory is per GRID
556
+ * (KnownObjectMemory holds the remembered pile head's glyph, not a shadow
557
+ * per object), so the closest check is "is this grid's pile remembered".
558
+ *
559
+ * For floor piles the two agree, because square_know_pile shadows the
560
+ * WHOLE pile at once -- either every object on the grid has a shadow or
561
+ * none does. They diverge only for an object added to an
562
+ * already-remembered grid since the last know_pile, e.g. a chest dropped
563
+ * onto a mapped floor: upstream will not discover its trap until the pile
564
+ * is known again, this will. Narrow, and recorded as a finding rather than
565
+ * faked, since a per-object shadow is a larger design change.
566
+ */
567
+ if (!knownObject(state, grid))
568
+ continue;
569
+ for (const obj of floorPile(state, grid)) {
570
+ if ((state.isIgnored?.(obj) ?? false) || !isTrappedChest(obj))
571
+ continue;
572
+ if (obj.knownPval !== obj.pval) {
573
+ state.msg?.("You have discovered a trap on the chest!");
574
+ obj.knownPval = obj.pval;
575
+ disturb(state);
576
+ }
577
+ }
578
+ }
579
+ }
580
+ }
581
+ /** hold / rest: stay put and spend a full turn. */
582
+ export function holdAction(state, _cmd) {
583
+ search(state);
584
+ return state.z.moveEnergy;
585
+ }
586
+ /**
587
+ * sleep (do_cmd_sleep, cmd-cave.c:1675): spend a full turn doing nothing.
588
+ * process_player injects CMD_SLEEP when the player is paralyzed or Knocked Out
589
+ * (game-world.c:965-968).
590
+ */
591
+ export function sleepAction(state, _cmd) {
592
+ return state.z.moveEnergy;
593
+ }
594
+ /**
595
+ * descend / ascend: signal a level change (player->upkeep->generate_level).
596
+ * The actual level generation and depth change are DEFERRED to the world
597
+ * integration; the loop observes the signal and clears it.
598
+ */
599
+ export function descendAction(state, _cmd) {
600
+ state.generateLevel = true;
601
+ return state.z.moveEnergy;
602
+ }
603
+ export function ascendAction(state, _cmd) {
604
+ state.generateLevel = true;
605
+ return state.z.moveEnergy;
606
+ }
607
+ /** A deferred command: consumes no turn (ledgered as not yet ported). */
608
+ export function stubAction(_state, _cmd) {
609
+ return 0;
610
+ }
611
+ /** Command codes registered as stubs (deferred; see game-loop.yaml).
612
+ * "pickup"/"autopickup" stubs are replaced by installPickup (game/pickup.ts);
613
+ * "run" is replaced by installRunning (game/player-path.ts). */
614
+ export const STUBBED_COMMANDS = [
615
+ "tunnel",
616
+ "cast",
617
+ "fire",
618
+ "throw",
619
+ "quaff",
620
+ "read",
621
+ "eat",
622
+ "use-staff",
623
+ "aim-wand",
624
+ "zap-rod",
625
+ "activate",
626
+ "pickup",
627
+ "drop",
628
+ "wield",
629
+ "takeoff",
630
+ "look",
631
+ "search",
632
+ "disarm",
633
+ "open",
634
+ "close",
635
+ ];
636
+ /** Build the default registry: the ported actions plus the deferred stubs. */
637
+ export function createDefaultRegistry() {
638
+ const reg = new ActionRegistry();
639
+ reg.register("walk", walkAction);
640
+ reg.register("jump", jumpAction);
641
+ reg.register("hold", holdAction);
642
+ reg.register("rest", holdAction);
643
+ reg.register("sleep", sleepAction);
644
+ reg.register("descend", descendAction);
645
+ reg.register("ascend", ascendAction);
646
+ for (const code of STUBBED_COMMANDS)
647
+ reg.register(code, stubAction);
648
+ return reg;
649
+ }
650
+ /**
651
+ * Command codes whose upstream game_cmds entry has can_use_energy = false
652
+ * (cmd-core.c game_cmds): these skip the pre-command bloodlust coercion roll.
653
+ * Every other code maps to an energy-capable command and draws the roll.
654
+ */
655
+ const NON_COERCION_COMMANDS = new Set([
656
+ "inscribe",
657
+ "uninscribe",
658
+ "autoinscribe",
659
+ "sell",
660
+ "stash",
661
+ "buy",
662
+ "retrieve",
663
+ "retire",
664
+ "help",
665
+ "repeat",
666
+ ]);
667
+ /**
668
+ * process_player: drain queued commands until one spends energy, the queue
669
+ * empties (needsInput), or the player dies / a level change is requested.
670
+ * Applies the process_player_cleanup energy accounting for the spending
671
+ * command (player->energy -= energy_use; total_energy += energy_use).
672
+ */
673
+ export function processPlayer(state, registry) {
674
+ let energyUsed = 0;
675
+ do {
676
+ if (state.isDead || state.generateLevel)
677
+ break;
678
+ /* game-world.c:941-947: after the refresh equivalent and before command
679
+ * preparation, recover an overfull/corrupt pack using calc_inventory's
680
+ * sorted inven[] view. */
681
+ state.overflowPack?.();
682
+ /* Paralyzed or Knocked Out player gets no turn (game-world.c:965-968):
683
+ * inject CMD_SLEEP so a full-energy no-op is spent and nextCommand is
684
+ * never consulted. Ordering matches C: after the detect-ore block (not
685
+ * yet in the port), before command prep / cmdq_pop. */
686
+ {
687
+ const p = state.actor.player;
688
+ const stunEff = state.world?.timedTable?.[TMD.STUN];
689
+ const knockedOut = stunEff !== undefined &&
690
+ playerTimedGradeEq(p, stunEff, "Knocked Out");
691
+ if ((p.timed[TMD.PARALYZED] ?? 0) > 0 || knockedOut) {
692
+ if (!state.cmdQueue)
693
+ state.cmdQueue = [];
694
+ state.cmdQueue.push({ code: "sleep" });
695
+ }
696
+ }
697
+ /* Drain the internal queue (cmdq) first - self-continuing commands like
698
+ * running push their follow-up there - then ask the injected provider. */
699
+ const cmd = state.cmdQueue && state.cmdQueue.length > 0
700
+ ? state.cmdQueue.shift()
701
+ : state.nextCommand();
702
+ if (!cmd)
703
+ return { needsInput: true, energyUsed: 0 };
704
+ /* While TMD_COMMAND runs, the player's commands drive the commanded
705
+ * monster instead (cmd-core.c L333 swaps the command list). */
706
+ const commanding = (state.actor.player.timed[TMD.COMMAND] ?? 0) > 0 && state.monCommand;
707
+ const action = commanding
708
+ ? state.monCommand
709
+ : (registry.get(cmd.code) ?? stubAction);
710
+ /* Occasional attack instead for bloodlust-affected characters
711
+ * (cmd-core.c:373): before an energy-capable command executes, the
712
+ * coercion roll is drawn (unconditionally, even at zero bloodlust,
713
+ * matching upstream's randint0(200) < timed[TMD_BLOODLUST]); on success
714
+ * the command is dropped and a random adjacent monster is attacked.
715
+ * skip_cmd_coercion is not modelled (save gap 12.6, WP-10). */
716
+ if (!commanding && !NON_COERCION_COMMANDS.has(cmd.code)) {
717
+ if (state.rng.randint0(200) <
718
+ (state.actor.player.timed[TMD.BLOODLUST] ?? 0)) {
719
+ const spent = playerAttackRandomMonster(state);
720
+ if (spent >= 0) {
721
+ if (spent > 0) {
722
+ state.actor.energy -= spent;
723
+ state.actor.totalEnergy += spent;
724
+ energyUsed = spent;
725
+ }
726
+ continue;
727
+ }
728
+ }
729
+ }
730
+ const use = action(state, cmd);
731
+ if (use > 0) {
732
+ state.actor.energy -= use;
733
+ state.actor.totalEnergy += use;
734
+ energyUsed = use;
735
+ }
736
+ } while (energyUsed === 0 && !state.isDead && !state.generateLevel);
737
+ return { needsInput: false, energyUsed };
738
+ }
739
+ //# sourceMappingURL=player-turn.js.map