@rpgm-tools/neo-angband-core 0.18.0 → 0.19.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 (848) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/perceive.d.ts.map +1 -1
  3. package/dist/agent/perceive.js +2 -2
  4. package/dist/agent/perceive.js.map +1 -1
  5. package/dist/combat/blow-vectors.d.ts +78 -0
  6. package/dist/combat/blow-vectors.d.ts.map +1 -0
  7. package/dist/combat/blow-vectors.fixtures.d.ts +19 -0
  8. package/dist/combat/blow-vectors.fixtures.d.ts.map +1 -0
  9. package/dist/combat/blow-vectors.fixtures.js +81 -0
  10. package/dist/combat/blow-vectors.fixtures.js.map +1 -0
  11. package/dist/combat/blow-vectors.js +195 -0
  12. package/dist/combat/blow-vectors.js.map +1 -0
  13. package/dist/combat/brand-slay.d.ts +22 -9
  14. package/dist/combat/brand-slay.d.ts.map +1 -1
  15. package/dist/combat/brand-slay.js +37 -10
  16. package/dist/combat/brand-slay.js.map +1 -1
  17. package/dist/combat/index.d.ts +1 -1
  18. package/dist/combat/index.js +1 -1
  19. package/dist/combat/melee.d.ts +25 -13
  20. package/dist/combat/melee.d.ts.map +1 -1
  21. package/dist/combat/melee.js +23 -19
  22. package/dist/combat/melee.js.map +1 -1
  23. package/dist/combat/mon-melee.d.ts +166 -7
  24. package/dist/combat/mon-melee.d.ts.map +1 -1
  25. package/dist/combat/mon-melee.js +469 -338
  26. package/dist/combat/mon-melee.js.map +1 -1
  27. package/dist/combat/ranged.d.ts +15 -13
  28. package/dist/combat/ranged.d.ts.map +1 -1
  29. package/dist/combat/ranged.js +31 -29
  30. package/dist/combat/ranged.js.map +1 -1
  31. package/dist/constants.d.ts +14 -0
  32. package/dist/constants.d.ts.map +1 -1
  33. package/dist/constants.js +14 -0
  34. package/dist/constants.js.map +1 -1
  35. package/dist/datafile.d.ts +48 -0
  36. package/dist/datafile.d.ts.map +1 -0
  37. package/dist/datafile.js +102 -0
  38. package/dist/datafile.js.map +1 -0
  39. package/dist/effects/effect-info-registry.d.ts +237 -0
  40. package/dist/effects/effect-info-registry.d.ts.map +1 -0
  41. package/dist/effects/effect-info-registry.js +138 -0
  42. package/dist/effects/effect-info-registry.js.map +1 -0
  43. package/dist/effects/effect-info-vectors.d.ts +92 -0
  44. package/dist/effects/effect-info-vectors.d.ts.map +1 -0
  45. package/dist/effects/effect-info-vectors.fixtures.d.ts +18 -0
  46. package/dist/effects/effect-info-vectors.fixtures.d.ts.map +1 -0
  47. package/dist/effects/effect-info-vectors.fixtures.js +51 -0
  48. package/dist/effects/effect-info-vectors.fixtures.js.map +1 -0
  49. package/dist/effects/effect-info-vectors.js +315 -0
  50. package/dist/effects/effect-info-vectors.js.map +1 -0
  51. package/dist/effects/effect-info.d.ts +5 -1
  52. package/dist/effects/effect-info.d.ts.map +1 -1
  53. package/dist/effects/effect-info.js +245 -143
  54. package/dist/effects/effect-info.js.map +1 -1
  55. package/dist/effects/effect.d.ts +4 -3
  56. package/dist/effects/effect.d.ts.map +1 -1
  57. package/dist/effects/effect.js +88 -70
  58. package/dist/effects/effect.js.map +1 -1
  59. package/dist/effects/handlers.d.ts +1 -1
  60. package/dist/effects/handlers.d.ts.map +1 -1
  61. package/dist/effects/handlers.js +5 -2
  62. package/dist/effects/handlers.js.map +1 -1
  63. package/dist/effects/interpreter.d.ts +11 -0
  64. package/dist/effects/interpreter.d.ts.map +1 -1
  65. package/dist/effects/interpreter.js +13 -0
  66. package/dist/effects/interpreter.js.map +1 -1
  67. package/dist/game/cave-cmd.d.ts +9 -5
  68. package/dist/game/cave-cmd.d.ts.map +1 -1
  69. package/dist/game/cave-cmd.js +56 -11
  70. package/dist/game/cave-cmd.js.map +1 -1
  71. package/dist/game/cave-square.d.ts +42 -0
  72. package/dist/game/cave-square.d.ts.map +1 -0
  73. package/dist/game/cave-square.js +73 -0
  74. package/dist/game/cave-square.js.map +1 -0
  75. package/dist/game/char-sheet.d.ts +12 -8
  76. package/dist/game/char-sheet.d.ts.map +1 -1
  77. package/dist/game/char-sheet.js +41 -8
  78. package/dist/game/char-sheet.js.map +1 -1
  79. package/dist/game/chest.d.ts +2 -3
  80. package/dist/game/chest.d.ts.map +1 -1
  81. package/dist/game/chest.js +17 -6
  82. package/dist/game/chest.js.map +1 -1
  83. package/dist/game/context.d.ts +213 -22
  84. package/dist/game/context.d.ts.map +1 -1
  85. package/dist/game/context.js +109 -17
  86. package/dist/game/context.js.map +1 -1
  87. package/dist/game/describe.d.ts +13 -0
  88. package/dist/game/describe.d.ts.map +1 -1
  89. package/dist/game/describe.js +32 -4
  90. package/dist/game/describe.js.map +1 -1
  91. package/dist/game/display.d.ts +97 -8
  92. package/dist/game/display.d.ts.map +1 -1
  93. package/dist/game/display.js +157 -13
  94. package/dist/game/display.js.map +1 -1
  95. package/dist/game/dump-level.d.ts.map +1 -1
  96. package/dist/game/dump-level.js +3 -2
  97. package/dist/game/dump-level.js.map +1 -1
  98. package/dist/game/effect-attack.d.ts.map +1 -1
  99. package/dist/game/effect-attack.js +36 -27
  100. package/dist/game/effect-attack.js.map +1 -1
  101. package/dist/game/effect-detect.d.ts +4 -4
  102. package/dist/game/effect-detect.d.ts.map +1 -1
  103. package/dist/game/effect-detect.js +42 -9
  104. package/dist/game/effect-detect.js.map +1 -1
  105. package/dist/game/effect-env.d.ts +7 -1
  106. package/dist/game/effect-env.d.ts.map +1 -1
  107. package/dist/game/effect-env.js +1 -0
  108. package/dist/game/effect-env.js.map +1 -1
  109. package/dist/game/effect-general.d.ts +5 -3
  110. package/dist/game/effect-general.d.ts.map +1 -1
  111. package/dist/game/effect-general.js +94 -43
  112. package/dist/game/effect-general.js.map +1 -1
  113. package/dist/game/effect-item.d.ts +2 -1
  114. package/dist/game/effect-item.d.ts.map +1 -1
  115. package/dist/game/effect-item.js +136 -82
  116. package/dist/game/effect-item.js.map +1 -1
  117. package/dist/game/effect-melee.d.ts +10 -4
  118. package/dist/game/effect-melee.d.ts.map +1 -1
  119. package/dist/game/effect-melee.js +44 -19
  120. package/dist/game/effect-melee.js.map +1 -1
  121. package/dist/game/effect-monster.d.ts +26 -4
  122. package/dist/game/effect-monster.d.ts.map +1 -1
  123. package/dist/game/effect-monster.js +52 -9
  124. package/dist/game/effect-monster.js.map +1 -1
  125. package/dist/game/effect-teleport.d.ts +58 -19
  126. package/dist/game/effect-teleport.d.ts.map +1 -1
  127. package/dist/game/effect-teleport.js +143 -27
  128. package/dist/game/effect-teleport.js.map +1 -1
  129. package/dist/game/effect-terrain.d.ts +1 -3
  130. package/dist/game/effect-terrain.d.ts.map +1 -1
  131. package/dist/game/effect-terrain.js +38 -22
  132. package/dist/game/effect-terrain.js.map +1 -1
  133. package/dist/game/equip-cmp.d.ts.map +1 -1
  134. package/dist/game/equip-cmp.js +10 -7
  135. package/dist/game/equip-cmp.js.map +1 -1
  136. package/dist/game/floor.d.ts +16 -4
  137. package/dist/game/floor.d.ts.map +1 -1
  138. package/dist/game/floor.js +22 -4
  139. package/dist/game/floor.js.map +1 -1
  140. package/dist/game/gear.d.ts +101 -13
  141. package/dist/game/gear.d.ts.map +1 -1
  142. package/dist/game/gear.js +183 -24
  143. package/dist/game/gear.js.map +1 -1
  144. package/dist/game/harness.d.ts +2 -1
  145. package/dist/game/harness.d.ts.map +1 -1
  146. package/dist/game/harness.js +12 -1
  147. package/dist/game/harness.js.map +1 -1
  148. package/dist/game/ignore-cmd.d.ts +47 -8
  149. package/dist/game/ignore-cmd.d.ts.map +1 -1
  150. package/dist/game/ignore-cmd.js +76 -8
  151. package/dist/game/ignore-cmd.js.map +1 -1
  152. package/dist/game/known.d.ts +223 -34
  153. package/dist/game/known.d.ts.map +1 -1
  154. package/dist/game/known.js +301 -67
  155. package/dist/game/known.js.map +1 -1
  156. package/dist/game/loop.d.ts +4 -3
  157. package/dist/game/loop.d.ts.map +1 -1
  158. package/dist/game/loop.js +49 -29
  159. package/dist/game/loop.js.map +1 -1
  160. package/dist/game/lore-color.d.ts.map +1 -1
  161. package/dist/game/lore-color.js +13 -1
  162. package/dist/game/lore-color.js.map +1 -1
  163. package/dist/game/mon-cast.d.ts +3 -4
  164. package/dist/game/mon-cast.d.ts.map +1 -1
  165. package/dist/game/mon-cast.js +30 -2
  166. package/dist/game/mon-cast.js.map +1 -1
  167. package/dist/game/mon-cmd.d.ts +4 -5
  168. package/dist/game/mon-cmd.d.ts.map +1 -1
  169. package/dist/game/mon-cmd.js +80 -27
  170. package/dist/game/mon-cmd.js.map +1 -1
  171. package/dist/game/mon-death.d.ts +8 -4
  172. package/dist/game/mon-death.d.ts.map +1 -1
  173. package/dist/game/mon-death.js +6 -9
  174. package/dist/game/mon-death.js.map +1 -1
  175. package/dist/game/mon-group.d.ts +9 -5
  176. package/dist/game/mon-group.d.ts.map +1 -1
  177. package/dist/game/mon-group.js +9 -5
  178. package/dist/game/mon-group.js.map +1 -1
  179. package/dist/game/mon-message.d.ts +90 -40
  180. package/dist/game/mon-message.d.ts.map +1 -1
  181. package/dist/game/mon-message.js +267 -59
  182. package/dist/game/mon-message.js.map +1 -1
  183. package/dist/game/mon-place.d.ts +11 -1
  184. package/dist/game/mon-place.d.ts.map +1 -1
  185. package/dist/game/mon-place.js +15 -3
  186. package/dist/game/mon-place.js.map +1 -1
  187. package/dist/game/mon-ranged.d.ts +2 -1
  188. package/dist/game/mon-ranged.d.ts.map +1 -1
  189. package/dist/game/mon-ranged.js +11 -5
  190. package/dist/game/mon-ranged.js.map +1 -1
  191. package/dist/game/mon-side.d.ts +3 -2
  192. package/dist/game/mon-side.d.ts.map +1 -1
  193. package/dist/game/mon-side.js +15 -14
  194. package/dist/game/mon-side.js.map +1 -1
  195. package/dist/game/monster-turn.d.ts +20 -10
  196. package/dist/game/monster-turn.d.ts.map +1 -1
  197. package/dist/game/monster-turn.js +110 -83
  198. package/dist/game/monster-turn.js.map +1 -1
  199. package/dist/game/notice.d.ts +36 -0
  200. package/dist/game/notice.d.ts.map +1 -0
  201. package/dist/game/notice.js +79 -0
  202. package/dist/game/notice.js.map +1 -0
  203. package/dist/game/obj-cmd.d.ts +14 -3
  204. package/dist/game/obj-cmd.d.ts.map +1 -1
  205. package/dist/game/obj-cmd.js +109 -35
  206. package/dist/game/obj-cmd.js.map +1 -1
  207. package/dist/game/obj-list.d.ts +13 -2
  208. package/dist/game/obj-list.d.ts.map +1 -1
  209. package/dist/game/obj-list.js +42 -27
  210. package/dist/game/obj-list.js.map +1 -1
  211. package/dist/game/object-inspect.d.ts +9 -0
  212. package/dist/game/object-inspect.d.ts.map +1 -1
  213. package/dist/game/object-inspect.js +4 -0
  214. package/dist/game/object-inspect.js.map +1 -1
  215. package/dist/game/pickup.d.ts +0 -2
  216. package/dist/game/pickup.d.ts.map +1 -1
  217. package/dist/game/pickup.js +18 -3
  218. package/dist/game/pickup.js.map +1 -1
  219. package/dist/game/player-side-vectors.d.ts +174 -0
  220. package/dist/game/player-side-vectors.d.ts.map +1 -0
  221. package/dist/game/player-side-vectors.fixtures.d.ts +33 -0
  222. package/dist/game/player-side-vectors.fixtures.d.ts.map +1 -0
  223. package/dist/game/player-side-vectors.fixtures.js +191 -0
  224. package/dist/game/player-side-vectors.fixtures.js.map +1 -0
  225. package/dist/game/player-side-vectors.js +292 -0
  226. package/dist/game/player-side-vectors.js.map +1 -0
  227. package/dist/game/player-side.d.ts +129 -1
  228. package/dist/game/player-side.d.ts.map +1 -1
  229. package/dist/game/player-side.js +520 -338
  230. package/dist/game/player-side.js.map +1 -1
  231. package/dist/game/player-turn.d.ts +26 -7
  232. package/dist/game/player-turn.d.ts.map +1 -1
  233. package/dist/game/player-turn.js +180 -33
  234. package/dist/game/player-turn.js.map +1 -1
  235. package/dist/game/poly.d.ts +38 -0
  236. package/dist/game/poly.d.ts.map +1 -0
  237. package/dist/game/poly.js +82 -0
  238. package/dist/game/poly.js.map +1 -0
  239. package/dist/game/project-cast.d.ts +20 -3
  240. package/dist/game/project-cast.d.ts.map +1 -1
  241. package/dist/game/project-cast.js +49 -6
  242. package/dist/game/project-cast.js.map +1 -1
  243. package/dist/game/project-feat-vectors.d.ts +124 -0
  244. package/dist/game/project-feat-vectors.d.ts.map +1 -0
  245. package/dist/game/project-feat-vectors.fixtures.d.ts +13 -0
  246. package/dist/game/project-feat-vectors.fixtures.d.ts.map +1 -0
  247. package/dist/game/project-feat-vectors.fixtures.js +94 -0
  248. package/dist/game/project-feat-vectors.fixtures.js.map +1 -0
  249. package/dist/game/project-feat-vectors.js +229 -0
  250. package/dist/game/project-feat-vectors.js.map +1 -0
  251. package/dist/game/project-feat.d.ts +53 -1
  252. package/dist/game/project-feat.d.ts.map +1 -1
  253. package/dist/game/project-feat.js +374 -247
  254. package/dist/game/project-feat.js.map +1 -1
  255. package/dist/game/project-monster.d.ts +21 -8
  256. package/dist/game/project-monster.d.ts.map +1 -1
  257. package/dist/game/project-monster.js +45 -21
  258. package/dist/game/project-monster.js.map +1 -1
  259. package/dist/game/project-obj.d.ts +62 -0
  260. package/dist/game/project-obj.d.ts.map +1 -1
  261. package/dist/game/project-obj.js +72 -41
  262. package/dist/game/project-obj.js.map +1 -1
  263. package/dist/game/project-player.d.ts +8 -0
  264. package/dist/game/project-player.d.ts.map +1 -1
  265. package/dist/game/project-player.js.map +1 -1
  266. package/dist/game/projection-handlers.d.ts +81 -0
  267. package/dist/game/projection-handlers.d.ts.map +1 -0
  268. package/dist/game/projection-handlers.js +93 -0
  269. package/dist/game/projection-handlers.js.map +1 -0
  270. package/dist/game/quest.d.ts +23 -0
  271. package/dist/game/quest.d.ts.map +1 -1
  272. package/dist/game/quest.js +42 -0
  273. package/dist/game/quest.js.map +1 -1
  274. package/dist/game/ranged-cmd.d.ts +13 -2
  275. package/dist/game/ranged-cmd.d.ts.map +1 -1
  276. package/dist/game/ranged-cmd.js +32 -15
  277. package/dist/game/ranged-cmd.js.map +1 -1
  278. package/dist/game/repeat.d.ts +78 -0
  279. package/dist/game/repeat.d.ts.map +1 -0
  280. package/dist/game/repeat.js +88 -0
  281. package/dist/game/repeat.js.map +1 -0
  282. package/dist/game/shape-inspect.d.ts +74 -0
  283. package/dist/game/shape-inspect.d.ts.map +1 -0
  284. package/dist/game/shape-inspect.js +114 -0
  285. package/dist/game/shape-inspect.js.map +1 -0
  286. package/dist/game/spell-cmd.d.ts +15 -4
  287. package/dist/game/spell-cmd.d.ts.map +1 -1
  288. package/dist/game/spell-cmd.js +35 -6
  289. package/dist/game/spell-cmd.js.map +1 -1
  290. package/dist/game/spoil.d.ts.map +1 -1
  291. package/dist/game/spoil.js +89 -40
  292. package/dist/game/spoil.js.map +1 -1
  293. package/dist/game/steal.d.ts +3 -3
  294. package/dist/game/steal.d.ts.map +1 -1
  295. package/dist/game/steal.js +9 -4
  296. package/dist/game/steal.js.map +1 -1
  297. package/dist/game/target-loop.d.ts +10 -4
  298. package/dist/game/target-loop.d.ts.map +1 -1
  299. package/dist/game/target-loop.js +14 -8
  300. package/dist/game/target-loop.js.map +1 -1
  301. package/dist/game/target.d.ts +4 -4
  302. package/dist/game/target.d.ts.map +1 -1
  303. package/dist/game/target.js +19 -8
  304. package/dist/game/target.js.map +1 -1
  305. package/dist/game/ui-entry.d.ts +63 -4
  306. package/dist/game/ui-entry.d.ts.map +1 -1
  307. package/dist/game/ui-entry.js +151 -23
  308. package/dist/game/ui-entry.js.map +1 -1
  309. package/dist/game/wizard.d.ts +23 -5
  310. package/dist/game/wizard.d.ts.map +1 -1
  311. package/dist/game/wizard.js +93 -11
  312. package/dist/game/wizard.js.map +1 -1
  313. package/dist/game/world.d.ts.map +1 -1
  314. package/dist/game/world.js +6 -0
  315. package/dist/game/world.js.map +1 -1
  316. package/dist/gen/cave.d.ts +49 -8
  317. package/dist/gen/cave.d.ts.map +1 -1
  318. package/dist/gen/cave.js +200 -28
  319. package/dist/gen/cave.js.map +1 -1
  320. package/dist/gen/generate.d.ts +54 -9
  321. package/dist/gen/generate.d.ts.map +1 -1
  322. package/dist/gen/generate.js +55 -8
  323. package/dist/gen/generate.js.map +1 -1
  324. package/dist/gen/glyph-vectors.d.ts +109 -0
  325. package/dist/gen/glyph-vectors.d.ts.map +1 -0
  326. package/dist/gen/glyph-vectors.fixtures.d.ts +18 -0
  327. package/dist/gen/glyph-vectors.fixtures.d.ts.map +1 -0
  328. package/dist/gen/glyph-vectors.fixtures.js +94 -0
  329. package/dist/gen/glyph-vectors.fixtures.js.map +1 -0
  330. package/dist/gen/glyph-vectors.js +218 -0
  331. package/dist/gen/glyph-vectors.js.map +1 -0
  332. package/dist/gen/glyph.d.ts +104 -0
  333. package/dist/gen/glyph.d.ts.map +1 -0
  334. package/dist/gen/glyph.js +72 -0
  335. package/dist/gen/glyph.js.map +1 -0
  336. package/dist/gen/room.d.ts +26 -2
  337. package/dist/gen/room.d.ts.map +1 -1
  338. package/dist/gen/room.js +414 -264
  339. package/dist/gen/room.js.map +1 -1
  340. package/dist/gen/util.d.ts +11 -2
  341. package/dist/gen/util.d.ts.map +1 -1
  342. package/dist/gen/util.js +31 -9
  343. package/dist/gen/util.js.map +1 -1
  344. package/dist/i18n/i18n.d.ts +207 -0
  345. package/dist/i18n/i18n.d.ts.map +1 -0
  346. package/dist/i18n/i18n.js +405 -0
  347. package/dist/i18n/i18n.js.map +1 -0
  348. package/dist/i18n/text.d.ts +62 -0
  349. package/dist/i18n/text.d.ts.map +1 -0
  350. package/dist/i18n/text.js +120 -0
  351. package/dist/i18n/text.js.map +1 -0
  352. package/dist/index.d.ts +25 -0
  353. package/dist/index.d.ts.map +1 -1
  354. package/dist/index.js +38 -0
  355. package/dist/index.js.map +1 -1
  356. package/dist/mod/extension.d.ts +115 -0
  357. package/dist/mod/extension.d.ts.map +1 -0
  358. package/dist/mod/extension.js +85 -0
  359. package/dist/mod/extension.js.map +1 -0
  360. package/dist/mod/ids.d.ts +10 -0
  361. package/dist/mod/ids.d.ts.map +1 -1
  362. package/dist/mod/ids.js +90 -21
  363. package/dist/mod/ids.js.map +1 -1
  364. package/dist/mod/record-keys.d.ts +43 -0
  365. package/dist/mod/record-keys.d.ts.map +1 -0
  366. package/dist/mod/record-keys.js +100 -0
  367. package/dist/mod/record-keys.js.map +1 -0
  368. package/dist/mod/registry-host.d.ts +472 -0
  369. package/dist/mod/registry-host.d.ts.map +1 -1
  370. package/dist/mod/registry-host.js +313 -0
  371. package/dist/mod/registry-host.js.map +1 -1
  372. package/dist/mod/save-blocks.d.ts +1 -1
  373. package/dist/mon/bind.d.ts.map +1 -1
  374. package/dist/mon/bind.js +6 -3
  375. package/dist/mon/bind.js.map +1 -1
  376. package/dist/mon/knowledge-groups.d.ts +0 -6
  377. package/dist/mon/knowledge-groups.d.ts.map +1 -1
  378. package/dist/mon/knowledge-groups.js +12 -8
  379. package/dist/mon/knowledge-groups.js.map +1 -1
  380. package/dist/mon/lore-describe.d.ts +46 -10
  381. package/dist/mon/lore-describe.d.ts.map +1 -1
  382. package/dist/mon/lore-describe.js +74 -22
  383. package/dist/mon/lore-describe.js.map +1 -1
  384. package/dist/mon/lore-file.d.ts +126 -0
  385. package/dist/mon/lore-file.d.ts.map +1 -0
  386. package/dist/mon/lore-file.js +291 -0
  387. package/dist/mon/lore-file.js.map +1 -0
  388. package/dist/mon/lore.d.ts +9 -3
  389. package/dist/mon/lore.d.ts.map +1 -1
  390. package/dist/mon/lore.js +9 -3
  391. package/dist/mon/lore.js.map +1 -1
  392. package/dist/mon/make.d.ts +4 -2
  393. package/dist/mon/make.d.ts.map +1 -1
  394. package/dist/mon/make.js +4 -2
  395. package/dist/mon/make.js.map +1 -1
  396. package/dist/mon/monster.d.ts +1 -1
  397. package/dist/mon/monster.js +1 -1
  398. package/dist/mon/predicate.d.ts +14 -9
  399. package/dist/mon/predicate.d.ts.map +1 -1
  400. package/dist/mon/predicate.js +14 -9
  401. package/dist/mon/predicate.js.map +1 -1
  402. package/dist/mon/project-mon.d.ts +16 -3
  403. package/dist/mon/project-mon.d.ts.map +1 -1
  404. package/dist/mon/project-mon.js +14 -5
  405. package/dist/mon/project-mon.js.map +1 -1
  406. package/dist/mon/steal.d.ts +31 -4
  407. package/dist/mon/steal.d.ts.map +1 -1
  408. package/dist/mon/steal.js +20 -7
  409. package/dist/mon/steal.js.map +1 -1
  410. package/dist/mon/take-hit.d.ts +8 -3
  411. package/dist/mon/take-hit.d.ts.map +1 -1
  412. package/dist/mon/take-hit.js +8 -3
  413. package/dist/mon/take-hit.js.map +1 -1
  414. package/dist/mon/timed.d.ts +15 -9
  415. package/dist/mon/timed.d.ts.map +1 -1
  416. package/dist/mon/timed.js +13 -8
  417. package/dist/mon/timed.js.map +1 -1
  418. package/dist/mon/types.d.ts +11 -4
  419. package/dist/mon/types.d.ts.map +1 -1
  420. package/dist/mon/types.js.map +1 -1
  421. package/dist/msg.d.ts +40 -1
  422. package/dist/msg.d.ts.map +1 -1
  423. package/dist/msg.js +42 -1
  424. package/dist/msg.js.map +1 -1
  425. package/dist/obj/artifact-fake.d.ts +46 -14
  426. package/dist/obj/artifact-fake.d.ts.map +1 -1
  427. package/dist/obj/artifact-fake.js +46 -17
  428. package/dist/obj/artifact-fake.js.map +1 -1
  429. package/dist/obj/bind.d.ts +23 -0
  430. package/dist/obj/bind.d.ts.map +1 -1
  431. package/dist/obj/bind.js +49 -9
  432. package/dist/obj/bind.js.map +1 -1
  433. package/dist/obj/desc-vectors.d.ts +68 -0
  434. package/dist/obj/desc-vectors.d.ts.map +1 -0
  435. package/dist/obj/desc-vectors.fixtures.d.ts +12 -0
  436. package/dist/obj/desc-vectors.fixtures.d.ts.map +1 -0
  437. package/dist/obj/desc-vectors.fixtures.js +95 -0
  438. package/dist/obj/desc-vectors.fixtures.js.map +1 -0
  439. package/dist/obj/desc-vectors.js +86 -0
  440. package/dist/obj/desc-vectors.js.map +1 -0
  441. package/dist/obj/desc.d.ts +17 -2
  442. package/dist/obj/desc.d.ts.map +1 -1
  443. package/dist/obj/desc.js +129 -54
  444. package/dist/obj/desc.js.map +1 -1
  445. package/dist/obj/effects-info.d.ts.map +1 -1
  446. package/dist/obj/effects-info.js +87 -58
  447. package/dist/obj/effects-info.js.map +1 -1
  448. package/dist/obj/fake-object.d.ts +70 -0
  449. package/dist/obj/fake-object.d.ts.map +1 -0
  450. package/dist/obj/fake-object.js +104 -0
  451. package/dist/obj/fake-object.js.map +1 -0
  452. package/dist/obj/ignore.d.ts +55 -12
  453. package/dist/obj/ignore.d.ts.map +1 -1
  454. package/dist/obj/ignore.js +68 -31
  455. package/dist/obj/ignore.js.map +1 -1
  456. package/dist/obj/knowledge.d.ts +46 -3
  457. package/dist/obj/knowledge.d.ts.map +1 -1
  458. package/dist/obj/knowledge.js +169 -151
  459. package/dist/obj/knowledge.js.map +1 -1
  460. package/dist/obj/known-object.d.ts +68 -8
  461. package/dist/obj/known-object.d.ts.map +1 -1
  462. package/dist/obj/known-object.js +90 -10
  463. package/dist/obj/known-object.js.map +1 -1
  464. package/dist/obj/make.d.ts +15 -4
  465. package/dist/obj/make.d.ts.map +1 -1
  466. package/dist/obj/make.js +49 -27
  467. package/dist/obj/make.js.map +1 -1
  468. package/dist/obj/object-info.d.ts +10 -0
  469. package/dist/obj/object-info.d.ts.map +1 -1
  470. package/dist/obj/object-info.js +93 -7
  471. package/dist/obj/object-info.js.map +1 -1
  472. package/dist/obj/object.d.ts +42 -4
  473. package/dist/obj/object.d.ts.map +1 -1
  474. package/dist/obj/object.js +362 -147
  475. package/dist/obj/object.js.map +1 -1
  476. package/dist/obj/power.d.ts +23 -4
  477. package/dist/obj/power.d.ts.map +1 -1
  478. package/dist/obj/power.js +231 -65
  479. package/dist/obj/power.js.map +1 -1
  480. package/dist/obj/randart-build.d.ts +27 -22
  481. package/dist/obj/randart-build.d.ts.map +1 -1
  482. package/dist/obj/randart-build.js +435 -357
  483. package/dist/obj/randart-build.js.map +1 -1
  484. package/dist/obj/randart-data.d.ts +62 -24
  485. package/dist/obj/randart-data.d.ts.map +1 -1
  486. package/dist/obj/randart-data.js +333 -189
  487. package/dist/obj/randart-data.js.map +1 -1
  488. package/dist/obj/randart-file.d.ts +21 -0
  489. package/dist/obj/randart-file.d.ts.map +1 -0
  490. package/dist/obj/randart-file.js +119 -0
  491. package/dist/obj/randart-file.js.map +1 -0
  492. package/dist/obj/randart-log.d.ts +63 -0
  493. package/dist/obj/randart-log.d.ts.map +1 -0
  494. package/dist/obj/randart-log.js +72 -0
  495. package/dist/obj/randart-log.js.map +1 -0
  496. package/dist/obj/randart-registry.d.ts +178 -0
  497. package/dist/obj/randart-registry.d.ts.map +1 -0
  498. package/dist/obj/randart-registry.js +140 -0
  499. package/dist/obj/randart-registry.js.map +1 -0
  500. package/dist/obj/randart-vectors.d.ts +97 -0
  501. package/dist/obj/randart-vectors.d.ts.map +1 -0
  502. package/dist/obj/randart-vectors.fixtures.d.ts +18 -0
  503. package/dist/obj/randart-vectors.fixtures.d.ts.map +1 -0
  504. package/dist/obj/randart-vectors.fixtures.js +50 -0
  505. package/dist/obj/randart-vectors.fixtures.js.map +1 -0
  506. package/dist/obj/randart-vectors.js +311 -0
  507. package/dist/obj/randart-vectors.js.map +1 -0
  508. package/dist/obj/randart.d.ts +53 -15
  509. package/dist/obj/randart.d.ts.map +1 -1
  510. package/dist/obj/randart.js +166 -44
  511. package/dist/obj/randart.js.map +1 -1
  512. package/dist/obj/rune-registry.d.ts +180 -0
  513. package/dist/obj/rune-registry.d.ts.map +1 -0
  514. package/dist/obj/rune-registry.js +161 -0
  515. package/dist/obj/rune-registry.js.map +1 -0
  516. package/dist/obj/rune-vectors.d.ts +99 -0
  517. package/dist/obj/rune-vectors.d.ts.map +1 -0
  518. package/dist/obj/rune-vectors.fixtures.d.ts +44 -0
  519. package/dist/obj/rune-vectors.fixtures.d.ts.map +1 -0
  520. package/dist/obj/rune-vectors.fixtures.js +125 -0
  521. package/dist/obj/rune-vectors.fixtures.js.map +1 -0
  522. package/dist/obj/rune-vectors.js +159 -0
  523. package/dist/obj/rune-vectors.js.map +1 -0
  524. package/dist/obj/tval-registry.d.ts +174 -0
  525. package/dist/obj/tval-registry.d.ts.map +1 -0
  526. package/dist/obj/tval-registry.js +151 -0
  527. package/dist/obj/tval-registry.js.map +1 -0
  528. package/dist/obj/tval-vectors.d.ts +85 -0
  529. package/dist/obj/tval-vectors.d.ts.map +1 -0
  530. package/dist/obj/tval-vectors.fixtures.d.ts +24 -0
  531. package/dist/obj/tval-vectors.fixtures.d.ts.map +1 -0
  532. package/dist/obj/tval-vectors.fixtures.js +41 -0
  533. package/dist/obj/tval-vectors.fixtures.js.map +1 -0
  534. package/dist/obj/tval-vectors.js +76 -0
  535. package/dist/obj/tval-vectors.js.map +1 -0
  536. package/dist/obj/types.d.ts +18 -7
  537. package/dist/obj/types.d.ts.map +1 -1
  538. package/dist/obj/types.js.map +1 -1
  539. package/dist/obj/value.d.ts.map +1 -1
  540. package/dist/obj/value.js +23 -20
  541. package/dist/obj/value.js.map +1 -1
  542. package/dist/parser.d.ts +116 -0
  543. package/dist/parser.d.ts.map +1 -0
  544. package/dist/parser.js +205 -0
  545. package/dist/parser.js.map +1 -0
  546. package/dist/player/bind.d.ts.map +1 -1
  547. package/dist/player/bind.js +3 -2
  548. package/dist/player/bind.js.map +1 -1
  549. package/dist/player/birth.d.ts +2 -1
  550. package/dist/player/birth.d.ts.map +1 -1
  551. package/dist/player/birth.js +2 -1
  552. package/dist/player/birth.js.map +1 -1
  553. package/dist/player/calcs.d.ts +58 -23
  554. package/dist/player/calcs.d.ts.map +1 -1
  555. package/dist/player/calcs.js +93 -36
  556. package/dist/player/calcs.js.map +1 -1
  557. package/dist/player/death.d.ts +50 -0
  558. package/dist/player/death.d.ts.map +1 -0
  559. package/dist/player/death.js +46 -0
  560. package/dist/player/death.js.map +1 -0
  561. package/dist/player/options-file.d.ts +129 -0
  562. package/dist/player/options-file.d.ts.map +1 -0
  563. package/dist/player/options-file.js +309 -0
  564. package/dist/player/options-file.js.map +1 -0
  565. package/dist/player/options.d.ts +2 -1
  566. package/dist/player/options.d.ts.map +1 -1
  567. package/dist/player/options.js +2 -1
  568. package/dist/player/options.js.map +1 -1
  569. package/dist/player/player.d.ts +50 -3
  570. package/dist/player/player.d.ts.map +1 -1
  571. package/dist/player/player.js +10 -1
  572. package/dist/player/player.js.map +1 -1
  573. package/dist/player/shape-lore.d.ts +11 -7
  574. package/dist/player/shape-lore.d.ts.map +1 -1
  575. package/dist/player/shape-lore.js +24 -11
  576. package/dist/player/shape-lore.js.map +1 -1
  577. package/dist/player/timed.d.ts +5 -3
  578. package/dist/player/timed.d.ts.map +1 -1
  579. package/dist/player/timed.js +11 -2
  580. package/dist/player/timed.js.map +1 -1
  581. package/dist/player/types.d.ts +29 -4
  582. package/dist/player/types.d.ts.map +1 -1
  583. package/dist/player/types.js +24 -1
  584. package/dist/player/types.js.map +1 -1
  585. package/dist/session/boot.d.ts +26 -2
  586. package/dist/session/boot.d.ts.map +1 -1
  587. package/dist/session/boot.js +21 -2
  588. package/dist/session/boot.js.map +1 -1
  589. package/dist/session/game.d.ts +15 -0
  590. package/dist/session/game.d.ts.map +1 -1
  591. package/dist/session/game.js +616 -140
  592. package/dist/session/game.js.map +1 -1
  593. package/dist/session/save-migrate.d.ts.map +1 -1
  594. package/dist/session/save-migrate.js +76 -1
  595. package/dist/session/save-migrate.js.map +1 -1
  596. package/dist/session/save.d.ts +75 -12
  597. package/dist/session/save.d.ts.map +1 -1
  598. package/dist/session/save.js +177 -18
  599. package/dist/session/save.js.map +1 -1
  600. package/dist/store/bind.d.ts +1 -1
  601. package/dist/store/bind.d.ts.map +1 -1
  602. package/dist/store/bind.js +4 -3
  603. package/dist/store/bind.js.map +1 -1
  604. package/dist/store/mass-produce-vectors.d.ts +40 -0
  605. package/dist/store/mass-produce-vectors.d.ts.map +1 -0
  606. package/dist/store/mass-produce-vectors.fixtures.d.ts +13 -0
  607. package/dist/store/mass-produce-vectors.fixtures.d.ts.map +1 -0
  608. package/dist/store/mass-produce-vectors.fixtures.js +52 -0
  609. package/dist/store/mass-produce-vectors.fixtures.js.map +1 -0
  610. package/dist/store/mass-produce-vectors.js +44 -0
  611. package/dist/store/mass-produce-vectors.js.map +1 -0
  612. package/dist/store/store.d.ts +104 -7
  613. package/dist/store/store.d.ts.map +1 -1
  614. package/dist/store/store.js +199 -77
  615. package/dist/store/store.js.map +1 -1
  616. package/dist/store/transact.d.ts +14 -5
  617. package/dist/store/transact.d.ts.map +1 -1
  618. package/dist/store/transact.js +17 -16
  619. package/dist/store/transact.js.map +1 -1
  620. package/dist/store/types.d.ts +3 -2
  621. package/dist/store/types.d.ts.map +1 -1
  622. package/dist/store/types.js +1 -1
  623. package/dist/version.d.ts +1 -1
  624. package/dist/version.js +1 -1
  625. package/dist/visuals/index.d.ts +1 -0
  626. package/dist/visuals/index.d.ts.map +1 -1
  627. package/dist/visuals/index.js +1 -0
  628. package/dist/visuals/index.js.map +1 -1
  629. package/dist/visuals/map-text.d.ts +8 -0
  630. package/dist/visuals/map-text.d.ts.map +1 -1
  631. package/dist/visuals/map-text.js +1 -1
  632. package/dist/visuals/map-text.js.map +1 -1
  633. package/dist/visuals/object-glyph.d.ts +56 -0
  634. package/dist/visuals/object-glyph.d.ts.map +1 -0
  635. package/dist/visuals/object-glyph.js +52 -0
  636. package/dist/visuals/object-glyph.js.map +1 -0
  637. package/dist/visuals/prefs.d.ts +14 -22
  638. package/dist/visuals/prefs.d.ts.map +1 -1
  639. package/dist/visuals/prefs.js +4 -23
  640. package/dist/visuals/prefs.js.map +1 -1
  641. package/dist/visuals/tile-prefs.d.ts +26 -0
  642. package/dist/visuals/tile-prefs.d.ts.map +1 -1
  643. package/dist/visuals/tile-prefs.js +28 -0
  644. package/dist/visuals/tile-prefs.js.map +1 -1
  645. package/dist/world/feature.d.ts +2 -1
  646. package/dist/world/feature.d.ts.map +1 -1
  647. package/dist/world/feature.js +2 -0
  648. package/dist/world/feature.js.map +1 -1
  649. package/dist/world/project.d.ts +10 -2
  650. package/dist/world/project.d.ts.map +1 -1
  651. package/dist/world/project.js +18 -6
  652. package/dist/world/project.js.map +1 -1
  653. package/dist/world/projection.d.ts +37 -3
  654. package/dist/world/projection.d.ts.map +1 -1
  655. package/dist/world/projection.js +69 -7
  656. package/dist/world/projection.js.map +1 -1
  657. package/dist/world/trap.d.ts +2 -1
  658. package/dist/world/trap.d.ts.map +1 -1
  659. package/dist/world/trap.js +2 -1
  660. package/dist/world/trap.js.map +1 -1
  661. package/dist/world/view.d.ts +1 -1
  662. package/dist/world/view.d.ts.map +1 -1
  663. package/dist/world/view.js +11 -3
  664. package/dist/world/view.js.map +1 -1
  665. package/package.json +1 -1
  666. package/src/agent/perceive.ts +2 -3
  667. package/src/combat/blow-vectors.fixtures.ts +99 -0
  668. package/src/combat/blow-vectors.json +482 -0
  669. package/src/combat/blow-vectors.ts +280 -0
  670. package/src/combat/brand-slay.ts +42 -11
  671. package/src/combat/index.ts +1 -1
  672. package/src/combat/melee.ts +37 -19
  673. package/src/combat/mon-melee.ts +611 -364
  674. package/src/combat/ranged.ts +43 -26
  675. package/src/constants.ts +15 -0
  676. package/src/datafile.ts +148 -0
  677. package/src/effects/effect-info-registry.ts +313 -0
  678. package/src/effects/effect-info-vectors.fixtures.ts +61 -0
  679. package/src/effects/effect-info-vectors.json +11532 -0
  680. package/src/effects/effect-info-vectors.ts +376 -0
  681. package/src/effects/effect-info.ts +1005 -859
  682. package/src/effects/effect.ts +96 -62
  683. package/src/effects/handlers.ts +5 -2
  684. package/src/effects/interpreter.ts +14 -0
  685. package/src/game/cave-cmd.ts +54 -11
  686. package/src/game/cave-square.ts +80 -0
  687. package/src/game/char-sheet.ts +59 -16
  688. package/src/game/chest.ts +25 -8
  689. package/src/game/context.ts +293 -27
  690. package/src/game/describe.ts +34 -4
  691. package/src/game/display.ts +215 -19
  692. package/src/game/dump-level.ts +3 -2
  693. package/src/game/effect-attack.ts +41 -28
  694. package/src/game/effect-detect.ts +45 -8
  695. package/src/game/effect-env.ts +8 -0
  696. package/src/game/effect-general.ts +110 -47
  697. package/src/game/effect-item.ts +1075 -999
  698. package/src/game/effect-melee.ts +51 -18
  699. package/src/game/effect-monster.ts +55 -9
  700. package/src/game/effect-teleport.ts +173 -38
  701. package/src/game/effect-terrain.ts +38 -22
  702. package/src/game/equip-cmp.ts +483 -480
  703. package/src/game/floor.ts +22 -4
  704. package/src/game/gear.ts +210 -21
  705. package/src/game/harness.ts +12 -1
  706. package/src/game/ignore-cmd.ts +96 -8
  707. package/src/game/known.ts +392 -73
  708. package/src/game/loop.ts +52 -27
  709. package/src/game/lore-color.ts +13 -1
  710. package/src/game/mon-cast.ts +31 -6
  711. package/src/game/mon-cmd.ts +95 -30
  712. package/src/game/mon-death.ts +14 -12
  713. package/src/game/mon-group.ts +9 -5
  714. package/src/game/mon-message.ts +363 -65
  715. package/src/game/mon-place.ts +15 -3
  716. package/src/game/mon-ranged.ts +14 -5
  717. package/src/game/mon-side.ts +16 -12
  718. package/src/game/monster-turn.ts +120 -87
  719. package/src/game/notice.ts +85 -0
  720. package/src/game/obj-cmd.ts +126 -37
  721. package/src/game/obj-list.ts +44 -26
  722. package/src/game/object-inspect.ts +13 -0
  723. package/src/game/pickup.ts +29 -5
  724. package/src/game/player-side-vectors.fixtures.ts +215 -0
  725. package/src/game/player-side-vectors.json +6914 -0
  726. package/src/game/player-side-vectors.ts +420 -0
  727. package/src/game/player-side.ts +622 -340
  728. package/src/game/player-turn.ts +228 -31
  729. package/src/game/poly.ts +107 -0
  730. package/src/game/project-cast.ts +63 -6
  731. package/src/game/project-feat-vectors.fixtures.ts +106 -0
  732. package/src/game/project-feat-vectors.json +6554 -0
  733. package/src/game/project-feat-vectors.ts +323 -0
  734. package/src/game/project-feat.ts +417 -248
  735. package/src/game/project-monster.ts +69 -30
  736. package/src/game/project-obj-vectors.json +1 -0
  737. package/src/game/project-obj.ts +115 -47
  738. package/src/game/project-player.ts +8 -0
  739. package/src/game/projection-handlers.ts +110 -0
  740. package/src/game/quest.ts +48 -0
  741. package/src/game/ranged-cmd.ts +45 -11
  742. package/src/game/repeat.ts +92 -0
  743. package/src/game/shape-inspect.ts +166 -0
  744. package/src/game/spell-cmd.ts +39 -6
  745. package/src/game/spoil.ts +92 -39
  746. package/src/game/steal.ts +9 -4
  747. package/src/game/target-loop.ts +14 -7
  748. package/src/game/target.ts +18 -7
  749. package/src/game/ui-entry.ts +172 -22
  750. package/src/game/wizard.ts +97 -10
  751. package/src/game/world.ts +6 -0
  752. package/src/gen/cave.ts +225 -26
  753. package/src/gen/generate.ts +62 -9
  754. package/src/gen/glyph-vectors.fixtures.ts +122 -0
  755. package/src/gen/glyph-vectors.json +5996 -0
  756. package/src/gen/glyph-vectors.ts +280 -0
  757. package/src/gen/glyph.ts +132 -0
  758. package/src/gen/room.ts +446 -265
  759. package/src/gen/util.ts +32 -9
  760. package/src/i18n/i18n.ts +492 -0
  761. package/src/i18n/text.ts +117 -0
  762. package/src/index.ts +307 -254
  763. package/src/mod/extension.ts +136 -0
  764. package/src/mod/ids.ts +92 -21
  765. package/src/mod/record-keys.ts +102 -0
  766. package/src/mod/registry-host.ts +1063 -234
  767. package/src/mon/bind.ts +14 -8
  768. package/src/mon/knowledge-groups.ts +12 -12
  769. package/src/mon/lore-describe.ts +93 -26
  770. package/src/mon/lore-file.ts +365 -0
  771. package/src/mon/lore.ts +9 -3
  772. package/src/mon/make.ts +4 -2
  773. package/src/mon/monster.ts +1 -1
  774. package/src/mon/predicate.ts +14 -9
  775. package/src/mon/project-mon.ts +23 -5
  776. package/src/mon/steal.ts +39 -7
  777. package/src/mon/take-hit.ts +8 -3
  778. package/src/mon/timed.ts +15 -9
  779. package/src/mon/types.ts +11 -4
  780. package/src/msg.ts +55 -1
  781. package/src/obj/artifact-fake.ts +47 -17
  782. package/src/obj/bind.ts +52 -9
  783. package/src/obj/desc-vectors.fixtures.ts +119 -0
  784. package/src/obj/desc-vectors.json +2360 -0
  785. package/src/obj/desc-vectors.ts +128 -0
  786. package/src/obj/desc.ts +159 -55
  787. package/src/obj/effects-info.ts +90 -59
  788. package/src/obj/fake-object.ts +135 -0
  789. package/src/obj/ignore.ts +95 -28
  790. package/src/obj/knowledge.ts +291 -139
  791. package/src/obj/known-object.ts +126 -11
  792. package/src/obj/make.ts +53 -29
  793. package/src/obj/object-info.ts +103 -6
  794. package/src/obj/object.ts +392 -151
  795. package/src/obj/power.ts +297 -59
  796. package/src/obj/randart-build.ts +1875 -1705
  797. package/src/obj/randart-data.ts +1547 -1344
  798. package/src/obj/randart-file.ts +130 -0
  799. package/src/obj/randart-log.ts +78 -0
  800. package/src/obj/randart-registry.ts +247 -0
  801. package/src/obj/randart-vectors.fixtures.ts +61 -0
  802. package/src/obj/randart-vectors.json +836 -0
  803. package/src/obj/randart-vectors.ts +369 -0
  804. package/src/obj/randart.ts +722 -552
  805. package/src/obj/rune-registry.ts +270 -0
  806. package/src/obj/rune-vectors.fixtures.ts +164 -0
  807. package/src/obj/rune-vectors.json +121 -0
  808. package/src/obj/rune-vectors.ts +229 -0
  809. package/src/obj/tval-kind-vectors.json +391 -0
  810. package/src/obj/tval-registry.ts +243 -0
  811. package/src/obj/tval-vectors.fixtures.ts +50 -0
  812. package/src/obj/tval-vectors.json +38 -0
  813. package/src/obj/tval-vectors.ts +126 -0
  814. package/src/obj/types.ts +18 -7
  815. package/src/obj/value.ts +26 -20
  816. package/src/parser.ts +214 -0
  817. package/src/player/bind.ts +5 -2
  818. package/src/player/birth.ts +2 -1
  819. package/src/player/calcs.ts +123 -42
  820. package/src/player/death.ts +78 -0
  821. package/src/player/options-file.ts +387 -0
  822. package/src/player/options.ts +2 -1
  823. package/src/player/player.ts +60 -4
  824. package/src/player/shape-lore.ts +33 -14
  825. package/src/player/timed.ts +14 -4
  826. package/src/player/types.ts +30 -4
  827. package/src/session/boot.ts +51 -1
  828. package/src/session/game.ts +720 -163
  829. package/src/session/save-migrate.ts +81 -1
  830. package/src/session/save.ts +264 -22
  831. package/src/store/bind.ts +4 -3
  832. package/src/store/mass-produce-vectors.fixtures.ts +64 -0
  833. package/src/store/mass-produce-vectors.json +1169 -0
  834. package/src/store/mass-produce-vectors.ts +67 -0
  835. package/src/store/store.ts +266 -63
  836. package/src/store/transact.ts +39 -16
  837. package/src/store/types.ts +3 -2
  838. package/src/version.ts +1 -1
  839. package/src/visuals/index.ts +1 -0
  840. package/src/visuals/map-text.ts +1 -1
  841. package/src/visuals/object-glyph.ts +76 -0
  842. package/src/visuals/prefs.ts +22 -32
  843. package/src/visuals/tile-prefs.ts +32 -0
  844. package/src/world/feature.ts +4 -1
  845. package/src/world/project.ts +19 -4
  846. package/src/world/projection.ts +79 -8
  847. package/src/world/trap.ts +25 -21
  848. package/src/world/view.ts +11 -1
