@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,718 @@
1
+ /**
2
+ * The per-object "known shadow" synthesis, ported from
3
+ * reference/src/obj-knowledge.c (Angband 4.2.6).
4
+ *
5
+ * Upstream every live object carries a twin `obj->known`: a stripped struct
6
+ * object holding only what the player has learned about it. object_desc reads
7
+ * that twin wherever a value or a name must be gated by knowledge (the ego
8
+ * name shows only if known->ego, the combat numbers come from known->to_h and
9
+ * friends, etc.). The port DEFERRED the persistent twin; this module
10
+ * synthesises an equivalent shadow ON DEMAND from the port's cumulative rune
11
+ * knowledge model (Player.objKnown, i.e. upstream p->obj_k), by porting
12
+ * object_set_base_known (L820) and player_know_object (L1022) line-for-line
13
+ * onto the port's fields. desc.ts then reads the shadow exactly where upstream
14
+ * reads obj->known, so names come out identical for identical knowledge.
15
+ *
16
+ * The progressive-ID entry points (obj-knowledge.c L860-1013) are ported to fit
17
+ * this on-demand model:
18
+ * - object_set_base_known is exported here for callers/tests.
19
+ * - object_touch / object_grab (objectTouch / objectGrab) mark the live object
20
+ * ASSESSED - the bit that gates the fuller shadow - and fire the artifact-log
21
+ * and flavour-awareness side effects; the twin's own field writes are
22
+ * subsumed by objectKnownShadow. Their live call sites (stepping onto / over
23
+ * a floor pile, grabbing a monster's drop, quake/destruction object rubble)
24
+ * live in the world/game layer -> emitted as WIRING-NEEDED.
25
+ * - object_see / object_sense are ported here (objectSee / objectSense) as
26
+ * obj-layer bodies over an injected KnownFloorDeps, matching the
27
+ * objectTouch / objectGrab pattern: the object-knowledge decisions (new exact
28
+ * memory vs upgrade-from-sensed vs number refresh; the money/item sensed
29
+ * marker) live here, while the world layer (game/known.ts squareKnowPile /
30
+ * squareSensePile) supplies the reduced grid-keyed floor memory the deps
31
+ * read and write. Their live call sites are emitted as WIRING-NEEDED.
32
+ * update_player_object_knowledge (the twin re-sync + autoinscribe + inventory
33
+ * redraw) remains a world/UI concern handled at the port's knowledge-update
34
+ * sites, not a per-object twin.
35
+ * - The progressive-sensing gate player_know_object applies before any ID
36
+ * (obj-knowledge.c L1027-1035: unseen / only-sensed objects get nothing, seen
37
+ * objects get base properties) is modelled by objectKnownShadow's optional
38
+ * KnownState argument (default SEEN keeps the pre-existing behaviour).
39
+ *
40
+ * Synthesis notes (each ledgered inline):
41
+ * - p->obj_k->dd/ds/ac (the "know dice"/"know ac" runes) are now real fields on
42
+ * Player.objKnown, ALWAYS 1: player_outfit (player-birth.c L584-596) grants
43
+ * them as obvious knowledge at birth and nothing ever learns them by use. The
44
+ * shadow multiplies the object's base dd/ds/ac by them exactly as upstream
45
+ * (obj-knowledge.c L830-838, L1039-1041), so base dice and armour of even an
46
+ * unidentified item are known from the start. See objectSetBaseKnown.
47
+ * - The shadow has no independent `notice`; upstream obj->known->notice's
48
+ * ASSESSED bit is mirrored from the real object's notice. Under on-demand
49
+ * synthesis this is provably byte-identical to a persistent twin that carried
50
+ * its own notice: the only consumer of shadow.notice is its ASSESSED bit,
51
+ * read back within this same call, and it equals obj's ASSESSED bit because
52
+ * the port keeps the assessed state on the live object. So this is exact, not
53
+ * an approximation.
54
+ * - object_flavor_aware side effects in player_know_object's jewelry and
55
+ * special-artifact branches (L1163-1175) are a knowledge-UPDATE, not part of
56
+ * describing an object. Firing them here would let a display path mutate the
57
+ * player's knowledge, so they are deliberately NOT fired in this synthesis;
58
+ * they are wired into the port's knowledge-update sites instead
59
+ * (playerKnowObjectAwareness in knowledge.ts, called from
60
+ * objectLearnUnknownRune). The shadow's own fields are unaffected.
61
+ * - known->artifact: upstream object_touch (L963) sets it when the object is
62
+ * ASSESSED (touched / picked up), so the shadow gates obj.artifact on the
63
+ * ASSESSED notice bit - the artifact name reveals on touch while its powers
64
+ * stay hidden until their runes are learned, exactly as upstream.
65
+ * - The is_unknown() placeholder path (obj->kind != obj->known->kind) is a
66
+ * game-list-layer concern in the port; object_desc always gets a real
67
+ * object, so it is not modelled here.
68
+ */
69
+
70
+ import type { RandomValue } from "../rng.js";
71
+ import type { Player } from "../player/player.js";
72
+ import type { CurseData, GameObject } from "./object.js";
73
+ import {
74
+ objectNew,
75
+ cursesAreEqual,
76
+ tvalCanHaveFlavor,
77
+ tvalIsChest,
78
+ tvalIsJewelry,
79
+ tvalIsLauncher,
80
+ tvalIsMoney,
81
+ tvalIsWearable,
82
+ } from "./object.js";
83
+ import type { RuneEnv } from "./knowledge.js";
84
+ import {
85
+ OBJ_NOTICE,
86
+ objectHasStandardToH,
87
+ playerKnowsBrand,
88
+ playerKnowsCurse,
89
+ playerKnowsSlay,
90
+ } from "./knowledge.js";
91
+ import type { ObjectKind, EgoItem, ElementInfo } from "./types.js";
92
+ import { ELEM_MAX, OBJ_MOD_MAX } from "./types.js";
93
+
94
+ /**
95
+ * The player's floor-knowledge state for a single object, the three cases
96
+ * player_know_object branches on before granting any ID (obj-knowledge.c
97
+ * L1027-1035): UNSEEN is obj->known == NULL (nothing recorded), SENSED is
98
+ * obj->known->kind != obj->kind (a fake unknown-item / unknown-treasure marker
99
+ * from object_sense), SEEN is an exact memory whose kind matches. Only SEEN
100
+ * objects reach object_set_base_known and the fuller rune-knowledge fill.
101
+ */
102
+ export const KNOWN_STATE = {
103
+ UNSEEN: 0,
104
+ SENSED: 1,
105
+ SEEN: 2,
106
+ } as const;
107
+ export type KnownState = (typeof KNOWN_STATE)[keyof typeof KNOWN_STATE];
108
+
109
+ /**
110
+ * The flavour-awareness view object_desc / the shadow synthesis need. Upstream
111
+ * awareness lives on the shared object_kind template (kind->aware / kind->tried);
112
+ * the port keeps it in a per-game FlavorKnowledge (obj/knowledge.ts) keyed by
113
+ * kidx, so it is injected rather than read off the object or player.
114
+ */
115
+ export interface KnownDesc {
116
+ /** object_flavor_is_aware(obj): player knows this flavoured kind's identity. */
117
+ isAware(kind: ObjectKind): boolean;
118
+ /** object_flavor_was_tried(obj): a kind of this flavour has been tried. */
119
+ isTried(kind: ObjectKind): boolean;
120
+ /**
121
+ * obj->kind->flavor != NULL: whether flavor_init assigned this kind a
122
+ * flavour. Optional; when absent the tval-only kindHasFlavor is used (the
123
+ * behaviour before flavor_init was wired). Every flavoured tval's kinds are
124
+ * assigned a flavour, so the two agree in practice.
125
+ */
126
+ hasFlavor?(kind: ObjectKind): boolean;
127
+ /** obj->kind->flavor->text: the "Smoky" adjective or scroll title. */
128
+ flavorText?(kind: ObjectKind): string;
129
+ /**
130
+ * OPT(p, show_flavors): show the flavour even once aware. Defaults to true
131
+ * (the upstream default), matching a game whose option is unset.
132
+ */
133
+ showFlavors?(): boolean;
134
+ /**
135
+ * ignore_item_ok(p, obj) (obj-ignore.c L622): whether the object is eligible
136
+ * for ignoring right now, for the " {ignore}" / "ignore" description markers
137
+ * (obj-desc.c L537, L630). Optional; when absent the markers are omitted (a
138
+ * caller with no ignore environment, e.g. an omniscient/spoiled describe).
139
+ */
140
+ ignoreItemOk?(obj: GameObject): boolean;
141
+ /**
142
+ * obj->kind->everseen = true (obj-desc.c L637): mark the kind as seen once the
143
+ * player is aware of its flavour. Optional; when absent (omniscient/spoiled or
144
+ * a caller with no EverseenKnowledge) the mutation is skipped, matching the
145
+ * upstream `!spoil` guard. A pure Set insert - no RNG, no ordering dependency.
146
+ */
147
+ markKindSeen?(kind: ObjectKind): void;
148
+ /**
149
+ * obj->ego->everseen = true (obj-desc.c L634): mark the ego as seen once the
150
+ * known shadow carries an ego (the ego's name is known). Optional; same
151
+ * skip-on-absent semantics as markKindSeen.
152
+ */
153
+ markEgoSeen?(ego: EgoItem): void;
154
+ }
155
+
156
+ /**
157
+ * Whether an object's kind carries a flavour (upstream obj->kind->flavor, a
158
+ * struct flavor pointer). The port does NOT bind the flavour<->kind link onto
159
+ * ObjectKind, so this is approximated by tval_can_have_flavor_k (obj-tval.c
160
+ * L322), which is exactly the set of tvals every kind of which is assigned a
161
+ * flavour by flavor_init. DEFERRED: the flavour TEXT (adjective / scroll title)
162
+ * remains unavailable; see desc.ts for how the missing '#' modstr is handled.
163
+ */
164
+ export function kindHasFlavor(obj: GameObject): boolean {
165
+ return tvalCanHaveFlavor(obj.tval);
166
+ }
167
+
168
+ /**
169
+ * randcalc(v, MAX_RAND_DEPTH, MAXIMISE) for a RandomValue, evaluated purely
170
+ * (the maximise aspect is deterministic: damcalc = dice*sides, mBonusCalc =
171
+ * mBonus). rng.ts owns the general randcalc; this avoids threading an Rng.
172
+ */
173
+ function randcalcMax(v: RandomValue): number {
174
+ return v.base + v.dice * v.sides + v.mBonus;
175
+ }
176
+
177
+ /**
178
+ * randcalc(v, MAX_RAND_DEPTH, MINIMISE), evaluated purely (damcalc minimise =
179
+ * dice, mBonusCalc minimise = 0).
180
+ */
181
+ function randcalcMin(v: RandomValue): number {
182
+ return v.base + v.dice;
183
+ }
184
+
185
+ /** Allocate a zeroed curse-data array of `n` entries (mem_zalloc twin). */
186
+ function newCurseData(n: number): CurseData[] {
187
+ const out: CurseData[] = [];
188
+ for (let i = 0; i < n; i++) out.push({ power: 0, timeout: 0 });
189
+ return out;
190
+ }
191
+
192
+ /**
193
+ * object_set_base_known (obj-knowledge.c L820): set the basic details a player
194
+ * always knows once an object is seen - kind/tval/sval/weight/number, the
195
+ * generic dice and ac (gated by the "know dice"/"know ac" runes p->obj_k->dd/
196
+ * ds/ac, which are always 1 from birth), the standard to-hit for armour,
197
+ * launcher multipliers, and the pval/effect for aware flavours and unflavored
198
+ * non-wearables.
199
+ *
200
+ * Mutates `shadow` in place.
201
+ */
202
+ export function objectSetBaseKnown(
203
+ shadow: GameObject,
204
+ obj: GameObject,
205
+ p: Player,
206
+ env: RuneEnv,
207
+ deps: KnownDesc,
208
+ ): void {
209
+ shadow.kind = obj.kind; // L823
210
+ shadow.tval = obj.tval; // L824
211
+ shadow.sval = obj.sval; // L825
212
+ shadow.weight = obj.weight; // L826
213
+ shadow.number = obj.number; // L827
214
+
215
+ /* Generic dice and ac, gated by the dd/ds/ac runes (always 1 from birth). */
216
+ if (!shadow.dd) shadow.dd = obj.kind.dd * p.objKnown.dd; // L830-832
217
+ if (!shadow.ds) shadow.ds = obj.kind.ds * p.objKnown.ds; // L833-835
218
+ if (!shadow.ac) shadow.ac = obj.kind.ac * p.objKnown.ac; // L836-838
219
+ if (objectHasStandardToH(env, obj)) {
220
+ shadow.toH = obj.kind.toH.base; // L839-841
221
+ }
222
+ if (tvalIsLauncher(obj.tval)) {
223
+ shadow.pval = obj.pval; // L842-844
224
+ }
225
+
226
+ /* Aware flavours and unflavored non-wearables get info now (L846-851). */
227
+ const flavored = kindHasFlavor(obj);
228
+ if (
229
+ (deps.isAware(obj.kind) && flavored) ||
230
+ (!tvalIsWearable(obj.tval) && !flavored)
231
+ ) {
232
+ shadow.pval = obj.pval;
233
+ shadow.effect = obj.effect;
234
+ }
235
+
236
+ /* Know standard activations for wearables (L853-856). */
237
+ if (tvalIsWearable(obj.tval) && obj.kind.effect && deps.isAware(obj.kind)) {
238
+ shadow.effect = obj.effect;
239
+ }
240
+ }
241
+
242
+ /**
243
+ * player_knows_ego (obj-knowledge.c L475): is `ego` known to the player, for
244
+ * the specific object `obj` (obj lets a zero-valued modifier count as known
245
+ * when the ego's modifier range straddles zero)?
246
+ */
247
+ export function playerKnowsEgo(
248
+ p: Player,
249
+ ego: GameObject["ego"],
250
+ obj: GameObject,
251
+ env: RuneEnv,
252
+ ): boolean {
253
+ if (!ego) return false; // L480
254
+
255
+ /* All flags known (L483): ego->flags subset of p->obj_k->flags. */
256
+ if (!p.objKnown.flags.isSubset(ego.flags)) return false;
257
+
258
+ /* All modifiers known (L486-504). */
259
+ for (let i = 0; i < OBJ_MOD_MAX; i++) {
260
+ const mod = ego.modifiers[i];
261
+ if (!mod) continue;
262
+ const modmax = randcalcMax(mod);
263
+ const modmin = randcalcMin(mod);
264
+ if ((modmax > 0 || modmin < 0) && !(p.objKnown.modifiers[i] ?? 0)) {
265
+ if (!obj || modmax * modmin > 0 || (obj.modifiers[i] ?? 0) !== 0) {
266
+ return false;
267
+ }
268
+ }
269
+ }
270
+
271
+ /* All elements known (L507-509). */
272
+ for (let i = 0; i < ELEM_MAX; i++) {
273
+ if (
274
+ (ego.elInfo[i]?.resLevel ?? 0) &&
275
+ !(p.objKnown.elInfo[i]?.resLevel ?? 0)
276
+ ) {
277
+ return false;
278
+ }
279
+ }
280
+
281
+ /* All brands known (L512-516). */
282
+ for (let i = 1; i < env.brands.length; i++) {
283
+ if (ego.brands && ego.brands[i] && !playerKnowsBrand(p, i)) return false;
284
+ }
285
+
286
+ /* All slays known (L519-523). */
287
+ for (let i = 1; i < env.slays.length; i++) {
288
+ if (ego.slays && ego.slays[i] && !playerKnowsSlay(p, i)) return false;
289
+ }
290
+
291
+ /* All curses known (L526-530). */
292
+ for (let i = 1; i < env.curses.length; i++) {
293
+ if (ego.curses && ego.curses[i] && !playerKnowsCurse(p, i)) return false;
294
+ }
295
+
296
+ return true;
297
+ }
298
+
299
+ /**
300
+ * object_effect_is_known (obj-knowledge.c L540): the player knows the object's
301
+ * effect when the shadow's effect chain is the real one. GameObject.effect is a
302
+ * shared reference to the same EffectRecordJson[] (or null), so reference
303
+ * equality matches upstream's obj->effect == obj->known->effect pointer test.
304
+ */
305
+ export function objectEffectIsKnown(obj: GameObject, shadow: GameObject): boolean {
306
+ return obj.effect === shadow.effect;
307
+ }
308
+
309
+ /**
310
+ * object_non_curse_runes_known (obj-knowledge.c L678): are all non-curse runes
311
+ * on `obj` reflected in its `shadow`?
312
+ */
313
+ function objectNonCurseRunesKnown(
314
+ obj: GameObject,
315
+ shadow: GameObject,
316
+ env: RuneEnv,
317
+ ): boolean {
318
+ /* Not all combat details known (L686-688). */
319
+ if (shadow.toA !== obj.toA) return false;
320
+ if (shadow.toH !== obj.toH) return false;
321
+ if (shadow.toD !== obj.toD) return false;
322
+
323
+ /* Not all modifiers known (L691-693). */
324
+ for (let i = 0; i < OBJ_MOD_MAX; i++) {
325
+ if ((obj.modifiers[i] ?? 0) !== (shadow.modifiers[i] ?? 0)) return false;
326
+ }
327
+
328
+ /* Not all elements known (L696-699). */
329
+ for (let i = 0; i < ELEM_MAX; i++) {
330
+ if (
331
+ (obj.elInfo[i]?.resLevel ?? 0) !== 0 &&
332
+ (shadow.elInfo[i]?.resLevel ?? 0) === 0
333
+ ) {
334
+ return false;
335
+ }
336
+ }
337
+
338
+ /* Not all brands known (L702-710). */
339
+ if (obj.brands) {
340
+ if (!shadow.brands) return false;
341
+ for (let i = 0; i < env.brands.length; i++) {
342
+ if (obj.brands[i] && !shadow.brands[i]) return false;
343
+ }
344
+ }
345
+
346
+ /* Not all slays known (L713-721). */
347
+ if (obj.slays) {
348
+ if (!shadow.slays) return false;
349
+ for (let i = 0; i < env.slays.length; i++) {
350
+ if (obj.slays[i] && !shadow.slays[i]) return false;
351
+ }
352
+ }
353
+
354
+ /* Not all flags known (L724): obj->flags subset of obj->known->flags. */
355
+ if (!shadow.flags.isSubset(obj.flags)) return false;
356
+
357
+ return true;
358
+ }
359
+
360
+ /**
361
+ * object_runes_known (obj-knowledge.c L734), ported to compare the real object
362
+ * against its synthesised shadow (upstream compares obj->known, which is filled
363
+ * from the same rune knowledge). Named ...Upstream to distinguish it from the
364
+ * existing reduced objectRunesKnown in knowledge.ts, which walks the rune list
365
+ * over the player's knowledge directly rather than a per-object twin.
366
+ */
367
+ export function objectRunesKnownUpstream(
368
+ obj: GameObject,
369
+ shadow: GameObject,
370
+ _p: Player,
371
+ env: RuneEnv,
372
+ ): boolean {
373
+ /* Not all curses known (L740-742). */
374
+ if (!cursesAreEqual(obj, shadow)) return false;
375
+
376
+ /* Answer is now the same as for non-curse runes (L745). */
377
+ return objectNonCurseRunesKnown(obj, shadow, env);
378
+ }
379
+
380
+ /**
381
+ * object_fully_known (obj-knowledge.c L754): all runes known AND the effect
382
+ * known.
383
+ */
384
+ export function objectFullyKnown(
385
+ obj: GameObject,
386
+ shadow: GameObject,
387
+ p: Player,
388
+ env: RuneEnv,
389
+ ): boolean {
390
+ if (!objectRunesKnownUpstream(obj, shadow, p, env)) return false; // L757
391
+ if (!objectEffectIsKnown(obj, shadow)) return false; // L760
392
+ return true;
393
+ }
394
+
395
+ /**
396
+ * Synthesise the per-object known shadow (upstream obj->known) from the
397
+ * player's cumulative rune knowledge. Ports object_set_base_known (L820) then
398
+ * player_know_object (L1022) onto the port's fields; the shadow is a fresh
399
+ * GameObject holding only what the player knows.
400
+ *
401
+ * `state` is the object's floor-knowledge state (player_know_object's L1027-1035
402
+ * pre-ID gate): an UNSEEN or only-SENSED object gets no ID at all - upstream
403
+ * returns before object_set_base_known, so its shadow is a bare object_new with
404
+ * nothing known. Defaults to SEEN, the state of every object the current callers
405
+ * describe (a pack / store / targeted object always has an exact known twin), so
406
+ * the pre-existing behaviour is unchanged.
407
+ *
408
+ * @returns a shadow GameObject to be read wherever upstream reads obj->known.
409
+ */
410
+ export function objectKnownShadow(
411
+ obj: GameObject,
412
+ p: Player,
413
+ env: RuneEnv,
414
+ deps: KnownDesc,
415
+ state: KnownState = KNOWN_STATE.SEEN,
416
+ ): GameObject {
417
+ const shadow = objectNew(obj.kind);
418
+
419
+ /* Unseen (obj->known == NULL) or only-sensed (obj->known->kind != obj->kind):
420
+ * player_know_object returns before object_set_base_known (L1029-1030), so no
421
+ * property - not even the base dice/ac - is known. object_set_base_known runs
422
+ * only once object_see has recorded the real kind (L916 / L936). */
423
+ if (state !== KNOWN_STATE.SEEN) return shadow;
424
+
425
+ const assessed = (obj.notice & OBJ_NOTICE.ASSESSED) !== 0;
426
+ /* The port keeps assessed state on the live object; mirror it (see docs -
427
+ * byte-identical to a twin's own notice under on-demand synthesis). */
428
+ shadow.notice = obj.notice;
429
+
430
+ objectSetBaseKnown(shadow, obj, p, env, deps);
431
+
432
+ /* search() writes obj->known->pval for a discovered chest trap
433
+ * (player-util.c:1709-1712), independently of assessment. */
434
+ if (tvalIsChest(obj.tval)) shadow.pval = obj.knownPval ?? 0;
435
+
436
+ /* Distant / unassessed objects just get base properties (L1033-1035). */
437
+ if (!assessed) return shadow;
438
+
439
+ /* Dice (gated by the dd/ds/ac runes, always 1), and the pval for anything but
440
+ * chests (L1039-1043). */
441
+ shadow.dd = obj.dd * p.objKnown.dd;
442
+ shadow.ds = obj.ds * p.objKnown.ds;
443
+ shadow.ac = obj.ac * p.objKnown.ac;
444
+ if (!tvalIsChest(obj.tval)) shadow.pval = obj.pval;
445
+
446
+ /* Combat details (L1046-1049). */
447
+ shadow.toA = (p.objKnown.toA ? 1 : 0) * obj.toA;
448
+ if (!objectHasStandardToH(env, obj)) {
449
+ shadow.toH = (p.objKnown.toH ? 1 : 0) * obj.toH;
450
+ }
451
+ shadow.toD = (p.objKnown.toD ? 1 : 0) * obj.toD;
452
+
453
+ /* Modifiers (L1052-1058). */
454
+ for (let i = 0; i < OBJ_MOD_MAX; i++) {
455
+ shadow.modifiers[i] = (p.objKnown.modifiers[i] ?? 0)
456
+ ? (obj.modifiers[i] ?? 0)
457
+ : 0;
458
+ }
459
+
460
+ /* Elements (L1061-1069). */
461
+ for (let i = 0; i < ELEM_MAX; i++) {
462
+ const se = shadow.elInfo[i];
463
+ if (!se) continue;
464
+ if ((p.objKnown.elInfo[i]?.resLevel ?? 0) === 1) {
465
+ se.resLevel = obj.elInfo[i]?.resLevel ?? 0;
466
+ se.flags = obj.elInfo[i]?.flags ?? 0;
467
+ } else {
468
+ se.resLevel = 0;
469
+ se.flags = 0;
470
+ }
471
+ }
472
+
473
+ /* Object flags (L1072-1078): shadow.flags = obj.flags intersect obj_k. */
474
+ shadow.flags.wipe();
475
+ for (const flag of p.objKnown.flags) {
476
+ if (obj.flags.has(flag)) shadow.flags.on(flag);
477
+ }
478
+
479
+ /* Brands (L1086-1106). */
480
+ if (obj.brands) {
481
+ let knownBrand = false;
482
+ for (let i = 1; i < env.brands.length; i++) {
483
+ if (playerKnowsBrand(p, i) && obj.brands[i]) {
484
+ if (!shadow.brands) {
485
+ shadow.brands = new Array<boolean>(env.brands.length).fill(false);
486
+ }
487
+ shadow.brands[i] = true;
488
+ knownBrand = true;
489
+ } else if (shadow.brands) {
490
+ shadow.brands[i] = false;
491
+ }
492
+ }
493
+ if (!knownBrand) shadow.brands = null;
494
+ }
495
+
496
+ /* Slays (L1109-1129). */
497
+ if (obj.slays) {
498
+ let knownSlay = false;
499
+ for (let i = 1; i < env.slays.length; i++) {
500
+ if (playerKnowsSlay(p, i) && obj.slays[i]) {
501
+ if (!shadow.slays) {
502
+ shadow.slays = new Array<boolean>(env.slays.length).fill(false);
503
+ }
504
+ shadow.slays[i] = true;
505
+ knownSlay = true;
506
+ } else if (shadow.slays) {
507
+ shadow.slays[i] = false;
508
+ }
509
+ }
510
+ if (!knownSlay) shadow.slays = null;
511
+ }
512
+
513
+ /* Curses (L1131-1153). */
514
+ if (obj.curses) {
515
+ let knownCursed = false;
516
+ for (let i = 1; i < env.curses.length; i++) {
517
+ if ((p.objKnown.curses[i] ?? 0) && (obj.curses[i]?.power ?? 0)) {
518
+ if (!shadow.curses) shadow.curses = newCurseData(env.curses.length);
519
+ const sc = shadow.curses[i];
520
+ if (sc) sc.power = obj.curses[i]?.power ?? 0;
521
+ knownCursed = true;
522
+ } else if (shadow.curses) {
523
+ const sc = shadow.curses[i];
524
+ if (sc) sc.power = 0;
525
+ }
526
+ }
527
+ if (!knownCursed) shadow.curses = null;
528
+ } else if (shadow.curses) {
529
+ shadow.curses = null;
530
+ }
531
+
532
+ /* Ego type, if known (L1156-1161). */
533
+ shadow.ego = playerKnowsEgo(p, obj.ego, obj, env) ? obj.ego : null;
534
+
535
+ /* Jewellery / special-artifact awareness (L1163-1175): the
536
+ * object_flavor_aware side effect is a knowledge-UPDATE and is deliberately
537
+ * NOT fired here - this is a display-only synthesis and must never mutate the
538
+ * player's knowledge. It is wired at the knowledge-update sites instead
539
+ * (playerKnowObjectAwareness, knowledge.ts). The shadow's fields are
540
+ * unaffected by it. */
541
+
542
+ /* Ensure effect is known as if object_set_base_known had run (L1178-1182). */
543
+ const flavored = kindHasFlavor(obj);
544
+ if (
545
+ (deps.isAware(obj.kind) && flavored) ||
546
+ (!tvalIsWearable(obj.tval) && !flavored) ||
547
+ (tvalIsWearable(obj.tval) && obj.kind.effect && deps.isAware(obj.kind))
548
+ ) {
549
+ shadow.effect = obj.effect;
550
+ }
551
+
552
+ /* known->artifact (object_touch L963): the artifact is automatically
553
+ * noticed when the object is ASSESSED (touched / picked up), NOT when its
554
+ * runes are fully known - so an assessed artifact shows its name while its
555
+ * powers stay hidden until learned, exactly as upstream. */
556
+ shadow.artifact = obj.artifact && assessed ? obj.artifact : null;
557
+ const fullyKnown = objectFullyKnown(obj, shadow, p, env);
558
+
559
+ /* Fully known objects mirror the real element and flag info (L1203-1210). */
560
+ if (fullyKnown) {
561
+ for (let i = 0; i < ELEM_MAX; i++) {
562
+ const se = shadow.elInfo[i];
563
+ const oe = obj.elInfo[i];
564
+ if (se && oe) {
565
+ se.resLevel = oe.resLevel;
566
+ se.flags = oe.flags;
567
+ }
568
+ }
569
+ shadow.flags.copy(obj.flags);
570
+ }
571
+
572
+ return shadow;
573
+ }
574
+
575
+ /**
576
+ * object_is_known_artifact (obj-knowledge.c L552): whether the object is known
577
+ * to be an artifact. Reads the shadow's artifact field (set from the ASSESSED
578
+ * bit in objectKnownShadow), matching upstream's obj->known->artifact.
579
+ */
580
+ export function objectIsKnownArtifact(shadow: GameObject): boolean {
581
+ return shadow.artifact !== null;
582
+ }
583
+
584
+ /* ------------------------------------------------------------------ */
585
+ /* Progressive object-knowledge hooks (obj-knowledge.c L860-1013) */
586
+ /* ------------------------------------------------------------------ */
587
+
588
+ /**
589
+ * The side effects object_touch / object_grab fire beyond marking the object
590
+ * assessed, injected so this obj-layer helper stays free of the player-history
591
+ * ledger and the flavour/rune knowledge-update path.
592
+ */
593
+ export interface ObjectTouchDeps {
594
+ /**
595
+ * history_find_artifact (obj-knowledge.c L971): log that the player has now
596
+ * seen artifact `aidx`. Fired only for an artifact object.
597
+ */
598
+ onArtifactFound?(aidx: number): void;
599
+ /**
600
+ * player_know_object's flavour-awareness side effect (obj-knowledge.c
601
+ * L967 -> L1163-1175), i.e. playerKnowObjectAwareness(p, env, obj, ...) built
602
+ * by the caller. The rest of player_know_object (the obj->known twin writes)
603
+ * is synthesised on demand by objectKnownShadow, so only this awareness half
604
+ * needs firing here.
605
+ */
606
+ onKnow?(obj: GameObject): void;
607
+ }
608
+
609
+ /**
610
+ * object_touch (obj-knowledge.c L960): gain knowledge from being on the same
611
+ * square as an object (or picking it up). Upstream sets obj->known->artifact,
612
+ * marks obj->known ASSESSED, runs player_know_object, and logs a found artifact.
613
+ *
614
+ * The port keeps ASSESSED on the LIVE object (the fuller known shadow is gated
615
+ * by it - objectKnownShadow L350, desc.ts) and synthesises obj->known on
616
+ * demand, so this reduces to: set ASSESSED (which also reveals the artifact
617
+ * name via the shadow's assessed gate), fire the awareness half of
618
+ * player_know_object, then log the artifact. Draws no RNG.
619
+ */
620
+ export function objectTouch(obj: GameObject, deps: ObjectTouchDeps = {}): void {
621
+ /* obj->known->artifact = obj->artifact (L963) is subsumed by the shadow's
622
+ * ASSESSED gate (objectKnownShadow L477); marking ASSESSED is enough. */
623
+ obj.notice |= OBJ_NOTICE.ASSESSED; // L964
624
+
625
+ /* player_know_object(p, obj) (L967): only the awareness side effect needs a
626
+ * home here (the twin is on-demand). */
627
+ deps.onKnow?.(obj);
628
+
629
+ /* Log artifacts if found (L970-971). */
630
+ if (obj.artifact) deps.onArtifactFound?.(obj.artifact.aidx);
631
+ }
632
+
633
+ /**
634
+ * object_grab (obj-knowledge.c L978): gain knowledge from grabbing an object
635
+ * off a monster. Upstream's body is known-cave floor-list bookkeeping (making /
636
+ * relocating the obj->known twin and its object_set_base_known fill) followed by
637
+ * object_touch (L1012). In the port the known-cave floor list is maintained by
638
+ * the world layer (game/known.ts squareKnowPile / object_see) and the twin is
639
+ * on demand, so grabbing reduces to object_touch. Draws no RNG.
640
+ */
641
+ export function objectGrab(obj: GameObject, deps: ObjectTouchDeps = {}): void {
642
+ objectTouch(obj, deps);
643
+ }
644
+
645
+ /* ------------------------------------------------------------------ */
646
+ /* Progressive floor-item sensing (obj-knowledge.c L862-955) */
647
+ /* ------------------------------------------------------------------ */
648
+
649
+ /**
650
+ * The reduced known-cave floor accessor object_see / object_sense operate
651
+ * through. Upstream both walk p->cave->objects[obj->oidx] (the per-object known
652
+ * twin) and the known floor piles (square_holds_object / pile_insert_end /
653
+ * square_excise_object). The port keeps the player's floor knowledge as a
654
+ * grid-keyed glyph memory (game/known.ts KnownObjectMemory) rather than a
655
+ * per-object twin, so the world layer supplies these operations; the
656
+ * object-knowledge decisions stay here, matching the objectTouch pattern.
657
+ */
658
+ export interface KnownFloorDeps {
659
+ /**
660
+ * The knowledge state recorded for obj's grid: UNSEEN (no memory /
661
+ * p->cave->objects[obj->oidx] absent or moved off this pile), SENSED (a fake
662
+ * unknown-item / unknown-treasure marker), or SEEN (an exact memory whose
663
+ * kind matches obj).
664
+ */
665
+ state(obj: GameObject): KnownState;
666
+ /**
667
+ * object_set_base_known + list the known object (obj-knowledge.c L914-927 /
668
+ * L936): record an EXACT memory of obj at its grid, replacing any sensed
669
+ * marker and relocating it onto the current floor pile.
670
+ */
671
+ setSeen(obj: GameObject): void;
672
+ /**
673
+ * object_sense's fake-kind assignment (L884-896): record a SENSED marker at
674
+ * obj's grid - unknown_gold_kind for money, unknown_item_kind otherwise.
675
+ */
676
+ setSensed(obj: GameObject, isMoney: boolean): void;
677
+ /**
678
+ * known_obj->number = obj->number (L938): refresh the remembered count of an
679
+ * already-exact memory whose kind still matches.
680
+ */
681
+ setNumber(obj: GameObject): void;
682
+ }
683
+
684
+ /**
685
+ * object_sense (obj-knowledge.c L862): gain knowledge from SENSING an object on
686
+ * the floor (detection / telepathy of an item you cannot see). Upstream makes a
687
+ * new fake "unknown item" / "unknown treasure" known-object where none exists
688
+ * (or the old one has moved) and attaches it to the known floor pile; a grid
689
+ * that already carries an exact or sensed memory is left as is. Draws no RNG.
690
+ */
691
+ export function objectSense(obj: GameObject, deps: KnownFloorDeps): void {
692
+ /* Make a new sensed marker only where nothing is recorded (L868-897); an
693
+ * existing exact or sensed memory already covers this grid. tval_is_money
694
+ * chooses unknown_gold_kind over unknown_item_kind (L886-892). */
695
+ if (deps.state(obj) === KNOWN_STATE.UNSEEN) {
696
+ deps.setSensed(obj, tvalIsMoney(obj.tval));
697
+ }
698
+ }
699
+
700
+ /**
701
+ * object_see (obj-knowledge.c L903): gain knowledge from SEEING an object on the
702
+ * floor. Upstream makes a new exact known-object (object_set_base_known) where
703
+ * none exists (L909-927), upgrades a sensed marker to exact when the real kind
704
+ * is now visible (known_obj->kind != obj->kind, L934-936), or just refreshes the
705
+ * remembered number when an exact memory already matches (L937-939); then it
706
+ * relocates the memory onto the current floor pile. Draws no RNG.
707
+ */
708
+ export function objectSee(obj: GameObject, deps: KnownFloorDeps): void {
709
+ switch (deps.state(obj)) {
710
+ case KNOWN_STATE.UNSEEN: /* Brand-new exact memory (L909-927). */
711
+ case KNOWN_STATE.SENSED: /* Sensed -> exact: the kind is now known (L934-936). */
712
+ deps.setSeen(obj);
713
+ break;
714
+ default: /* SEEN: same kind, just refresh the count (L937-939). */
715
+ deps.setNumber(obj);
716
+ break;
717
+ }
718
+ }