@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,1037 @@
1
+ /**
2
+ * The player's gear store: the world/UI-owned side of carried objects.
3
+ *
4
+ * The parity Player (player/player.ts) deliberately omits struct player's
5
+ * gear list, keeping only equipment[] as per-body-slot object HANDLES
6
+ * (0 = empty). This module owns the objects those handles point at: a
7
+ * handle -> GameObject store plus an ordered pack of non-equipped handles.
8
+ * It ports the equipment/carry substrate and the birth starting-kit from
9
+ * reference/src/obj-gear.c (slot_by_type, wield_slot, inven_carry) and
10
+ * reference/src/player-birth.c (wield_all, player_outfit) (Angband 4.2.6).
11
+ *
12
+ * LIVE vs DEFERRED (ledgered in parity/ledger/game-gear.yaml):
13
+ * - LIVE: slot_by_type (empty-preferring), wield_slot (full tval switch),
14
+ * inven_carry's merge-or-add with quiver stack-mode routing, wield_all's
15
+ * split-and-wear, player_outfit's start-item roll + prep + carry + wield
16
+ * (birth_start_kit + eopts exclusion honoured), the real quiver subsystem
17
+ * (object_is_in_quiver, preferred_quiver_slot, quiver_absorb_num,
18
+ * calc_inventory's quiver assignment, pack_slots_used quiver accounting),
19
+ * combine_pack + inven_can_stack_partial, and minus_ac armour damage,
20
+ * pack_is_full / pack_is_overfull (the pack_size overflow enforcement itself,
21
+ * pack_overflow, needs drop_near and so lives in game/obj-cmd.ts next to the
22
+ * other obj-gear.c verbs that touch the floor).
23
+ * - DEFERRED: the display knowledge twin (obj->known) and equip_cnt UI
24
+ * counter. The pack-side inven[] listing is a derived view rather than the
25
+ * source of truth: gear.pack keeps master-gear insertion order while
26
+ * gear.inven reproduces calc_inventory's earlier_object ordering. Wielding DOES learn modifier runes
27
+ * (obj-knowledge.c object_learn_on_wield); see obj/knowledge.ts.
28
+ */
29
+ import { ELEM, OF, ORIGIN, TV } from "../generated/index.js";
30
+ import { tvalFindIdx } from "../obj/bind.js";
31
+ import { learnBirthObviousFlags, objectLearnOnWield, OBJ_NOTICE } from "../obj/knowledge.js";
32
+ import { distributeCharges, objectAbsorb, objectAbsorbPartial, objectMergeable, objectStackable, OSTACK_PACK, OSTACK_QUIVER, tvalCanHaveCharges, tvalCanHaveTimeout, tvalIsAmmo, tvalIsBodyArmor, tvalIsFood, tvalIsHeadArmor, tvalIsLight, tvalIsMeleeWeapon, tvalIsMoney, tvalIsRing, tvalIsRod, } from "../obj/object.js";
33
+ import { EL_INFO_IGNORE } from "../obj/types.js";
34
+ import { objectPrep } from "../obj/make.js";
35
+ import { objectValueReal } from "../obj/value.js";
36
+ import { earlierObject } from "../player/calcs.js";
37
+ /** A fresh, empty gear store (empty quiver; calcInventory sizes it). */
38
+ export function newGear() {
39
+ return { store: new Map(), next: 1, pack: [], inven: [], quiver: [] };
40
+ }
41
+ /** Store an object under a fresh handle and return it (no pack insertion). */
42
+ export function gearAdd(gear, obj) {
43
+ const handle = gear.next;
44
+ gear.next += 1;
45
+ gear.store.set(handle, obj);
46
+ return handle;
47
+ }
48
+ /** The object for a handle, or null (0 / unknown handle -> null). */
49
+ export function gearGet(gear, handle) {
50
+ return gear.store.get(handle) ?? null;
51
+ }
52
+ /* ------------------------------------------------------------------ */
53
+ /* obj-util.c object copy / split */
54
+ /* ------------------------------------------------------------------ */
55
+ /**
56
+ * object_copy (obj-util.c): a faithful deep copy of the live struct. The
57
+ * known twin and pile links are not part of GameObject (deferred), and
58
+ * kind/ego/artifact/activation/effect stay shared references exactly as
59
+ * upstream's memcpy leaves them.
60
+ */
61
+ function objectCopy(src) {
62
+ return {
63
+ ...src,
64
+ flags: src.flags.clone(),
65
+ modifiers: [...src.modifiers],
66
+ elInfo: src.elInfo.map((e) => ({ resLevel: e.resLevel, flags: e.flags })),
67
+ brands: src.brands ? [...src.brands] : null,
68
+ slays: src.slays ? [...src.slays] : null,
69
+ curses: src.curses
70
+ ? src.curses.map((c) => ({ power: c.power, timeout: c.timeout }))
71
+ : null,
72
+ time: { ...src.time },
73
+ };
74
+ }
75
+ /**
76
+ * object_split (obj-util.c): split `amt` items off `src` into a fresh copy,
77
+ * distributing wand/staff/rod charges, and reduce src by amt. Requires
78
+ * src.number > amt (upstream assert). Exported for the floor-pile module
79
+ * (floor_object_for_use splits floor stacks the same way).
80
+ */
81
+ export function objectSplit(src, amt) {
82
+ const dest = objectCopy(src);
83
+ /* Distribute charges of wands, staves, or rods (dest is a new stack). */
84
+ distributeCharges(src, dest, amt, true);
85
+ dest.number = amt;
86
+ src.number -= amt;
87
+ if (src.note)
88
+ dest.note = src.note;
89
+ return dest;
90
+ }
91
+ /* ------------------------------------------------------------------ */
92
+ /* obj-gear.c slot logic */
93
+ /* ------------------------------------------------------------------ */
94
+ /**
95
+ * slot_by_type (obj-gear.c L71-93): the index of a slot of the given type,
96
+ * preferring an empty one (full = false) or a full one (full = true), else
97
+ * any matching-type slot, else body.count when none exists.
98
+ *
99
+ * Upstream reads body.slots[i].obj to decide full/empty; here a slot is
100
+ * "filled" when equipment[i] !== 0, so the equipment array is passed in.
101
+ */
102
+ function slotByType(body, equipment, type, full) {
103
+ let fallback = body.count;
104
+ let i = 0;
105
+ for (; i < body.count; i++) {
106
+ if (type === body.slots[i].type) {
107
+ const filled = (equipment[i] ?? 0) !== 0;
108
+ if (full) {
109
+ /* Found a full slot */
110
+ if (filled)
111
+ break;
112
+ }
113
+ else {
114
+ /* Found an empty slot */
115
+ if (!filled)
116
+ break;
117
+ }
118
+ /* Not right for full/empty, but still the right type */
119
+ if (fallback === body.count)
120
+ fallback = i;
121
+ }
122
+ }
123
+ /* Index for the best slot we found, or body.count if none found. */
124
+ return i !== body.count ? i : fallback;
125
+ }
126
+ /**
127
+ * wield_slot (obj-gear.c L341-367): the equipment slot an object of the
128
+ * given tval likes (an open slot preferred for rings), or -1 for a
129
+ * non-wearable tval.
130
+ *
131
+ * `equipment` (optional, defaults to all-empty) lets the empty-slot
132
+ * preference work; wieldObject/wieldAll pass the player's real equipment
133
+ * so a second ring lands in the free hand, matching upstream.
134
+ */
135
+ export function wieldSlot(body, tval, equipment) {
136
+ const eq = equipment ?? new Array(body.count).fill(0);
137
+ switch (tval) {
138
+ case TV.BOW:
139
+ return slotByType(body, eq, "BOW", false);
140
+ case TV.AMULET:
141
+ return slotByType(body, eq, "AMULET", false);
142
+ case TV.CLOAK:
143
+ return slotByType(body, eq, "CLOAK", false);
144
+ case TV.SHIELD:
145
+ return slotByType(body, eq, "SHIELD", false);
146
+ case TV.GLOVES:
147
+ return slotByType(body, eq, "GLOVES", false);
148
+ case TV.BOOTS:
149
+ return slotByType(body, eq, "BOOTS", false);
150
+ default:
151
+ break;
152
+ }
153
+ if (tvalIsMeleeWeapon(tval))
154
+ return slotByType(body, eq, "WEAPON", false);
155
+ if (tvalIsRing(tval))
156
+ return slotByType(body, eq, "RING", false);
157
+ if (tvalIsLight(tval))
158
+ return slotByType(body, eq, "LIGHT", false);
159
+ if (tvalIsBodyArmor(tval))
160
+ return slotByType(body, eq, "BODY_ARMOR", false);
161
+ if (tvalIsHeadArmor(tval))
162
+ return slotByType(body, eq, "HAT", false);
163
+ /* No slot available */
164
+ return -1;
165
+ }
166
+ /* ------------------------------------------------------------------ */
167
+ /* Quiver membership and slot preference (obj-gear.c) */
168
+ /* ------------------------------------------------------------------ */
169
+ /**
170
+ * object_is_in_quiver (obj-gear.c L163-174): is the object referenced by
171
+ * `handle` currently held in one of the computed quiver slots? A zero handle
172
+ * (empty slot / no object) is never in the quiver.
173
+ */
174
+ export function objectIsInQuiver(gear, handle) {
175
+ if (handle === 0)
176
+ return false;
177
+ return (gear.quiver ?? []).includes(handle);
178
+ }
179
+ /**
180
+ * preferred_quiver_slot (obj-gear.c L1396-1427): the quiver slot an object's
181
+ * inscription asks for, or -1 when it is not quiver-appropriate or not
182
+ * inscribed with a matching @f/@v (fire / throw) key. The fire key depends on
183
+ * the keyset: 't' under rogue-like commands, else 'f'; the throw key is always
184
+ * 'v' (upstream hardwires these because cmd_lookup_key is in the UI layer).
185
+ */
186
+ export function preferredQuiverSlot(obj, rogueLike = false) {
187
+ let desiredSlot = -1;
188
+ if (obj.note && (tvalIsAmmo(obj.tval) || obj.flags.has(OF.THROWING))) {
189
+ const fireKey = rogueLike ? "t" : "f";
190
+ const throwKey = "v";
191
+ let s = obj.note.indexOf("@");
192
+ while (s !== -1) {
193
+ const k = obj.note[s + 1];
194
+ if (k === fireKey || k === throwKey) {
195
+ /* s[2] - '0': the single digit slot after the key. */
196
+ desiredSlot = (obj.note.charCodeAt(s + 2) || 0) - "0".charCodeAt(0);
197
+ break;
198
+ }
199
+ s = obj.note.indexOf("@", s + 1);
200
+ }
201
+ }
202
+ return desiredSlot;
203
+ }
204
+ /* ------------------------------------------------------------------ */
205
+ /* minus_ac (obj-gear.c L376-438) */
206
+ /* ------------------------------------------------------------------ */
207
+ /** The non-armour equipment slot types minus_ac skips (obj-gear.c L387-391). */
208
+ function slotIsArmour(type) {
209
+ return (type !== undefined &&
210
+ type !== "WEAPON" &&
211
+ type !== "BOW" &&
212
+ type !== "RING" &&
213
+ type !== "AMULET" &&
214
+ type !== "LIGHT");
215
+ }
216
+ /**
217
+ * minus_ac (obj-gear.c L376-438): acid has hit the player, so attempt to
218
+ * damage a piece of worn armour. Counts the armour slots, draws one at random
219
+ * with the exact upstream reverse one_in_(count--) scan, and (if that item can
220
+ * still lose armour) either reports it resists (EL_INFO_IGNORE on ELEM_ACID)
221
+ * or decrements its to_a and prints the damage message. Returns whether there
222
+ * was any effect (a piece was picked and had ac + to_a > 0), matching upstream
223
+ * so the caller can halve the elemental damage.
224
+ *
225
+ * The RNG draw order is preserved bit-for-bit: the forward count loop, then
226
+ * the reverse pick loop consuming one_in_(count--) per armour slot until it
227
+ * breaks. `obj->known->to_a = obj->to_a` (L425-426) is DEFERRED - the port has
228
+ * no per-object known twin (obj-knowledge #4.8); obj_k->to_a is 1 at birth so
229
+ * the real to_a is already the shown value.
230
+ */
231
+ export function minusAc(player, gear, rng, env = {}) {
232
+ const body = player.body;
233
+ /* Avoid crash during monster power calculations (L382): no gear, no effect. */
234
+ if (gear.pack.length === 0 && player.equipment.every((h) => h === 0)) {
235
+ return false;
236
+ }
237
+ /* Count the armour slots (L384-395). */
238
+ let count = 0;
239
+ for (let i = 0; i < body.count; i++) {
240
+ if (slotIsArmour(body.slots[i]?.type))
241
+ count++;
242
+ }
243
+ /* Pick one at random with the reverse one_in_(count--) scan (L397-407). */
244
+ let picked = body.count;
245
+ for (let i = body.count - 1; i >= 0; i--) {
246
+ if (!slotIsArmour(body.slots[i]?.type))
247
+ continue;
248
+ if (rng.oneIn(count--)) {
249
+ picked = i;
250
+ break;
251
+ }
252
+ }
253
+ /* Get the item in the picked slot (L410). */
254
+ const handle = picked < body.count ? (player.equipment[picked] ?? 0) : 0;
255
+ const obj = handle !== 0 ? (gear.store.get(handle) ?? null) : null;
256
+ /* If we can still damage the item (L412-433). */
257
+ if (obj && obj.ac + obj.toA > 0) {
258
+ const name = env.describe ? env.describe(obj) : obj.kind.name;
259
+ const acidEl = obj.elInfo[ELEM.ACID];
260
+ if (acidEl && (acidEl.flags & EL_INFO_IGNORE) !== 0) {
261
+ env.msg?.(`Your ${name} is unaffected!`);
262
+ }
263
+ else {
264
+ env.msg?.(`Your ${name} is damaged!`);
265
+ obj.toA--;
266
+ /* DEFERRED: obj->known->to_a = obj->to_a (no known twin, #4.8). */
267
+ env.updateBonuses?.(); /* PU_BONUS */
268
+ }
269
+ /* There was an effect. */
270
+ return true;
271
+ }
272
+ /* No damage or effect (L435-436). */
273
+ return false;
274
+ }
275
+ /** inven_carry plus the C `combining` bit needed by pickup awareness. */
276
+ export function invenCarryResult(gear, obj, limits) {
277
+ /* Check for combining with an existing non-equipped stack. */
278
+ for (const handle of gear.pack) {
279
+ const stack = gear.store.get(handle);
280
+ const mode = objectIsInQuiver(gear, handle) ? OSTACK_QUIVER : OSTACK_PACK;
281
+ if (stack && objectMergeable(stack, obj, mode, limits)) {
282
+ objectAbsorb(stack, obj, ORIGIN.MIXED);
283
+ return { handle, combining: true };
284
+ }
285
+ }
286
+ /* We did not find an object to combine with: add a new pack handle. */
287
+ const handle = gearAdd(gear, obj);
288
+ gear.pack.push(handle);
289
+ return { handle, combining: false };
290
+ }
291
+ export function invenCarry(gear, obj, limits) {
292
+ return invenCarryResult(gear, obj, limits).handle;
293
+ }
294
+ /* ------------------------------------------------------------------ */
295
+ /* inven_carry_num / object_copy_amt / gear_object_for_use */
296
+ /* ------------------------------------------------------------------ */
297
+ /**
298
+ * pack_slots_used (obj-gear.c L257-296): the number of pack slots occupied.
299
+ * Equipped items don't count (they are absent from `pack`); ammo / throwing
300
+ * items assigned to the quiver aggregate by weighted count into quiver slots
301
+ * of quiver_slot_size, so a non-empty quiver frees up whole pack slots. When
302
+ * the quiver is empty this equals pack.length (every item is a pack slot).
303
+ */
304
+ export function packSlotsUsed(gear, constants) {
305
+ let packSlots = 0;
306
+ let quiverAmmo = 0;
307
+ for (const handle of gear.pack) {
308
+ const obj = gear.store.get(handle);
309
+ if (!obj)
310
+ continue;
311
+ let found = false;
312
+ if (tvalIsAmmo(obj.tval) || obj.flags.has(OF.THROWING)) {
313
+ if (objectIsInQuiver(gear, handle)) {
314
+ quiverAmmo +=
315
+ obj.number * (tvalIsAmmo(obj.tval) ? 1 : constants.thrownQuiverMult);
316
+ found = true;
317
+ }
318
+ }
319
+ /* Count regular slots. */
320
+ if (!found)
321
+ packSlots++;
322
+ }
323
+ /* Full slots, plus one for any remainder. */
324
+ packSlots += Math.trunc(quiverAmmo / constants.quiverSlotSize);
325
+ if (quiverAmmo % constants.quiverSlotSize)
326
+ packSlots++;
327
+ return packSlots;
328
+ }
329
+ /**
330
+ * pack_is_full (obj-gear.c L1328-1331): the pack holds exactly the maximum
331
+ * number of items.
332
+ */
333
+ export function packIsFull(gear, constants) {
334
+ return packSlotsUsed(gear, constants) === constants.packSize;
335
+ }
336
+ /**
337
+ * pack_is_overfull (obj-gear.c L1337-1340): the pack holds MORE than the
338
+ * maximum, so pack_overflow (game/obj-cmd.ts) will shed an item.
339
+ */
340
+ export function packIsOverfull(gear, constants) {
341
+ return packSlotsUsed(gear, constants) > constants.packSize;
342
+ }
343
+ /**
344
+ * quiver_absorb_num (obj-gear.c L649-744): how many of `obj` the quiver can
345
+ * take, and how many additional pack slots that costs. Reads the current
346
+ * computed quiver (gear.quiver) exactly as upstream reads p->upkeep->quiver.
347
+ * `nAddPack` is the number of extra pack slots the quiver may claim; the return
348
+ * carries the leftover (nAddPack minus the slots consumed) alongside nToQuiver.
349
+ */
350
+ export function quiverAbsorbNum(gear, obj, constants, nAddPack, rogueLike = false) {
351
+ const ammo = tvalIsAmmo(obj.tval);
352
+ /* Must be ammo or good for throwing (L655). */
353
+ if (ammo || obj.flags.has(OF.THROWING)) {
354
+ let quiverCount = 0;
355
+ let spaceFree = 0;
356
+ let nEmpty = 0;
357
+ const desiredSlot = preferredQuiverSlot(obj, rogueLike);
358
+ let displaces = false;
359
+ const qSize = constants.quiverSize;
360
+ const qSlot = constants.quiverSlotSize;
361
+ const quiver = gear.quiver ?? [];
362
+ /* Count the current space this object could go into (L660-710). */
363
+ for (let i = 0; i < qSize; i++) {
364
+ const qHandle = quiver[i] ?? 0;
365
+ const quiverObj = qHandle !== 0 ? gear.store.get(qHandle) : undefined;
366
+ if (quiverObj) {
367
+ const mult = tvalIsAmmo(quiverObj.tval) ? 1 : constants.thrownQuiverMult;
368
+ quiverCount += quiverObj.number * mult;
369
+ if (objectStackable(quiverObj, obj, OSTACK_PACK)) {
370
+ spaceFree += qSlot - quiverObj.number * mult;
371
+ }
372
+ else if (desiredSlot === i &&
373
+ preferredQuiverSlot(quiverObj, rogueLike) !== i) {
374
+ /* The added object prefers this slot, but it is occupied by a stack
375
+ * that could be displaced elsewhere if a slot is available. */
376
+ displaces = true;
377
+ if (ammo) {
378
+ spaceFree += qSlot - quiverObj.number * mult;
379
+ }
380
+ else {
381
+ spaceFree += qSlot;
382
+ }
383
+ }
384
+ }
385
+ else {
386
+ nEmpty++;
387
+ /* Ammo fits any empty slot; a non-ammo throwing item only its
388
+ * preferred slot (L699-708). */
389
+ if (ammo || desiredSlot === i) {
390
+ spaceFree += qSlot;
391
+ }
392
+ }
393
+ }
394
+ /* Only addable if there is free space and we either displace a pile with an
395
+ * empty slot available or don't displace at all (L712-738). */
396
+ if (spaceFree && ((displaces && nEmpty) || !displaces)) {
397
+ const mult = ammo ? 1 : constants.thrownQuiverMult;
398
+ const remainder = quiverCount % qSlot;
399
+ let limitFromPack = remainder ? qSlot - remainder : 0;
400
+ if (nAddPack > 0)
401
+ limitFromPack += nAddPack * qSlot;
402
+ spaceFree = Math.min(spaceFree, limitFromPack);
403
+ const nToQuiver = Math.min(obj.number, Math.trunc(spaceFree / mult));
404
+ const usedPack = nAddPack -
405
+ Math.trunc((nToQuiver * mult + qSlot - 1 - remainder) / qSlot);
406
+ return { nToQuiver, nAddPack: usedPack };
407
+ }
408
+ }
409
+ /* Not suitable for the quiver or no space (L742-743). */
410
+ return { nToQuiver: 0, nAddPack };
411
+ }
412
+ /**
413
+ * inven_carry_num (obj-gear.c L749-780): how many of `obj` the gear can accept
414
+ * across quiver and pack. The quiver absorbs what it can first; then a free
415
+ * pack slot takes the rest, or the remainder squeezes into partially-full
416
+ * stackable pack slots.
417
+ */
418
+ export function invenCarryNum(gear, obj, constants) {
419
+ /* Treasure can always be picked up (never reached via a store). */
420
+ if (tvalIsMoney(obj.tval))
421
+ return obj.number;
422
+ const nFreeSlot = constants.packSize - packSlotsUsed(gear, constants);
423
+ /* Absorb as many as we can in the quiver (L760). quiver_absorb_num DECREMENTS
424
+ * the free-slot count by the pack slots the quiver expands into (via
425
+ * &n_free_slot); the port returns that decremented value as nAddPack. GR-01:
426
+ * the >0 test must use the decremented nAddPack, not the pre-call nFreeSlot,
427
+ * or capacity is over-reported when the quiver eats free pack slots but still
428
+ * cannot hold the whole stack. */
429
+ const { nToQuiver, nAddPack } = quiverAbsorbNum(gear, obj, constants, nFreeSlot);
430
+ /* The quiver will get everything, or the pack can hold what's left (L763). */
431
+ if (nToQuiver === obj.number || nAddPack > 0)
432
+ return obj.number;
433
+ /* See if we can add to partially-full inventory slots (L767-776). GR-02:
434
+ * upstream iterates p->upkeep->inven[], which EXCLUDES ammo already sitting
435
+ * in the quiver; gear.pack still carries those handles, so a stackable
436
+ * quiver ammo stack would be double-counted as pack free space. Skip any
437
+ * handle that is in the quiver. */
438
+ let numLeft = obj.number - nToQuiver;
439
+ for (const handle of gear.pack) {
440
+ if (objectIsInQuiver(gear, handle))
441
+ continue;
442
+ const stack = gear.store.get(handle);
443
+ if (stack && objectStackable(stack, obj, OSTACK_PACK)) {
444
+ numLeft -= stack.kind.base.maxStack - stack.number;
445
+ if (numLeft <= 0)
446
+ break;
447
+ }
448
+ }
449
+ return obj.number - Math.max(numLeft, 0);
450
+ }
451
+ /** Build EarlierObjectOpts (ammo tiebreak) from the calc-inventory opts. */
452
+ function earlierOpts(opts) {
453
+ const e = { store: false };
454
+ if (opts.ammoTval !== undefined)
455
+ e.ammoTval = opts.ammoTval;
456
+ if (opts.objectValue)
457
+ e.objectValue = opts.objectValue;
458
+ if (opts.isAware)
459
+ e.isAware = opts.isAware;
460
+ if (opts.canBrowse)
461
+ e.canBrowse = opts.canBrowse;
462
+ return e;
463
+ }
464
+ /**
465
+ * calc_inventory (player-calcs.c:1023-1238): rebuild gear.quiver and the
466
+ * separate sorted gear.inven listing. `gear.pack` remains the raw master-gear
467
+ * order, so changing this derived view cannot destabilize combine/split logic.
468
+ * from the current non-equipped gear. First place inscribed items in their
469
+ * preferred slots (splitting a stack that overflows quiver_slot_size, with the
470
+ * excess going back to the pack), then fill the remaining slots in earlier_object
471
+ * order with ammo. Then select each remaining non-quiver handle in
472
+ * earlier_object order, exactly as upstream fills upkeep->inven[].
473
+ *
474
+ * Split remainders are appended to gear.pack via object_split, exactly as
475
+ * upstream's gear_insert_end. `n_stack_split <= n_pack_remaining` guards splits
476
+ * so the pack can overflow by at most one slot, matching upstream.
477
+ */
478
+ export function calcInventory(gear, constants, opts = {}) {
479
+ const qSize = constants.quiverSize;
480
+ const qSlot = constants.quiverSlotSize;
481
+ const rogueLike = opts.rogueLike ?? false;
482
+ let nStackSplit = 0;
483
+ const nPackRemaining = constants.packSize - packSlotsUsed(gear, constants);
484
+ /* Copy the current quiver, then empty it (L1053-1061). */
485
+ const oldQuiver = [];
486
+ for (let i = 0; i < qSize; i++)
487
+ oldQuiver[i] = gear.quiver?.[i] ?? 0;
488
+ const quiver = new Array(qSize).fill(0);
489
+ gear.quiver = quiver;
490
+ const assigned = new Set();
491
+ /* Fill quiver. First, allocate inscribed items (L1063-1117). */
492
+ for (const handle of [...gear.pack]) {
493
+ const current = gear.store.get(handle);
494
+ if (!current)
495
+ continue;
496
+ const prefslot = preferredQuiverSlot(current, rogueLike);
497
+ if (prefslot >= 0 && prefslot < qSize && (quiver[prefslot] ?? 0) === 0) {
498
+ const mult = tvalIsAmmo(current.tval) ? 1 : constants.thrownQuiverMult;
499
+ let toQuiver = false;
500
+ if (current.number * mult <= qSlot) {
501
+ toQuiver = true;
502
+ }
503
+ else {
504
+ const nsplit = Math.trunc(qSlot / mult);
505
+ if (nsplit > 0 && nStackSplit <= nPackRemaining) {
506
+ /* Split off the portion that goes to the pack; the quiver stack is
507
+ * earlier in the gear list so it stays preferred (L1091-1102). */
508
+ const rem = objectSplit(current, current.number - nsplit);
509
+ gear.pack.push(gearAdd(gear, rem));
510
+ nStackSplit++;
511
+ toQuiver = true;
512
+ }
513
+ }
514
+ if (toQuiver) {
515
+ quiver[prefslot] = handle;
516
+ assigned.add(handle);
517
+ }
518
+ }
519
+ }
520
+ /* Now fill the rest of the slots in order (L1119-1172). */
521
+ for (let i = 0; i < qSize; i++) {
522
+ if ((quiver[i] ?? 0) !== 0)
523
+ continue;
524
+ let first = null;
525
+ let firstHandle = 0;
526
+ for (const handle of gear.pack) {
527
+ if (assigned.has(handle))
528
+ continue;
529
+ const current = gear.store.get(handle);
530
+ if (!current || !tvalIsAmmo(current.tval))
531
+ continue;
532
+ /* Only assign if, when a split is needed, there is room for it. */
533
+ if (current.number <= qSlot ||
534
+ (qSlot > 0 && nStackSplit <= nPackRemaining)) {
535
+ if (earlierObject(first, current, earlierOpts(opts))) {
536
+ first = current;
537
+ firstHandle = handle;
538
+ }
539
+ }
540
+ }
541
+ /* Nothing left in the gear. */
542
+ if (!first)
543
+ break;
544
+ /* Put it in the slot, splitting (if needed) to fit (L1159-1168). */
545
+ if (first.number > qSlot) {
546
+ const rem = objectSplit(first, first.number - qSlot);
547
+ gear.pack.push(gearAdd(gear, rem));
548
+ nStackSplit++;
549
+ }
550
+ quiver[i] = firstHandle;
551
+ assigned.add(firstHandle);
552
+ }
553
+ /* Note reordering (L1174-1182). */
554
+ if (opts.characterDungeon) {
555
+ for (let i = 0; i < qSize; i++) {
556
+ if ((oldQuiver[i] ?? 0) !== 0 && quiver[i] !== oldQuiver[i]) {
557
+ opts.msg?.("You re-arrange your quiver.");
558
+ break;
559
+ }
560
+ }
561
+ }
562
+ /* Copy the current pack (L1183-1186) and remember how full it was (L1025),
563
+ * both read only by the re-arrange notice below. */
564
+ const oldInvenCnt = (gear.inven ?? []).length;
565
+ const oldPack = [...(gear.inven ?? [])];
566
+ /* Fill upkeep->inven[] (player-calcs.c:1191-1222). Do not sort pack in
567
+ * place: C's p->gear remains its own linked-list order and inven[] is only
568
+ * a listing. Repeated first-selection (rather than Array.sort()) faithfully
569
+ * preserves master-gear order when earlier_object has no preference. */
570
+ const inven = [];
571
+ const invenAssigned = new Set(quiver.filter((h) => h !== 0));
572
+ for (;;) {
573
+ let first = null;
574
+ let firstHandle = 0;
575
+ for (const handle of gear.pack) {
576
+ if (invenAssigned.has(handle))
577
+ continue;
578
+ const current = gear.store.get(handle);
579
+ if (current && earlierObject(first, current, earlierOpts(opts))) {
580
+ first = current;
581
+ firstHandle = handle;
582
+ }
583
+ }
584
+ if (!first)
585
+ break;
586
+ inven.push(firstHandle);
587
+ invenAssigned.add(firstHandle);
588
+ }
589
+ gear.inven = inven;
590
+ /* Note reordering (L1224-1233). The quiver half of this notice was ported;
591
+ * the pack half was not, so shuffling the pack was silent. Only fires when
592
+ * the pack holds the SAME number of items as before (L1225) - a pickup or a
593
+ * drop reorders it too, and upstream does not call that a re-arrangement. */
594
+ if (opts.characterDungeon && inven.length === oldInvenCnt) {
595
+ for (let i = 0; i < constants.packSize; i++) {
596
+ const was = oldPack[i] ?? 0;
597
+ if (was === 0)
598
+ continue;
599
+ if (inven[i] === was)
600
+ continue;
601
+ if (opts.isEquipped?.(was))
602
+ continue;
603
+ opts.msg?.("You re-arrange your pack.");
604
+ break;
605
+ }
606
+ }
607
+ }
608
+ /**
609
+ * inven_can_stack_partial (obj-gear.c L1183-1236): can obj1 and obj2 be merged
610
+ * into two uneven stacks, with obj1 the (maximised) leading stack? Refuses when
611
+ * obj1 is already at its per-stack limit, and (for a quiver->pack move) when the
612
+ * quiver has no room, to avoid combining then re-splitting in calc_inventory.
613
+ */
614
+ function invenCanStackPartial(gear, obj1, obj2, mode1, mode2, constants) {
615
+ const cmode = mode1 | mode2;
616
+ if (!objectStackable(obj1, obj2, cmode))
617
+ return false;
618
+ /* Verify the numbers suit uneven stacks (L1196-1233). OSTACK_STORE absorbs
619
+ * without limit; the port's combine_pack never passes it. */
620
+ if (mode1 & OSTACK_QUIVER) {
621
+ const qlimit = Math.trunc(constants.quiverSlotSize /
622
+ (tvalIsAmmo(obj1.tval) ? 1 : constants.thrownQuiverMult));
623
+ if (obj1.number === qlimit)
624
+ return false;
625
+ /* Moving items INTO the quiver: also check the overall quiver limits. */
626
+ if (mode2 & ~OSTACK_QUIVER) {
627
+ const nFreeSlot = constants.packSize - packSlotsUsed(gear, constants);
628
+ const { nToQuiver } = quiverAbsorbNum(gear, obj2, constants, nFreeSlot);
629
+ if (nToQuiver <= 0)
630
+ return false;
631
+ }
632
+ }
633
+ else if (obj1.number === obj1.kind.base.maxStack) {
634
+ return false;
635
+ }
636
+ return true;
637
+ }
638
+ /**
639
+ * combine_pack (obj-gear.c L1242-1323): sweep the gear from the back, merging
640
+ * each stack fully into an earlier compatible stack where possible, else moving
641
+ * items between stacks into two uneven stacks (inven_can_stack_partial). Runs
642
+ * calc_inventory afterward. Returns whether any full combine happened (upstream
643
+ * shows "You combine some items in your pack." and disables command repeat).
644
+ */
645
+ export function combinePack(gear, constants, opts = {}) {
646
+ const limits = {
647
+ quiverSlotSize: constants.quiverSlotSize,
648
+ thrownQuiverMult: constants.thrownQuiverMult,
649
+ };
650
+ let displayMessage = false;
651
+ /* Combine the pack (backwards) over a snapshot; removals mutate gear.pack. */
652
+ for (const h1 of [...gear.pack].reverse()) {
653
+ const obj1 = gear.store.get(h1);
654
+ if (!obj1)
655
+ continue;
656
+ const idx1 = gear.pack.indexOf(h1);
657
+ if (idx1 < 0)
658
+ continue;
659
+ /* Scan the items above obj1 (L1256). */
660
+ for (let k = 0; k < idx1; k++) {
661
+ const h2 = gear.pack[k];
662
+ const obj2 = gear.store.get(h2);
663
+ if (!obj2)
664
+ continue;
665
+ const mode2 = objectIsInQuiver(gear, h2) ? OSTACK_QUIVER : OSTACK_PACK;
666
+ if (objectMergeable(obj2, obj1, mode2, limits)) {
667
+ objectAbsorb(obj2, obj1, ORIGIN.MIXED);
668
+ gear.pack.splice(idx1, 1);
669
+ gear.store.delete(h1);
670
+ displayMessage = true;
671
+ break;
672
+ }
673
+ const mode1 = objectIsInQuiver(gear, h1) ? OSTACK_QUIVER : OSTACK_PACK;
674
+ if (invenCanStackPartial(gear, obj2, obj1, mode2, mode1, constants)) {
675
+ /* Shuffling items between stacks - no message (L1282-1287). */
676
+ objectAbsorbPartial(obj2, obj1, mode2, mode1, limits, ORIGIN.MIXED);
677
+ break;
678
+ }
679
+ }
680
+ }
681
+ calcInventory(gear, constants, opts);
682
+ if (displayMessage)
683
+ opts.msg?.("You combine some items in your pack.");
684
+ return displayMessage;
685
+ }
686
+ /**
687
+ * object_copy_amt (obj-pile.c L743): a fresh copy of `src` holding `amt`
688
+ * items, with wand/staff charges and rod/activation timeouts scaled to the
689
+ * split (source unchanged). The AVERAGE charge time is deterministic.
690
+ */
691
+ export function objectCopyAmt(src, amt) {
692
+ const dest = objectCopy(src);
693
+ dest.number = amt;
694
+ if (tvalCanHaveCharges(src.tval)) {
695
+ dest.pval = Math.trunc((src.pval * amt) / src.number);
696
+ }
697
+ if (tvalCanHaveTimeout(src.tval)) {
698
+ /* randcalc(src->time, 0, AVERAGE). */
699
+ const t = src.time;
700
+ const chargeTime = t.base + Math.trunc((t.dice * (t.sides + 1)) / 2);
701
+ const maxTime = chargeTime * amt;
702
+ dest.timeout = src.timeout > maxTime ? maxTime : src.timeout;
703
+ }
704
+ return dest;
705
+ }
706
+ /**
707
+ * gear_to_label's label alphabet (obj-gear.c:446): a-z minus the roguelike
708
+ * cardinal-movement keys h/j/k/l, then A-Z. An equipment slot index and a pack
709
+ * LISTING index both index straight into it (L452, L465).
710
+ */
711
+ export const GEAR_LABELS = "abcdefgimnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
712
+ /**
713
+ * gear_to_label (obj-gear.c:443-469): the one-character label for a held object -
714
+ * an equipment slot letter, a quiver slot digit (I2D), or a pack listing letter.
715
+ * "" when the handle is not currently held, upstream's '\0'.
716
+ *
717
+ * THE LISTING, NOT THE STORAGE ORDER. Upstream's pack arm reads
718
+ * `p->upkeep->inven[]` (L462-466) - the earlier_object-sorted view calc_inventory
719
+ * builds and every inventory display walks - NOT the master gear list. The port
720
+ * had three copies of this function (game/project-obj.ts, game/obj-cmd.ts,
721
+ * game/known.ts) and all three read `gear.pack`, the raw storage order, because
722
+ * they were written while `gear.inven` was still an unbuilt stand-in. calcInventory
723
+ * has filled `inven` for some time, so every one of them was quoting a letter the
724
+ * pack listing disagreed with: pick up a scroll into raw slot 8 of a pack that
725
+ * sorts it fourth and the message says (i) while the item is at (e) and (i) holds
726
+ * whatever sorted eighth. Same defect class as #92, one layer further in - the
727
+ * listings were fixed and the MESSAGES about them were not.
728
+ *
729
+ * Deliberately reads `inven` with no fallback to `pack`. A wrong letter is worse
730
+ * than a missing one: it sends the player to another item, and no census can see
731
+ * it because the slot is filled (paraphrase-is-a-deviation). If `inven` is stale
732
+ * the caller has skipped upstream's PU_INVEN/update_stuff, which is a bug to fix
733
+ * at that caller - gear-label-freshness.test.ts asserts the invariant holds after
734
+ * every gear mutation the live session performs.
735
+ *
736
+ * `equipment` is optional because most callers hold a Gear and no Player; a pack
737
+ * or quiver handle is never in equipment[], so omitting it cannot mislabel one.
738
+ */
739
+ export function gearToLabel(gear, handle, equipment) {
740
+ /* Equipment is easy (L450-453). */
741
+ if (equipment) {
742
+ const eq = equipment.indexOf(handle);
743
+ if (eq >= 0)
744
+ return GEAR_LABELS[eq] ?? "";
745
+ }
746
+ /* Check the quiver (L455-460). */
747
+ const qi = gear.quiver?.indexOf(handle) ?? -1;
748
+ if (qi >= 0)
749
+ return String(qi);
750
+ /* Check the inventory (L462-466). */
751
+ const pi = (gear.inven ?? []).indexOf(handle);
752
+ if (pi >= 0 && pi < GEAR_LABELS.length)
753
+ return GEAR_LABELS[pi];
754
+ return "";
755
+ }
756
+ /**
757
+ * The p->gear view object_pack_total walks, built from the live gear.
758
+ *
759
+ * Upstream iterates all of p->gear and lets object_similar reject the equipped
760
+ * entries; the port's objectSimilar has the equipped test deferred (obj/object.ts
761
+ * module docs), so the view is built from the non-equipped handles instead. The
762
+ * resulting SET is the same, which is all object_pack_total reads.
763
+ */
764
+ export function packTotalView(gear) {
765
+ const objs = [];
766
+ const labels = new Map();
767
+ for (const handle of gear.pack) {
768
+ const obj = gear.store.get(handle);
769
+ if (!obj)
770
+ continue;
771
+ objs.push(obj);
772
+ labels.set(obj, gearToLabel(gear, handle));
773
+ }
774
+ return {
775
+ gear: objs,
776
+ /* Never: the view holds only non-equipped handles (see above). */
777
+ isEquipped: () => false,
778
+ gearToLabel: (obj) => labels.get(obj) ?? "",
779
+ };
780
+ }
781
+ /**
782
+ * Whether upstream suppresses the split-stack aggregate for this object.
783
+ *
784
+ * A charges count or "recharging" notice in the description belongs to ONE
785
+ * stack, so aggregating the number across stacks would contradict the notice
786
+ * printed beside it. Upstream repeats this test verbatim at every aggregate
787
+ * site - gear_object_for_use (obj-gear.c L550-556, L583-589), inven_carry
788
+ * (L899-901) and inven_drop (L1138-1140) - the last two of which also test
789
+ * object_is_equipped, which the callers here add because inven_carry does not.
790
+ */
791
+ export function packTotalSuppressed(obj) {
792
+ return tvalCanHaveCharges(obj.tval) || tvalIsRod(obj.tval) || obj.timeout > 0;
793
+ }
794
+ /**
795
+ * Detach `handle` (or the free equipment/pack slot holding it) from the
796
+ * gear. A pack handle is removed from the ordered pack; an equipped handle
797
+ * clears its body slot. Either way the handle leaves the store map.
798
+ */
799
+ function gearExcise(gear, player, handle) {
800
+ /* Clear any stale quiver reference (calc_inventory rebuilds it). */
801
+ if (gear.quiver) {
802
+ const qi = gear.quiver.indexOf(handle);
803
+ if (qi >= 0)
804
+ gear.quiver[qi] = 0;
805
+ }
806
+ const pi = gear.pack.indexOf(handle);
807
+ if (pi >= 0) {
808
+ gear.pack.splice(pi, 1);
809
+ gear.store.delete(handle);
810
+ return;
811
+ }
812
+ const si = player.equipment.indexOf(handle);
813
+ if (si >= 0) {
814
+ player.equipment[si] = 0;
815
+ gear.store.delete(handle);
816
+ }
817
+ }
818
+ /**
819
+ * gear_object_for_use (obj-gear.c L524): remove `amt` items of the gear
820
+ * object referenced by `handle`, returning a detached object to hand off.
821
+ * When part of a stack is taken, the remainder stays under `handle` and a
822
+ * fresh split is returned (noneLeft=false); when the whole stack is taken,
823
+ * the original is excised (noneLeft=true). The total_weight upkeep and the
824
+ * knowledge twin are DEFERRED (see the module ledger).
825
+ */
826
+ export function gearObjectForUse(gear, player, handle, amt) {
827
+ const obj = gear.store.get(handle);
828
+ if (!obj)
829
+ throw new Error(`gearObjectForUse: no object for handle ${handle}`);
830
+ const num = Math.min(amt, obj.number);
831
+ /* Split off a usable object if we are not taking the whole stack. */
832
+ if (obj.number > num) {
833
+ const usable = objectSplit(obj, num);
834
+ return { obj: usable, noneLeft: false };
835
+ }
836
+ /* Using the entire stack. */
837
+ gearExcise(gear, player, handle);
838
+ return { obj, noneLeft: true };
839
+ }
840
+ /**
841
+ * Wield the pack object with the given handle into its liked slot. If the
842
+ * stack has more than one item it is split, following `split` (see
843
+ * WieldSplit - the two upstream callers differ). Returns the filled slot, or
844
+ * -1 if the object cannot be wielded or the slot is already occupied. Read
845
+ * `player.equipment[slot]` for the handle that ended up worn: under
846
+ * "inven_wield" a split stack equips a FRESH handle, not `handle`.
847
+ *
848
+ * object_learn_on_wield runs the instant the item is worn (as in wield_all
849
+ * and inven_wield), so a worn item's modifier runes become known and its
850
+ * pval bonuses go live at once. The equip_cnt UI counter is DEFERRED.
851
+ *
852
+ * `intoSlot` is the slot ARGUMENT upstream's inven_wield takes
853
+ * (`void inven_wield(struct object *obj, int slot)`, obj-gear.c:931): the caller
854
+ * decides the destination and inven_wield never recomputes it. That matters for
855
+ * rings - do_cmd_wield asks "Replace which ring? " and then overwrites slot with
856
+ * `equipped_item_slot(player->body, equip_obj)` (cmd-obj.c:309), so re-deriving
857
+ * it here would silently discard the hand the player picked. Omit it to keep the
858
+ * wield_slot default (wield_all and every non-choosing caller).
859
+ */
860
+ export function wieldObject(gear, player, handle, env, split = "wield_all", intoSlot) {
861
+ const obj = gear.store.get(handle);
862
+ if (!obj)
863
+ return -1;
864
+ const slot = intoSlot !== undefined
865
+ ? intoSlot
866
+ : wieldSlot(player.body, obj.tval, player.equipment);
867
+ if (slot < 0 || slot >= player.body.count)
868
+ return -1;
869
+ if ((player.equipment[slot] ?? 0) !== 0)
870
+ return -1;
871
+ /* Split if necessary. */
872
+ let wieldedHandle = handle;
873
+ let wielded = obj;
874
+ if (obj.number > 1) {
875
+ if (split === "inven_wield") {
876
+ /* One item off the stack becomes the worn object; the original stays
877
+ * put in the pack holding number - 1 (obj-gear.c L947-968). */
878
+ wielded = objectSplit(obj, 1);
879
+ wieldedHandle = gearAdd(gear, wielded);
880
+ }
881
+ else {
882
+ /* All but one go back to the pack as a new stack at the END
883
+ * (player-birth.c L484-491 + L502-505). */
884
+ const remainder = objectSplit(obj, obj.number - 1);
885
+ gear.pack.push(gearAdd(gear, remainder));
886
+ }
887
+ }
888
+ /* Remove the wielded handle from the pack and wear it. A fresh
889
+ * "inven_wield" split was never in the pack, so the splice no-ops and the
890
+ * original keeps its listing position. */
891
+ const idx = gear.pack.indexOf(wieldedHandle);
892
+ if (idx >= 0)
893
+ gear.pack.splice(idx, 1);
894
+ player.equipment[slot] = wieldedHandle;
895
+ /* Learn the runes that wearing makes obvious (obj-knowledge.c wield_all
896
+ * L494-495). With an env the full obvious-flag/curse learning runs; the
897
+ * env-less path (birth outfit, worldless tests) learns the modifier
898
+ * runes, so worn pval bonuses apply immediately either way. */
899
+ objectLearnOnWield(player, wielded, env);
900
+ return slot;
901
+ }
902
+ /**
903
+ * wield_all (player-birth.c L462-507): try to wield everything wieldable in
904
+ * the pack. Scans a snapshot of the current pack handles (so the split-off
905
+ * remainders added during the pass are not re-scanned, matching upstream's
906
+ * deferred pile_insert_end), wielding each object whose liked slot is empty.
907
+ */
908
+ export function wieldAll(gear, player) {
909
+ const handles = [...gear.pack];
910
+ for (const handle of handles) {
911
+ const obj = gear.store.get(handle);
912
+ if (!obj)
913
+ continue;
914
+ /* Make sure we can wield it into an empty slot. */
915
+ const slot = wieldSlot(player.body, obj.tval, player.equipment);
916
+ if (slot < 0 || slot >= player.body.count)
917
+ continue;
918
+ if ((player.equipment[slot] ?? 0) !== 0)
919
+ continue;
920
+ wieldObject(gear, player, handle);
921
+ }
922
+ }
923
+ /**
924
+ * Evaluate a start_item's eopts birth-option exclusion (player-birth.c
925
+ * L619-637): each token is an option name, optionally "NOT-" prefixed
926
+ * (init.c L3619-3634 stores +ind / -ind). A plain option excludes the item
927
+ * when it is SET; a NOT- option excludes it when it is UNSET. Returns true if
928
+ * the item should be included. With no accessor, nothing is excluded.
929
+ */
930
+ function startItemIncluded(eopts, opt) {
931
+ if (eopts.length === 0 || !opt)
932
+ return true;
933
+ for (const token of eopts) {
934
+ const negated = token.startsWith("NOT-");
935
+ const name = negated ? token.slice(4) : token;
936
+ if (negated) {
937
+ if (!opt(name))
938
+ return false;
939
+ }
940
+ else {
941
+ if (opt(name))
942
+ return false;
943
+ }
944
+ }
945
+ return true;
946
+ }
947
+ /**
948
+ * player_outfit (player-birth.c L584-666): give the player their class
949
+ * starting equipment and wield everything wieldable.
950
+ *
951
+ * For each class start_item: roll the count in [min, max] via the project
952
+ * Rng (rand_range), look the kind up by tval/sval name, honour birth_start_kit
953
+ * (gap 1.6) and the eopts birth-option exclusion (gap 1.8), prep it with
954
+ * MINIMISE at level 0 (object_prep), set number and ORIGIN_BIRTH, carry it
955
+ * (invenCarry), and finally wield_all.
956
+ *
957
+ * wield_all learns each worn item's modifier runes (object_learn_on_wield);
958
+ * for a default class kit those items carry no modifiers, so obj_k stays
959
+ * empty at birth exactly as upstream.
960
+ *
961
+ * Each item is marked OBJ_NOTICE_ASSESSED (L652), the per-object half of the
962
+ * knowledge block that the port models on the live object, and reported through
963
+ * opts.onStartKind for object_flavor_aware (L650) - which the caller applies
964
+ * once the per-game awareness store exists (see OutfitOptions.onStartKind).
965
+ */
966
+ export function outfitPlayer(gear, player, reg, rng, constants, opts = {}) {
967
+ const startKit = opts.startKit ?? (opts.opt ? opts.opt("birth_start_kit") : true);
968
+ const limits = {
969
+ quiverSlotSize: constants.quiverSlotSize,
970
+ thrownQuiverMult: constants.thrownQuiverMult,
971
+ };
972
+ /* Currently carrying nothing (running total is owned by the calc/inventory
973
+ * side, which is DEFERRED; we mirror only the reset upstream performs). */
974
+ player.upkeep.totalWeight = 0;
975
+ /* Give the player obvious object knowledge (player-birth.c L597-602): the
976
+ * LIGHT / DIG / THROW / CURSE_ONLY subtype flags are known from birth. Without
977
+ * this a mundane torch / digger / thrown item would read as not-fully-known
978
+ * and show a spurious "{??}" in stores and lists. (The dd/ds/ac and combat
979
+ * runes from the same upstream block are set in blankObjKnowledge.) */
980
+ learnBirthObviousFlags(player.objKnown.flags, reg.properties);
981
+ /* Modifier runes are learned per item at wield_all (below); the display
982
+ * half of the knowledge block (flavor_aware / base_known) is DEFERRED. */
983
+ /* Give the player starting equipment. */
984
+ for (const si of player.cls.startItems) {
985
+ let num = rng.randRange(si.min, si.max);
986
+ const tval = tvalFindIdx(si.tval);
987
+ if (tval < 0)
988
+ throw new Error(`outfit: unknown tval ${si.tval}`);
989
+ const sval = reg.lookupSval(tval, si.sval);
990
+ if (sval < 0)
991
+ throw new Error(`outfit: unknown sval ${si.tval}:${si.sval}`);
992
+ const kind = reg.lookupKind(tval, sval);
993
+ if (!kind)
994
+ throw new Error(`outfit: no kind ${si.tval}:${si.sval}`);
995
+ /* Without start_kit, only start with 1 food and 1 light. (Upstream
996
+ * tval_is_food_k / tval_is_light_k are TV_FOOD / TV_LIGHT only.) */
997
+ if (!startKit) {
998
+ if (!tvalIsFood(tval) && !tvalIsLight(tval))
999
+ continue;
1000
+ num = 1;
1001
+ }
1002
+ /* Exclude if configured to do so based on birth options (player-birth.c
1003
+ * L619-637). RNG order is preserved: rand_range(num) is drawn above, before
1004
+ * any continue, exactly as upstream. */
1005
+ if (!startItemIncluded(si.eopts, opts.opt))
1006
+ continue;
1007
+ /* Prepare a new item. */
1008
+ const obj = objectPrep(rng, reg, constants, kind, 0, "minimise");
1009
+ obj.number = num;
1010
+ obj.origin = ORIGIN.BIRTH;
1011
+ /* Deduct the cost of the item from starting cash (player-birth.c L654).
1012
+ * object_value_real draws no RNG. Upstream prices from obj->known; the
1013
+ * port has no known twin, so it prices the real object - the same
1014
+ * approximation the store path uses (obj/value.ts). */
1015
+ player.au -= objectValueReal(reg, obj, obj.number);
1016
+ /* obj->known->notice |= OBJ_NOTICE_ASSESSED (player-birth.c L652): a start
1017
+ * item has been handled, so it is assessed from birth. The port keeps that
1018
+ * per-object bit on the live object (objectKnownShadow mirrors it), and
1019
+ * without it the synthesised shadow returned before the flag/element
1020
+ * intersection - so a Wooden Torch's own BURNS_OUT / LIGHT_2 flags read as
1021
+ * UNKNOWN and the character sheet printed '?' down the torch's column even
1022
+ * though those flags are known from birth (learnBirthObviousFlags above). */
1023
+ obj.notice |= OBJ_NOTICE.ASSESSED;
1024
+ /* object_flavor_aware(p, obj) (player-birth.c:650). Deferred to the caller
1025
+ * because the awareness store does not exist yet - see onStartKind. */
1026
+ opts.onStartKind?.(kind);
1027
+ /* Carry the item. */
1028
+ invenCarry(gear, obj, limits);
1029
+ }
1030
+ /* Sanity check: never let the outfit drive starting gold negative
1031
+ * (player-birth.c L662). */
1032
+ if (player.au < 0)
1033
+ player.au = 0;
1034
+ /* Now try wielding everything. */
1035
+ wieldAll(gear, player);
1036
+ }
1037
+ //# sourceMappingURL=gear.js.map