package/dist/obj/power.js CHANGED
@@ -5,8 +5,18 @@
5
5
  * (object_value_real) and randart balance.
6
6
  *
7
7
  * Faithful notes / deferrals (ledgered in parity/ledger/obj-power.yaml):
8
- * - The upstream `verbose`/`log_file` logging is dropped; it never affects the
9
- * returned power. object_power's signature here is (reg, obj) with no logging.
8
+ * - The upstream `verbose`/`log_file` logging IS ported (PORT_TODO 5.5). All 59
9
+ * `log_obj` sites narrate into obj/randart-log.ts's sink, which is a
10
+ * module-level static exactly as upstream's `object_log` is - NULL for the
11
+ * whole game except inside do_randart, so objectPower on the item-pricing
12
+ * path pays nothing for it. object_power's signature stays (reg, obj): the
13
+ * `log_file` argument is what SETS that static in the C, and there is only
14
+ * ever one log. `verbose` is likewise not a parameter here - it gates four
15
+ * lines in slay_power, every randart evaluation passes it, and nothing else
16
+ * calls slayPower with a log open, so an open log is the flag.
17
+ * This note used to say the logging was dropped "because it never affects
18
+ * the returned power". That is true, and it was never the question: the
19
+ * maintainer's disposition is pursue parity.
10
20
  * - Every `wield_slot(obj) == slot_by_name(player, "shooting")` test in
