@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,838 @@
1
+ /**
2
+ * The DATA half of the sidebar and status line, ported from the display
3
+ * functions of reference/src/ui-display.c (Angband 4.2.6).
4
+ *
5
+ * Upstream each prt_* handler both COMPUTES a coloured string and DRAWS it
6
+ * with Term_* at a fixed row/column. This module ports only the computation:
7
+ * for every sidebar field and status-line indicator it returns the ordered
8
+ * list of coloured text runs. The terminal draw half - row/column positioning,
9
+ * the "%-11s" / "%-13s" field padding of prt_speed / prt_depth, and the
10
+ * screen-size priority culling of update_sidebar (L844) - stays with each
11
+ * front-end shell.
12
+ *
13
+ * The status-line handlers return a width (col += return in
14
+ * update_statusline_aux) that already includes exactly ONE trailing gap column
15
+ * after each active segment; an idle prt_state still reserves one column. Each
16
+ * status builder below bakes that single trailing gap into its runs text, so a
17
+ * shell renders the segments back-to-back with NO external gap and reproduces
18
+ * the reference layout exactly.
19
+ *
20
+ * sidebarModel returns the 18 real fields of side_handlers[] (L810, the four
21
+ * NULL spacer rows are not fields), in table order. statusLineModel returns
22
+ * the 11 entries of status_handlers[] (L1296) in table order. A field or
23
+ * indicator that upstream would draw as blank / return 0 for is represented by
24
+ * an EMPTY runs array rather than being dropped, so the returned order always
25
+ * matches the handler tables and a shell simply skips the empty ones.
26
+ *
27
+ * Seams for the struct player / world members the port does not carry on
28
+ * GameState arrive through DisplayDeps; each has a sensible default and is
29
+ * listed in parity/ledger/ui-display.yaml.
30
+ */
31
+
32
+ import {
33
+ COLOUR_BLUE,
34
+ COLOUR_DARK,
35
+ COLOUR_GREEN,
36
+ COLOUR_L_BLUE,
37
+ COLOUR_L_DARK,
38
+ COLOUR_L_GREEN,
39
+ COLOUR_L_PURPLE,
40
+ COLOUR_L_RED,
41
+ COLOUR_L_TEAL,
42
+ COLOUR_L_UMBER,
43
+ COLOUR_ORANGE,
44
+ COLOUR_PURPLE,
45
+ COLOUR_RED,
46
+ COLOUR_UMBER,
47
+ COLOUR_VIOLET,
48
+ COLOUR_WHITE,
49
+ COLOUR_YELLOW,
50
+ colorCharToAttr,
51
+ } from "../color.js";
52
+ import { MON_TMD, SQUARE, STAT, TMD } from "../generated/index.js";
53
+ import { nextGrid } from "../world/view.js";
54
+ import { EXTRACT_ENERGY } from "../mon/monster.js";
55
+ import { monsterIsVisible } from "../mon/predicate.js";
56
+ import { PY_MAX_LEVEL, STAT_MAX, TMD_MAX } from "../player/types.js";
57
+ import type { TimedEffect } from "../player/types.js";
58
+ import { modifyStatValue, player_exp, playerHpAttr, playerSpAttr } from "../player/calcs.js";
59
+ import type { Loc } from "../loc.js";
60
+ import type { Player } from "../player/player.js";
61
+ import type { Monster } from "../mon/monster.js";
62
+ import type { GameObject } from "../obj/object.js";
63
+ import type { GameState } from "./context.js";
64
+ import { playerIsResting, playerRestingCount } from "./context.js";
65
+
66
+ /** One coloured run of text; color is a COLOUR_* value (see color.ts). */
67
+ export interface DisplayRun {
68
+ text: string;
69
+ color: number;
70
+ }
71
+
72
+ /** One computed sidebar field: its handler key and its ordered runs. */
73
+ export interface SidebarField {
74
+ /** The side_handlers[] prt_* name minus the "prt_" prefix. */
75
+ key: string;
76
+ runs: DisplayRun[];
77
+ }
78
+
79
+ /** One computed status-line indicator: its handler key and its runs. */
80
+ export interface StatusIndicator {
81
+ /** The status_handlers[] prt_* name minus the "prt_" prefix. */
82
+ key: string;
83
+ runs: DisplayRun[];
84
+ }
85
+
86
+ /**
87
+ * The struct player / world / option members the display reads that the port
88
+ * does not carry on GameState, Player or Chunk. Every field is optional and
89
+ * defaults (below, in resolveDeps) to the value that reproduces a freshly born,
90
+ * headless character; see parity/ledger/ui-display.yaml.
91
+ */
92
+ export interface DisplayDeps {
93
+ /**
94
+ * op_ptr->hitpoint_warn (0..9), read by player_hp_attr / player_sp_attr.
95
+ * Default 3 (options.c DEFAULT_HITPOINT_WARN / game DEFAULT_HITPOINT_WARN).
96
+ */
97
+ hitpointWarn?: number;
98
+ /** OPT(player, effective_speed): show speed as a multiplier. Default false. */
99
+ effectiveSpeed?: boolean;
100
+ /** OPT(player, birth_feelings): show level feelings. Default true. */
101
+ birthFeelings?: boolean;
102
+ /** z_info->feeling_need (constants.txt world:feeling-need). Default 10. */
103
+ feelingNeed?: number;
104
+ /**
105
+ * timed_effects[] indexed by TMD_* (player/bind.ts). Each entry's grades
106
+ * array is walked by prt_tmd. Default [] (no timed effect is ever named).
107
+ */
108
+ timedEffects?: readonly TimedEffect[];
109
+ /**
110
+ * player->state.stat_use[STAT_MAX]: the current modified stats prt_stat
111
+ * shows. Default derived from Player.statCur with the race + class modifiers
112
+ * only (equipment / timed contributions are DEFERRED - no stored
113
+ * player_state on GameState).
114
+ */
115
+ statUse?: readonly number[];
116
+ /**
117
+ * player->state.num_moves (calc_bonuses), read by prt_moves. Default 0
118
+ * (one move, no display) - PlayerCombatState omits num_moves.
119
+ */
120
+ numMoves?: number;
121
+ /**
122
+ * player->upkeep->health_who: the tracked monster, or null. Default
123
+ * state.healthWho.
124
+ */
125
+ healthWho?: Monster | null;
126
+ /**
127
+ * player->unignoring (prt_unignore, L1282). Default false - struct player's
128
+ * unignoring flag is not carried on the port's Player / upkeep.
129
+ */
130
+ unignoring?: boolean;
131
+ /**
132
+ * player_is_resting(player) (player-util.c L1397). Defaults from
133
+ * state.resting, so prt_state's "Rest" field appears without every shell
134
+ * having to remember to pass it - which is how it came to appear nowhere.
135
+ */
136
+ isResting?: boolean;
137
+ /** player_resting_count(player) = upkeep->resting (L1406). Default state.resting.count. */
138
+ restingCount?: number;
139
+ /** cmd_get_nrepeats() (cmd-core.c). Default 0. */
140
+ nRepeats?: number;
141
+ /**
142
+ * player->wizard: the wizard-mode flag (fmt_title, L178). Default false -
143
+ * struct player's wizard/noscore members are UI/debug-only, not on Player.
144
+ */
145
+ wizard?: boolean;
146
+ /** player->total_winner (fmt_title, L180). Default false. */
147
+ totalWinner?: boolean;
148
+ /**
149
+ * player_book_has_unlearned_spells(player) (prt_study, L1235). Default true;
150
+ * the spell-book carry check needs the pack, which is not on GameState.
151
+ */
152
+ bookHasUnlearnedSpells?: boolean;
153
+ /**
154
+ * object_attr(obj): the display colour of a worn item (prt_equippy, L286).
155
+ * Default colorCharToAttr(obj.kind.dAttr) - the flavour-aware / pref x_attr
156
+ * override is a presentation concern each shell supplies.
157
+ */
158
+ objectAttr?: (obj: GameObject) => number;
159
+ /** object_char(obj): the display glyph of a worn item. Default obj.kind.dChar. */
160
+ objectChar?: (obj: GameObject) => string;
161
+ }
162
+
163
+ /** DisplayDeps with every default filled in. */
164
+ interface ResolvedDeps {
165
+ hitpointWarn: number;
166
+ effectiveSpeed: boolean;
167
+ birthFeelings: boolean;
168
+ feelingNeed: number;
169
+ timedEffects: readonly TimedEffect[];
170
+ statUse: readonly number[];
171
+ numMoves: number;
172
+ healthWho: Monster | null;
173
+ unignoring: boolean;
174
+ isResting: boolean;
175
+ restingCount: number;
176
+ nRepeats: number;
177
+ wizard: boolean;
178
+ totalWinner: boolean;
179
+ bookHasUnlearnedSpells: boolean;
180
+ objectAttr: (obj: GameObject) => number;
181
+ objectChar: (obj: GameObject) => string;
182
+ }
183
+
184
+ /**
185
+ * player->state.stat_use fallback: apply only the race + class stat modifiers
186
+ * to stat_cur (modify_stat_value), matching calc_bonuses when the character
187
+ * wears nothing and carries no timed effect.
188
+ */
189
+ function defaultStatUse(player: Player): number[] {
190
+ const out = new Array<number>(STAT_MAX).fill(0);
191
+ for (let i = 0; i < STAT_MAX; i++) {
192
+ const add = (player.race.statAdj[i] ?? 0) + (player.cls.statAdj[i] ?? 0);
193
+ out[i] = modifyStatValue(player.statCur[i] ?? 0, add);
194
+ }
195
+ return out;
196
+ }
197
+
198
+ function resolveDeps(state: GameState, deps: DisplayDeps): ResolvedDeps {
199
+ const player = state.actor.player;
200
+ return {
201
+ hitpointWarn: deps.hitpointWarn ?? state.options?.hitpointWarn ?? 3,
202
+ effectiveSpeed:
203
+ deps.effectiveSpeed ?? state.options?.get("effective_speed") ?? false,
204
+ birthFeelings:
205
+ deps.birthFeelings ?? state.options?.get("birth_feelings") ?? true,
206
+ feelingNeed: deps.feelingNeed ?? 10,
207
+ timedEffects: deps.timedEffects ?? [],
208
+ statUse: deps.statUse ?? defaultStatUse(player),
209
+ numMoves: deps.numMoves ?? 0,
210
+ healthWho: deps.healthWho ?? state.healthWho ?? null,
211
+ unignoring: deps.unignoring ?? false,
212
+ isResting: deps.isResting ?? playerIsResting(state),
213
+ restingCount: deps.restingCount ?? playerRestingCount(state),
214
+ nRepeats: deps.nRepeats ?? 0,
215
+ wizard: deps.wizard ?? false,
216
+ totalWinner: deps.totalWinner ?? false,
217
+ bookHasUnlearnedSpells: deps.bookHasUnlearnedSpells ?? true,
218
+ objectAttr:
219
+ deps.objectAttr ?? ((obj) => colorCharToAttr(obj.kind.dAttr)),
220
+ objectChar: deps.objectChar ?? ((obj) => obj.kind.dChar),
221
+ };
222
+ }
223
+
224
+ /* ------------------------------------------------------------------ */
225
+ /* Small formatting helpers */
226
+ /* ------------------------------------------------------------------ */
227
+
228
+ /** printf "%<width>d": right-justify a base-ten integer, space-padded. */
229
+ function rjust(value: number, width: number): string {
230
+ return String(value).padStart(width, " ");
231
+ }
232
+
233
+ /** my_strcap: capitalise the first character. */
234
+ function strcap(s: string): string {
235
+ if (!s) return s;
236
+ return s.charAt(0).toUpperCase() + s.slice(1);
237
+ }
238
+
239
+ /**
240
+ * cnv_stat (ui-display.c L115): a modified stat value as a six-char, right-
241
+ * justified string. Values over 18 use the "18/NN" encoding.
242
+ */
243
+ export function cnvStat(val: number): string {
244
+ if (val > 18) {
245
+ const bonus = val - 18;
246
+ if (bonus >= 220) return "18/***";
247
+ if (bonus >= 100) return `18/${String(bonus).padStart(3, "0")}`;
248
+ return ` 18/${String(bonus).padStart(2, "0")}`;
249
+ }
250
+ return ` ${rjust(val, 2)}`;
251
+ }
252
+
253
+ /**
254
+ * fmt_title (ui-display.c L173), short_mode == false: the character title -
255
+ * wizard, winner, shape name, or the class level title. Returns "" only if a
256
+ * shape has an empty name (never in stock data).
257
+ */
258
+ export function fmtTitle(player: Player, deps: ResolvedDeps): string {
259
+ if (deps.wizard) return "[=-WIZARD-=]";
260
+ if (deps.totalWinner || player.lev > PY_MAX_LEVEL) return "***WINNER***";
261
+ if (playerIsShapechanged(player)) return strcap(player.shape?.name ?? "");
262
+ const idx = Math.trunc((player.lev - 1) / 5);
263
+ return player.cls.titles[idx] ?? "";
264
+ }
265
+
266
+ /**
267
+ * player_is_shapechanged (player-util.c L1065): a non-"normal" shape.
268
+ *
269
+ * NOT exported - game/obj-cmd.ts already exports a GameState-taking copy of this
270
+ * same C function, and that is the one callers outside this module use. The two
271
+ * agree because effect-general.ts:868 normalizes the "normal" shape to null when
272
+ * it assigns, so `shape === null` is exactly `name === "normal"`; the extra name
273
+ * test here is what makes this copy safe if that invariant ever slips.
274
+ */
275
+ function playerIsShapechanged(player: Player): boolean {
276
+ return player.shape !== null && player.shape.name !== "normal";
277
+ }
278
+
279
+ /**
280
+ * fmt_depth (ui-display.c L519): "Town" at depth 0, else "<feet>' (L<depth>)".
281
+ * The port's current depth is the live chunk depth (upstream player->depth ==
282
+ * cave->depth).
283
+ */
284
+ export function fmtDepth(depth: number): string {
285
+ if (!depth) return "Town";
286
+ return `${depth * 50}' (L${depth})`;
287
+ }
288
+
289
+ /**
290
+ * prt_speed_aux (ui-display.c L475): the speed label ("Fast" / "Slow") and its
291
+ * colour, or an empty string at normal speed (110). With effectiveSpeed the
292
+ * "(%d.%dx)" multiplier form is used, otherwise the "(%+d)" delta form.
293
+ */
294
+ export function prtSpeedAux(
295
+ speed: number,
296
+ effectiveSpeed: boolean,
297
+ ): { text: string; color: number } {
298
+ let color = COLOUR_WHITE;
299
+ let type: string | null = null;
300
+ if (speed > 110) {
301
+ color = COLOUR_L_GREEN;
302
+ type = "Fast";
303
+ } else if (speed < 110) {
304
+ color = COLOUR_L_UMBER;
305
+ type = "Slow";
306
+ }
307
+ if (!type) return { text: "", color };
308
+ if (!effectiveSpeed) {
309
+ const delta = speed - 110;
310
+ return { text: `${type} (${delta >= 0 ? "+" : ""}${delta})`, color };
311
+ }
312
+ const norm = EXTRACT_ENERGY[110] as number;
313
+ const cur = EXTRACT_ENERGY[Math.min(Math.max(speed, 0), EXTRACT_ENERGY.length - 1)] as number;
314
+ const multiplier = Math.trunc((10 * cur) / norm);
315
+ const intMul = Math.trunc(multiplier / 10);
316
+ const decMul = multiplier % 10;
317
+ return { text: `${type} (${intMul}.${decMul}x)`, color };
318
+ }
319
+
320
+ /**
321
+ * monster_health_attr (ui-display.c L365): the colour of a tracked monster's
322
+ * health bar. `image` is whether the player is hallucinating (TMD_IMAGE).
323
+ */
324
+ export function monsterHealthAttr(mon: Monster | null, image: boolean): number {
325
+ if (!mon) return COLOUR_DARK;
326
+ if (!monsterIsVisible(mon) || mon.hp < 0 || image) return COLOUR_WHITE;
327
+
328
+ let attr = COLOUR_RED;
329
+ const pct = Math.trunc((100 * mon.hp) / mon.maxhp);
330
+ if (pct >= 10) attr = COLOUR_L_RED;
331
+ if (pct >= 25) attr = COLOUR_ORANGE;
332
+ if (pct >= 60) attr = COLOUR_YELLOW;
333
+ if (pct >= 100) attr = COLOUR_L_GREEN;
334
+ if (mon.mTimed[MON_TMD.FEAR]) attr = COLOUR_VIOLET;
335
+ if (mon.mTimed[MON_TMD.DISEN]) attr = COLOUR_L_UMBER;
336
+ if (mon.mTimed[MON_TMD.COMMAND]) attr = COLOUR_L_PURPLE;
337
+ if (mon.mTimed[MON_TMD.CONF]) attr = COLOUR_UMBER;
338
+ if (mon.mTimed[MON_TMD.STUN]) attr = COLOUR_L_BLUE;
339
+ if (mon.mTimed[MON_TMD.SLEEP]) attr = COLOUR_BLUE;
340
+ if (mon.mTimed[MON_TMD.HOLD]) attr = COLOUR_BLUE;
341
+ return attr;
342
+ }
343
+
344
+ /* ------------------------------------------------------------------ */
345
+ /* Sidebar (side_handlers[], ui-display.c L810) */
346
+ /* ------------------------------------------------------------------ */
347
+
348
+ /** stat_names[STAT_MAX] (ui-display.c L98). */
349
+ const STAT_NAMES = ["STR: ", "INT: ", "WIS: ", "DEX: ", "CON: "] as const;
350
+ /** stat_names_reduced[STAT_MAX] (ui-display.c L107). */
351
+ const STAT_NAMES_REDUCED = ["Str: ", "Int: ", "Wis: ", "Dex: ", "Con: "] as const;
352
+
353
+ /** prt_field text as a single COLOUR_L_BLUE run, or empty runs when blank. */
354
+ function field(text: string): DisplayRun[] {
355
+ return text ? [{ text, color: COLOUR_L_BLUE }] : [];
356
+ }
357
+
358
+ /**
359
+ * prt_stat (ui-display.c:153-171) for one stat index. The 5-char label is drawn
360
+ * at col 0, but the 6-char cnv_stat value is drawn at col+6 (c_put_str at
361
+ * col + 6, L161/L165) - there is a blank column at col 5. We reproduce that gap
362
+ * by padding the label run to width 6 so the following value run begins at col
363
+ * 6 exactly. The "!" natural-maximum indicator still overwrites index 3.
364
+ */
365
+ function statRuns(player: Player, stat: number, deps: ResolvedDeps): DisplayRun[] {
366
+ const cur = player.statCur[stat] ?? 0;
367
+ const max = player.statMax[stat] ?? 0;
368
+ const drained = cur < max;
369
+ let label = drained
370
+ ? STAT_NAMES_REDUCED[stat] ?? ""
371
+ : STAT_NAMES[stat] ?? "";
372
+ /* Natural maximum indicator: put_str("!", col + 3) overwrites the label's
373
+ fourth character (L169-170). */
374
+ if (max === 18 + 100) {
375
+ label = label.slice(0, 3) + "!" + label.slice(4);
376
+ }
377
+ const value = cnvStat(deps.statUse[stat] ?? 0);
378
+ return [
379
+ { text: label.padEnd(6), color: COLOUR_WHITE },
380
+ { text: value, color: drained ? COLOUR_YELLOW : COLOUR_L_GREEN },
381
+ ];
382
+ }
383
+
384
+ /** prt_level (ui-display.c L207). */
385
+ function levelRuns(player: Player): DisplayRun[] {
386
+ const value = rjust(player.lev, 6);
387
+ const atMax = player.lev >= player.maxLev;
388
+ return [
389
+ { text: atMax ? "LEVEL " : "Level ", color: COLOUR_WHITE },
390
+ { text: value, color: atMax ? COLOUR_L_GREEN : COLOUR_YELLOW },
391
+ ];
392
+ }
393
+
394
+ /**
395
+ * prt_exp (ui-display.c:226-250). The 3-char label ("EXP"/"NXT"/"Exp"/"Nxt") is
396
+ * drawn at col 0, but the 8-char "%8ld" value is drawn at col+4 (c_put_str at
397
+ * col + 4, L245/L248) - there is a blank column at col 3. We pad the label run
398
+ * to width 4 so the value run begins at col 4 exactly.
399
+ */
400
+ function expRuns(player: Player): DisplayRun[] {
401
+ const levMax = player.lev === PY_MAX_LEVEL;
402
+ let xp = player.exp;
403
+ if (!levMax) {
404
+ const base = player_exp[player.lev - 1] ?? 0;
405
+ xp = Math.trunc((base * player.expFactor) / 100) - player.exp;
406
+ }
407
+ const value = rjust(xp, 8);
408
+ const atMax = player.exp >= player.maxExp;
409
+ const label = levMax ? (atMax ? "EXP" : "Exp") : atMax ? "NXT" : "Nxt";
410
+ return [
411
+ { text: label.padEnd(4), color: COLOUR_WHITE },
412
+ { text: value, color: atMax ? COLOUR_L_GREEN : COLOUR_YELLOW },
413
+ ];
414
+ }
415
+
416
+ /** prt_gold (ui-display.c L256). */
417
+ function goldRuns(player: Player): DisplayRun[] {
418
+ return [
419
+ { text: "AU ", color: COLOUR_WHITE },
420
+ { text: rjust(player.au, 9), color: COLOUR_L_GREEN },
421
+ ];
422
+ }
423
+
424
+ /** prt_equippy (ui-display.c L269): one single-char run per body slot. */
425
+ function equippyRuns(state: GameState, deps: ResolvedDeps): DisplayRun[] {
426
+ const player = state.actor.player;
427
+ const runs: DisplayRun[] = [];
428
+ for (let i = 0; i < player.body.count; i++) {
429
+ const handle = player.equipment[i] ?? 0;
430
+ const obj = state.gear.store.get(handle) ?? null;
431
+ if (obj) {
432
+ runs.push({ text: deps.objectChar(obj), color: deps.objectAttr(obj) });
433
+ } else {
434
+ runs.push({ text: " ", color: COLOUR_WHITE });
435
+ }
436
+ }
437
+ return runs;
438
+ }
439
+
440
+ /** prt_ac (ui-display.c L301): "Cur AC " + (ac + to_a). */
441
+ function acRuns(state: GameState): DisplayRun[] {
442
+ const c = state.actor.combat;
443
+ return [
444
+ { text: "Cur AC ", color: COLOUR_WHITE },
445
+ { text: rjust(c.ac + c.toA, 5), color: COLOUR_L_GREEN },
446
+ ];
447
+ }
448
+
449
+ /** prt_hp (ui-display.c L314). */
450
+ function hpRuns(player: Player, deps: ResolvedDeps): DisplayRun[] {
451
+ return [
452
+ { text: "HP ", color: COLOUR_WHITE },
453
+ { text: rjust(player.chp, 4), color: playerHpAttr(player, deps.hitpointWarn) },
454
+ { text: "/", color: COLOUR_WHITE },
455
+ { text: rjust(player.mhp, 4), color: COLOUR_L_GREEN },
456
+ ];
457
+ }
458
+
459
+ /** prt_sp (ui-display.c L332): empty unless the class has mana at this level. */
460
+ function spRuns(player: Player, deps: ResolvedDeps): DisplayRun[] {
461
+ const magic = player.cls.magic;
462
+ if (!magic.totalSpells || player.lev < magic.spellFirst) {
463
+ /* An experience-drain clear (L344) leaves the field blank either way. */
464
+ return [];
465
+ }
466
+ return [
467
+ { text: "SP ", color: COLOUR_WHITE },
468
+ { text: rjust(player.csp, 4), color: playerSpAttr(player, deps.hitpointWarn) },
469
+ { text: "/", color: COLOUR_WHITE },
470
+ { text: rjust(player.msp, 4), color: COLOUR_L_GREEN },
471
+ ];
472
+ }
473
+
474
+ /** prt_health / prt_health_aux (ui-display.c L425). */
475
+ function healthRuns(player: Player, deps: ResolvedDeps): DisplayRun[] {
476
+ const mon = deps.healthWho;
477
+ if (!mon) return [];
478
+ const image = (player.timed[TMD.IMAGE] ?? 0) > 0;
479
+ const attr = monsterHealthAttr(mon, image);
480
+ if (!monsterIsVisible(mon) || image || mon.hp < 0) {
481
+ return [{ text: "[----------]", color: attr }];
482
+ }
483
+ const pct = Math.trunc((100 * mon.hp) / mon.maxhp);
484
+ const len = pct < 10 ? 1 : pct < 90 ? Math.trunc(pct / 10) + 1 : 10;
485
+ const runs: DisplayRun[] = [{ text: "[", color: COLOUR_WHITE }];
486
+ if (len > 0) runs.push({ text: "*".repeat(len), color: attr });
487
+ if (len < 10) runs.push({ text: "-".repeat(10 - len), color: COLOUR_WHITE });
488
+ runs.push({ text: "]", color: COLOUR_WHITE });
489
+ return runs;
490
+ }
491
+
492
+ /** prt_speed (ui-display.c L508). */
493
+ function speedRuns(state: GameState, deps: ResolvedDeps): DisplayRun[] {
494
+ const s = prtSpeedAux(state.actor.speed, deps.effectiveSpeed);
495
+ return s.text ? [{ text: s.text, color: s.color }] : [];
496
+ }
497
+
498
+ /** prt_depth (ui-display.c L532). */
499
+ function depthRuns(state: GameState): DisplayRun[] {
500
+ return [{ text: fmtDepth(state.chunk.depth), color: COLOUR_WHITE }];
501
+ }
502
+
503
+ /**
504
+ * sidebarModel: the 18 real side_handlers[] fields in table order (the four
505
+ * NULL spacer rows are not represented). update_sidebar's priority culling is
506
+ * a draw-half concern each shell applies.
507
+ */
508
+ export function sidebarModel(
509
+ state: GameState,
510
+ deps: DisplayDeps = {},
511
+ ): SidebarField[] {
512
+ const d = resolveDeps(state, deps);
513
+ const player = state.actor.player;
514
+ const shape = playerIsShapechanged(player);
515
+ return [
516
+ { key: "race", runs: field(shape ? "" : player.race.name) },
517
+ { key: "title", runs: field(fmtTitle(player, d)) },
518
+ { key: "class", runs: field(shape ? "" : player.cls.name) },
519
+ { key: "level", runs: levelRuns(player) },
520
+ { key: "exp", runs: expRuns(player) },
521
+ { key: "gold", runs: goldRuns(player) },
522
+ { key: "equippy", runs: equippyRuns(state, d) },
523
+ { key: "str", runs: statRuns(player, STAT.STR, d) },
524
+ { key: "int", runs: statRuns(player, STAT.INT, d) },
525
+ { key: "wis", runs: statRuns(player, STAT.WIS, d) },
526
+ { key: "dex", runs: statRuns(player, STAT.DEX, d) },
527
+ { key: "con", runs: statRuns(player, STAT.CON, d) },
528
+ { key: "ac", runs: acRuns(state) },
529
+ { key: "hp", runs: hpRuns(player, d) },
530
+ { key: "sp", runs: spRuns(player, d) },
531
+ { key: "health", runs: healthRuns(player, d) },
532
+ { key: "speed", runs: speedRuns(state, d) },
533
+ { key: "depth", runs: depthRuns(state) },
534
+ ];
535
+ }
536
+
537
+ /* ------------------------------------------------------------------ */
538
+ /* Status line (status_handlers[], ui-display.c L1296) */
539
+ /* ------------------------------------------------------------------ */
540
+
541
+ /** obj_feeling_color[] (ui-display.c L1019). */
542
+ const OBJ_FEELING_COLOR = [
543
+ COLOUR_WHITE,
544
+ COLOUR_L_PURPLE,
545
+ COLOUR_L_RED,
546
+ COLOUR_ORANGE,
547
+ COLOUR_YELLOW,
548
+ COLOUR_YELLOW,
549
+ COLOUR_L_GREEN,
550
+ COLOUR_L_GREEN,
551
+ COLOUR_L_GREEN,
552
+ COLOUR_L_BLUE,
553
+ COLOUR_L_BLUE,
554
+ ] as const;
555
+
556
+ /** mon_feeling_color[] (ui-display.c L1035). */
557
+ const MON_FEELING_COLOR = [
558
+ COLOUR_WHITE,
559
+ COLOUR_RED,
560
+ COLOUR_ORANGE,
561
+ COLOUR_ORANGE,
562
+ COLOUR_YELLOW,
563
+ COLOUR_YELLOW,
564
+ COLOUR_GREEN,
565
+ COLOUR_GREEN,
566
+ COLOUR_BLUE,
567
+ COLOUR_BLUE,
568
+ ] as const;
569
+
570
+ /**
571
+ * prt_level_feeling (ui-display.c:1053-1124). Draws "LF:<mon>-<obj>"; the
572
+ * reference return width is new_col - col == 3 + strlen(mon) + 1 + strlen(obj)
573
+ * + 1 (L1121-1123), i.e. the text plus exactly ONE trailing gap column. We bake
574
+ * that single gap in with a trailing " " run so the segment renders with no
575
+ * external gap.
576
+ */
577
+ function levelFeelingRuns(state: GameState, deps: ResolvedDeps): DisplayRun[] {
578
+ if (!deps.birthFeelings) return [];
579
+ const depth = state.chunk.depth;
580
+ if (!depth) return [];
581
+
582
+ const objFeeling = Math.trunc(state.chunk.feeling / 10);
583
+ const monFeeling = state.chunk.feeling - 10 * objFeeling;
584
+
585
+ let objStr: string;
586
+ let objColor: number;
587
+ if (state.chunk.feelingSquares < deps.feelingNeed) {
588
+ objStr = "?";
589
+ objColor = COLOUR_WHITE;
590
+ } else {
591
+ objColor = OBJ_FEELING_COLOR[objFeeling] ?? COLOUR_WHITE;
592
+ if (objFeeling === 0) objStr = "*";
593
+ else if (objFeeling === 1) objStr = "$";
594
+ else objStr = String(11 - objFeeling);
595
+ }
596
+
597
+ const monStr = monFeeling === 0 ? "?" : String(10 - monFeeling);
598
+ const monColor = MON_FEELING_COLOR[monFeeling] ?? COLOUR_WHITE;
599
+
600
+ return [
601
+ { text: "LF:", color: COLOUR_WHITE },
602
+ { text: monStr, color: monColor },
603
+ { text: "-", color: COLOUR_WHITE },
604
+ { text: objStr, color: objColor },
605
+ { text: " ", color: COLOUR_WHITE },
606
+ ];
607
+ }
608
+
609
+ /** prt_light (ui-display.c L1129). */
610
+ function lightRuns(state: GameState): DisplayRun[] {
611
+ const light = state.chunk.light(state.actor.grid);
612
+ return [
613
+ {
614
+ text: `Light ${light} `,
615
+ color: light > 0 ? COLOUR_YELLOW : COLOUR_PURPLE,
616
+ },
617
+ ];
618
+ }
619
+
620
+ /** prt_moves (ui-display.c L1145). */
621
+ function movesRuns(deps: ResolvedDeps): DisplayRun[] {
622
+ const i = deps.numMoves;
623
+ if (i > 0) return [{ text: `Moves +${i} `, color: COLOUR_L_TEAL }];
624
+ if (i < 0) return [{ text: `Moves -${Math.abs(i)} `, color: COLOUR_L_TEAL }];
625
+ return [];
626
+ }
627
+
628
+ /**
629
+ * prt_unignore (ui-display.c:1280-1289). Draws "Unignoring", returns
630
+ * strlen(str) + 1 (L1285) - the text width includes one trailing gap column. We
631
+ * bake that gap into the text ("Unignoring ").
632
+ */
633
+ function unignoreRuns(deps: ResolvedDeps): DisplayRun[] {
634
+ return deps.unignoring
635
+ ? [{ text: "Unignoring ", color: COLOUR_WHITE }]
636
+ : [];
637
+ }
638
+
639
+ /**
640
+ * prt_recall (ui-display.c:925-933). Draws "Recall", returns sizeof "Recall" ==
641
+ * 7 (L929) - the text width includes one trailing gap column. We bake that gap
642
+ * into the text ("Recall ").
643
+ */
644
+ function recallRuns(player: Player): DisplayRun[] {
645
+ return player.wordRecall
646
+ ? [{ text: "Recall ", color: COLOUR_WHITE }]
647
+ : [];
648
+ }
649
+
650
+ /**
651
+ * prt_descent (ui-display.c:939-947). Draws "Descent", returns sizeof "Descent"
652
+ * == 8 (L943) - the text width includes one trailing gap column. We bake that
653
+ * gap into the text ("Descent ").
654
+ */
655
+ function descentRuns(player: Player): DisplayRun[] {
656
+ return player.deepDescent
657
+ ? [{ text: "Descent ", color: COLOUR_WHITE }]
658
+ : [];
659
+ }
660
+
661
+ /** I2D: a decimal digit as its character (util.c). */
662
+ function i2d(n: number): string {
663
+ return String.fromCharCode("0".charCodeAt(0) + n);
664
+ }
665
+
666
+ /**
667
+ * prt_state (ui-display.c:957-1017): "Rest" plus a ten-char count field, or the
668
+ * repeat count. The rest field is always exactly ten characters wide. The
669
+ * reference returns strlen(text) + 1 (L1016) - the width always includes one
670
+ * trailing gap column, and when idle (text == "") it still returns 1, reserving
671
+ * a single blank column. We bake the gap in: an active state emits its field
672
+ * plus a trailing space; an idle state emits a single space run.
673
+ */
674
+ function stateRuns(deps: ResolvedDeps): DisplayRun[] {
675
+ let text = "";
676
+ if (deps.isResting) {
677
+ const n = deps.restingCount;
678
+ /* "Rest" followed by six spaces (a ten-char field). */
679
+ const t = "Rest ".split("");
680
+ if (n >= 1000) {
681
+ let i = Math.trunc(n / 100);
682
+ t[9] = "0";
683
+ t[8] = "0";
684
+ t[7] = i2d(i % 10);
685
+ if (i >= 10) {
686
+ i = Math.trunc(i / 10);
687
+ t[6] = i2d(i % 10);
688
+ if (i >= 10) t[5] = i2d(Math.trunc(i / 10));
689
+ }
690
+ } else if (n >= 100) {
691
+ let i = n;
692
+ t[9] = i2d(i % 10);
693
+ i = Math.trunc(i / 10);
694
+ t[8] = i2d(i % 10);
695
+ t[7] = i2d(Math.trunc(i / 10));
696
+ } else if (n >= 10) {
697
+ t[9] = i2d(n % 10);
698
+ t[8] = i2d(Math.trunc(n / 10));
699
+ } else if (n > 0) {
700
+ t[9] = i2d(n);
701
+ } else if (n === -1) {
702
+ /* REST_ALL_POINTS (player-util.h L54). */
703
+ t[5] = t[6] = t[7] = t[8] = t[9] = "*";
704
+ } else if (n === -2) {
705
+ /* REST_COMPLETE (player-util.h L53). */
706
+ t[5] = t[6] = t[7] = t[8] = t[9] = "&";
707
+ } else if (n === -3) {
708
+ /* REST_SOME_POINTS (player-util.h L55). */
709
+ t[5] = t[6] = t[7] = t[8] = t[9] = "!";
710
+ }
711
+ text = t.join("");
712
+ } else if (deps.nRepeats) {
713
+ const n = deps.nRepeats;
714
+ text =
715
+ n > 999
716
+ ? `Rep. ${rjust(Math.trunc(n / 100), 3)}00`
717
+ : `Repeat ${rjust(n, 3)}`;
718
+ }
719
+ /* strlen(text) + 1: bake the one trailing gap in; idle reserves one column. */
720
+ return [{ text: text ? `${text} ` : " ", color: COLOUR_WHITE }];
721
+ }
722
+
723
+ /**
724
+ * prt_study (ui-display.c:1226-1245). Draws "Study (%d)", returns strlen(text)
725
+ * + 1 (L1241) - the text width includes one trailing gap column. We bake that
726
+ * gap into the text ("Study (N) ").
727
+ */
728
+ function studyRuns(player: Player, deps: ResolvedDeps): DisplayRun[] {
729
+ const n = player.upkeep.newSpells;
730
+ if (!n) return [];
731
+ const color = deps.bookHasUnlearnedSpells ? COLOUR_WHITE : COLOUR_L_DARK;
732
+ return [{ text: `Study (${n}) `, color }];
733
+ }
734
+
735
+ /**
736
+ * prt_tmd (ui-display.c L1251): walk every active timed effect to the grade
737
+ * whose max covers the current duration, and emit its name (and, for
738
+ * TMD_FOOD, the percentage meter). Each named piece carries a trailing space,
739
+ * reproducing upstream's "len += strlen + 1" internal spacing.
740
+ */
741
+ function tmdRuns(player: Player, deps: ResolvedDeps): DisplayRun[] {
742
+ const runs: DisplayRun[] = [];
743
+ for (let i = 0; i < TMD_MAX; i++) {
744
+ const dur = player.timed[i] ?? 0;
745
+ if (!dur) continue;
746
+ const effect = deps.timedEffects[i];
747
+ if (!effect) continue;
748
+ const grades = effect.grades;
749
+ let k = 0;
750
+ while (k < grades.length - 1 && dur > (grades[k] as { max: number }).max) {
751
+ k++;
752
+ }
753
+ const grade = grades[k];
754
+ if (!grade || grade.name === null) continue;
755
+ runs.push({ text: `${grade.name} `, color: grade.color });
756
+ if (i === TMD.FOOD) {
757
+ runs.push({ text: `${Math.trunc(dur / 100)} % `, color: grade.color });
758
+ }
759
+ }
760
+ return runs;
761
+ }
762
+
763
+ /** prt_dtrap (ui-display.c L1207). */
764
+ function dtrapRuns(state: GameState): DisplayRun[] {
765
+ const grid = state.actor.grid;
766
+ if (!squareIsDtrap(state, grid)) return [];
767
+ const color = squareDtrapEdge(state, grid) ? COLOUR_YELLOW : COLOUR_L_GREEN;
768
+ return [{ text: "DTrap ", color }];
769
+ }
770
+
771
+ /** square_isdtrap (cave-square.c L570). */
772
+ function squareIsDtrap(state: GameState, grid: Loc): boolean {
773
+ return state.chunk.sqinfoHas(grid, SQUARE.DTRAP);
774
+ }
775
+
776
+ /** square_dtrap_edge (cave-square.c L841): a dtrap grid bordering a non-dtrap. */
777
+ function squareDtrapEdge(state: GameState, grid: Loc): boolean {
778
+ if (!squareIsDtrap(state, grid)) return false;
779
+ const c = state.chunk;
780
+ /* Keypad DIR_S/E/N/W = 2/6/8/4 (next_grid). */
781
+ for (const dir of [2, 6, 8, 4]) {
782
+ const g = nextGrid(grid, dir);
783
+ if (c.inBoundsFully(g) && !squareIsDtrap(state, g)) return true;
784
+ }
785
+ return false;
786
+ }
787
+
788
+ /**
789
+ * prt_terrain (ui-display.c L1184): the player's trap (unless invisible) or
790
+ * feature name, capitalised, in its display colour, with a trailing space.
791
+ */
792
+ function terrainRuns(state: GameState): DisplayRun[] {
793
+ const grid = state.actor.grid;
794
+ const idx = grid.y * state.chunk.width + grid.x;
795
+ const trap = state.traps.get(idx)?.[0] ?? null;
796
+ let name: string;
797
+ let color: number;
798
+ /* square_isinvis (cave-square.c:498): the unknown-trap mark, read here as
799
+ * ui-display.c:1191 does (prt_terrain). */
800
+ if (trap && !state.chunk.sqinfoHas(grid, SQUARE.INVIS)) {
801
+ name = trap.kind.name;
802
+ color = colorCharToAttr(trap.kind.color);
803
+ } else {
804
+ const feat = state.chunk.feature(grid);
805
+ name = feat.name;
806
+ color = colorCharToAttr(feat.dAttr);
807
+ }
808
+ return [{ text: `${strcap(name)} `, color }];
809
+ }
810
+
811
+ /**
812
+ * statusLineModel: the 11 status_handlers[] indicators in table order. An
813
+ * indicator upstream returns 0 for is represented by an empty runs array
814
+ * (shells skip it). Each active segment bakes its single trailing gap column
815
+ * into its runs (matching the reference return width), so shells render the
816
+ * segments back-to-back with no external gap; idle prt_state reserves one blank
817
+ * column.
818
+ */
819
+ export function statusLineModel(
820
+ state: GameState,
821
+ deps: DisplayDeps = {},
822
+ ): StatusIndicator[] {
823
+ const d = resolveDeps(state, deps);
824
+ const player = state.actor.player;
825
+ return [
826
+ { key: "level_feeling", runs: levelFeelingRuns(state, d) },
827
+ { key: "light", runs: lightRuns(state) },
828
+ { key: "moves", runs: movesRuns(d) },
829
+ { key: "unignore", runs: unignoreRuns(d) },
830
+ { key: "recall", runs: recallRuns(player) },
831
+ { key: "descent", runs: descentRuns(player) },
832
+ { key: "state", runs: stateRuns(d) },
833
+ { key: "study", runs: studyRuns(player, d) },
834
+ { key: "tmd", runs: tmdRuns(player, d) },
835
+ { key: "dtrap", runs: dtrapRuns(state) },
836
+ { key: "terrain", runs: terrainRuns(state) },
837
+ ];
838
+ }