@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,791 @@
1
+ /**
2
+ * Live traps, ported from reference/src/trap.c (Angband 4.2.6): trap
3
+ * instances on squares (state.traps, the same GameState seam as floor
4
+ * piles and monster groups), placement (pick_trap / place_trap), reveal,
5
+ * activation (hit_trap running the kind's effect chains through the
6
+ * effect interpreter with a trap source), disable timeouts, door locks
7
+ * (the "door lock" trap kind), and the disarm command with the cmd-cave.c
8
+ * skill math.
9
+ *
10
+ * Knowledge simplifications (with #24): traps place with their upstream
11
+ * visibility (most are TRF_INVISIBLE until revealed or triggered);
12
+ * square_memorize_traps / the player's shadow cave are replaced by the
13
+ * VISIBLE instance flag the renderer reads. player_is_trapsafe and the
14
+ * OF_ save-flag checks ride on the playerHasFlag hook; a flag that saves
15
+ * is noticed on the equipment supplying it (equipLearnFlag, rune
16
+ * knowledge #13).
17
+ */
18
+
19
+ import type { Loc } from "../loc.js";
20
+ import { DDGRID, locEq, locSum } from "../loc.js";
21
+ import type { Rng } from "../rng.js";
22
+ import { SKILL } from "../player/types.js";
23
+ import { OF, TMD, TRF } from "../generated/index.js";
24
+ import { checkHit } from "../combat/mon-melee.js";
25
+ import { equipLearnFlag } from "../obj/knowledge.js";
26
+ import { featIsTrapHolding } from "../world/chunk.js";
27
+ import type { TrapKind } from "../world/trap.js";
28
+ import { lookupTrap } from "../world/trap.js";
29
+ import { squareIsSeen } from "../world/view.js";
30
+ import { sourceTrap } from "../effects/interpreter.js";
31
+ import type { GameState, PlayerCommand } from "./context.js";
32
+ import { movePlayer, queueCommandRepeat } from "./context.js";
33
+ import { floorPile } from "./floor.js";
34
+ import { buildObjectEffectChain } from "./obj-cmd.js";
35
+ import type { ObjCmdDeps } from "./obj-cmd.js";
36
+ import { buildEffectContext } from "./effect-env.js";
37
+ import { squareIsKnown } from "./known.js";
38
+ import { attachGameEnv } from "./effect-game-env.js";
39
+ import type { ActionRegistry } from "./player-turn.js";
40
+ import { gearGet } from "./gear.js";
41
+
42
+ /** struct trap: one trap instance on a grid. */
43
+ export interface Trap {
44
+ tidx: number;
45
+ kind: TrapKind;
46
+ grid: Loc;
47
+ /** Rolled from the kind's power at placement (vs SEARCH on reveal). */
48
+ power: number;
49
+ /** Turns this trap is disabled for (0 = armed). */
50
+ timeout: number;
51
+ /** Instance flags (a copy of the kind's; VISIBLE toggles here). */
52
+ flags: import("../bitflag.js").FlagSet;
53
+ }
54
+
55
+ /** Hooks for unported subsystems; all optional. */
56
+ export interface TrapEnv {
57
+ msg?: (text: string) => void;
58
+ /** player_is_trapsafe / player_of_has(OF_TRAP_IMMUNE etc, #13/#24). */
59
+ playerHasFlag?: (ofFlag: number) => boolean;
60
+ /** is_quest(depth) for the trapdoor legality check. */
61
+ isQuest?: (depth: number) => boolean;
62
+ /** dungeon_change_level for TRF_DOWN (default: signal generateLevel). */
63
+ changeLevel?: (state: GameState) => void;
64
+ /** player_exp_gain on a successful disarm (experience system). */
65
+ expGain?: (amount: number) => void;
66
+ disturb?: () => void;
67
+ }
68
+
69
+ /** Everything the trap runtime needs beyond the state. */
70
+ export interface TrapDeps {
71
+ kinds: readonly TrapKind[];
72
+ /** The effect stack (same registry/cast/envDeps bundle as obj-cmd). */
73
+ effects?: Pick<
74
+ ObjCmdDeps,
75
+ | "registry"
76
+ | "cast"
77
+ | "envDeps"
78
+ | "inject"
79
+ | "teleport"
80
+ | "general"
81
+ | "item"
82
+ | "summon"
83
+ >;
84
+ env?: TrapEnv;
85
+ }
86
+
87
+ /** player_is_trapsafe (player-util.c:1073-1077). */
88
+ export function playerIsTrapsafe(state: GameState): boolean {
89
+ const equipmentImmune = state.actor.player.equipment.some((handle) =>
90
+ handle > 0 && (gearGet(state.gear, handle)?.flags.has(OF.TRAP_IMMUNE) ?? false),
91
+ );
92
+ return (
93
+ (state.actor.player.timed[TMD.TRAPSAFE] ?? 0) > 0 ||
94
+ (state.playerState?.flags.has(OF.TRAP_IMMUNE) ?? false) ||
95
+ equipmentImmune
96
+ );
97
+ }
98
+
99
+ /**
100
+ * The trap-backed TeleportEnv / FloorEnv predicates (square_isplayertrap,
101
+ * square_iswarded, square_iswebbed) for the modules that stubbed them.
102
+ */
103
+ export function trapPredicates(state: GameState): {
104
+ isPlayerTrap: (grid: Loc) => boolean;
105
+ isWarded: (grid: Loc) => boolean;
106
+ isWebbed: (grid: Loc) => boolean;
107
+ isTrap: (grid: Loc) => boolean;
108
+ } {
109
+ return {
110
+ isPlayerTrap: (grid) => squareIsPlayerTrap(state, grid),
111
+ isWarded: (grid) => squareIsWarded(state, grid),
112
+ isWebbed: (grid) => squareIsWebbed(state, grid),
113
+ isTrap: (grid) => squareIsTrap(state, grid),
114
+ };
115
+ }
116
+
117
+ function gridIdx(state: GameState, grid: Loc): number {
118
+ return grid.y * state.chunk.width + grid.x;
119
+ }
120
+
121
+ /** square_trap: the traps on a grid, newest first (place prepends). */
122
+ export function squareTrap(state: GameState, grid: Loc): readonly Trap[] {
123
+ return state.traps.get(gridIdx(state, grid)) ?? [];
124
+ }
125
+
126
+ /** square_istrap-ish: any trap here? */
127
+ export function squareIsTrap(state: GameState, grid: Loc): boolean {
128
+ return squareTrap(state, grid).length > 0;
129
+ }
130
+
131
+ /** square_trap_flag: any trap here with the given TRF flag? */
132
+ export function squareTrapFlag(
133
+ state: GameState,
134
+ grid: Loc,
135
+ flag: number,
136
+ ): boolean {
137
+ return squareTrap(state, grid).some((t) => t.flags.has(flag));
138
+ }
139
+
140
+ /** square_isplayertrap. */
141
+ export function squareIsPlayerTrap(state: GameState, grid: Loc): boolean {
142
+ return squareTrapFlag(state, grid, TRF.TRAP);
143
+ }
144
+
145
+ /** square_isvisibletrap. */
146
+ export function squareIsVisibleTrap(state: GameState, grid: Loc): boolean {
147
+ return squareTrapFlag(state, grid, TRF.VISIBLE);
148
+ }
149
+
150
+ /**
151
+ * square_isdisabledtrap (cave-square.c L823): a known (visible) player trap that
152
+ * is currently on a disable timeout.
153
+ */
154
+ export function squareIsDisabledTrap(state: GameState, grid: Loc): boolean {
155
+ return (
156
+ squareIsVisibleTrap(state, grid) && squareTrapTimeout(state, grid, -1) > 0
157
+ );
158
+ }
159
+
160
+ /**
161
+ * square_isdisarmabletrap (cave-square.c L832): a visible, enabled player trap -
162
+ * the gate KILL_TRAP and the disarm command require (not merely "visible").
163
+ */
164
+ export function squareIsDisarmableTrap(state: GameState, grid: Loc): boolean {
165
+ if (squareIsDisabledTrap(state, grid)) return false;
166
+ return squareIsVisibleTrap(state, grid) && squareIsPlayerTrap(state, grid);
167
+ }
168
+
169
+ /**
170
+ * square_iswarded (cave-square.c:751-755): only the specific "glyph of
171
+ * warding" trap, not every TRF_GLYPH (decoys also carry GLYPH).
172
+ */
173
+ export function squareIsWarded(state: GameState, grid: Loc): boolean {
174
+ return squareTrap(state, grid).some((t) => {
175
+ /* Live traps always carry kind; match C's lookup_trap("glyph of warding"). */
176
+ if (t.kind) {
177
+ return t.kind.desc === "glyph of warding" || t.kind.name === "glyph of warding";
178
+ }
179
+ /* Harness stubs without a kind: a bare GLYPH stands for warding. */
180
+ return t.flags.has(TRF.GLYPH);
181
+ });
182
+ }
183
+ /** square_iswebbed (cave-square.c:763-767). */
184
+ export function squareIsWebbed(state: GameState, grid: Loc): boolean {
185
+ return squareTrapFlag(state, grid, TRF.WEB);
186
+ }
187
+
188
+ /**
189
+ * square_destroy_trap (cave-square.c:1391-1394): remove every trap on a grid.
190
+ */
191
+ export function squareDestroyTrap(state: GameState, grid: Loc): void {
192
+ squareRemoveAllTraps(state, grid);
193
+ }
194
+
195
+ /**
196
+ * Live square_set_feat trap half (cave-square.c:1256-1259): when the grid
197
+ * is no longer player-trap-allowed, destroy its traps. Wired as Chunk.onFeatSet.
198
+ */
199
+ export function squareSetFeatTrapSideEffect(state: GameState, grid: Loc): void {
200
+ if (!squarePlayerTrapAllowed(state, grid)) {
201
+ squareDestroyTrap(state, grid);
202
+ }
203
+ }
204
+
205
+ /**
206
+ * Install the live character_dungeon set_feat hook on the current chunk
207
+ * (cave-square.c:1256-1259). Re-call after every state.chunk reassignment.
208
+ */
209
+ export function installChunkFeatHook(state: GameState): void {
210
+ state.chunk.onFeatSet = (grid: Loc): void => {
211
+ squareSetFeatTrapSideEffect(state, grid);
212
+ };
213
+ }
214
+
215
+ /** square_trap_specific: a trap of the exact kind index here? */
216
+ export function squareTrapSpecific(
217
+ state: GameState,
218
+ grid: Loc,
219
+ tidx: number,
220
+ ): boolean {
221
+ return squareTrap(state, grid).some((t) => t.tidx === tidx);
222
+ }
223
+
224
+ /** square_remove_trap: remove one trap instance. */
225
+ export function squareRemoveTrap(
226
+ state: GameState,
227
+ grid: Loc,
228
+ trap: Trap,
229
+ ): boolean {
230
+ const key = gridIdx(state, grid);
231
+ const list = state.traps.get(key);
232
+ if (!list) return false;
233
+ const at = list.indexOf(trap);
234
+ if (at < 0) return false;
235
+ list.splice(at, 1);
236
+ if (list.length === 0) state.traps.delete(key);
237
+ return true;
238
+ }
239
+
240
+ /** square_remove_all_traps / _of_type. */
241
+ export function squareRemoveAllTraps(
242
+ state: GameState,
243
+ grid: Loc,
244
+ tidx = -1,
245
+ ): boolean {
246
+ const key = gridIdx(state, grid);
247
+ const list = state.traps.get(key);
248
+ if (!list || list.length === 0) return false;
249
+ if (tidx < 0) {
250
+ state.traps.delete(key);
251
+ return true;
252
+ }
253
+ const kept = list.filter((t) => t.tidx !== tidx);
254
+ const removed = kept.length !== list.length;
255
+ if (kept.length === 0) state.traps.delete(key);
256
+ else state.traps.set(key, kept);
257
+ return removed;
258
+ }
259
+
260
+ /**
261
+ * square_player_trap_allowed: no second trap, no objects, trappable
262
+ * terrain (TF TRAP on the feature).
263
+ */
264
+ export function squarePlayerTrapAllowed(
265
+ state: GameState,
266
+ grid: Loc,
267
+ ): boolean {
268
+ if (squareIsTrap(state, grid)) return false;
269
+ if (floorPile(state, grid).length > 0) return false;
270
+ /* square_istrappable (cave-square.c:220), trap.c:269. */
271
+ return featIsTrapHolding(state.chunk.features, state.chunk.feat(grid));
272
+ }
273
+
274
+ /** The level context pick_trap reads for its trapdoor legality guards. */
275
+ export interface TrapLevelCtx {
276
+ /** c->depth (player->depth): town has no traps. */
277
+ depth: number;
278
+ /** z_info->max_depth: no trap doors on the deepest level. */
279
+ maxDepth: number;
280
+ /** is_quest(player->depth): no trap doors on quest levels. */
281
+ isQuest: boolean;
282
+ /** OPT(player, birth_levels_persist): no trap doors with persistent levels. */
283
+ persist: boolean;
284
+ }
285
+
286
+ /**
287
+ * pick_trap core (trap.c:275-345): cumulative-rarity selection of a player
288
+ * trap kind at a trap level, drawing exactly one randint0. Pure - the caller
289
+ * supplies the RNG and level context, so both the live placer (pickTrap) and
290
+ * the generation-time placer (gen/util.ts placeTrap) share one implementation
291
+ * and one draw order. The feature is assumed floor / trap-holding in the
292
+ * ported subset, so C's `feat_is_floor(feat) && !TRF_FLOOR` branch reduces to
293
+ * an unconditional TRF_FLOOR requirement. Returns the t_idx or -1.
294
+ */
295
+ export function pickTrapKind(
296
+ rng: Rng,
297
+ kinds: readonly TrapKind[],
298
+ trapLevel: number,
299
+ ctx: TrapLevelCtx,
300
+ ): number {
301
+ /* No traps in town. */
302
+ if (ctx.depth === 0) return -1;
303
+
304
+ const probs: number[] = [];
305
+ let probMax = 0;
306
+ for (const kind of kinds) {
307
+ probs[kind.tidx] = probMax;
308
+ if (!kind.name) continue;
309
+ if (!kind.rarity) continue;
310
+ if (!kind.flags.has(TRF.TRAP)) continue;
311
+ if (kind.minDepth > trapLevel) continue;
312
+
313
+ /* Floor features need floor-capable traps. */
314
+ if (!kind.flags.has(TRF.FLOOR)) continue;
315
+
316
+ /* Check legality of trapdoors (trap.c:308-320). */
317
+ if (kind.flags.has(TRF.DOWN)) {
318
+ if (ctx.isQuest) continue;
319
+ if (ctx.depth >= ctx.maxDepth - 1) continue;
320
+ /* No trap doors with persistent levels (for now). */
321
+ if (ctx.persist) continue;
322
+ }
323
+
324
+ probs[kind.tidx] = probMax + Math.trunc(100 / kind.rarity);
325
+ probMax = probs[kind.tidx] as number;
326
+ }
327
+ if (probMax === 0) return -1;
328
+
329
+ const pick = rng.randint0(probMax);
330
+ for (const kind of kinds) {
331
+ if (pick < (probs[kind.tidx] ?? 0)) return kind.tidx;
332
+ }
333
+ return -1;
334
+ }
335
+
336
+ /**
337
+ * pick_trap: choose a player-trap kind for a feature at a trap level, by
338
+ * cumulative rarity. Returns the t_idx or -1.
339
+ */
340
+ export function pickTrap(
341
+ state: GameState,
342
+ feat: number,
343
+ trapLevel: number,
344
+ deps: TrapDeps,
345
+ ): number {
346
+ const env = deps.env ?? {};
347
+ void feat; /* Only floor features are trappable in the ported subset. */
348
+ return pickTrapKind(state.rng, deps.kinds, trapLevel, {
349
+ depth: state.chunk.depth,
350
+ maxDepth: state.z.maxDepth,
351
+ isQuest: env.isQuest?.(state.chunk.depth) ?? false,
352
+ persist: state.options?.get("birth_levels_persist") ?? false,
353
+ });
354
+ }
355
+
356
+ /**
357
+ * place_trap: make a new trap of the given type (or a random player trap
358
+ * when the index is not legal).
359
+ */
360
+ export function placeTrap(
361
+ state: GameState,
362
+ grid: Loc,
363
+ tIdx: number,
364
+ trapLevel: number,
365
+ deps: TrapDeps,
366
+ ): void {
367
+ if (tIdx <= 0 || tIdx >= deps.kinds.length) {
368
+ if (!squarePlayerTrapAllowed(state, grid)) return;
369
+ tIdx = pickTrap(state, state.chunk.feat(grid), trapLevel, deps);
370
+ }
371
+ if (tIdx < 0) return;
372
+ const kind = deps.kinds[tIdx]!;
373
+
374
+ /* Don't allow trap doors in single combat arenas (trap.c:370-374). */
375
+ if (state.arenaLevel && kind.flags.has(TRF.DOWN)) return;
376
+
377
+ installTrap(state, grid, tIdx, state.rng.randcalc(kind.power, trapLevel, "randomise"), deps);
378
+ }
379
+
380
+ /**
381
+ * place_trap's allocation half (trap.c:376-393) with the kind and power
382
+ * already chosen: prepend a new trap instance to the grid's list. Used by
383
+ * placeTrap after its pick_trap / randcalc draws, and directly by the level
384
+ * populate path when the kind and power were rolled at generation time
385
+ * (gen/util.ts placeTrap), so those draws are not spent twice.
386
+ *
387
+ * square_set_trap (cave-square.c:1299) has no counterpart by design: upstream
388
+ * keeps a per-square singly-linked trap list and that setter writes its HEAD
389
+ * pointer. The port stores an array per grid in state.traps, so head-pointer
390
+ * assignment becomes unshift here, splice in squareRemoveTrap and delete in
391
+ * squareRemoveAllTraps.
392
+ */
393
+ export function installTrap(
394
+ state: GameState,
395
+ grid: Loc,
396
+ tIdx: number,
397
+ power: number,
398
+ deps: TrapDeps,
399
+ ): void {
400
+ const kind = deps.kinds[tIdx];
401
+ if (!kind) return;
402
+ const trap: Trap = {
403
+ tidx: tIdx,
404
+ kind,
405
+ grid,
406
+ power,
407
+ timeout: 0,
408
+ flags: kind.flags.clone(),
409
+ };
410
+ const key = gridIdx(state, grid);
411
+ const list = state.traps.get(key);
412
+ if (list) list.unshift(trap);
413
+ else state.traps.set(key, [trap]);
414
+ }
415
+
416
+ /**
417
+ * square_reveal_trap: mark unnoticed player traps visible when the SEARCH
418
+ * skill beats their power (or always). Returns whether any were found.
419
+ */
420
+ export function squareRevealTrap(
421
+ state: GameState,
422
+ grid: Loc,
423
+ always: boolean,
424
+ deps: TrapDeps,
425
+ ): boolean {
426
+ if (!squareIsPlayerTrap(state, grid)) return false;
427
+ let found = 0;
428
+ for (const trap of squareTrap(state, grid)) {
429
+ if (!trap.flags.has(TRF.TRAP)) continue;
430
+ const search = state.actor.combat.skills[SKILL.SEARCH] ?? 0;
431
+ if (!always && search < trap.power) continue;
432
+ if (!trap.flags.has(TRF.VISIBLE)) {
433
+ trap.flags.on(TRF.VISIBLE);
434
+ found++;
435
+ }
436
+ }
437
+ if (found) {
438
+ deps.env?.msg?.(
439
+ found === 1 ? "You have found a trap." : `You have found ${found} traps.`,
440
+ );
441
+ }
442
+ return found !== 0;
443
+ }
444
+
445
+ /**
446
+ * square_note_spot's secret-trap revelation (cave-map.c:236-238) and the
447
+ * per-grid update_one pass (cave-view.c:840-842): when a grid becomes seen, a
448
+ * secret player trap on it is revealed if the SEARCH skill beats its power
449
+ * (always=false). Called from the note_spot pass (game/known.ts noteSpots) so
450
+ * invisible traps are spotted before being stepped on, matching upstream. The
451
+ * "You have found a trap" message rides the game's message seam (state.msg);
452
+ * squareRevealTrap reads only that env hook, never deps.kinds here.
453
+ */
454
+ export function noteSpotRevealTrap(state: GameState, grid: Loc): void {
455
+ /* square_issecrettrap (cave-square.c:815) = !square_isvisibletrap &&
456
+ * square_isplayertrap; the !visible half is absorbed into
457
+ * squareRevealTrap, which counts only newly-revealed traps and so is a
458
+ * no-op (and silent) on an already-visible grid. */
459
+ if (!squareIsPlayerTrap(state, grid)) return;
460
+ squareRevealTrap(state, grid, false, {
461
+ kinds: [],
462
+ ...(state.msg ? { env: { msg: state.msg } } : {}),
463
+ });
464
+ }
465
+
466
+ /**
467
+ * hit_trap: trigger the player traps on a grid. `delayed` selects
468
+ * TRF_DELAY traps (1), immediate traps (0), or all (-1).
469
+ */
470
+ export function hitTrap(
471
+ state: GameState,
472
+ grid: Loc,
473
+ delayed: number,
474
+ deps: TrapDeps,
475
+ ): void {
476
+ const env = deps.env ?? {};
477
+ for (const trap of [...squareTrap(state, grid)]) {
478
+ if (!trap.kind.flags.has(TRF.TRAP)) continue;
479
+ if (trap.timeout) continue;
480
+ const isDelay = trap.kind.flags.has(TRF.DELAY) ? 1 : 0;
481
+ if (delayed !== isDelay && delayed !== -1) continue;
482
+
483
+ /* player_is_trapsafe (player-util.c:1073): TMD_TRAPSAFE or OF_TRAP_IMMUNE.
484
+ * A trap-immune player learns the rune on the flag's source; the trap
485
+ * becomes visible and does not fire (trap.c:515-523). */
486
+ const trapImmune = env.playerHasFlag?.(OF.TRAP_IMMUNE) ?? false;
487
+ if ((state.actor.player.timed[TMD.TRAPSAFE] ?? 0) > 0 || trapImmune) {
488
+ if (trapImmune) {
489
+ equipLearnFlag(state.actor.player, state.runeEnv, OF.TRAP_IMMUNE);
490
+ }
491
+ trap.flags.on(TRF.VISIBLE);
492
+ continue;
493
+ }
494
+
495
+ env.disturb?.();
496
+ if (trap.kind.msg) env.msg?.(trap.kind.msg);
497
+
498
+ /* Test for save due to flag (OF_ flags via the hook); a flag that
499
+ * saves is noticed on whatever equipment supplies it (trap.c L538). */
500
+ let saved = false;
501
+ for (const flag of trap.kind.saveFlags) {
502
+ if (env.playerHasFlag?.(flag)) {
503
+ saved = true;
504
+ equipLearnFlag(state.actor.player, state.runeEnv, flag);
505
+ }
506
+ }
507
+
508
+ /* Test for save due to armor. */
509
+ if (
510
+ trap.kind.flags.has(TRF.SAVE_ARMOR) &&
511
+ !checkHit(state.rng, 125, state.actor.defense)
512
+ ) {
513
+ saved = true;
514
+ }
515
+
516
+ /* Test for save due to saving throw. */
517
+ if (
518
+ trap.kind.flags.has(TRF.SAVE_THROW) &&
519
+ state.rng.randint0(100) < (state.actor.combat.skills[SKILL.SAVE] ?? 0)
520
+ ) {
521
+ saved = true;
522
+ }
523
+
524
+ if (saved) {
525
+ if (trap.kind.msgGood) env.msg?.(trap.kind.msgGood);
526
+ } else {
527
+ if (trap.kind.msgBad) env.msg?.(trap.kind.msgBad);
528
+ runTrapEffect(state, trap, trap.kind.effect, deps);
529
+ /* trap.c:561-562: stop if the square lost its traps or the player died. */
530
+ if (!squareTrap(state, grid).length || state.isDead) break;
531
+ if (trap.kind.effectXtra.length && state.rng.oneIn(2)) {
532
+ if (trap.kind.msgXtra) env.msg?.(trap.kind.msgXtra);
533
+ runTrapEffect(state, trap, trap.kind.effectXtra, deps);
534
+ /* trap.c:572-573 */
535
+ if (!squareTrap(state, grid).length || state.isDead) break;
536
+ }
537
+ }
538
+
539
+ /* Some traps drop you a dungeon level. */
540
+ if (trap.kind.flags.has(TRF.DOWN)) {
541
+ if (env.changeLevel) env.changeLevel(state);
542
+ else state.generateLevel = true;
543
+ }
544
+
545
+ /* Some traps drop you onto them. */
546
+ if (trap.kind.flags.has(TRF.PIT) && !locEq(state.actor.grid, trap.grid)) {
547
+ movePlayer(state, trap.grid);
548
+ state.updateFov?.(state);
549
+ }
550
+
551
+ /* Some traps disappear after activating, all have a chance to. */
552
+ if (trap.kind.flags.has(TRF.ONETIME) || state.rng.oneIn(3)) {
553
+ squareRemoveTrap(state, grid, trap);
554
+ } else {
555
+ trap.flags.on(TRF.VISIBLE);
556
+ }
557
+ }
558
+ }
559
+
560
+ /** Run one of a trap's effect chains through the interpreter. */
561
+ function runTrapEffect(
562
+ state: GameState,
563
+ trap: Trap,
564
+ records: readonly import("../obj/types.js").EffectRecordJson[],
565
+ deps: TrapDeps,
566
+ ): void {
567
+ if (!deps.effects || records.length === 0) return;
568
+ const chain = buildObjectEffectChain(records, state, deps.effects.inject);
569
+ const ctx = attachGameEnv(
570
+ buildEffectContext(state, deps.effects.envDeps),
571
+ {
572
+ state,
573
+ cast: deps.effects.cast,
574
+ /* take_hit consequences so a trap effect that damages the player records
575
+ * died_from + shows the death chain (the trap's EF_DAMAGE also reaches
576
+ * this via ctx.player.takeHit / envDeps.takeHitHooks). */
577
+ ...(deps.effects.envDeps.takeHitHooks
578
+ ? { takeHitHooks: deps.effects.envDeps.takeHitHooks }
579
+ : {}),
580
+ ...(deps.effects.teleport ? { teleport: deps.effects.teleport } : {}),
581
+ ...(deps.effects.general ? { general: deps.effects.general } : {}),
582
+ ...(deps.effects.item ? { item: deps.effects.item } : {}),
583
+ ...(deps.effects.summon ? { summon: deps.effects.summon } : {}),
584
+ },
585
+ );
586
+ deps.effects.registry.effectDo(chain, ctx, {
587
+ origin: sourceTrap(trap),
588
+ aware: false,
589
+ });
590
+ }
591
+
592
+ /**
593
+ * square_set_trap_timeout (trap.c:625): disable traps here for `time` turns.
594
+ *
595
+ * `domsg` is DEAD IN THE C. square_set_trap_timeout has exactly one caller in
596
+ * all of 4.2.6 - square_disable_trap at cave-square.c:1399 - and it passes
597
+ * false, so trap.c:653's "You have disabled the %s." can never reach a player
598
+ * upstream. It is ported anyway, behind the same parameter and the same
599
+ * default, so the port is a complete translation of the function rather than a
600
+ * translation of the reachable half; a mod that calls this with domsg on gets
601
+ * upstream's message rather than silence.
602
+ */
603
+ export function squareSetTrapTimeout(
604
+ state: GameState,
605
+ grid: Loc,
606
+ tIdx: number,
607
+ time: number,
608
+ domsg = false,
609
+ msg?: (text: string) => void,
610
+ ): boolean {
611
+ let disabled = false;
612
+ for (const trap of squareTrap(state, grid)) {
613
+ if (tIdx >= 0 && tIdx !== trap.tidx) continue;
614
+ trap.timeout = time;
615
+ disabled = true;
616
+ /* trap.c:651-654 - unreachable upstream, see above. */
617
+ if (domsg) (msg ?? state.msg)?.(`You have disabled the ${trap.kind.name}.`);
618
+ }
619
+ return disabled;
620
+ }
621
+
622
+ /** square_trap_timeout: the first matching trap's remaining disable time. */
623
+ export function squareTrapTimeout(
624
+ state: GameState,
625
+ grid: Loc,
626
+ tIdx: number,
627
+ ): number {
628
+ for (const trap of squareTrap(state, grid)) {
629
+ if (tIdx >= 0 && tIdx !== trap.tidx) continue;
630
+ if (trap.timeout) return trap.timeout;
631
+ }
632
+ return 0;
633
+ }
634
+
635
+ /* ------------------------------------------------------------------ *
636
+ * Door locks (trap.c L706): the lock is a "door lock" trap.
637
+ * ------------------------------------------------------------------ */
638
+
639
+ /** square_set_door_lock: lock a closed door to a power. */
640
+ export function squareSetDoorLock(
641
+ state: GameState,
642
+ grid: Loc,
643
+ power: number,
644
+ deps: TrapDeps,
645
+ ): void {
646
+ const lock = lookupTrap(deps.kinds, "door lock");
647
+ if (!lock || !state.chunk.isClosedDoor(grid)) return;
648
+ if (!squareTrapSpecific(state, grid, lock.tidx)) {
649
+ placeTrap(state, grid, lock.tidx, 0, deps);
650
+ }
651
+ for (const trap of squareTrap(state, grid)) {
652
+ if (trap.tidx === lock.tidx) trap.power = power;
653
+ }
654
+ }
655
+
656
+ /** square_door_power: the lock power on a closed door (0 = unlocked). */
657
+ export function squareDoorPower(
658
+ state: GameState,
659
+ grid: Loc,
660
+ deps: TrapDeps,
661
+ ): number {
662
+ const lock = lookupTrap(deps.kinds, "door lock");
663
+ if (!lock || !state.chunk.isClosedDoor(grid)) return 0;
664
+ for (const trap of squareTrap(state, grid)) {
665
+ if (trap.tidx === lock.tidx) return trap.power;
666
+ }
667
+ return 0;
668
+ }
669
+
670
+ /**
671
+ * calc_unlocking_chance (player-calcs.c L1676): DISARM_PHYS vs 4x lock
672
+ * power, tenth-ed while blind / confused / hallucinating, floor of 2.
673
+ */
674
+ export function calcUnlockingChance(
675
+ state: GameState,
676
+ lockPower: number,
677
+ ): number {
678
+ let skill = state.actor.combat.skills[SKILL.DISARM_PHYS] ?? 0;
679
+ const p = state.actor.player;
680
+ if ((p.timed[TMD.BLIND] ?? 0) > 0) skill = Math.trunc(skill / 10);
681
+ if (
682
+ (p.timed[TMD.CONFUSED] ?? 0) > 0 ||
683
+ (p.timed[TMD.IMAGE] ?? 0) > 0
684
+ ) {
685
+ skill = Math.trunc(skill / 10);
686
+ }
687
+ return Math.max(2, skill - 4 * lockPower);
688
+ }
689
+
690
+ /* ------------------------------------------------------------------ *
691
+ * Disarm (cmd-cave.c do_cmd_disarm).
692
+ * ------------------------------------------------------------------ */
693
+
694
+ /**
695
+ * do_cmd_disarm_aux: one disarm attempt on the first player trap at a
696
+ * grid. Returns whether the command may repeat.
697
+ */
698
+ export function disarmAux(
699
+ state: GameState,
700
+ grid: Loc,
701
+ deps: TrapDeps,
702
+ ): boolean {
703
+ const env = deps.env ?? {};
704
+ const trap = squareTrap(state, grid).find((t) => t.flags.has(TRF.TRAP));
705
+ if (!trap) return false;
706
+
707
+ /* Get the base disarming skill, penalizing some conditions. */
708
+ let skill = trap.flags.has(TRF.MAGICAL)
709
+ ? (state.actor.combat.skills[SKILL.DISARM_MAGIC] ?? 0)
710
+ : (state.actor.combat.skills[SKILL.DISARM_PHYS] ?? 0);
711
+ const p = state.actor.player;
712
+ /*
713
+ * cmd-cave.c:812-817: one /10 when any of blind, no_light, confused, or
714
+ * image. no_light is !square_isseen on the player grid (cave-view.c:914-917).
715
+ */
716
+ if (
717
+ (p.timed[TMD.BLIND] ?? 0) > 0 ||
718
+ !squareIsSeen(state.chunk, state.actor.grid) ||
719
+ (p.timed[TMD.CONFUSED] ?? 0) > 0 ||
720
+ (p.timed[TMD.IMAGE] ?? 0) > 0
721
+ ) {
722
+ skill = Math.trunc(skill / 10);
723
+ }
724
+
725
+ /* Extract trap power and the percentage success. */
726
+ const power = Math.trunc(state.chunk.depth / 5);
727
+ const chance = Math.max(skill - power, 2);
728
+
729
+ /* Two chances - one to disarm, one not to set the trap off. */
730
+ if (state.rng.randint0(100) < chance) {
731
+ env.msg?.(`You have disarmed the ${trap.kind.name}.`);
732
+ env.expGain?.(1 + power);
733
+ squareRemoveTrap(state, grid, trap);
734
+ return false;
735
+ }
736
+ if (state.rng.randint0(100) < chance) {
737
+ env.msg?.(`You failed to disarm the ${trap.kind.name}.`);
738
+ return true; /* Player can try again. */
739
+ }
740
+ env.msg?.(`You set off the ${trap.kind.name}!`);
741
+ hitTrap(state, grid, -1, deps);
742
+ return false;
743
+ }
744
+
745
+ /**
746
+ * Register the disarm command and wire the trap hooks: walk onto a player
747
+ * trap triggers it, and the door-lock seams back cave-cmd's open command.
748
+ */
749
+ export function installTraps(
750
+ state: GameState,
751
+ registry: ActionRegistry,
752
+ deps: TrapDeps,
753
+ ): void {
754
+ registry.register("disarm", (s, cmd: PlayerCommand) => {
755
+ const dir = cmd.dir;
756
+ if (dir === undefined || dir < 1 || dir > 9 || dir === 5) return 0;
757
+ const grid = locSum(s.actor.grid, DDGRID[dir] as Loc);
758
+ /* do_cmd_disarm_test (cmd-cave.c:698-721): knowledge first. */
759
+ if (!squareIsKnown(s, grid)) {
760
+ deps.env?.msg?.("You see nothing there.");
761
+ return 0;
762
+ }
763
+ /* Traps must be visible to disarm. */
764
+ if (!squareIsVisibleTrap(s, grid)) {
765
+ deps.env?.msg?.("You see nothing there to disarm.");
766
+ /* cmd-cave.c:713-715 re-memorizes the grid's traps when player->cave
767
+ * still remembers a disarmable one. The port has no separate known-trap
768
+ * store (known.ts:11 - trap knowledge reads the live grid), so there is
769
+ * no stale trap memory here to reconcile. */
770
+ return 0;
771
+ }
772
+ const more = disarmAux(s, grid, deps);
773
+ queueCommandRepeat(s, cmd, more);
774
+ return s.z.moveEnergy;
775
+ });
776
+
777
+ /*
778
+ * player_leaving (mon-util.c:503-515): delayed traps fire on the OLD grid
779
+ * when the player leaves. Wired through movePlayer so every swap path
780
+ * (walk, teleport, pit pull) matches monster_swap.
781
+ */
782
+ state.onPlayerLeaving = (s, oldGrid, _newGrid): void => {
783
+ /* Decoy range check (mon-util.c:508-511) is handled where decoys live. */
784
+ if (squareIsPlayerTrap(s, oldGrid)) hitTrap(s, oldGrid, 1, deps);
785
+ };
786
+
787
+ /* player_handle_post_move eval_trap (player-util.c:1627-1629): immediate. */
788
+ state.onPlayerMoved = (s, grid): void => {
789
+ if (squareIsPlayerTrap(s, grid)) hitTrap(s, grid, 0, deps);
790
+ };
791
+ }