@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,960 @@
1
+ /**
2
+ * The player's map knowledge, a reduction of the upstream player->cave twin
3
+ * chunk (cave.c cave_know_*, cave-square.c square_memorize / square_forget /
4
+ * square_know_pile / square_sense_pile, and cave-view.c note_spot).
5
+ *
6
+ * Upstream duplicates the whole chunk for the player's knowledge so memory
7
+ * can go stale (you remember the door you saw, not the open floor it has
8
+ * since become). This port keeps the same staleness property with a flat
9
+ * remembered-feat array plus a remembered-floor-object marker per grid;
10
+ * that is exactly what detection, magic mapping and the renderer's
11
+ * remembered-terrain display need. The full twin (known traps as objects,
12
+ * per-object known twins) rides later batches and is ledgered.
13
+ *
14
+ * noteSpots() is the note_spot pass over the current field of view: every
15
+ * SEEN grid is memorized with its floor pile. It then runs updateMonsters()
16
+ * - the faithful port of update_mon (mon-util.c) - to refresh every live
17
+ * monster's visibility flags from telepathy, infravision, see-invisible and
18
+ * illumination. The session and front end call it after every updateView.
19
+ *
20
+ * update_mon only READS MFLAG_MARK; the detection-fade lifecycle
21
+ * (MFLAG_MARK / MFLAG_SHOW clearing, game-world.c process_world) lives in
22
+ * tickMonsterMarks() until the world-clock port absorbs it.
23
+ */
24
+
25
+ import { FEAT, MFLAG, OF, RF, SQUARE, TF, TMD } from "../generated/index.js";
26
+ import type { Loc } from "../loc.js";
27
+ import { DDGRID_DDD, loc, locEq, locSum } from "../loc.js";
28
+ import {
29
+ featIsBright,
30
+ featIsGranite,
31
+ featIsMagma,
32
+ featIsPassable,
33
+ featIsProjectable,
34
+ featIsQuartz,
35
+ } from "../world/chunk.js";
36
+ import { caveIlluminate } from "../gen/cave.js";
37
+ import {
38
+ squareIsNoEsp,
39
+ squareIsSeen,
40
+ squareIsView,
41
+ type ViewerState,
42
+ } from "../world/view.js";
43
+ import { getLore, loreCountU16 } from "../mon/lore.js";
44
+ import {
45
+ monsterIsCamouflaged,
46
+ monsterIsEspDetectable,
47
+ monsterIsInView,
48
+ monsterIsInvisible,
49
+ monsterIsVisible,
50
+ } from "../mon/predicate.js";
51
+ import { disturb } from "./player-path.js";
52
+ import { describeObject } from "./describe.js";
53
+ import { floorCarry, floorExcise, floorPile, squareHoldsObject } from "./floor.js";
54
+ import { noteSpotRevealTrap } from "./trap.js";
55
+ import { GEAR_LABELS, gearToLabel } from "./gear.js";
56
+ import { ODESC } from "../obj/desc.js";
57
+ import { monsterCarry } from "../mon/make.js";
58
+ import type { Monster } from "../mon/monster.js";
59
+ import type { GameObject } from "../obj/object.js";
60
+ import { objectCopy, tvalIsJewelry } from "../obj/object.js";
61
+ import { objectTouch, playerKnowsEgo } from "../obj/known-object.js";
62
+ import {
63
+ NOOP_FLAVOR_AWARE_DEPS,
64
+ OBJ_NOTICE,
65
+ buildRuneList,
66
+ objectRunesKnown,
67
+ playerKnowObjectAwareness,
68
+ } from "../obj/knowledge.js";
69
+ import type { GameState } from "./context.js";
70
+
71
+ /**
72
+ * A remembered floor object: the pile head's display glyph, or a null
73
+ * glyph for a sensed-but-unidentified something (upstream's
74
+ * unknown_item_kind / unknown_gold_kind markers).
75
+ */
76
+ export interface KnownObjectMemory {
77
+ /** Display char of the remembered pile head; null = sensed-unknown. */
78
+ ch: string | null;
79
+ /** Display color char of the remembered pile head. */
80
+ attr: string;
81
+ }
82
+
83
+ /** The player's knowledge of the current level. */
84
+ export interface KnownMap {
85
+ width: number;
86
+ height: number;
87
+ /** Remembered feat per grid; -1 = unknown. May be stale, as upstream. */
88
+ feat: Int16Array;
89
+ /** Remembered floor objects by grid index (y * width + x). */
90
+ objects: Map<number, KnownObjectMemory>;
91
+ }
92
+
93
+ /** A blank (all-unknown) knowledge map for a fresh level. */
94
+ export function newKnownMap(width: number, height: number): KnownMap {
95
+ return {
96
+ width,
97
+ height,
98
+ feat: new Int16Array(width * height).fill(-1),
99
+ objects: new Map(),
100
+ };
101
+ }
102
+
103
+ function gi(state: GameState, grid: Loc): number {
104
+ return grid.y * state.chunk.width + grid.x;
105
+ }
106
+
107
+ /** square_memorize: remember the grid's current terrain. */
108
+ export function squareMemorize(state: GameState, grid: Loc): void {
109
+ /* square_set_known_feat (cave-square.c:1274), the static setter behind both
110
+ * square_memorize (cave-square.c:1576) and square_forget (:1582): upstream
111
+ * writes player->cave->squares[y][x].feat; the port writes state.known.feat.
112
+ * The `c != cave` guard is structural here - there is only one known map. */
113
+ state.known.feat[gi(state, grid)] = state.chunk.feat(grid);
114
+ }
115
+
116
+ /**
117
+ * square_forget (cave-square.c:1580-1583): forget the grid's TERRAIN only.
118
+ * Upstream is `square_set_known_feat(c, grid, FEAT_NONE)` and nothing else -
119
+ * it does not touch the remembered object pile, and map_info's object loop
120
+ * (cave-map.c:155-169) is NOT gated on square_isknown, so an object remembered
121
+ * on a grid whose terrain has been forgotten stays on the player's map. The
122
+ * remembered pile is dropped only by forget_remembered_objects, i.e. through
123
+ * squareKnowPile / squareSensePile.
124
+ */
125
+ export function squareForget(state: GameState, grid: Loc): void {
126
+ state.known.feat[gi(state, grid)] = -1;
127
+ }
128
+
129
+ /**
130
+ * cave_illuminate (cave-map.c L555), the runtime version: the generation-time
131
+ * flag subset (gen/cave.ts caveIlluminate) plus the player-knowledge half
132
+ * (square_memorize / square_forget), gated per grid on the same "light" test
133
+ * upstream computes over the 9-entry ddgrid_ddd (the 8 neighbors plus self,
134
+ * cave.c L72-73): a floor or stairs grid nearby makes the boundary worth
135
+ * remembering. RNG-free.
136
+ *
137
+ * DEFERRED: PU_UPDATE_VIEW | PU_MONSTERS and the PR_MAP / PR_MONLIST /
138
+ * PR_ITEMLIST redraws (cave-map.c L608-612) - the front end's updateView +
139
+ * noteSpots pass already runs unconditionally after every state-changing
140
+ * action (packages/web/src/main.ts), so there is no separate dirty-flag
141
+ * mechanism to set here, matching the other knowledge-writing effect handlers
142
+ * (game/effect-detect.ts) which don't re-trigger it either.
143
+ */
144
+ export function caveIlluminateKnown(state: GameState, daytime: boolean): void {
145
+ const c = state.chunk;
146
+
147
+ /* Apply light or darkness (the flag subset, shared with generation). */
148
+ caveIlluminate(c, daytime);
149
+
150
+ /* The player-knowledge half: memorize / forget gated on adjacency light. */
151
+ for (let y = 0; y < c.height; y++) {
152
+ for (let x = 0; x < c.width; x++) {
153
+ const grid = loc(x, y);
154
+
155
+ /* Skip grids with no surrounding floors or stairs. */
156
+ let light = false;
157
+ for (let d = 0; d < 9; d++) {
158
+ const aGrid = locSum(grid, DDGRID_DDD[d] as Loc);
159
+ if (!c.inBoundsFully(aGrid)) continue;
160
+ if (c.isFloor(aGrid) || c.isStairs(aGrid)) {
161
+ light = true;
162
+ break;
163
+ }
164
+ }
165
+
166
+ if (daytime || !c.isFloor(grid)) {
167
+ if (light) squareMemorize(state, grid);
168
+ } else if (!featIsBright(c.features, c.feat(grid))) {
169
+ /* Like cave_unlight(), forget "boring" grids. */
170
+ if (c.isFloor(grid)) squareForget(state, grid);
171
+ }
172
+ }
173
+ }
174
+
175
+ /* Light shop doorways. */
176
+ for (let y = 0; y < c.height; y++) {
177
+ for (let x = 0; x < c.width; x++) {
178
+ const grid = loc(x, y);
179
+ if (!c.isShop(grid)) continue;
180
+ for (let i = 0; i < 8; i++) {
181
+ const aGrid = locSum(grid, DDGRID_DDD[i] as Loc);
182
+ if (c.inBounds(aGrid)) squareMemorize(state, aGrid);
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ /**
189
+ * cave_known (cave-map.c:633-660): memorize town terrain except interior
190
+ * wall/lava regions.
191
+ *
192
+ * MUST run BEFORE caveIlluminateKnown, as generate.c:1547-1550 does. The order
193
+ * is load-bearing and not interchangeable: cave_illuminate writes player memory
194
+ * too -- square_memorize at cave-map.c:582 and, at night, square_forget on
195
+ * boring floor grids at :586-587. So upstream deliberately memorizes the whole
196
+ * town here and then lets night-time illumination FORGET the boring floors
197
+ * again. Running this second would leave a night town fully mapped, which is the
198
+ * opposite of upstream.
199
+ */
200
+ export function caveKnown(state: GameState): void {
201
+ const c = state.chunk;
202
+ for (let y = 0; y < c.height; y++) {
203
+ for (let x = 0; x < c.width; x++) {
204
+ const grid = loc(x, y);
205
+ let count = 0;
206
+ for (let d = 0; d < 8; d++) {
207
+ const adjacent = locSum(grid, DDGRID_DDD[d] as Loc);
208
+ if (!c.isProjectable(adjacent) || featIsBright(c.features, c.feat(adjacent))) count++;
209
+ }
210
+ if (count < 8) squareMemorize(state, grid);
211
+ }
212
+ }
213
+ }
214
+
215
+ /** square_isknown: the player remembers some terrain here. */
216
+ export function squareIsKnown(state: GameState, grid: Loc): boolean {
217
+ return state.known.feat[gi(state, grid)]! >= 0;
218
+ }
219
+
220
+ /** The remembered feat at a grid (-1 = unknown). */
221
+ export function knownFeat(state: GameState, grid: Loc): number {
222
+ return state.known.feat[gi(state, grid)]!;
223
+ }
224
+
225
+ /**
226
+ * square_isbelievedwall (cave-square.c L901-912): out-of-bounds is a wall,
227
+ * unknown terrain is not believed to be a wall, and known terrain is tested
228
+ * against the remembered feature rather than the live map.
229
+ */
230
+ export function squareIsBelievedWall(state: GameState, grid: Loc): boolean {
231
+ if (!state.chunk.inBoundsFully(grid)) return true;
232
+ if (!squareIsKnown(state, grid)) return false;
233
+ return !featIsProjectable(state.chunk.features, knownFeat(state, grid));
234
+ }
235
+
236
+ /**
237
+ * square_isrubble(player->cave, grid): is the terrain the player REMEMBERS here
238
+ * rubble? Upstream freely runs the square predicates against player->cave to
239
+ * ask "what does the player think is there", which is how the bump-into-terrain
240
+ * paths decide whether their message contradicts the player's memory
241
+ * (cmd-cave.c:1112, :1243). Unknown terrain is not remembered as anything.
242
+ */
243
+ export function knownIsRubble(state: GameState, grid: Loc): boolean {
244
+ const feat = knownFeat(state, grid);
245
+ if (feat < 0) return false;
246
+ const reg = state.chunk.features;
247
+ return !reg.featHas(feat, TF["WALL"]) && reg.featHas(feat, TF["ROCK"]);
248
+ }
249
+
250
+ /**
251
+ * square_isperm(player->cave, grid): PERMANENT and ROCK, remembered.
252
+ * do_cmd_tunnel_test MEMORIZES rather than forgets on this one - hitting
253
+ * permanent rock the player did not know about teaches them it is there
254
+ * (cmd-cave.c:462-468).
255
+ */
256
+ export function knownIsPerm(state: GameState, grid: Loc): boolean {
257
+ const feat = knownFeat(state, grid);
258
+ if (feat < 0) return false;
259
+ const reg = state.chunk.features;
260
+ return reg.featHas(feat, TF["PERMANENT"]) && reg.featHas(feat, TF["ROCK"]);
261
+ }
262
+
263
+ /** square_isopendoor(player->cave, grid): a remembered closable door. */
264
+ export function knownIsOpenDoor(state: GameState, grid: Loc): boolean {
265
+ const feat = knownFeat(state, grid);
266
+ if (feat < 0) return false;
267
+ return state.chunk.features.featHas(feat, TF["CLOSABLE"]);
268
+ }
269
+
270
+ /** square_isbrokendoor(player->cave, grid): remembered, passable, unclosable. */
271
+ export function knownIsBrokenDoor(state: GameState, grid: Loc): boolean {
272
+ const feat = knownFeat(state, grid);
273
+ if (feat < 0) return false;
274
+ const reg = state.chunk.features;
275
+ return (
276
+ reg.featHas(feat, TF["DOOR_ANY"]) &&
277
+ reg.featHas(feat, TF["PASSABLE"]) &&
278
+ !reg.featHas(feat, TF["CLOSABLE"])
279
+ );
280
+ }
281
+
282
+ /**
283
+ * square_isdiggable(player->cave, grid): remembered mineral wall, secret door
284
+ * or rubble - square_ismineral || square_issecretdoor || square_isrubble
285
+ * (cave-square.c), evaluated on the remembered feature index.
286
+ */
287
+ export function knownIsDiggable(state: GameState, grid: Loc): boolean {
288
+ const feat = knownFeat(state, grid);
289
+ if (feat < 0) return false;
290
+ const reg = state.chunk.features;
291
+ const isDoor = reg.featHas(feat, TF["DOOR_ANY"]);
292
+ const mineral =
293
+ featIsMagma(reg, feat) ||
294
+ featIsQuartz(reg, feat) ||
295
+ (featIsGranite(reg, feat) && !isDoor);
296
+ const secretDoor = featIsGranite(reg, feat) && isDoor;
297
+ return mineral || secretDoor || knownIsRubble(state, grid);
298
+ }
299
+
300
+ /**
301
+ * square_iscloseddoor(player->cave, grid): does the player REMEMBER a closed
302
+ * door here? The open / close / disarm tests use it to spot a stale memory - a
303
+ * remembered door where the real grid has none is forgotten rather than left to
304
+ * mislead the map (cmd-cave.c:160-163, :243-246).
305
+ */
306
+ export function knownIsClosedDoor(state: GameState, grid: Loc): boolean {
307
+ const feat = knownFeat(state, grid);
308
+ if (feat < 0) return false;
309
+ return state.chunk.features.featHas(feat, TF["DOOR_CLOSED"]);
310
+ }
311
+
312
+ /**
313
+ * square_ispassable || square_isrubble || square_iscloseddoor on player->cave
314
+ * (cmd-cave.c:1126-1128, :1253-1255): the player remembers something they could
315
+ * have walked into here. Discovering a wall instead means the memory was wrong
316
+ * and upstream forgets the grid.
317
+ */
318
+ export function knownIsEnterable(state: GameState, grid: Loc): boolean {
319
+ const feat = knownFeat(state, grid);
320
+ if (feat < 0) return false;
321
+ const reg = state.chunk.features;
322
+ return (
323
+ featIsPassable(reg, feat) ||
324
+ knownIsRubble(state, grid) ||
325
+ reg.featHas(feat, TF["DOOR_CLOSED"])
326
+ );
327
+ }
328
+
329
+ /**
330
+ * square_ismemorybad: the player remembers terrain here that no longer
331
+ * matches the live cave.
332
+ */
333
+ export function squareMemoryBad(state: GameState, grid: Loc): boolean {
334
+ const known = state.known.feat[gi(state, grid)]!;
335
+ return known >= 0 && known !== state.chunk.feat(grid);
336
+ }
337
+
338
+ /** The remembered feat at a grid, or FEAT_NONE ("unknown grid") if unknown. */
339
+ function apparentFeat(state: GameState, grid: Loc): number {
340
+ const f = knownFeat(state, grid);
341
+ return f >= 0 ? f : FEAT.NONE;
342
+ }
343
+
344
+ /** The mimic-resolved feature backing the grid's remembered terrain. */
345
+ function apparentFeature(state: GameState, grid: Loc) {
346
+ const f = state.chunk.features.get(apparentFeat(state, grid));
347
+ return f.mimic !== null ? state.chunk.features.get(f.mimic) : f;
348
+ }
349
+
350
+ /**
351
+ * square_apparent_name (cave-square.c): the mimic-resolved name of the
352
+ * grid's remembered terrain (the look/target UI's "You see <name>").
353
+ */
354
+ export function squareApparentName(state: GameState, grid: Loc): string {
355
+ return apparentFeature(state, grid).name;
356
+ }
357
+
358
+ /**
359
+ * square_apparent_look_prefix (cave-square.c): the indefinite article (or a
360
+ * feature-specific override) that precedes squareApparentName. Overrides are
361
+ * reproduced verbatim from terrain.txt, trailing space and all - stores'
362
+ * "the entrance to the " carries one, LAVA's "some" does not (upstream data,
363
+ * not a port bug).
364
+ */
365
+ export function squareApparentLookPrefix(state: GameState, grid: Loc): string {
366
+ const f = apparentFeature(state, grid);
367
+ if (f.lookPrefix) return f.lookPrefix;
368
+ const c = f.name.charAt(0).toLowerCase();
369
+ return "aeiou".includes(c) ? "an " : "a ";
370
+ }
371
+
372
+ /**
373
+ * square_apparent_look_in_preposition (cave-square.c): the preposition (or a
374
+ * feature-specific override) used for the player's own grid ("You are
375
+ * <preposition><name>."). Overrides are reproduced verbatim from terrain.txt
376
+ * (e.g. doors' "in" carries no trailing space, unlike the "on " default).
377
+ */
378
+ export function squareApparentLookInPreposition(state: GameState, grid: Loc): string {
379
+ const f = apparentFeature(state, grid);
380
+ return f.lookInPreposition || "on ";
381
+ }
382
+
383
+ /**
384
+ * square_isinteresting (cave-square.c), read against the player's knowledge
385
+ * (as target_accept and the look UI's terrain handler do): a memorized grid
386
+ * whose feature carries TF_INTERESTING.
387
+ */
388
+ export function squareIsInteresting(state: GameState, grid: Loc): boolean {
389
+ if (!squareIsKnown(state, grid)) return false;
390
+ return state.chunk.features.featHas(knownFeat(state, grid), TF.INTERESTING);
391
+ }
392
+
393
+ /** The remembered floor object at a grid, if any. */
394
+ export function knownObject(
395
+ state: GameState,
396
+ grid: Loc,
397
+ ): KnownObjectMemory | null {
398
+ return state.known.objects.get(gi(state, grid)) ?? null;
399
+ }
400
+
401
+ function pileHead(
402
+ state: GameState,
403
+ grid: Loc,
404
+ pred?: (obj: GameObject) => boolean,
405
+ ): GameObject | null {
406
+ const pile = state.floor.get(gi(state, grid));
407
+ if (!pile) return null;
408
+ for (const obj of pile) {
409
+ if (!pred || pred(obj)) return obj;
410
+ }
411
+ return null;
412
+ }
413
+
414
+ /**
415
+ * square_know_pile (reduced): remember the (first matching) floor object
416
+ * exactly; forget a remembered object that is no longer there. Without a
417
+ * predicate the whole pile is considered (the note_spot case).
418
+ *
419
+ * forget_remembered_objects (cave-square.c:1106, called at :1156 and :1186):
420
+ * upstream walks player->cave's shadow pile and excises/deletes any known
421
+ * twin whose original is no longer on the grid. The port's knowledge is one
422
+ * glyph per grid (state.known.objects), so that whole walk collapses to the
423
+ * "nothing here any more -> delete the entry" branch at the end of this
424
+ * function and of squareSensePile.
425
+ */
426
+ export function squareKnowPile(
427
+ state: GameState,
428
+ grid: Loc,
429
+ pred?: (obj: GameObject) => boolean,
430
+ ): void {
431
+ /* object_touch (cave-square.c square_know_pile L1177-1181, obj-knowledge.c
432
+ * object_touch L960-972): only the pile on the player's OWN grid is "touched",
433
+ * which marks each object ASSESSED (revealing its combat bracket and, for an
434
+ * artifact, its name - the shadow gates both on ASSESSED), auto-notices the
435
+ * artifact, and logs the find (history_find_artifact). A detected/lit pile at
436
+ * a distance is only "seen", never touched, so it does not count as found -
437
+ * hence the player-grid gate here. (player_know_object's flavour-awareness
438
+ * side effect is the cross-object rune-learn sweep - updatePlayerObjectKnowledge
439
+ * below - fired at the live rune-learn sites, not here.) */
440
+ if (locEq(grid, state.actor.grid)) {
441
+ const pile = state.floor.get(gi(state, grid));
442
+ if (pile) {
443
+ for (const obj of pile) {
444
+ if (!pred || pred(obj)) {
445
+ objectTouch(obj, {
446
+ onArtifactFound: () => state.onArtifactFound?.(obj.artifact!),
447
+ });
448
+ }
449
+ }
450
+ }
451
+ }
452
+
453
+ const head = pileHead(state, grid, pred);
454
+ if (head) {
455
+ state.known.objects.set(gi(state, grid), {
456
+ ch: head.kind.dChar,
457
+ attr: head.kind.dAttr,
458
+ });
459
+ } else if (!pileHead(state, grid)) {
460
+ /* Nothing at all here: any memory is stale. */
461
+ state.known.objects.delete(gi(state, grid));
462
+ }
463
+ }
464
+
465
+ /**
466
+ * gear_to_label (obj-gear.c:443) for a held handle. The one implementation lives
467
+ * in game/gear.ts; equipment is handled by this module's callers (they know the
468
+ * body slot), so the two-argument form is what is wanted here.
469
+ */
470
+ function gearPackLabel(state: GameState, handle: number): string {
471
+ return gearToLabel(state.gear, handle);
472
+ }
473
+
474
+ /**
475
+ * update_player_object_knowledge (obj-knowledge.c L1218): after any rune-learn,
476
+ * re-run player_know_object over every object the player can currently see or
477
+ * hold, so a newly-learned rune propagates awareness across ALL of them - not
478
+ * just the object that taught it. This is the sweep the audit's KN-03 flagged
479
+ * missing: e.g. wielding a Ring of Strength learns the STR modifier rune, and it
480
+ * is this sweep (not object_learn_on_wield itself) that then makes the ring's
481
+ * kind flavour-aware, so it stops reading as an unidentified "Steel Ring".
482
+ *
483
+ * The port keeps rune knowledge in typed player stores and synthesises each
484
+ * object's known-twin on demand for display, so the only persistent side effect
485
+ * that needs a home here is player_know_object's awareness half (L1163-1198): a
486
+ * carried/floor jewel whose non-curse runes are now all known becomes
487
+ * flavour-aware (L1163-1167, KN-03), a special artifact becomes aware outright
488
+ * (L1168-1175), and a first reveal of a name/ego prints "You have %s (%c)." /
489
+ * "On the ground: %s." (L1184-1198, KN-04).
490
+ *
491
+ * Scope vs upstream: flavour awareness is per-KIND and global to the game (the
492
+ * shared FlavorKnowledge), so making a kind aware from a carried jewel already
493
+ * covers every store / curse-template instance of that kind - the port need only
494
+ * sweep the player's gear and the floor, not the store/curse lists C also walks
495
+ * purely to rewrite their per-object display twins. Called at the live rune-learn
496
+ * sites (wield, being hit, identify), exactly where C's player_learn_rune
497
+ * tail-calls it (L1373).
498
+ */
499
+ export function updatePlayerObjectKnowledge(state: GameState): void {
500
+ const flavor = state.flavorKnown;
501
+ if (!flavor) return; // worldless harness: no flavour store to mutate.
502
+ const flavorDeps = state.flavorAwareDeps ?? NOOP_FLAVOR_AWARE_DEPS;
503
+ const env = state.runeEnv;
504
+ const p = state.actor.player;
505
+ const runes = buildRuneList(env);
506
+ const nonCurse = runes.filter((r) => r.variety !== "curse");
507
+
508
+ const know = (obj: GameObject, report: (name: string) => void): void => {
509
+ /* player_know_object early return (L1033): the unassessed get no ID. */
510
+ if ((obj.notice & OBJ_NOTICE.ASSESSED) === 0) return;
511
+
512
+ /* seen defaults true (L1025); a first name/ego reveal sets it false. */
513
+ let seen = true;
514
+
515
+ /* Ego branch (L1156-1161): a newly-known ego reports unless its ego was
516
+ * already everseen. */
517
+ if (obj.ego && playerKnowsEgo(p, obj.ego, obj, env)) {
518
+ seen = state.everseen ? state.everseen.egoSeen(obj.ego) : true;
519
+ }
520
+
521
+ /* Jewelry / special-artifact awareness (L1163-1175). playerKnowObjectAwareness
522
+ * fires object_flavor_aware for both; the `seen` reads below mirror its
523
+ * conditions (from the same objectRunesKnown / kidx tests) purely to decide
524
+ * whether to print the report. */
525
+ if (tvalIsJewelry(obj.tval)) {
526
+ if (objectRunesKnown(p, env, obj, nonCurse)) {
527
+ seen = obj.artifact
528
+ ? true
529
+ : state.everseen
530
+ ? state.everseen.kindSeen(obj.kind)
531
+ : true;
532
+ }
533
+ } else if (obj.kind.kidx >= flavor.ordinaryKindMax) {
534
+ seen = true; // L1173: special artifacts never report from this branch.
535
+ }
536
+
537
+ /* The awareness mutation itself (idempotent across repeated sweeps). */
538
+ playerKnowObjectAwareness(p, env, obj, runes, flavor, flavorDeps);
539
+
540
+ /* Report on new stuff (L1184-1198). describeObject marks kind/ego everseen
541
+ * (obj-desc.c L633-637), exactly as C's object_desc does at L1190. */
542
+ if (!seen) report(describeObject(state, obj, ODESC.PREFIX | ODESC.FULL));
543
+ };
544
+
545
+ /* Level objects first (L1223-1226: cave->objects), matching C's order so a
546
+ * floor instance wins the first-reveal report over a carried one of the same
547
+ * (now-everseen) kind. */
548
+ for (const pile of state.floor.values()) {
549
+ for (const obj of pile) {
550
+ /* Every level object becomes known, but the REPORT is gated on
551
+ * square_holds_object(cave, p->grid, obj) (L1193) - only what is under the
552
+ * player's feet is announced. The port used to announce every pile on the
553
+ * level, so learning one rune could name objects across the whole floor. */
554
+ know(obj, (name) => {
555
+ if (squareHoldsObject(state, state.actor.grid, obj)) {
556
+ state.msg?.(`On the ground: ${name}.`);
557
+ }
558
+ });
559
+ }
560
+ }
561
+
562
+ /* Player objects (L1229 walks p->gear; the port splits it into equipment +
563
+ * pack). */
564
+ const equip = p.equipment;
565
+ for (let slot = 0; slot < equip.length; slot++) {
566
+ const handle = equip[slot] ?? 0;
567
+ if (!handle) continue;
568
+ const obj = state.gear.store.get(handle);
569
+ if (!obj) continue;
570
+ const label = GEAR_LABELS[slot] ?? ""; // equipped_item_slot -> label (L452).
571
+ know(obj, (name) => state.msg?.(`You have ${name} (${label}).`));
572
+ }
573
+ for (const handle of state.gear.pack) {
574
+ const obj = state.gear.store.get(handle);
575
+ if (!obj) continue;
576
+ const label = gearPackLabel(state, handle);
577
+ know(obj, (name) => state.msg?.(`You have ${name} (${label}).`));
578
+ }
579
+
580
+ /* autoinscribe_ground + autoinscribe_pack (obj-knowledge.c:1245-1247): the
581
+ * tail of update_player_object_knowledge. This is where learning a rune
582
+ * stamps its autoinscription onto everything the player can already see or
583
+ * carry, and where a newly-aware kind's note lands. Reached through the
584
+ * state seam because obj-cmd.ts imports this module. */
585
+ state.autoinscribeAll?.();
586
+ }
587
+
588
+ /**
589
+ * square_sense_pile (reduced): become aware that something matching is
590
+ * here without learning what (the null-glyph marker), keeping an exact
591
+ * memory if one exists; forget stale memories like squareKnowPile.
592
+ */
593
+ export function squareSensePile(
594
+ state: GameState,
595
+ grid: Loc,
596
+ pred?: (obj: GameObject) => boolean,
597
+ ): void {
598
+ const idx = gi(state, grid);
599
+ const head = pileHead(state, grid, pred);
600
+ if (head) {
601
+ const existing = state.known.objects.get(idx);
602
+ if (!existing || existing.ch === null) {
603
+ state.known.objects.set(idx, { ch: null, attr: "" });
604
+ }
605
+ } else if (!pileHead(state, grid)) {
606
+ state.known.objects.delete(idx);
607
+ }
608
+ }
609
+
610
+ /* forgetMap (a whole-map "forget everything + wipe DTRAP" pass) was removed:
611
+ * 4.2.6 has no such function. It existed only to back wiz_dark, and wiz_dark
612
+ * (cave-map.c:490-546) does the OPPOSITE - it memorizes terrain exactly as
613
+ * wiz_light does and only perma-darkens the grids. See game/effect-terrain.ts
614
+ * wizLightLevel. */
615
+
616
+ /** OPT(player, disturb_near): shipped default true (options.c). */
617
+ function disturbNear(state: GameState): boolean {
618
+ return state.options?.get("disturb_near") ?? true;
619
+ }
620
+
621
+ /**
622
+ * update_mon (mon-util.c): recompute a single monster's visibility. When
623
+ * `full`, recompute its distance to the player (mon->cdis); otherwise use the
624
+ * stored one. Sets MFLAG_VISIBLE / MFLAG_VIEW from telepathy, infravision,
625
+ * see-invisible and illumination, learns the associated lore flags, and
626
+ * disturbs the player on appearance / disappearance. Draws no RNG.
627
+ *
628
+ * The player's derived flags (OF_TELEPATHY / OF_SEE_INVIS) and see_infra come
629
+ * from the last calc_bonuses (state.playerState); the blind check reads
630
+ * player->timed[TMD_BLIND] directly. update_mon only READS MFLAG_MARK - the
631
+ * MARK / SHOW detection-fade lives in tickMonsterMarks.
632
+ */
633
+ export function updateMon(
634
+ state: GameState,
635
+ mon: Monster,
636
+ full: boolean,
637
+ ): void {
638
+ const c = state.chunk;
639
+ const lore = getLore(state.lore, mon.race);
640
+
641
+ /* If still generating the level, measure distances from the middle
642
+ * (character_dungeon); a live refresh always uses the player's grid. */
643
+ const pgrid: Loc = state.playing
644
+ ? state.actor.grid
645
+ : loc(Math.trunc(c.width / 2), Math.trunc(c.height / 2));
646
+
647
+ /* Seen at all. */
648
+ let flag = false;
649
+ /* Seen by vision. */
650
+ let easy = false;
651
+
652
+ /* ESP permitted, see-invisible and infravision come from the derived
653
+ * player state (racial / class innate flags, worn equipment, and the timed
654
+ * player_flags_timed / see_infra bumps all flow through calc_bonuses). With
655
+ * no derived state (worldless harness) fall back to a bare character: no OF
656
+ * flags, racial infravision only. */
657
+ const ps = state.playerState;
658
+ let telepathyOk = ps ? ps.flags.has(OF.TELEPATHY) : false;
659
+ const seeInvis = ps ? ps.flags.has(OF.SEE_INVIS) : false;
660
+ const seeInfra = ps ? ps.seeInfra : state.actor.player.race.infravision;
661
+
662
+ /* Compute distance, or just use the current one. */
663
+ let d: number;
664
+ if (full) {
665
+ const dy = Math.abs(pgrid.y - mon.grid.y);
666
+ const dx = Math.abs(pgrid.x - mon.grid.x);
667
+ d = dy > dx ? dy + (dx >> 1) : dx + (dy >> 1);
668
+ if (d > 255) d = 255;
669
+ mon.cdis = d;
670
+ } else {
671
+ d = mon.cdis;
672
+ }
673
+
674
+ /* Detected (read-only: the MARK / SHOW fade belongs to tickMonsterMarks). */
675
+ if (mon.mflag.has(MFLAG.MARK)) flag = true;
676
+
677
+ /* Check if telepathy works here. */
678
+ if (squareIsNoEsp(c, mon.grid) || squareIsNoEsp(c, pgrid)) {
679
+ telepathyOk = false;
680
+ }
681
+
682
+ /* Nearby. */
683
+ if (d <= state.z.maxSight) {
684
+ /* Basic telepathy. */
685
+ if (telepathyOk && monsterIsEspDetectable(mon)) {
686
+ flag = true;
687
+ /* Check for LOS so that MFLAG_VIEW is set later. */
688
+ if (squareIsView(c, mon.grid)) easy = true;
689
+ }
690
+
691
+ /* Normal line of sight and player is not blind. */
692
+ if (squareIsView(c, mon.grid) && !state.actor.player.timed[TMD.BLIND]) {
693
+ /* Use "infravision". */
694
+ if (d <= seeInfra) {
695
+ /* Learn about warm / cold blood. */
696
+ lore.flags.on(RF.COLD_BLOOD);
697
+ if (!mon.race.flags.has(RF.COLD_BLOOD)) {
698
+ easy = flag = true;
699
+ }
700
+ }
701
+
702
+ /* Use illumination. */
703
+ if (squareIsSeen(c, mon.grid)) {
704
+ /* Learn about invisibility. */
705
+ lore.flags.on(RF.INVISIBLE);
706
+ if (monsterIsInvisible(mon)) {
707
+ /* See invisible. */
708
+ if (seeInvis) easy = flag = true;
709
+ } else {
710
+ easy = flag = true;
711
+ }
712
+ }
713
+
714
+ /* path_analyse (learn intervening-square terrain): DEFERRED. */
715
+ }
716
+ }
717
+
718
+ /* If a mimic looks like an ignored item, it's not seen (mon-util.c L394):
719
+ * if (monster_is_mimicking(mon) && ignore_item_ok(player, obj))
720
+ * easy = flag = false;
721
+ * mon.mimickedObj is always 0 until mimic placement is generated, so the
722
+ * guard never fires; resolving the handle to a GameObject is DEFERRED with
723
+ * that work. */
724
+
725
+ /* Is the monster now visible? */
726
+ if (flag) {
727
+ /* Learn about the monster's mind. */
728
+ if (telepathyOk) {
729
+ lore.flags.on(RF.EMPTY_MIND);
730
+ lore.flags.on(RF.WEIRD_MIND);
731
+ lore.flags.on(RF.SMART);
732
+ lore.flags.on(RF.STUPID);
733
+ }
734
+
735
+ /* It was previously unseen. */
736
+ if (!monsterIsVisible(mon)) {
737
+ mon.mflag.on(MFLAG.VISIBLE);
738
+ /* square_light_spot / PR_HEALTH / PR_MONLIST are presentation (#25). */
739
+ /* Count "fresh" sightings (capped at SHRT_MAX). */
740
+ loreCountU16(lore, "sights");
741
+ }
742
+ } else if (monsterIsVisible(mon)) {
743
+ /* Not visible but was previously seen. With mimickedObj always 0 the
744
+ * mimic caveat (!mon->mimicked_obj || ignore_item_ok) always clears. */
745
+ if (mon.mimickedObj === 0) {
746
+ mon.mflag.off(MFLAG.VISIBLE);
747
+ }
748
+ }
749
+
750
+ /* Is the monster now easily visible? */
751
+ if (easy) {
752
+ if (!monsterIsInView(mon)) {
753
+ mon.mflag.on(MFLAG.VIEW);
754
+ /* Disturb on appearance. */
755
+ if (disturbNear(state)) disturb(state);
756
+ }
757
+ } else {
758
+ if (monsterIsInView(mon)) {
759
+ mon.mflag.off(MFLAG.VIEW);
760
+ /* Disturb on disappearance (but not for a camouflaged monster). */
761
+ if (disturbNear(state) && !monsterIsCamouflaged(mon)) disturb(state);
762
+ }
763
+ }
764
+ }
765
+
766
+ /**
767
+ * become_aware (mon-util.c L711): reveal a camouflaged mimic. Clears
768
+ * MFLAG_CAMOUFLAGE and, when the race has RF_UNAWARE, learns that flag into
769
+ * its lore. If the monster was mimicking a floor object, names it (ODESC_BASE)
770
+ * in a message when its square is seen, breaks the mimicry link on both
771
+ * sides, removes the fake item from the floor, and refreshes the monster's
772
+ * own visibility now that mimicry no longer masks it (update_mon). A no-op
773
+ * monster that is not camouflaged. Draws no RNG.
774
+ *
775
+ * Object-mimic placement is wired for live-placed (summoned / bred) mimics
776
+ * via game/mon-place.ts monCreateMimickedObject, which links mon.mimickedObj
777
+ * and the object's mimickingMIdx back-reference at the monster's grid; the
778
+ * object branch below fires for those and for any hand-built Monster/
779
+ * GameObject pair in tests. (SEAM: generation-spawned mimics still need the
780
+ * handoff to call monCreateMimickedObject - see that function's docstring.)
781
+ *
782
+ * RF_MIMIC_INV's "give the monster a copy of the object before deleting it"
783
+ * (mon-util.c L740-758) is now ported via obj/object.ts objectCopy (memcpy, no
784
+ * RNG); only the known twin is DEFERRED with the knowledge subsystem. The
785
+ * upkeep/redraw bits (PU_UPDATE_VIEW | PU_MONSTERS, PR_MONLIST | PR_ITEMLIST,
786
+ * square_note_spot, square_light_spot) are presentation (#25), matching the
787
+ * redraw deferral already noted for updateMon above.
788
+ */
789
+ export function becomeAware(state: GameState, mon: Monster): void {
790
+ if (!monsterIsCamouflaged(mon)) return;
791
+ mon.mflag.off(MFLAG.CAMOUFLAGE);
792
+
793
+ const lore = getLore(state.lore, mon.race);
794
+ if (mon.race.flags.has(RF.UNAWARE)) lore.flags.on(RF.UNAWARE);
795
+
796
+ if (mon.mimickedObj !== 0) {
797
+ const obj = floorPile(state, mon.grid).find(
798
+ (o) => o.mimickingMIdx === mon.midx,
799
+ );
800
+ if (obj && obj.grid) {
801
+ const name = describeObject(state, obj, ODESC.BASE);
802
+ if (squareIsSeen(state.chunk, obj.grid)) {
803
+ state.msg?.(`The ${name} was really a monster!`);
804
+ }
805
+
806
+ /* Clear the mimicry. */
807
+ obj.mimickingMIdx = 0;
808
+ mon.mimickedObj = 0;
809
+
810
+ /* Give a copy of the object to the monster if appropriate
811
+ * (mon-util.c L740-758). object_copy is a memcpy (draws no RNG); the
812
+ * known twin (given->known) is DEFERRED with the knowledge subsystem
813
+ * (obj/object.ts module docs), so only the base object is copied. The
814
+ * port's monsterCarry always succeeds (it prepends to heldObj), so the
815
+ * upstream carry-failed delete branch (L751-757) is unreachable and
816
+ * omitted. */
817
+ if (mon.race.flags.has(RF.MIMIC_INV)) {
818
+ const given = objectCopy(obj);
819
+ monsterCarry(mon.heldObj, given, mon.midx);
820
+ }
821
+
822
+ /* Delete the mimicked object; lighting/noting done via update_mon. */
823
+ floorExcise(state, obj.grid, obj);
824
+
825
+ /* Since mimicry affects visibility, update that. */
826
+ updateMon(state, mon, false);
827
+ }
828
+ }
829
+ }
830
+
831
+ /**
832
+ * move_mimicked_object (mon-util.c L620-650): move the fake floor object with
833
+ * a camouflaged monster swap. The copied object keeps its mimic back-link;
834
+ * if the destination cannot carry it, RF_MIMIC_INV gives it to the monster.
835
+ * This operation is presentation/RNG-free.
836
+ */
837
+ export function moveMimickedObject(
838
+ state: GameState,
839
+ mon: Monster,
840
+ from: Loc,
841
+ to: Loc,
842
+ ): void {
843
+ if (mon.mimickedObj === 0) return;
844
+ const obj = floorPile(state, from).find((o) => o.mimickingMIdx === mon.midx);
845
+ if (!obj) return;
846
+
847
+ const moved = objectCopy(obj);
848
+ if (!floorCarry(state, to, moved)) {
849
+ if (mon.race.flags.has(RF.MIMIC_INV)) {
850
+ monsterCarry(mon.heldObj, moved, mon.midx);
851
+ }
852
+ }
853
+ floorExcise(state, from, obj);
854
+ if (!floorPile(state, to).some((o) => o.mimickingMIdx === mon.midx)) {
855
+ mon.mimickedObj = 0;
856
+ }
857
+ }
858
+
859
+ /** update_monsters (mon-util.c): update every live (non-dead) monster. */
860
+ export function updateMonsters(state: GameState, full: boolean): void {
861
+ for (let i = 1; i < state.monsters.length; i++) {
862
+ const mon = state.monsters[i];
863
+ if (!mon) continue;
864
+ updateMon(state, mon, full);
865
+ }
866
+ }
867
+
868
+ /**
869
+ * The five player fields updateView reads, taken off a live GameState.
870
+ *
871
+ * One definition because there were two, and they agreed on the wrong thing.
872
+ * `level` is `p->lev` (cave-view.c:778, the UNLIGHT view radius
873
+ * `2 + p->lev / 6 - cur_light`), and both the web shell and the MCP session were
874
+ * passing `chunk.depth` - the dungeon depth. Only an UNLIGHT player carrying no
875
+ * light can see the difference, which is exactly the kind of field that stays
876
+ * wrong for a year in two copies and is right once in one.
877
+ */
878
+ export function viewerStateOf(state: GameState): ViewerState {
879
+ const actor = state.actor;
880
+ return {
881
+ grid: actor.grid,
882
+ curLight: actor.light,
883
+ blind: (actor.player.timed[TMD.BLIND] ?? 0) > 0,
884
+ hasUnlight: actor.unlight,
885
+ level: actor.player.lev,
886
+ };
887
+ }
888
+
889
+ /**
890
+ * note_spot pass: memorize every currently seen grid with its floor pile,
891
+ * then refresh all monster visibility via update_mon.
892
+ *
893
+ * Called after every updateView. Upstream, movement sets PU_DISTANCE and
894
+ * update() runs update_monsters(TRUE) - cdis and visibility recompute in one
895
+ * pass - while a view-only change runs update_monsters(FALSE). Since cdis is
896
+ * purely geometric (idempotent when nothing moved, correct when the player
897
+ * did), noteSpots recomputes it here (full=true) so the d <= max_sight and
898
+ * d <= see_infra gates never read a stale distance after a step.
899
+ */
900
+ export function noteSpots(state: GameState): void {
901
+ const c = state.chunk;
902
+
903
+ /*
904
+ * Blind forget of the current non-passable remembered square
905
+ * (cave-view.c:894-897): when blind and the player grid is known as
906
+ * impassable in map memory, forget it. Lives here (not pure view.ts)
907
+ * because it mutates KnownMap; called immediately after every updateView.
908
+ */
909
+ if ((state.actor.player.timed[TMD.BLIND] ?? 0) > 0) {
910
+ const pgrid = state.actor.grid;
911
+ if (squareIsKnown(state, pgrid)) {
912
+ const feat = knownFeat(state, pgrid);
913
+ if (feat >= 0 && !featIsPassable(c.features, feat)) {
914
+ squareForget(state, pgrid);
915
+ }
916
+ }
917
+ }
918
+
919
+ for (let y = 0; y < c.height; y++) {
920
+ for (let x = 0; x < c.width; x++) {
921
+ const grid = { x, y };
922
+ if (!squareIsSeen(c, grid)) continue;
923
+ squareMemorize(state, grid);
924
+ squareKnowPile(state, grid);
925
+ /* Notice secret traps on the newly-seen grid (cave-map.c square_note_spot
926
+ * L236-238 / cave-view.c update_one L840-842). */
927
+ noteSpotRevealTrap(state, grid);
928
+ }
929
+ }
930
+
931
+ updateMonsters(state, true);
932
+ }
933
+
934
+ /**
935
+ * The MFLAG_NICE / MFLAG_MARK / MFLAG_SHOW housekeeping process_world runs at
936
+ * the end of a player turn (game-world.c:882-908): clear NICE; where a monster
937
+ * is MARKed but no longer SHOWn, drop the mark and re-run update_mon; then
938
+ * clear every SHOW. This keeps a freshly detected monster displayed for one
939
+ * more refresh before fading. Interim home until the world-clock / process_world
940
+ * port absorbs it (the NICE clear must be preserved when it does).
941
+ */
942
+ export function tickMonsterMarks(state: GameState): void {
943
+ /* Clear NICE flag, and show marked monsters. */
944
+ for (let i = 1; i < state.monsters.length; i++) {
945
+ const mon = state.monsters[i];
946
+ if (!mon) continue;
947
+ mon.mflag.off(MFLAG.NICE);
948
+ if (mon.mflag.has(MFLAG.MARK) && !mon.mflag.has(MFLAG.SHOW)) {
949
+ mon.mflag.off(MFLAG.MARK);
950
+ updateMon(state, mon, false);
951
+ }
952
+ }
953
+
954
+ /* Clear SHOW flag. */
955
+ for (let i = 1; i < state.monsters.length; i++) {
956
+ const mon = state.monsters[i];
957
+ if (!mon) continue;
958
+ mon.mflag.off(MFLAG.SHOW);
959
+ }
960
+ }