11
21
  * upstream is exactly `obj->tval == TV_BOW` for the standard body (only a bow
12
22
  * maps to the shooting slot), so it is ported as tvalIsLauncher(obj.tval).
@@ -18,6 +28,7 @@
18
28
  * a bare curse template (curse->obj, which has no kind/ac/dd/ds/brands/slays)
19
29
  * can be valued; a curse template is adapted by cursePowerObject.
20
30
  */
31
+ import { randartLog, randartLogOpen, randartLogf } from "./randart-log.js";
21
32
  import { KF, OBJ_MOD, OF, TV } from "../generated/index.js";
22
33
  import { addGuardi, INT_MAX, INT_MIN, subGuardi } from "../guard.js";
23
34
  import { applyCurseAttributes, objectWeightOne, tvalIsAmmo, tvalIsJewelry, tvalIsLauncher, tvalIsMeleeWeapon, } from "./object.js";
@@ -57,31 +68,31 @@ const ARCHERY = [
57
68
  { ammoDam: 14, launchDam: 9, launchMult: 7 }, // bolt
58
69
  ];
59
70
  const FLAG_SETS = [
60
- { type: OFT.SUST, factor: 1, bonus: 10, size: 5 },
61
- { type: OFT.PROT, factor: 3, bonus: 15, size: 4 },
62
- { type: OFT.MISC, factor: 1, bonus: 25, size: 8 },
71
+ { type: OFT.SUST, factor: 1, bonus: 10, size: 5, desc: "sustains" },
72
+ { type: OFT.PROT, factor: 3, bonus: 15, size: 4, desc: "protections" },
73
+ { type: OFT.MISC, factor: 1, bonus: 25, size: 8, desc: "misc abilities" },
63
74
  ];
