@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,999 @@
1
+ /**
2
+ * The item-targeting effect handlers, ported from
3
+ * reference/src/effect-handler-general.c (Angband 4.2.6): EF_ENCHANT (L2095
4
+ * with enchant_spell / enchant / enchant_score, L255), EF_RECHARGE (L2127
5
+ * with recharge_failure_chance, effects.c L563), EF_REMOVE_CURSE (L1051 with
6
+ * uncurse_object, L179), EF_BRAND_WEAPON / EF_BRAND_AMMO / EF_BRAND_BOLTS
7
+ * (L3233 with brand_object, L427), EF_CURSE_ARMOR / EF_CURSE_WEAPON (L3103),
8
+ * EF_CREATE_ARROWS (L3315) and EF_TAP_DEVICE (L3370).
9
+ *
10
+ * These effects target an object the player chooses (upstream get_item /
11
+ * cmd_get_item "tgtitem"). The chooser is the injected
12
+ * ItemEffectEnv.getItem seam (the item menu rides presentation, #25); absent,
13
+ * the choosing handlers return false unused - exactly the upstream cancel
14
+ * path, so the scroll or spell is not consumed.
15
+ *
16
+ * Simplifications, ledgered in parity/ledger/game-effect-item.yaml:
17
+ * ODESC descriptions ride the display layer (the kind's base name is used);
18
+ * obj->known sync rides rune-based knowledge; EF_IDENTIFY needs the
19
+ * per-object rune enumeration (object_learn_unknown_rune) and rides the
20
+ * knowledge/detection batch (#24).
21
+ */
22
+
23
+ import { EF, OF, ORIGIN, TMD, TV } from "../generated/index.js";
24
+ import {
25
+ ENCH_TOAC,
26
+ ENCH_TOBOTH,
27
+ ENCH_TODAM,
28
+ ENCH_TOHIT,
29
+ } from "../effects/effect.js";
30
+ import type {
31
+ EffectHandler,
32
+ EffectHandlerContext,
33
+ EffectRegistry,
34
+ } from "../effects/interpreter.js";
35
+ import { effectCalculateValue } from "../effects/interpreter.js";
36
+ import type { GameObject } from "../obj/object.js";
37
+ import {
38
+ appendObjectCurse,
39
+ removeObjectCurse,
40
+ tvalCanHaveCharges,
41
+ tvalIsAmmo,
42
+ tvalIsArmor,
43
+ tvalIsBolt,
44
+ tvalIsStaff,
45
+ tvalIsWand,
46
+ tvalIsWeapon,
47
+ } from "../obj/object.js";
48
+ import {
49
+ buildRuneList,
50
+ objectLearnUnknownRune,
51
+ objectRunesKnown,
52
+ playerLearnFlagRune,
53
+ } from "../obj/knowledge.js";
54
+ import { ODESC } from "../obj/desc.js";
55
+ import { describeObject } from "./describe.js";
56
+ import { updatePlayerObjectKnowledge } from "./known.js";
57
+ import type { ObjRegistry } from "../obj/bind.js";
58
+ import { egoApplyMagic, makeObject } from "../obj/make.js";
59
+ import type { MakeDeps } from "../obj/make.js";
60
+ import type { GameState } from "./context.js";
61
+ import { gearObjectForUse } from "./gear.js";
62
+ import { dropNear, floorExcise } from "./floor.js";
63
+ import { gameEnv } from "./effect-game-env.js";
64
+ import type { GameEffectEnv } from "./effect-game-env.js";
65
+
66
+ /** The get_item request: prompt/reject texts, the tester, allowed sources. */
67
+ export interface ItemRequest {
68
+ /** The prompt ("Enchant which item? "). */
69
+ prompt: string;
70
+ /** The nothing-to-choose message ("You have nothing to enchant."). */
71
+ reject: string;
72
+ /** item_tester: which objects qualify. */
73
+ tester: (obj: GameObject) => boolean;
74
+ /** USE_EQUIP / USE_INVEN / USE_QUIVER / USE_FLOOR. */
75
+ mode: { equip?: boolean; inven?: boolean; quiver?: boolean; floor?: boolean };
76
+ /**
77
+ * REMOVE_CURSE: after the item pick, get_curse chooses which removable curse
78
+ * to lift. The shell prompts for it (and rides it on args.tgtcurse) only when
79
+ * this is set and the chosen object has more than one removable curse.
80
+ */
81
+ curses?: boolean;
82
+ }
83
+
84
+ /**
85
+ * enchant_spell's get_item request (effect-handler-general.c L383): a weapon,
86
+ * or armour when the enchant targets AC only. Shared by the ENCHANT handler
87
+ * (enchantSpell) and the shell probe (requestForEffect) so the tval filter can
88
+ * never drift between them.
89
+ */
90
+ function enchantRequest(numAc: number): ItemRequest {
91
+ return {
92
+ prompt: "Enchant which item? ",
93
+ reject: "You have nothing to enchant.",
94
+ tester: numAc
95
+ ? (o: GameObject): boolean => tvalIsArmor(o.tval)
96
+ : (o: GameObject): boolean => tvalIsWeapon(o.tval),
97
+ mode: { equip: true, inven: true, quiver: true, floor: true },
98
+ };
99
+ }
100
+
101
+ /** item_tester_uncursable (obj-util.c): a removable (power in (0,100)) curse. */
102
+ function uncursableTester(o: GameObject): boolean {
103
+ return !!o.curses?.some((c, i) => i > 0 && c.power > 0 && c.power < 100);
104
+ }
105
+
106
+ /**
107
+ * requestForEffect (single source of truth): the ItemRequest a choosing handler
108
+ * uses for a given EF code and decoded subtype. Both each handler and the pure
109
+ * shell probe (itemTargetRequest) read it, so the prompt / reject / tval filter
110
+ * / item modes never drift. Returns null for non-choosing effects and for the
111
+ * auto-target ones (BRAND_WEAPON / CURSE_ARMOR / CURSE_WEAPON / ACQUIRE).
112
+ */
113
+ export function requestForEffect(
114
+ code: number,
115
+ subtype: number,
116
+ state: GameState,
117
+ ): ItemRequest | null {
118
+ switch (code) {
119
+ case EF.ENCHANT:
120
+ /* enchant_spell L383: filter = num_ac ? armour : weapon. The first
121
+ * getItem targets a weapon unless the effect is AC-only. */
122
+ return enchantRequest((subtype & (ENCH_TOHIT | ENCH_TODAM)) === 0 ? 1 : 0);
123
+ case EF.RECHARGE:
124
+ return {
125
+ prompt: "Recharge which item? ",
126
+ reject: "You have nothing to recharge.",
127
+ tester: (o) => tvalCanHaveCharges(o.tval),
128
+ mode: { inven: true, floor: true },
129
+ };
130
+ case EF.REMOVE_CURSE:
131
+ return {
132
+ prompt: "Uncurse which item? ",
133
+ reject: "You have no curses to remove.",
134
+ tester: uncursableTester,
135
+ mode: { equip: true, inven: true, quiver: true, floor: true },
136
+ curses: true,
137
+ };
138
+ case EF.BRAND_AMMO:
139
+ return {
140
+ prompt: "Brand which kind of ammunition? ",
141
+ reject: "You have nothing to brand.",
142
+ tester: (o) => tvalIsAmmo(o.tval),
143
+ mode: { inven: true, quiver: true, floor: true },
144
+ };
145
+ case EF.BRAND_BOLTS:
146
+ return {
147
+ prompt: "Brand which bolts? ",
148
+ reject: "You have no bolts to brand.",
149
+ tester: (o) => tvalIsBolt(o.tval),
150
+ mode: { inven: true, quiver: true, floor: true },
151
+ };
152
+ case EF.CREATE_ARROWS:
153
+ return {
154
+ prompt: "Make arrows from which staff? ",
155
+ reject: "You have no staff to use.",
156
+ tester: (o) => tvalIsStaff(o.tval),
157
+ mode: { inven: true, floor: true },
158
+ };
159
+ case EF.TAP_DEVICE:
160
+ return {
161
+ prompt: "Drain charges from which item? ",
162
+ reject: "You have nothing to drain charges from.",
163
+ tester: (o) => tvalCanHaveCharges(o.tval),
164
+ mode: { inven: true, floor: true },
165
+ };
166
+ case EF.IDENTIFY: {
167
+ /* item_tester_unknown (L247): not all runes known. */
168
+ const runes = buildRuneList(state.runeEnv);
169
+ const player = state.actor.player;
170
+ return {
171
+ prompt: "Identify which item? ",
172
+ reject: "You have nothing to identify.",
173
+ tester: (o) => !objectRunesKnown(player, state.runeEnv, o, runes),
174
+ mode: { equip: true, inven: true, quiver: true, floor: true },
175
+ };
176
+ }
177
+ default:
178
+ return null;
179
+ }
180
+ }
181
+
182
+ /**
183
+ * itemTargetRequest (the RNG-free shell probe): walk a built effect chain and
184
+ * return the ItemRequest the first item-choosing handler will use, decoding
185
+ * subtype exactly as the handler does. The shell calls this before running the
186
+ * effect so it can pre-resolve the target and the effect runs EXACTLY ONCE
187
+ * (preserving the pre-getItem RNG draw order); chain construction draws no RNG.
188
+ * Returns null for objects / spells with no item-target effect.
189
+ */
190
+ export function itemTargetRequest(
191
+ chain: import("../effects/effect.js").Effect | null,
192
+ state: GameState,
193
+ ): ItemRequest | null {
194
+ for (let e = chain; e; e = e.next) {
195
+ if (typeof e.index !== "number") continue;
196
+ const req = requestForEffect(e.index, e.subtype, state);
197
+ if (req) return req;
198
+ }
199
+ return null;
200
+ }
201
+
202
+ /**
203
+ * The dice_string format built inline in effect_handler_REMOVE_CURSE
204
+ * (effect-handler-general.c L1071-1085), from the effect's un-rolled dice
205
+ * spec (base/dice/sides). Pure: does not draw the RNG (mirrors
206
+ * Dice.randomValue(), not Dice.roll()).
207
+ */
208
+ function formatUncurseDiceString(v: import("../rng.js").RandomValue): string {
209
+ if (v.dice === 1 && v.base) return `${v.base}+d${v.sides}`;
210
+ if (v.dice && v.base) return `${v.base}+${v.dice}d${v.sides}`;
211
+ if (v.dice === 1) return `d${v.sides}`;
212
+ if (v.dice) return `${v.dice}d${v.sides}`;
213
+ return `${v.base}`;
214
+ }
215
+
216
+ /**
217
+ * The curse-removal picker's header needs the spell's "strength" dice
218
+ * formula (ui-curse.c curse_menu's `dice_string` parameter) BEFORE the effect
219
+ * runs, so the shell can show "Remove which curse (spell strength <dice>)?"
220
+ * while still pre-resolving the item/curse pick (preserving RNG order). This
221
+ * walks the already-built chain to the REMOVE_CURSE node and formats its raw
222
+ * (un-rolled) dice spec - a pure read, no RNG draw. Returns null when the
223
+ * chain has no REMOVE_CURSE effect.
224
+ */
225
+ export function removeCurseDiceString(
226
+ chain: import("../effects/effect.js").Effect | null,
227
+ ): string | null {
228
+ for (let e = chain; e; e = e.next) {
229
+ if (e.index !== EF.REMOVE_CURSE) continue;
230
+ const rv = e.dice ? e.dice.randomValue() : { base: 0, dice: 0, sides: 0, mBonus: 0 };
231
+ return formatUncurseDiceString(rv);
232
+ }
233
+ return null;
234
+ }
235
+
236
+ /**
237
+ * The item-effect seams, grouped on the game effect environment
238
+ * (GameEffectEnv.item). getItem is upstream get_item / cmd_get_item; absent,
239
+ * the choosing handlers return false unused (the cancel path). reg backs
240
+ * brand_object's ego lookup and the curse table; makeDeps backs
241
+ * CREATE_ARROWS' arrow generation.
242
+ */
243
+ export interface ItemEffectEnv {
244
+ /** get_item: choose an object matching the request, or null to cancel. */
245
+ getItem?: (req: ItemRequest) => GameObject | null;
246
+ /**
247
+ * get_curse: pick which removable curse to lift (REMOVE_CURSE). Given the
248
+ * object and the eligible curse indices; default picks the first.
249
+ */
250
+ chooseCurse?: (obj: GameObject, removable: readonly number[]) => number | null;
251
+ /** The bound object registry (egos for branding, the curse table). */
252
+ reg?: ObjRegistry;
253
+ /** Object generation (CREATE_ARROWS). */
254
+ makeDeps?: MakeDeps;
255
+ }
256
+
257
+ /** msg() over the effect context's optional message sink. */
258
+ function say(ctx: EffectHandlerContext, text: string): void {
259
+ ctx.env.messages?.msg(text);
260
+ }
261
+
262
+ /** object_is_carried: the object lives in the player's gear store. */
263
+ function objectIsCarried(state: GameState, obj: GameObject): boolean {
264
+ for (const o of state.gear.store.values()) {
265
+ if (o === obj) return true;
266
+ }
267
+ return false;
268
+ }
269
+
270
+ /**
271
+ * Destroy one item of the stack, wherever it lives (the recharge backfire /
272
+ * staff consumption path: gear_object_for_use or floor_object_for_use plus
273
+ * object_delete).
274
+ */
275
+ function destroyOneItem(state: GameState, obj: GameObject): void {
276
+ for (const [handle, o] of state.gear.store) {
277
+ if (o === obj) {
278
+ gearObjectForUse(state.gear, state.actor.player, handle, 1);
279
+ return;
280
+ }
281
+ }
282
+ /* On the floor: shrink the stack, or excise the last one. */
283
+ for (const [key, pile] of state.floor) {
284
+ if (!pile.includes(obj)) continue;
285
+ if (obj.number > 1) {
286
+ obj.number--;
287
+ } else {
288
+ const grid = {
289
+ x: key % state.chunk.width,
290
+ y: Math.trunc(key / state.chunk.width),
291
+ };
292
+ floorExcise(state, grid, obj);
293
+ }
294
+ return;
295
+ }
296
+ }
297
+
298
+ /* ------------------------------------------------------------------ *
299
+ * Enchantment (effect-handler-general.c L255)
300
+ * ------------------------------------------------------------------ */
301
+
302
+ /** Used by the enchant() function (chance of failure). */
303
+ const ENCHANT_TABLE: readonly number[] = [
304
+ 0, 10, 20, 40, 80, 160, 280, 400, 550, 700, 800, 900, 950, 970, 990, 1000,
305
+ ];
306
+
307
+ /** enchant_score: try to increase one bonus score. */
308
+ function enchantScore(
309
+ state: GameState,
310
+ score: number,
311
+ isArtifact: boolean,
312
+ ): { score: number; raised: boolean } {
313
+ /* Artifacts resist enchantment half the time */
314
+ if (isArtifact && state.rng.randint0(100) < 50) return { score, raised: false };
315
+
316
+ /* Figure out the chance to enchant */
317
+ let chance: number;
318
+ if (score < 0) chance = 0;
319
+ else if (score > 15) chance = 1000;
320
+ else chance = ENCHANT_TABLE[score]!;
321
+
322
+ /* If we roll less-than-or-equal to chance, it fails */
323
+ if (state.rng.randint1(1000) <= chance) return { score, raised: false };
324
+
325
+ return { score: score + 1, raised: true };
326
+ }
327
+
328
+ /**
329
+ * enchant (L319): try `n` times to raise the item's to-hit / to-dam / to-ac
330
+ * per `eflag`, with pile resistance (ammo is 20x easier) and the artifact
331
+ * resist. Returns true if any bonus was raised. The obj->known display sync
332
+ * rides rune knowledge.
333
+ */
334
+ export function enchant(
335
+ state: GameState,
336
+ obj: GameObject,
337
+ n: number,
338
+ eflag: number,
339
+ ): boolean {
340
+ let res = false;
341
+ const isArtifact = !!obj.artifact;
342
+
343
+ /* Large piles resist enchantment */
344
+ let prob = obj.number * 100;
345
+
346
+ /* Missiles are easy to enchant */
347
+ if (tvalIsAmmo(obj.tval)) prob = Math.trunc(prob / 20);
348
+
349
+ /* Try "n" times */
350
+ for (let i = 0; i < n; i++) {
351
+ /* Roll for pile resistance */
352
+ if (prob > 100 && state.rng.randint0(prob) >= 100) continue;
353
+
354
+ /* Try the three kinds of enchantment we can do */
355
+ /* enchant2 (effect-handler-general.c:294) */
356
+ if (eflag & ENCH_TOHIT) {
357
+ const r = enchantScore(state, obj.toH, isArtifact);
358
+ obj.toH = r.score;
359
+ if (r.raised) res = true;
360
+ }
361
+ if (eflag & ENCH_TODAM) {
362
+ const r = enchantScore(state, obj.toD, isArtifact);
363
+ obj.toD = r.score;
364
+ if (r.raised) res = true;
365
+ }
366
+ if (eflag & ENCH_TOAC) {
367
+ const r = enchantScore(state, obj.toA, isArtifact);
368
+ obj.toA = r.score;
369
+ if (r.raised) res = true;
370
+ }
371
+ }
372
+
373
+ if (!res) return false;
374
+
375
+ /* Recalculate bonuses (PU_BONUS | PU_INVEN) */
376
+ state.updateBonuses?.();
377
+ return true;
378
+ }
379
+
380
+ /**
381
+ * enchant_spell (L373): choose a weapon (or armour when num_ac) and enchant
382
+ * it. Returns true if attempted, false if cancelled.
383
+ */
384
+ function enchantSpell(
385
+ ctx: EffectHandlerContext,
386
+ env: GameEffectEnv,
387
+ numHit: number,
388
+ numDam: number,
389
+ numAc: number,
390
+ ): boolean {
391
+ const { state } = env;
392
+ const obj = env.item?.getItem?.(enchantRequest(numAc));
393
+ if (!obj) return false;
394
+
395
+ /* Describe (ODESC_BASE, obj-desc gates the name by knowledge) */
396
+ const name = describeObject(state, obj, ODESC.BASE);
397
+ say(
398
+ ctx,
399
+ `${objectIsCarried(state, obj) ? "Your" : "The"} ${name} glow${
400
+ obj.number > 1 ? "" : "s"
401
+ } brightly!`,
402
+ );
403
+
404
+ /* Enchant */
405
+ let okay = false;
406
+ if (numDam && enchant(state, obj, numHit, ENCH_TOBOTH)) okay = true;
407
+ else if (enchant(state, obj, numHit, ENCH_TOHIT)) okay = true;
408
+ else if (enchant(state, obj, numDam, ENCH_TODAM)) okay = true;
409
+ if (enchant(state, obj, numAc, ENCH_TOAC)) okay = true;
410
+
411
+ /* Failure */
412
+ if (!okay) say(ctx, "The enchantment failed.");
413
+
414
+ /* Something happened */
415
+ return true;
416
+ }
417
+
418
+ /**
419
+ * brand_object (L427): turn a non-magical object into the "of `name`" ego,
420
+ * with its aura message and a 4-6 round hit/dam enchant. Artifacts, egos
421
+ * and worthless items cannot be branded. player_know_object rides rune
422
+ * knowledge.
423
+ */
424
+ export function brandObject(
425
+ ctx: EffectHandlerContext,
426
+ env: GameEffectEnv,
427
+ obj: GameObject | null,
428
+ name: string,
429
+ ): void {
430
+ const { state } = env;
431
+ const egos = env.item?.reg?.egos;
432
+
433
+ if (obj && obj.kind.cost && !obj.artifact && !obj.ego && egos) {
434
+ /* Get the right ego type for the object */
435
+ const brand = `of ${name}`;
436
+ const ego = egos.find(
437
+ (e) => e.name === brand && e.possItems.has(obj.kind.kidx),
438
+ );
439
+ if (!ego) {
440
+ say(ctx, "The branding failed.");
441
+ return;
442
+ }
443
+
444
+ /* Describe (ODESC_BASE) */
445
+ say(
446
+ ctx,
447
+ `The ${describeObject(state, obj, ODESC.BASE)} ${obj.number > 1 ? "are" : "is"} surrounded with an aura of ${name}.`,
448
+ );
449
+
450
+ /* Make it an ego item */
451
+ obj.ego = ego;
452
+ if (env.item?.reg) egoApplyMagic(state.rng, env.item.reg, obj, 0);
453
+ state.updateBonuses?.();
454
+
455
+ /* Enchant */
456
+ enchant(state, obj, state.rng.randint0(3) + 4, ENCH_TOHIT | ENCH_TODAM);
457
+ } else {
458
+ say(ctx, "The branding failed.");
459
+ }
460
+ }
461
+
462
+ /**
463
+ * recharge_failure_chance (effects.c L563): N for the 1-in-N backfire.
464
+ */
465
+ export function rechargeFailureChance(
466
+ obj: GameObject,
467
+ strength: number,
468
+ ): number {
469
+ /* Ease of recharge ranges from 9 down to 4 (wands) or 3 (staffs) */
470
+ const easeOfRecharge = Math.trunc((100 - obj.kind.level) / 10);
471
+ const rawChance =
472
+ strength + easeOfRecharge - 2 * Math.trunc(obj.pval / obj.number);
473
+ return rawChance > 1 ? rawChance : 1;
474
+ }
475
+
476
+ /* ------------------------------------------------------------------ *
477
+ * The handlers
478
+ * ------------------------------------------------------------------ */
479
+
480
+ /**
481
+ * EF_ENCHANT: enchant an item per the subtype's ENCH_ flags, `value` times.
482
+ */
483
+ const handleENCHANT: EffectHandler = (ctx) => {
484
+ const env = gameEnv(ctx);
485
+ if (!env) return true;
486
+ const value = env.state.rng.randcalc(
487
+ ctx.value,
488
+ env.state.chunk.depth,
489
+ "randomise",
490
+ );
491
+ let used = false;
492
+ ctx.ident = true;
493
+
494
+ if ((ctx.subtype & ENCH_TOBOTH) === ENCH_TOBOTH) {
495
+ if (enchantSpell(ctx, env, value, value, 0)) used = true;
496
+ } else if (ctx.subtype & ENCH_TOHIT) {
497
+ if (enchantSpell(ctx, env, value, 0, 0)) used = true;
498
+ } else if (ctx.subtype & ENCH_TODAM) {
499
+ if (enchantSpell(ctx, env, 0, value, 0)) used = true;
500
+ }
501
+ if (ctx.subtype & ENCH_TOAC) {
502
+ if (enchantSpell(ctx, env, 0, 0, value)) used = true;
503
+ }
504
+
505
+ return used;
506
+ };
507
+
508
+ /**
509
+ * EF_RECHARGE: recharge a wand or staff; strength is value.base + the dice
510
+ * roll. High-level and highly-charged items are harder; a backfire destroys
511
+ * one item of the stack.
512
+ */
513
+ const handleRECHARGE: EffectHandler = (ctx) => {
514
+ const env = gameEnv(ctx);
515
+ if (!env) return true;
516
+ const { state } = env;
517
+ const strength =
518
+ ctx.value.base + state.rng.damroll(ctx.value.dice, ctx.value.sides);
519
+
520
+ /* Immediately obvious */
521
+ ctx.ident = true;
522
+
523
+ /* The recharge_pow failure-rate display rides presentation (#25). */
524
+
525
+ /* Get an item */
526
+ const obj = env.item?.getItem?.(requestForEffect(EF.RECHARGE, 0, state)!);
527
+ if (!obj) return false;
528
+
529
+ const i = rechargeFailureChance(obj, strength);
530
+ /* Back-fire */
531
+ if (i <= 1 || state.rng.oneIn(i)) {
532
+ say(ctx, "The recharge backfires!");
533
+ say(ctx, "There is a bright flash of light.");
534
+ destroyOneItem(state, obj);
535
+ } else {
536
+ /* Extract a "power" */
537
+ const easeOfRecharge = Math.trunc((100 - obj.kind.level) / 10);
538
+ const t = Math.trunc(strength / (10 - easeOfRecharge)) + 1;
539
+
540
+ /* Recharge based on the power */
541
+ if (t > 0) obj.pval += 2 + state.rng.randint1(t);
542
+ }
543
+
544
+ /* Something was done */
545
+ return true;
546
+ };
547
+
548
+ /**
549
+ * EF_REMOVE_CURSE: attempt to lift a curse from a chosen item
550
+ * (uncurse_object, L179). Success removes the curse; failure makes the item
551
+ * fragile, and a fragile item explodes one time in four.
552
+ */
553
+ const handleREMOVE_CURSE: EffectHandler = (ctx) => {
554
+ const env = gameEnv(ctx);
555
+ if (!env) return true;
556
+ const { state } = env;
557
+ const strength = effectCalculateValue(ctx, false);
558
+ ctx.ident = true;
559
+
560
+ /* item_tester_uncursable: at least one removable (power < 100) curse.
561
+ * Upstream tests the known twin; knowledge is rune-based here. */
562
+ const obj = env.item?.getItem?.(requestForEffect(EF.REMOVE_CURSE, 0, state)!);
563
+ if (!obj || !obj.curses) return false;
564
+
565
+ /* get_curse: pick among the object's active curses. */
566
+ const active: number[] = [];
567
+ obj.curses.forEach((c, i) => {
568
+ if (i > 0 && c.power > 0) active.push(i);
569
+ });
570
+ const pick = env.item?.chooseCurse
571
+ ? env.item.chooseCurse(obj, active)
572
+ : (active[0] ?? null);
573
+ if (pick === null || pick === undefined) return false;
574
+
575
+ const curse = obj.curses[pick]!;
576
+ if (curse.power >= 100) {
577
+ /* Curse is permanent */
578
+ return false;
579
+ } else if (strength >= curse.power) {
580
+ /* Successfully removed this curse (effect-handler-general.c:193-196). The
581
+ * SECOND call passes message = true, so success does announce which curse
582
+ * went: obj-curse.c:231 "The %s curse is removed!". The message rides
583
+ * remove_object_curse's own power > 0 branch, so a pick the object does not
584
+ * actually carry announces nothing - which is why the string moved out of
585
+ * this call site. */
586
+ const curseReg = env.item?.reg?.curses;
587
+ removeObjectCurse(
588
+ obj,
589
+ pick,
590
+ true,
591
+ curseReg ? { curses: curseReg, msg: (text) => say(ctx, text) } : undefined,
592
+ );
593
+ } else if (!obj.flags.has(OF.FRAGILE)) {
594
+ /* Failure to remove, object is now fragile */
595
+ say(
596
+ ctx,
597
+ `The spell fails; your ${describeObject(state, obj, ODESC.FULL)} is now fragile.`,
598
+ );
599
+ obj.flags.on(OF.FRAGILE);
600
+ playerLearnFlagRune(state.actor.player, state.runeEnv, OF.FRAGILE);
601
+ } else if (state.rng.oneIn(4)) {
602
+ /* Failure - unlucky fragile object is destroyed */
603
+ let dam = state.rng.damroll(5, 5);
604
+ const player = ctx.env.player;
605
+ if (player?.applyDamageReduction) dam = player.applyDamageReduction(dam);
606
+ /* show_damage " (N)" suffix (effect-handler-general.c L212-216). */
607
+ const damText = dam > 0 && ctx.env.showDamage ? ` (${dam})` : "";
608
+ say(ctx, `There is a bang and a flash!${damText}`);
609
+ /* Artifacts are marked as lost (effect-handler-general.c L220-222). */
610
+ if (obj.artifact) state.onArtifactLost?.(obj.artifact);
611
+ destroyOneItem(state, obj);
612
+ player?.takeHit?.(dam, "Failed uncursing");
613
+ } else {
614
+ /* Non-destructive failure */
615
+ say(ctx, "The removal fails.");
616
+ }
617
+
618
+ /* Recalculate bonuses (PU_BONUS) */
619
+ state.updateBonuses?.();
620
+ return true;
621
+ };
622
+
623
+ /**
624
+ * EF_BRAND_WEAPON: brand the wielded weapon Flame or Frost.
625
+ */
626
+ const handleBRAND_WEAPON: EffectHandler = (ctx) => {
627
+ const env = gameEnv(ctx);
628
+ if (!env) return true;
629
+ const { state } = env;
630
+ const slot = state.actor.player.body.slots.findIndex(
631
+ (s) => s.type === "WEAPON",
632
+ );
633
+ const obj = slot >= 0 ? state.runeEnv.slotObject(slot) : null;
634
+
635
+ /* Select the brand */
636
+ const brand = state.rng.oneIn(2) ? "Flame" : "Frost";
637
+
638
+ /* Brand the weapon */
639
+ brandObject(ctx, env, obj, brand);
640
+
641
+ ctx.ident = true;
642
+ return true;
643
+ };
644
+
645
+ /**
646
+ * EF_BRAND_AMMO: brand some non-magical ammo Flame, Frost or Venom.
647
+ */
648
+ const handleBRAND_AMMO: EffectHandler = (ctx) => {
649
+ const env = gameEnv(ctx);
650
+ if (!env) return true;
651
+ const { state } = env;
652
+
653
+ /* Select the brand */
654
+ const brand = state.rng.oneIn(3)
655
+ ? "Flame"
656
+ : state.rng.oneIn(2)
657
+ ? "Frost"
658
+ : "Venom";
659
+
660
+ ctx.ident = true;
661
+
662
+ /* Get an item */
663
+ const obj = env.item?.getItem?.(requestForEffect(EF.BRAND_AMMO, 0, state)!);
664
+ if (!obj) return false;
665
+
666
+ /* Brand the ammo */
667
+ brandObject(ctx, env, obj, brand);
668
+ return true;
669
+ };
670
+
671
+ /**
672
+ * EF_BRAND_BOLTS: brand some non-magical bolts Flame.
673
+ */
674
+ const handleBRAND_BOLTS: EffectHandler = (ctx) => {
675
+ const env = gameEnv(ctx);
676
+ if (!env) return true;
677
+ ctx.ident = true;
678
+
679
+ /* Get an item */
680
+ const obj = env.item?.getItem?.(
681
+ requestForEffect(EF.BRAND_BOLTS, 0, env.state)!,
682
+ );
683
+ if (!obj) return false;
684
+
685
+ /* Brand the bolts */
686
+ brandObject(ctx, env, obj, "Flame");
687
+ return true;
688
+ };
689
+
690
+ /** The shared CURSE_ARMOR / CURSE_WEAPON body. */
691
+ function curseWorn(
692
+ ctx: EffectHandlerContext,
693
+ env: GameEffectEnv,
694
+ slotType: string,
695
+ hurt: (obj: GameObject) => void,
696
+ what: string,
697
+ ): boolean {
698
+ const { state } = env;
699
+ const slot = state.actor.player.body.slots.findIndex(
700
+ (s) => s.type === slotType,
701
+ );
702
+ const obj = slot >= 0 ? state.runeEnv.slotObject(slot) : null;
703
+
704
+ /* Nothing to curse */
705
+ if (!obj) return true;
706
+
707
+ const name = describeObject(state, obj, ODESC.FULL);
708
+
709
+ /* Attempt a saving throw for artifacts */
710
+ if (obj.artifact && state.rng.randint0(100) < 50) {
711
+ say(
712
+ ctx,
713
+ `A terrible black aura tries to surround your ${what}, but your ${name} resists the effects!`,
714
+ );
715
+ } else {
716
+ const curses = env.item?.reg?.curses;
717
+ say(ctx, `A terrible black aura blasts your ${name}!`);
718
+
719
+ /* Take down bonus a wee bit */
720
+ hurt(obj);
721
+
722
+ /* Try to find enough appropriate curses */
723
+ if (curses) {
724
+ let num = state.rng.randint1(3);
725
+ let maxTries = 20;
726
+ while (num && maxTries) {
727
+ const pick = state.rng.randint1(curses.length - 1);
728
+ const power = 10 * state.rng.mBonus(9, state.chunk.depth);
729
+ if (!curses[pick]?.poss[obj.tval]) {
730
+ maxTries--;
731
+ continue;
732
+ }
733
+ appendObjectCurse(state.rng, obj, pick, power, curses);
734
+ num--;
735
+ }
736
+ }
737
+
738
+ /* Recalculate bonuses (PU_BONUS | PU_MANA); weight upkeep rides gear. */
739
+ state.updateBonuses?.();
740
+ }
741
+
742
+ ctx.ident = true;
743
+ return true;
744
+ }
745
+
746
+ /**
747
+ * EF_CURSE_ARMOR: a terrible black aura blasts the body armour.
748
+ */
749
+ const handleCURSE_ARMOR: EffectHandler = (ctx) => {
750
+ const env = gameEnv(ctx);
751
+ if (!env) return true;
752
+ return curseWorn(
753
+ ctx,
754
+ env,
755
+ "BODY_ARMOR",
756
+ (obj) => {
757
+ obj.toA -= env.state.rng.randint1(3);
758
+ },
759
+ "armor",
760
+ );
761
+ };
762
+
763
+ /**
764
+ * EF_CURSE_WEAPON: a terrible black aura blasts the wielded weapon.
765
+ */
766
+ const handleCURSE_WEAPON: EffectHandler = (ctx) => {
767
+ const env = gameEnv(ctx);
768
+ if (!env) return true;
769
+ return curseWorn(
770
+ ctx,
771
+ env,
772
+ "WEAPON",
773
+ (obj) => {
774
+ obj.toH = 0 - env.state.rng.randint1(3);
775
+ obj.toD = 0 - env.state.rng.randint1(3);
776
+ },
777
+ "weapon",
778
+ );
779
+ };
780
+
781
+ /**
782
+ * EF_CREATE_ARROWS: turn a staff into arrows (better staves make better
783
+ * arrows).
784
+ */
785
+ const handleCREATE_ARROWS: EffectHandler = (ctx) => {
786
+ const env = gameEnv(ctx);
787
+ if (!env) return true;
788
+ const { state } = env;
789
+
790
+ /* Get an item */
791
+ const obj = env.item?.getItem?.(requestForEffect(EF.CREATE_ARROWS, 0, state)!);
792
+ if (!obj) return false;
793
+
794
+ /* Extract the object "level" */
795
+ const lev = obj.kind.level;
796
+
797
+ /* Roll for good */
798
+ let good = false;
799
+ let great = false;
800
+ if (state.rng.randint1(lev) > 25) {
801
+ good = true;
802
+ /* Roll for great */
803
+ if (state.rng.randint1(lev) > 50) great = true;
804
+ }
805
+
806
+ /* Destroy the staff */
807
+ destroyOneItem(state, obj);
808
+
809
+ /* Make some arrows */
810
+ if (env.item?.makeDeps) {
811
+ const arrows = makeObject(
812
+ state.rng,
813
+ env.item.makeDeps,
814
+ state.actor.player.lev,
815
+ good,
816
+ great,
817
+ false,
818
+ TV.ARROW,
819
+ state.chunk.depth,
820
+ );
821
+ if (arrows) dropNear(state, arrows, 0, state.actor.grid, true, true);
822
+ }
823
+
824
+ return true;
825
+ };
826
+
827
+ /**
828
+ * EF_TAP_DEVICE: drain a wand or staff's charges into mana.
829
+ */
830
+ const handleTAP_DEVICE: EffectHandler = (ctx) => {
831
+ const env = gameEnv(ctx);
832
+ if (!env) return true;
833
+ const { state } = env;
834
+ const p = state.actor.player;
835
+ let used = false;
836
+
837
+ /* Get an item */
838
+ const obj = env.item?.getItem?.(requestForEffect(EF.TAP_DEVICE, 0, state)!);
839
+ if (!obj) return false;
840
+
841
+ /* Extract the object "level" and its energy. */
842
+ const lev = obj.kind.level;
843
+ let energy = 0;
844
+ let item = "";
845
+ if (tvalIsStaff(obj.tval)) {
846
+ energy = Math.trunc(((5 + lev) * 3 * obj.pval) / 2);
847
+ item = "staff";
848
+ } else if (tvalIsWand(obj.tval)) {
849
+ energy = Math.trunc(((5 + lev) * 3 * obj.pval) / 2);
850
+ item = "wand";
851
+ }
852
+
853
+ /* Turn energy into mana. */
854
+ if (energy < 36) {
855
+ /* Require a reasonable amount of energy */
856
+ say(ctx, `That ${item} had no useable energy`);
857
+ } else if (p.csp < p.msp) {
858
+ /* Drain the object. */
859
+ obj.pval = 0;
860
+
861
+ /* Increase mana. */
862
+ p.csp += Math.trunc(energy / 6);
863
+ p.cspFrac = 0;
864
+ if (p.csp > p.msp) p.csp = p.msp;
865
+
866
+ say(ctx, "You feel your head clear.");
867
+ used = true;
868
+ const stun = state.rng.randint1(2);
869
+ ctx.env.player?.timed?.incTimed(
870
+ TMD.STUN,
871
+ stun,
872
+ true,
873
+ ctx.origin.what !== "player" || !ctx.aware,
874
+ true,
875
+ );
876
+ } else {
877
+ const cap = item.charAt(0).toUpperCase() + item.slice(1);
878
+ say(ctx, `Your mana was already at its maximum. ${cap} not drained.`);
879
+ }
880
+
881
+ return used;
882
+ };
883
+
884
+ /**
885
+ * EF_ACQUIRE: conjure `value` great objects out of thin air (acquirement,
886
+ * obj-make.c L1240).
887
+ */
888
+ const handleACQUIRE: EffectHandler = (ctx) => {
889
+ const env = gameEnv(ctx);
890
+ if (!env) return true;
891
+ const { state } = env;
892
+ let num = effectCalculateValue(ctx, false);
893
+ ctx.ident = true;
894
+ if (!env.item?.makeDeps) return true;
895
+
896
+ while (num-- > 0) {
897
+ /* Make a good (or great) object (if possible) */
898
+ const nice = makeObject(
899
+ state.rng,
900
+ env.item.makeDeps,
901
+ state.chunk.depth,
902
+ true,
903
+ true,
904
+ true,
905
+ 0,
906
+ state.chunk.depth,
907
+ );
908
+ if (!nice) continue;
909
+
910
+ nice.origin = ORIGIN.ACQUIRE;
911
+ nice.originDepth = state.chunk.depth;
912
+
913
+ /* Drop the object */
914
+ dropNear(state, nice, 0, state.actor.grid, true, false);
915
+ }
916
+ return true;
917
+ };
918
+
919
+ /**
920
+ * EF_IDENTIFY (effect-handler-general.c L1945): learn one random unknown
921
+ * rune of a chosen not-fully-known item (object_learn_unknown_rune over the
922
+ * rune list). Cancelling (or no chooser wired) leaves the effect unused.
923
+ */
924
+ const handleIDENTIFY: EffectHandler = (ctx) => {
925
+ const env = gameEnv(ctx);
926
+ if (!env) return true;
927
+ const { state } = env;
928
+ ctx.ident = true;
929
+
930
+ const runes = buildRuneList(state.runeEnv);
931
+ const player = state.actor.player;
932
+
933
+ /* Get an item (item_tester_unknown: not all runes known). */
934
+ const obj =
935
+ env.item?.getItem?.(requestForEffect(EF.IDENTIFY, 0, state)!) ?? null;
936
+ if (!obj) return false;
937
+
938
+ /* Identify the object. When flavor knowledge is wired (in-play), learning the
939
+ * rune also fires player_know_object's object_flavor_aware side effect for
940
+ * this object (jewelry with all non-curse runes known / a special artifact). */
941
+ objectLearnUnknownRune(
942
+ state.rng,
943
+ player,
944
+ state.runeEnv,
945
+ obj,
946
+ runes,
947
+ env.flavor,
948
+ env.flavorDeps,
949
+ );
950
+ /* player_learn_rune's update_player_object_knowledge tail-call (L1373): the
951
+ * learned rune may now complete another carried/floor jewel's runes, so sweep
952
+ * all of them for awareness + the "You have ... (a)." reveal (KN-03/KN-04). */
953
+ updatePlayerObjectKnowledge(state);
954
+ return true;
955
+ };
956
+
957
+ /** The item-targeting handlers, keyed by upstream EF code. */
958
+ const ITEM_HANDLERS: ReadonlyMap<number, EffectHandler> = new Map<
959
+ number,
960
+ EffectHandler
961
+ >([
962
+ [EF.ENCHANT, handleENCHANT],
963
+ /* effect_handler_RECHARGE (effect-handler-general.c:2127) */
964
+ [EF.RECHARGE, handleRECHARGE],
965
+ [EF.REMOVE_CURSE, handleREMOVE_CURSE],
966
+ /* effect_handler_BRAND_WEAPON (effect-handler-general.c:3233) */
967
+ [EF.BRAND_WEAPON, handleBRAND_WEAPON],
968
+ /* effect_handler_BRAND_AMMO (effect-handler-general.c:3251) */
969
+ [EF.BRAND_AMMO, handleBRAND_AMMO],
970
+ /* effect_handler_BRAND_BOLTS (effect-handler-general.c:3284) */
971
+ [EF.BRAND_BOLTS, handleBRAND_BOLTS],
972
+ /* effect_handler_CURSE_ARMOR (effect-handler-general.c:3103) */
973
+ [EF.CURSE_ARMOR, handleCURSE_ARMOR],
974
+ /* effect_handler_CURSE_WEAPON (effect-handler-general.c:3167) */
975
+ [EF.CURSE_WEAPON, handleCURSE_WEAPON],
976
+ /* effect_handler_CREATE_ARROWS (effect-handler-general.c:3315) */
977
+ [EF.CREATE_ARROWS, handleCREATE_ARROWS],
978
+ /* effect_handler_TAP_DEVICE (effect-handler-general.c:3370) */
979
+ [EF.TAP_DEVICE, handleTAP_DEVICE],
980
+ /* effect_handler_ACQUIRE (effect-handler-general.c:2194) */
981
+ [EF.ACQUIRE, handleACQUIRE],
982
+ /* effect_handler_IDENTIFY (effect-handler-general.c:1945) */
983
+ [EF.IDENTIFY, handleIDENTIFY],
984
+ ]);
985
+
986
+ /**
987
+ * Register the item-targeting handlers, overriding the stubs
988
+ * registerCoreHandlers installed. Call after registerCoreHandlers. Each
989
+ * handler reads its game environment from context.env.game (attach it with
990
+ * attachGameEnv) and no-ops when it is absent.
991
+ */
992
+ export function registerItemHandlers(registry: EffectRegistry): void {
993
+ for (const [code, handler] of ITEM_HANDLERS) {
994
+ registry.register(code, { handler, status: "implemented" });
995
+ }
996
+ }
997
+
998
+ /** The item-targeting EF codes this module registers. */
999
+ export const ITEM_HANDLER_CODES: readonly number[] = [...ITEM_HANDLERS.keys()];