64
75
  const T_LRES = 0;
65
76
  const T_HRES = 1;
66
77
  const ELEMENT_SETS = [
67
- { type: T_LRES, resLevel: 3, factor: 6, bonus: INHIBIT_POWER, size: 4 },
68
- { type: T_LRES, resLevel: 1, factor: 1, bonus: 10, size: 4 },
69
- { type: T_HRES, resLevel: 1, factor: 2, bonus: 10, size: 9 },
78
+ { type: T_LRES, resLevel: 3, factor: 6, bonus: INHIBIT_POWER, size: 4, desc: "immunities" },
79
+ { type: T_LRES, resLevel: 1, factor: 1, bonus: 10, size: 4, desc: "low resists" },
80
+ { type: T_HRES, resLevel: 1, factor: 2, bonus: 10, size: 9, desc: "high resists" },
70
81
  ];
71
82
  const EL_POWERS = [
72
- { type: T_LRES, ignorePower: 3, vulnPower: -6, resPower: 5, imPower: 38 }, // acid
73
- { type: T_LRES, ignorePower: 1, vulnPower: -6, resPower: 6, imPower: 35 }, // elec
74
- { type: T_LRES, ignorePower: 3, vulnPower: -6, resPower: 6, imPower: 40 }, // fire
75
- { type: T_LRES, ignorePower: 1, vulnPower: -6, resPower: 6, imPower: 37 }, // cold
76
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 28, imPower: 0 }, // pois
77
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 6, imPower: 0 }, // light
78
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 16, imPower: 0 }, // dark
79
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 14, imPower: 0 }, // sound
80
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 8, imPower: 0 }, // shards
81
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 15, imPower: 0 }, // nexus
82
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 20, imPower: 0 }, // nether
83
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 20, imPower: 0 }, // chaos
84
- { type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 20, imPower: 0 }, // disen
83
+ { name: "acid", type: T_LRES, ignorePower: 3, vulnPower: -6, resPower: 5, imPower: 38 },
84
+ { name: "electricity", type: T_LRES, ignorePower: 1, vulnPower: -6, resPower: 6, imPower: 35 },
85
+ { name: "fire", type: T_LRES, ignorePower: 3, vulnPower: -6, resPower: 6, imPower: 40 },
86
+ { name: "cold", type: T_LRES, ignorePower: 1, vulnPower: -6, resPower: 6, imPower: 37 },
87
+ { name: "poison", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 28, imPower: 0 },
88
+ { name: "light", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 6, imPower: 0 },
89
+ { name: "dark", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 16, imPower: 0 },
90
+ { name: "sound", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 14, imPower: 0 },
91
+ { name: "shards", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 8, imPower: 0 },
92
+ { name: "nexus", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 15, imPower: 0 },
93
+ { name: "nether", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 20, imPower: 0 },
94
+ { name: "chaos", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 20, imPower: 0 },
95
+ { name: "disenchantment", type: T_HRES, ignorePower: 0, vulnPower: 0, resPower: 20, imPower: 0 },
85
96
  ];
86
97
  /** Boost ratings for combinations of ability bonuses (index bonus/10). */
87
98
  const ABILITY_POWER = [
@@ -133,15 +144,23 @@ function powerClone(obj) {
133
144
  /* Property lookup (obj-properties.c L24) */
134
145
  /* ------------------------------------------------------------------ */
135
146
  /**
136
- * lookup_obj_property: the property whose type and stored index match. Stats
137
- * count as mods for a MOD lookup, exactly as upstream.
147
+ * lookup_obj_property (obj-properties.c:196) over a bare property table: the
148
+ * property whose type and stored index match, PLUS upstream's "special case -
149
+ * stats count as mods" (:207), which is the half that is easy to leave out and
150
+ * costs a NAME when you do.
151
+ *
152
+ * THE ONE IMPLEMENTATION. player/shape-lore.ts had a second copy that omitted
153
+ * the special case, so every shape's stat line rendered as "Adds -3 to ." with
154
+ * an empty name - a screen-visible blank that the copy with the special case
155
+ * could never have produced. Anything needing this lookup calls here.
138
156
  */
139
- export function lookupObjProperty(reg, type, index) {
140
- for (const prop of reg.properties) {
157
+ export function lookupObjPropertyIn(properties, type, index) {
158
+ for (const prop of properties) {
141
159
  if (!prop)
142
160
  continue;
143
161
  if (prop.type === type && prop.propIndex === index)
144
162
  return prop;
163
+ /* Special case - stats count as mods (obj-properties.c:207). */
145
164
  if (type === OBJ_PROPERTY.MOD &&
146
165
  prop.type === OBJ_PROPERTY.STAT &&
147
166
  prop.propIndex === index) {
@@ -150,21 +169,32 @@ export function lookupObjProperty(reg, type, index) {
150
169
  }
151
170
  return null;
152
171
  }
172
+ /** lookup_obj_property against an ObjRegistry's table. */
173
+ export function lookupObjProperty(reg, type, index) {
174
+ return lookupObjPropertyIn(reg.properties, type, index);
175
+ }
153
176
  /* ------------------------------------------------------------------ */
154
177
  /* Power helper ratings (obj-power.c) */
155
178
  /* ------------------------------------------------------------------ */
156
179
  function bowMultiplier(obj) {
157
180
  if (obj.tval !== TV.BOW)
158
181
  return 1;
159
- return obj.pval;
182
+ const mult = obj.pval;
183
+ randartLogf(() => `Base mult for this weapon is ${mult}\n`);
184
+ return mult;
160
185
  }
161
186
  function toDamagePower(obj) {
162
187
  let p = Math.trunc((obj.toD * DAMAGE_POWER) / 2);
188
+ if (p)
189
+ randartLogf(() => `${p} power from to_dam\n`);
163
190
  /* Add a second lot of damage power for non-weapons. */
164
191
  if (!tvalIsLauncher(obj.tval) &&
165
192
  !tvalIsMeleeWeapon(obj.tval) &&
166
193
  !tvalIsAmmo(obj.tval)) {
167
- p += obj.toD * DAMAGE_POWER;
194
+ const q = obj.toD * DAMAGE_POWER;
195
+ p += q;
196
+ if (q)
197
+ randartLogf(() => `Add ${q} from non-weapon to_dam, total ${p}\n`);
168
198
  }
169
199
  return p;
170
200
  }
@@ -172,6 +202,9 @@ function damageDicePower(obj) {
172
202
  let dice = 0;
173
203
  if (tvalIsMeleeWeapon(obj.tval) || tvalIsAmmo(obj.tval)) {
174
204
  dice = Math.trunc((obj.dd * (obj.ds + 1) * DAMAGE_POWER) / 4);
205
+ /* No newline, deliberately: object_power continues the line with
206
+ * "total is %d" once damage_dice_power returns (obj-power.c L1017). */
207
+ randartLogf(() => `Add ${dice} power for damage dice, `);
175
208
  }
176
209
  else if (!tvalIsLauncher(obj.tval)) {
177
210
  /* Power boost for nonweapons with combat flags. */
@@ -181,11 +214,12 @@ function damageDicePower(obj) {
181
214
  (obj.modifiers[OBJ_MOD.SHOTS] ?? 0) > 0 ||
182
215
  (obj.modifiers[OBJ_MOD.MIGHT] ?? 0) > 0) {
183
216
  dice = WEAP_DAMAGE * DAMAGE_POWER;
217
+ randartLogf(() => `Add ${dice} power for non-weapon combat bonuses, `);
184
218
  }
185
219
  }
186
220
  return dice;
187
221
  }
188
- function ammoDamagePower(obj) {
222
+ function ammoDamagePower(obj, p) {
189
223
  if (!tvalIsLauncher(obj.tval))
190
224
  return 0;
191
225
  let launcher = -1;
@@ -198,7 +232,11 @@ function ammoDamagePower(obj) {
198
232
  launcher = 2;
199
233
  if (launcher === -1)
200
234
  return 0;
201
- return Math.trunc((ARCHERY[launcher].ammoDam * DAMAGE_POWER) / 2);
235
+ const q = Math.trunc((ARCHERY[launcher].ammoDam * DAMAGE_POWER) / 2);
236
+ /* Logs p + q, the running total, not the return value - which is why this
237
+ * function takes p at all (obj-power.c L239). */
238
+ randartLogf(() => `Adding ${q} power from ammo, total is ${p + q}\n`);
239
+ return q;
202
240
  }
203
241
  function launcherAmmoDamagePower(obj, p) {
204
242
  if (!tvalIsAmmo(obj.tval))
@@ -212,37 +250,50 @@ function launcherAmmoDamagePower(obj, p) {
212
250
  if (obj.ego)
213
251
  p += Math.trunc((a.launchDam * DAMAGE_POWER) / 2);
214
252
  p = Math.trunc((p * a.launchMult) / (2 * MAX_BLOWS));
253
+ randartLogf(() => `After multiplying ammo and rescaling, power is ${p}\n`);
215
254
  return p;
216
255
  }
217
256
  function extraBlowsPower(obj, p) {
218
257
  const blows = obj.modifiers[OBJ_MOD.BLOWS] ?? 0;
219
258
  if (blows === 0)
220
259
  return p;
221
- if (blows >= INHIBIT_BLOWS)
260
+ const before = p;
261
+ if (blows >= INHIBIT_BLOWS) {
262
+ randartLog(`INHIBITING - too many extra blows - quitting\n`);
222
263
  return p + INHIBIT_POWER;
264
+ }
223
265
  p = Math.trunc((p * (MAX_BLOWS + blows)) / MAX_BLOWS);
224
266
  /* Add boost for assumed off-weapon damage. */
225
267
  p += Math.trunc((NONWEAP_DAMAGE * blows * DAMAGE_POWER) / 2);
268
+ randartLogf(() => `Add ${p - before} power for extra blows, total is ${p}\n`);
226
269
  return p;
227
270
  }
228
271
  function extraShotsPower(obj, p) {
229
272
  const shots = obj.modifiers[OBJ_MOD.SHOTS] ?? 0;
230
273
  if (shots === 0)
231
274
  return p;
232
- if (shots >= INHIBIT_SHOTS)
275
+ if (shots >= INHIBIT_SHOTS) {
276
+ randartLog(`INHIBITING - too many extra shots - quitting\n`);
233
277
  return p + INHIBIT_POWER;
278
+ }
234
279
  if (shots > 0) {
235
280
  p *= 10 + shots;
236
281
  p = Math.trunc(p / 10);
282
+ /* "%d%%" is a literal percent sign in the C. */
283
+ randartLogf(() => `Adding ${10 * shots}% power for extra shots, total is ${p}\n`);
237
284
  }
238
285
  return p;
239
286
  }
240
287
  function extraMightPower(obj, p, mult) {
241
288
  const might = obj.modifiers[OBJ_MOD.MIGHT] ?? 0;
242
- if (might >= INHIBIT_MIGHT)
289
+ if (might >= INHIBIT_MIGHT) {
290
+ randartLog(`INHIBITING - too much extra might - quitting\n`);
243
291
  return p + INHIBIT_POWER;
292
+ }
244
293
  mult += might;
294
+ randartLogf(() => `Mult after extra might is ${mult}\n`);
245
295
  p *= mult;
296
+ randartLogf(() => `After multiplying power for might, total is ${p}\n`);
246
297
  return p;
247
298
  }
248
299
  function slayPower(reg, obj, p, dicePwr) {
@@ -275,45 +326,88 @@ function slayPower(reg, obj, p, dicePwr) {
275
326
  }
276
327
  if (numSlays + numBrands + numKills === 0)
277
328
  return p;
329
+ /* The `verbose` half (obj-power.c L370-393). Upstream threads a bool from
330
+ * object_power's caller purely to gate these four lines; every randart
331
+ * evaluation passes it, and nothing else in the port calls slayPower with a
332
+ * log open, so an open log IS the verbose flag here. */
333
+ if (randartLogOpen()) {
334
+ randartLog(`Slay and brands: `);
335
+ if (obj.brands) {
336
+ for (let i = 1; i < reg.brands.length; i++) {
337
+ if (obj.brands[i]) {
338
+ const b = reg.brands[i];
339
+ randartLog(`${b.name}x${b.multiplier} `);
340
+ }
341
+ }
342
+ }
343
+ if (obj.slays) {
344
+ for (let i = 1; i < reg.slays.length; i++) {
345
+ if (obj.slays[i]) {
346
+ const sl = reg.slays[i];
347
+ randartLog(`${sl.name}x${sl.multiplier} `);
348
+ }
349
+ }
350
+ }
351
+ randartLog(`\nbest power is : ${bestPower}\n`);
352
+ }
278
353
  let q = Math.trunc((dicePwr * dicePwr * (bestPower - 100)) / 2500);
279
354
  p += q;
355
+ randartLogf(() => `Add ${q} for slay power, total is ${p}\n`);
280
356
  if (numSlays > 1) {
281
357
  q = Math.trunc((numSlays * numSlays * dicePwr) / (DAMAGE_POWER * 5));
282
358
  p += q;
359
+ randartLogf(() => `Add ${q} power for multiple slays, total is ${p}\n`);
283
360
  }
284
361
  if (numBrands > 1) {
285
362
  q = Math.trunc((2 * numBrands * numBrands * dicePwr) / (DAMAGE_POWER * 5));
286
363
  p += q;
364
+ randartLogf(() => `Add ${q} power for multiple brands, total is ${p}\n`);
287
365
  }
288
366
  if (numSlays && numBrands) {
289
367
  q = Math.trunc((numSlays * numBrands * dicePwr) / (DAMAGE_POWER * 5));
290
368
  p += q;
369
+ randartLogf(() => `Add ${q} power for slay and brand, total is ${p}\n`);
291
370
  }
292
371
  if (numKills > 1) {
293
372
  q = Math.trunc((3 * numKills * numKills * dicePwr) / (DAMAGE_POWER * 5));
294
373
  p += q;
374
+ randartLogf(() => `Add ${q} power for multiple kills, total is ${p}\n`);
295
375
  }
296
- if (numSlays === 8)
376
+ if (numSlays === 8) {
297
377
  p += 10;
298
- if (numBrands === 5)
378
+ randartLogf(() => `Add 10 power for full set of slays, total is ${p}\n`);
379
+ }
380
+ if (numBrands === 5) {
299
381
  p += 20;
300
- if (numKills === 3)
382
+ randartLogf(() => `Add 20 power for full set of brands, total is ${p}\n`);
383
+ }
384
+ if (numKills === 3) {
301
385
  p += 20;
386
+ randartLogf(() => `Add 20 power for full set of kills, total is ${p}\n`);
387
+ }
302
388
  return p;
303
389
  }
304
390
  function rescaleBowPower(obj, p) {
305
- if (tvalIsLauncher(obj.tval))
391
+ if (tvalIsLauncher(obj.tval)) {
306
392
  p = Math.trunc(p / MAX_BLOWS);
393
+ randartLogf(() => `Rescaling bow power, total is ${p}\n`);
394
+ }
307
395
  return p;
308
396
  }
309
397
  function toHitPower(obj, p) {
310
- return p + Math.trunc((obj.toH * TO_HIT_POWER) / 2);
398
+ const q = Math.trunc((obj.toH * TO_HIT_POWER) / 2);
399
+ p += q;
400
+ /* Gated on the TOTAL being non-zero, not the addend (obj-power.c L458). */
401
+ if (p)
402
+ randartLogf(() => `Add ${q} power for to hit, total is ${p}\n`);
403
+ return p;
311
404
  }
312
405
  function acPower(reg, obj, p) {
313
406
  if (obj.ac) {
314
407
  const weight = objectWeightOne(obj, reg.curses);
315
408
  p += BASE_ARMOUR_POWER;
316
409
  let q = Math.trunc((obj.ac * BASE_AC_POWER) / 2);
410
+ randartLogf(() => `Adding ${q} power for base AC value\n`);
317
411
  if (weight > 0) {
318
412
  let i = Math.trunc((750 * (obj.ac + obj.toA)) / weight);
319
413
  /* Avoid overpricing Elven Cloaks. */
@@ -327,26 +421,37 @@ function acPower(reg, obj, p) {
327
421
  q *= 5;
328
422
  }
329
423
  p += q;
424
+ randartLogf(() => `Add ${q} power for AC per unit weight, now ${p}\n`);
330
425
  }
331
426
  return p;
332
427
  }
333
428
  function toAcPower(obj, p) {
334
429
  if (obj.toA === 0)
335
430
  return p;
336
- p += Math.trunc((obj.toA * TO_AC_POWER) / 2);
431
+ let q = Math.trunc((obj.toA * TO_AC_POWER) / 2);
432
+ p += q;
433
+ randartLogf(() => `Add ${q} power for to_ac of ${obj.toA}, total is ${p}\n`);
337
434
  if (obj.toA > HIGH_TO_AC) {
338
- p += (obj.toA - (HIGH_TO_AC - 1)) * TO_AC_POWER;
435
+ q = (obj.toA - (HIGH_TO_AC - 1)) * TO_AC_POWER;
436
+ p += q;
437
+ randartLogf(() => `Add ${q} power for high to_ac, total is ${p}\n`);
339
438
  }
340
439
  if (obj.toA > VERYHIGH_TO_AC) {
341
- p += (obj.toA - (VERYHIGH_TO_AC - 1)) * TO_AC_POWER * 2;
440
+ q = (obj.toA - (VERYHIGH_TO_AC - 1)) * TO_AC_POWER * 2;
441
+ p += q;
442
+ randartLogf(() => `Add ${q} power for very high to_ac, total is ${p}\n`);
342
443
  }
343
- if (obj.toA >= INHIBIT_AC)
444
+ if (obj.toA >= INHIBIT_AC) {
344
445
  p += INHIBIT_POWER;
446
+ randartLog(`INHIBITING: AC bonus too high\n`);
447
+ }
345
448
  return p;
346
449
  }
347
450
  function jewelryPower(obj, p) {
348
- if (tvalIsJewelry(obj.tval))
451
+ if (tvalIsJewelry(obj.tval)) {
349
452
  p += BASE_JEWELRY_POWER;
453
+ randartLogf(() => `Adding ${BASE_JEWELRY_POWER} power for jewelry, total is ${p}\n`);
454
+ }
350
455
  return p;
351
456
  }
352
457
  function modifierPower(reg, obj, p) {
@@ -358,10 +463,15 @@ function modifierPower(reg, obj, p) {
358
463
  const k = obj.modifiers[i] ?? 0;
359
464
  extraStatBonus += k * mod.mult;
360
465
  if (mod.power) {
361
- p += k * mod.power * (mod.typeMult[obj.tval] ?? 1);
466
+ const q = k * mod.power * (mod.typeMult[obj.tval] ?? 1);
467
+ p += q;
468
+ if (q) {
469
+ randartLogf(() => `Add ${q} power for ${k} ${mod.name}, total is ${p}\n`);
470
+ }
362
471
  }
363
472
  }
364
473
  if (extraStatBonus > 249) {
474
+ randartLogf(() => `Inhibiting - Total ability bonus of ${extraStatBonus} is too high\n`);
365
475
  p += INHIBIT_POWER;
366
476
  }
367
477
  else if (extraStatBonus > 0) {
@@ -369,6 +479,7 @@ function modifierPower(reg, obj, p) {
369
479
  if (!q)
370
480
  return p;
371
481
  p += q;
482
+ randartLogf(() => `Add ${q} power for modifier total of ${extraStatBonus}, total is ${p}\n`);
372
483
  }
373
484
  return p;
374
485
  }
@@ -380,7 +491,9 @@ function flagsPower(reg, obj, p) {
380
491
  if (!flag)
381
492
  continue;
382
493
  if (flag.power) {
383
- p += flag.power * (flag.typeMult[obj.tval] ?? 1);
494
+ const q = flag.power * (flag.typeMult[obj.tval] ?? 1);
495
+ p += q;
496
+ randartLogf(() => `Add ${q} power for ${flag.name}, total is ${p}\n`);
384
497
  }
385
498
  for (let j = 0; j < FLAG_SETS.length; j++) {
386
499
  if (FLAG_SETS[j].type === flag.subtype)
@@ -390,10 +503,16 @@ function flagsPower(reg, obj, p) {
390
503
  for (let i = 0; i < FLAG_SETS.length; i++) {
391
504
  const set = FLAG_SETS[i];
392
505
  const count = counts[i];
393
- if (count > 1)
394
- p += set.factor * count * count;
395
- if (count === set.size)
396
- p += set.bonus;
506
+ if (count > 1) {
507
+ const q = set.factor * count * count;
508
+ p += q;
509
+ randartLogf(() => `Add ${q} power for multiple ${set.desc}, total is ${p}\n`);
510
+ }
511
+ if (count === set.size) {
512
+ const q = set.bonus;
513
+ p += q;
514
+ randartLogf(() => `Add ${q} power for full set of ${set.desc}, total is ${p}\n`);
515
+ }
397
516
  }
398
517
  return p;
399
518
  }
@@ -403,19 +522,30 @@ function elementPower(obj, p) {
403
522
  const el = EL_POWERS[i];
404
523
  const ei = obj.elInfo[i];
405
524
  if ((ei.flags & EL_INFO_IGNORE) !== 0 && el.ignorePower !== 0) {
406
- p += el.ignorePower;
525
+ const q = el.ignorePower;
526
+ p += q;
527
+ randartLogf(() => `Add ${q} power for ignoring ${el.name}, total is ${p}\n`);
407
528
  }
408
529
  if (ei.resLevel === -1) {
409
- if (el.vulnPower !== 0)
410
- p += el.vulnPower;
530
+ if (el.vulnPower !== 0) {
531
+ const q = el.vulnPower;
532
+ p += q;
533
+ randartLogf(() => `Add ${q} power for vulnerability to ${el.name}, total is ${p}\n`);
534
+ }
411
535
  }
412
536
  else if (ei.resLevel === 1) {
413
- if (el.resPower !== 0)
414
- p += el.resPower;
537
+ if (el.resPower !== 0) {
538
+ const q = el.resPower;
539
+ p += q;
540
+ randartLogf(() => `Add ${q} power for resistance to ${el.name}, total is ${p}\n`);
541
+ }
415
542
  }
416
543
  else if (ei.resLevel === 3) {
417
- if (el.imPower !== 0)
418
- p += el.imPower + el.resPower;
544
+ if (el.imPower !== 0) {
545
+ const q = el.imPower + el.resPower;
546
+ p += q;
547
+ randartLogf(() => `Add ${q} power for immunity to ${el.name}, total is ${p}\n`);
548
+ }
419
549
  }
420
550
  for (let j = 0; j < ELEMENT_SETS.length; j++) {
421
551
  const set = ELEMENT_SETS[j];
@@ -426,10 +556,16 @@ function elementPower(obj, p) {
426
556
  for (let i = 0; i < ELEMENT_SETS.length; i++) {
427
557
  const set = ELEMENT_SETS[i];
428
558
  const count = counts[i];
429
- if (count > 1)
430
- p += set.factor * count * count;
431
- if (count === set.size)
432
- p += set.bonus;
559
+ if (count > 1) {
560
+ const q = set.factor * count * count;
561
+ p += q;
562
+ randartLogf(() => `Add ${q} power for multiple ${set.desc}, total is ${p}\n`);
563
+ }
564
+ if (count === set.size) {
565
+ const q = set.bonus;
566
+ p += q;
567
+ randartLogf(() => `Add ${q} power for full set of ${set.desc}, total is ${p}\n`);
568
+ }
433
569
  }
434
570
  return p;
435
571
  }
@@ -439,8 +575,10 @@ function effectsPower(obj, p) {
439
575
  q = obj.activation.power;
440
576
  else if (obj.kind && obj.kind.power)
441
577
  q = obj.kind.power;
442
- if (q)
578
+ if (q) {
443
579
  p += q;
580
+ randartLogf(() => `Add ${q} power for item activation, total is ${p}\n`);
581
+ }
444
582
  return p;
445
583
  }
446
584
  /** Scale v by num with the same INT_MIN/INT_MAX clamp as upstream. */
@@ -469,8 +607,11 @@ function cursePower(reg, obj, p) {
469
607
  weightAffecting = true;
470
608
  continue;
471
609
  }
610
+ const cname = reg.curses[i].name;
611
+ randartLogf(() => `Calculating ${cname} curse power...\n`);
472
612
  let cp = objectPower(reg, cursePowerObject(cobj));
473
613
  cp -= Math.trunc(power / 10);
614
+ randartLogf(() => `Adjust for strength of curse, ${cp} for ${cname} curse power\n`);
474
615
  q += cp;
475
616
  }
476
617
  /* Pass 2: weight-affecting curses, valued by difference of merged power. */
@@ -479,6 +620,7 @@ function cursePower(reg, obj, p) {
479
620
  applyCurseAttributes(reg.curses, -1, objLocal);
480
621
  objLocal.curses = null;
481
622
  const pAllCurse = objectPower(reg, objLocal);
623
+ randartLogf(() => `Power is ${pAllCurse} with all curses applied\n`);
482
624
  for (let i = 1; i < reg.curses.length; i++) {
483
625
  const power = obj.curses[i]?.power ?? 0;
484
626
  if (!power)
@@ -495,18 +637,23 @@ function cursePower(reg, obj, p) {
495
637
  applyCurseAttributes(reg.curses, i, objLocal);
496
638
  objLocal.curses = null;
497
639
  const pAllButI = objectPower(reg, objLocal);
640
+ const cname = reg.curses[i].name;
641
+ randartLogf(() => `Power is ${pAllButI} with all but ${cname} curse applied\n`);
498
642
  let pCurse = subGuardi(pAllCurse, pAllButI);
499
643
  if (pCurse < 0) {
500
644
  const resistance = Math.max(20, Math.min(100, power));
501
645
  pCurse = scaleGuarded(pCurse, resistance);
502
646
  pCurse = Math.trunc(pCurse / 100);
503
647
  }
648
+ randartLogf(() => `Adjusted power is ${pCurse} for ${cname} curse\n`);
504
649
  q = addGuardi(q, pCurse);
505
650
  }
506
651
  }
507
652
  }
508
- if (q !== 0)
653
+ if (q !== 0) {
509
654
  p += q;
655
+ randartLogf(() => `Total of ${q} power added for curses, total is ${p}\n`);
656
+ }
510
657
  return p;
511
658
  }
512
659
  function nonstandardWeightPower(reg, obj, p) {
@@ -526,16 +673,31 @@ function nonstandardWeightPower(reg, obj, p) {
526
673
  /* ac_power already accounted for weight when the object provides base AC. */
527
674
  if (!obj.ac) {
528
675
  const adjWc = Math.trunc((stdWeight - nonstdWeight) / WGT_POWER_DEN_NOBASEAC);
529
- adj = addGuardi(adj, scaleGuarded(adjWc, WGT_POWER_NUM_NOBASEAC));
676
+ const scaled = scaleGuarded(adjWc, WGT_POWER_NUM_NOBASEAC);
677
+ randartLogf(() => `Add ${scaled} power for non-standard weight of object not affecting base armor.\n`);
678
+ adj = addGuardi(adj, scaled);
530
679
  }
531
680
  /* THROWING items can gain damage with weight. */
532
681
  if (flags.has(OF.THROWING)) {
533
682
  const adjTh = Math.trunc(nonstdWeight / WGT_POWER_DEN_THROW) -
534
683
  Math.trunc(stdWeight / WGT_POWER_DEN_THROW);
535
- adj = addGuardi(adj, scaleGuarded(adjTh, WGT_POWER_NUM_THROW));
684
+ const scaled = scaleGuarded(adjTh, WGT_POWER_NUM_THROW);
685
+ randartLogf(() => `Add ${scaled} power for non-standard weight of object good for throwing.\n`);
686
+ adj = addGuardi(adj, scaled);
536
687
  }
537
- if (adj)
688
+ if (adj) {
538
689
  p = addGuardi(p, adj);
690
+ /* UPSTREAM TYPO, NOT REPRODUCED. obj-power.c:994 passes an int to "%p":
691
+ * log_obj("Add %d power combined for non-standard weight; "
692
+ * "total is %p\n", adj, p);
693
+ * That is undefined behaviour with no portable output - glibc prints a
694
+ * pointer-formatted value of whatever ends up in the register - so there
695
+ * is nothing here to be byte-identical TO. The port prints the number the
696
+ * line plainly means. Recorded in parity/ledger/obj-power.yaml rather
697
+ * than silently normalised, because a wart this port would usually keep
698
+ * (see the staircase invariant) is being dropped on purpose. */
699
+ randartLogf(() => `Add ${adj} power combined for non-standard weight; total is ${p}\n`);
700
+ }
539
701
  return p;
540
702
  }
541
703
  /* ------------------------------------------------------------------ */
@@ -549,7 +711,10 @@ export function objectPower(reg, obj) {
549
711
  let p = toDamagePower(obj);
550
712
  const dicePwr = damageDicePower(obj);
551
713
  p += dicePwr;
552
- p += ammoDamagePower(obj);
714
+ /* Completes damage_dice_power's trailing "Add %d power for damage dice, ". */
715
+ if (dicePwr)
716
+ randartLogf(() => `total is ${p}\n`);
717
+ p += ammoDamagePower(obj, p);
553
718
  const mult = bowMultiplier(obj);
554
719
  p = launcherAmmoDamagePower(obj, p);
555
720
  p = extraBlowsPower(obj, p);
@@ -576,6 +741,7 @@ export function objectPower(reg, obj) {
576
741
  p = effectsPower(obj, p);
577
742
  p = cursePower(reg, obj, p);
578
743
  p = nonstandardWeightPower(reg, obj, p);
744
+ randartLogf(() => `FINAL POWER IS ${p}\n`);
579
745
  return p;
580
746
  }
581
747
  //# sourceMappingURL=power.js.map