@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,1444 @@
1
+ /**
2
+ * Random artifact generation: the artifact-building primitives, ported from
3
+ * reference/src/obj-randart.c (Angband 4.2.6) lines 1332-2670. These are the
4
+ * routines do_randart uses to construct a single random artifact: pick a base
5
+ * item (get_base_item), seed it with its base stats (artifact_prep), build its
6
+ * per-item ability frequency table (build_freq_table), optionally supercharge
7
+ * it (try_supercharge), and then add individual abilities/curses via the many
8
+ * add_* helpers, choose_ability, add_ability(_aux), remove_contradictory and
9
+ * make_bad.
10
+ *
11
+ * Every routine that needs randomness takes an Rng explicitly (no globals) and
12
+ * draws in the exact upstream order so a randart_seed remains reproducible. The
13
+ * two inhibiting macros are, per upstream obj-randart.h:
14
+ * INHIBIT_STRONG => rng.oneIn(6) (one_in_(6))
15
+ * INHIBIT_WEAK => rng.oneIn(2) (one_in_(2))
16
+ * Each textual occurrence of these macros consumes one draw, and C's
17
+ * short-circuit evaluation of && / || is reproduced exactly so no draw is
18
+ * added or dropped.
19
+ *
20
+ * Faithful notes / approximations:
21
+ * - The upstream file_putf(log_file, ...) logging is dropped throughout; it
22
+ * never affects any returned value or RNG draw (same convention as power.ts
23
+ * and randart-data.ts). Where a routine's only use of a value was logging
24
+ * (e.g. lookup_obj_property in add_flag / add_mod), that lookup is dropped.
25
+ * - add_brand adds the resist matching the picked brand by comparing the
26
+ * brand's name to projections[element].name for the four base elements.
27
+ * Projections are not bound in ObjRegistry, so the base-element projection
28
+ * names are held in a small local table (BASE_ELEMENT_PROJ_NAMES) mirroring
29
+ * projection.txt / projection.json; noted as an approximation.
30
+ * - remove_contradictory_activation depends on effect_summarize_properties
31
+ * (effects-info.c). That summarizer lives in the effects domain, so it is
32
+ * ported in ./effects-info.ts (makeActivationSummarizer) and injected here as
33
+ * the ActivationSummarizer seam. It consumes no RNG and only ever nulls an
34
+ * activation when it is fully redundant with the artifact's other properties.
35
+ * When no summarizer is supplied this stays a conservative no-op (activations
36
+ * are never treated as redundant).
37
+ * - artifact_curse_conflicts's TIMED_INC "effect foiled by an existing
38
+ * property" branch depends on the timed-effects failure tables (not ported);
39
+ * only the explicit conflict-flags branch is ported. This affects only the
40
+ * cursed-artifact path (make_bad) and consumes no RNG. Noted as an
41
+ * approximation.
42
+ * - add_curse computes power as randint1(9) + 10 * m_bonus(9, level); C leaves
43
+ * the evaluation order of the two calls unspecified, so this port draws
44
+ * randint1 then m_bonus (left-to-right textual order).
45
+ */
46
+ import { ELEM, KF, OBJ_MOD, OF, STAT_ENTRIES, TV } from "../generated/index.js";
47
+ import { ART_IDX } from "../generated/randart-properties.js";
48
+ import { copyBrands, copySlays, curseTimedIncFoiled } from "./object.js";
49
+ import { INHIBIT_POWER } from "./power.js";
50
+ import { EL_INFO_IGNORE, ELEM_BASE_MIN, ELEM_HIGH_MIN, OBJ_MOD_MAX, } from "./types.js";
51
+ /* ------------------------------------------------------------------ */
52
+ /* Constants (obj-randart.h, obj-power.h) */
53
+ /* ------------------------------------------------------------------ */
54
+ /** MAX_TRIES (obj-randart.h L28). */
55
+ const MAX_TRIES = 200;
56
+ /**
57
+ * AGGR_POWER (obj-randart.h L47): power below which uncursed randarts cannot
58
+ * aggravate.
59
+ */
60
+ const AGGR_POWER = 300;
61
+ /** STAT_MAX (list-stats.h): the number of player stats. */
62
+ const STAT_MAX = STAT_ENTRIES.length;
63
+ /** Inhibiting thresholds (obj-power.h L67-L76). */
64
+ const INHIBIT_BLOWS = 3;
65
+ const INHIBIT_MIGHT = 4;
66
+ const INHIBIT_SHOTS = 21;
67
+ const HIGH_TO_HIT = 16;
68
+ const VERYHIGH_TO_HIT = 26;
69
+ const HIGH_TO_DAM = 16;
70
+ const VERYHIGH_TO_DAM = 26;
71
+ const HIGH_TO_AC = 26;
72
+ const VERYHIGH_TO_AC = 36;
73
+ /** ART_IDX_TOTAL (obj-randart.h): number of learned-probability slots. */
74
+ const ART_IDX_TOTAL = ART_IDX.TOTAL;
75
+ /**
76
+ * projections[element].name for the four base elements (projection.txt), used
77
+ * by add_brand to add the resist that matches the brand it just added.
78
+ * Projections are not bound in ObjRegistry, so the names are held here.
79
+ * Indexed by ELEM value (ACID..COLD).
80
+ */
81
+ const BASE_ELEMENT_PROJ_NAMES = [
82
+ "acid", // ELEM_ACID
83
+ "lightning", // ELEM_ELEC
84
+ "fire", // ELEM_FIRE
85
+ "cold", // ELEM_COLD
86
+ ];
87
+ /* ------------------------------------------------------------------ */
88
+ /* Arrays of indices by item type (obj-randart.c L52) */
89
+ /* ------------------------------------------------------------------ */
90
+ const artIdxBow = [
91
+ ART_IDX.BOW_SHOTS,
92
+ ART_IDX.BOW_MIGHT,
93
+ ART_IDX.BOW_BRAND,
94
+ ART_IDX.BOW_SLAY,
95
+ ];
96
+ const artIdxWeapon = [
97
+ ART_IDX.WEAPON_HIT,
98
+ ART_IDX.WEAPON_DAM,
99
+ ART_IDX.WEAPON_AGGR,
100
+ ];
101
+ const artIdxNonweapon = [
102
+ ART_IDX.NONWEAPON_HIT,
103
+ ART_IDX.NONWEAPON_DAM,
104
+ ART_IDX.NONWEAPON_HIT_DAM,
105
+ ART_IDX.NONWEAPON_AGGR,
106
+ ART_IDX.NONWEAPON_BRAND,
107
+ ART_IDX.NONWEAPON_SLAY,
108
+ ART_IDX.NONWEAPON_BLOWS,
109
+ ART_IDX.NONWEAPON_SHOTS,
110
+ ];
111
+ const artIdxMelee = [
112
+ ART_IDX.MELEE_BLESS,
113
+ ART_IDX.MELEE_SINV,
114
+ ART_IDX.MELEE_BRAND,
115
+ ART_IDX.MELEE_SLAY,
116
+ ART_IDX.MELEE_BLOWS,
117
+ ART_IDX.MELEE_AC,
118
+ ART_IDX.MELEE_DICE,
119
+ ART_IDX.MELEE_WEIGHT,
120
+ ART_IDX.MELEE_TUNN,
121
+ ];
122
+ const artIdxAllarmor = [ART_IDX.ALLARMOR_WEIGHT];
123
+ const artIdxBoot = [
124
+ ART_IDX.BOOT_AC,
125
+ ART_IDX.BOOT_FEATHER,
126
+ ART_IDX.BOOT_STEALTH,
127
+ ART_IDX.BOOT_TRAP_IMM,
128
+ ART_IDX.BOOT_SPEED,
129
+ ART_IDX.BOOT_MOVES,
130
+ ];
131
+ const artIdxGlove = [
132
+ ART_IDX.GLOVE_AC,
133
+ ART_IDX.GLOVE_HIT_DAM,
134
+ ART_IDX.GLOVE_FA,
135
+ ART_IDX.GLOVE_DEX,
136
+ ];
137
+ const artIdxHeadgear = [
138
+ ART_IDX.HELM_AC,
139
+ ART_IDX.HELM_RBLIND,
140
+ ART_IDX.HELM_ESP,
141
+ ART_IDX.HELM_SINV,
142
+ ART_IDX.HELM_WIS,
143
+ ART_IDX.HELM_INT,
144
+ ];
145
+ const artIdxShield = [
146
+ ART_IDX.SHIELD_AC,
147
+ ART_IDX.SHIELD_LRES,
148
+ ];
149
+ const artIdxCloak = [
150
+ ART_IDX.CLOAK_AC,
151
+ ART_IDX.CLOAK_STEALTH,
152
+ ];
153
+ const artIdxArmor = [
154
+ ART_IDX.ARMOR_AC,
155
+ ART_IDX.ARMOR_STEALTH,
156
+ ART_IDX.ARMOR_HLIFE,
157
+ ART_IDX.ARMOR_CON,
158
+ ART_IDX.ARMOR_LRES,
159
+ ART_IDX.ARMOR_ALLRES,
160
+ ART_IDX.ARMOR_HRES,
161
+ ];
162
+ const artIdxGen = [
163
+ ART_IDX.GEN_STAT,
164
+ ART_IDX.GEN_SUST,
165
+ ART_IDX.GEN_STEALTH,
166
+ ART_IDX.GEN_SEARCH,
167
+ ART_IDX.GEN_INFRA,
168
+ ART_IDX.GEN_SPEED,
169
+ ART_IDX.GEN_IMMUNE,
170
+ ART_IDX.GEN_FA,
171
+ ART_IDX.GEN_HLIFE,
172
+ ART_IDX.GEN_FEATHER,
173
+ ART_IDX.GEN_LIGHT,
174
+ ART_IDX.GEN_SINV,
175
+ ART_IDX.GEN_ESP,
176
+ ART_IDX.GEN_SDIG,
177
+ ART_IDX.GEN_REGEN,
178
+ ART_IDX.GEN_LRES,
179
+ ART_IDX.GEN_RPOIS,
180
+ ART_IDX.GEN_RFEAR,
181
+ ART_IDX.GEN_RLIGHT,
182
+ ART_IDX.GEN_RDARK,
183
+ ART_IDX.GEN_RBLIND,
184
+ ART_IDX.GEN_RCONF,
185
+ ART_IDX.GEN_RSOUND,
186
+ ART_IDX.GEN_RSHARD,
187
+ ART_IDX.GEN_RNEXUS,
188
+ ART_IDX.GEN_RNETHER,
189
+ ART_IDX.GEN_RCHAOS,
190
+ ART_IDX.GEN_RDISEN,
191
+ ART_IDX.GEN_AC,
192
+ ART_IDX.GEN_TUNN,
193
+ ART_IDX.GEN_ACTIV,
194
+ ART_IDX.GEN_PSTUN,
195
+ ART_IDX.GEN_DAM_RED,
196
+ ART_IDX.GEN_MOVES,
197
+ ART_IDX.GEN_TRAP_IMM,
198
+ ];
199
+ const artIdxHighResist = [
200
+ ART_IDX.GEN_RPOIS,
201
+ ART_IDX.GEN_RFEAR,
202
+ ART_IDX.GEN_RLIGHT,
203
+ ART_IDX.GEN_RDARK,
204
+ ART_IDX.GEN_RBLIND,
205
+ ART_IDX.GEN_RCONF,
206
+ ART_IDX.GEN_RSOUND,
207
+ ART_IDX.GEN_RSHARD,
208
+ ART_IDX.GEN_RNEXUS,
209
+ ART_IDX.GEN_RNETHER,
210
+ ART_IDX.GEN_RCHAOS,
211
+ ART_IDX.GEN_RDISEN,
212
+ ART_IDX.GEN_PSTUN,
213
+ ];
214
+ /* ------------------------------------------------------------------ */
215
+ /* Helpers */
216
+ /* ------------------------------------------------------------------ */
217
+ /** randcalc(v, 0, MINIMISE): base + dice (consumes no RNG). */
218
+ function rvMinimise(v) {
219
+ return v.base + v.dice;
220
+ }
221
+ /* ------------------------------------------------------------------ */
222
+ /* get_base_item (obj-randart.c L1348) */
223
+ /* ------------------------------------------------------------------ */
224
+ /**
225
+ * get_base_item (obj-randart.c L1348): pick a random base item kind for a given
226
+ * tval, drawn uniformly across the tval's svals; rejects elven Rings-of and
227
+ * quest-artifact kinds. For rings/amulets the search starts past the ordinary
228
+ * kinds (so only special jewellery bases are used).
229
+ */
230
+ export function getBaseItem(reg, tval, rng) {
231
+ let kind = null;
232
+ let start = 1;
233
+ /* Restrict to appropriate kinds if jewellery. */
234
+ if (tval === TV.RING || tval === TV.AMULET) {
235
+ let testKind = reg.lookupKind(tval, start);
236
+ while (testKind && testKind.kidx < reg.ordinaryKindCount) {
237
+ start++;
238
+ testKind = reg.lookupKind(tval, start);
239
+ }
240
+ }
241
+ const numSvals = reg.bases[tval]?.numSvals ?? 0;
242
+ /* Pick an sval for that tval at random. */
243
+ while (!kind) {
244
+ const r = start + rng.randint0(numSvals - start + 1);
245
+ kind = reg.lookupKind(tval, r);
246
+ /* No items based on quest artifacts or elven rings. */
247
+ if (kind &&
248
+ (kind.name.includes("Ring of") || kind.kindFlags.has(KF.QUEST_ART))) {
249
+ kind = null;
250
+ }
251
+ }
252
+ return kind;
253
+ }
254
+ /* ------------------------------------------------------------------ */
255
+ /* artifact_prep (obj-randart.c L1383) */
256
+ /* ------------------------------------------------------------------ */
257
+ /**
258
+ * artifact_prep (obj-randart.c L1383): add basic data to an artifact of a given
259
+ * object kind, then assign basic combat stats based on the item type. Draws
260
+ * randint0 for the weapon to-hit/to-dam or armour to-AC starting bonus.
261
+ */
262
+ export function artifactPrep(reg, art, kind, data, rng) {
263
+ art.tval = kind.tval;
264
+ art.sval = kind.sval;
265
+ art.toH = rvMinimise(kind.toH);
266
+ art.toD = rvMinimise(kind.toD);
267
+ art.toA = rvMinimise(kind.toA);
268
+ art.ac = kind.ac;
269
+ art.dd = kind.dd;
270
+ art.ds = kind.ds;
271
+ art.weight = kind.weight;
272
+ art.flags.copy(kind.flags);
273
+ art.slays = copySlays(null, kind.slays, reg.slays);
274
+ art.brands = copyBrands(null, kind.brands, reg.brands);
275
+ art.curses = kind.curses ? kind.curses.slice() : null;
276
+ art.activation = null;
277
+ art.altMsg = "";
278
+ /* Inherit an activation's level, else the kind's level (if it has an
279
+ * effect), else 0. */
280
+ if (kind.activation) {
281
+ art.level = kind.activation.level;
282
+ }
283
+ else if (kind.effect) {
284
+ art.level = kind.level;
285
+ }
286
+ else {
287
+ art.level = 0;
288
+ }
289
+ art.time = { base: 0, dice: 0, sides: 0, mBonus: 0 };
290
+ for (let i = 0; i < OBJ_MOD_MAX; i++) {
291
+ art.modifiers[i] = rvMinimise(kind.modifiers[i]);
292
+ }
293
+ for (let i = 0; i < art.elInfo.length; i++) {
294
+ const ke = kind.elInfo[i];
295
+ art.elInfo[i] = { resLevel: ke.resLevel, flags: ke.flags };
296
+ }
297
+ /* Artifacts ignore everything (base elements). */
298
+ for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
299
+ art.elInfo[i].flags |= EL_INFO_IGNORE;
300
+ }
301
+ /* Assign basic stats to the artifact based on its type. */
302
+ switch (kind.tval) {
303
+ case TV.BOW:
304
+ case TV.DIGGING:
305
+ case TV.HAFTED:
306
+ case TV.SWORD:
307
+ case TV.POLEARM:
308
+ art.toH += Math.trunc(data.hitStartval / 2) + rng.randint0(data.hitStartval);
309
+ art.toD += Math.trunc(data.damStartval / 2) + rng.randint0(data.damStartval);
310
+ break;
311
+ case TV.BOOTS:
312
+ case TV.GLOVES:
313
+ case TV.HELM:
314
+ case TV.CROWN:
315
+ case TV.SHIELD:
316
+ case TV.CLOAK:
317
+ case TV.SOFT_ARMOR:
318
+ case TV.HARD_ARMOR:
319
+ case TV.DRAG_ARMOR:
320
+ art.toA += Math.trunc(data.acStartval / 2) + rng.randint0(data.acStartval);
321
+ break;
322
+ case TV.LIGHT:
323
+ art.flags.off(OF.TAKES_FUEL);
324
+ art.flags.off(OF.BURNS_OUT);
325
+ art.flags.on(OF.NO_FUEL);
326
+ if (kind.kidx >= reg.ordinaryKindCount) {
327
+ art.modifiers[OBJ_MOD.LIGHT] = 3;
328
+ }
329
+ break;
330
+ default:
331
+ break;
332
+ }
333
+ }
334
+ /* ------------------------------------------------------------------ */
335
+ /* build_freq_table (obj-randart.c L1505) */
336
+ /* ------------------------------------------------------------------ */
337
+ /**
338
+ * build_freq_table (obj-randart.c L1505): build a cumulative ability-frequency
339
+ * table for the given artifact's item type, zeroing frequencies for abilities
340
+ * that do not apply. Returns the cumulative table (length ART_IDX_TOTAL).
341
+ */
342
+ export function buildFreqTable(art, data) {
343
+ const fTemp = new Array(ART_IDX_TOTAL).fill(0);
344
+ const freq = new Array(ART_IDX_TOTAL).fill(0);
345
+ const copyGroup = (group) => {
346
+ for (const idx of group)
347
+ fTemp[idx] = data.artProbs[idx];
348
+ };
349
+ /* Bow abilities. */
350
+ if (art.tval === TV.BOW)
351
+ copyGroup(artIdxBow);
352
+ /* General weapon abilities. */
353
+ if (art.tval === TV.BOW ||
354
+ art.tval === TV.DIGGING ||
355
+ art.tval === TV.HAFTED ||
356
+ art.tval === TV.POLEARM ||
357
+ art.tval === TV.SWORD) {
358
+ copyGroup(artIdxWeapon);
359
+ }
360
+ else {
361
+ /* General non-weapon abilities. */
362
+ copyGroup(artIdxNonweapon);
363
+ }
364
+ /* General melee abilities. */
365
+ if (art.tval === TV.DIGGING ||
366
+ art.tval === TV.HAFTED ||
367
+ art.tval === TV.POLEARM ||
368
+ art.tval === TV.SWORD) {
369
+ copyGroup(artIdxMelee);
370
+ }
371
+ /* General armor abilities. */
372
+ if (art.tval === TV.BOOTS ||
373
+ art.tval === TV.GLOVES ||
374
+ art.tval === TV.HELM ||
375
+ art.tval === TV.CROWN ||
376
+ art.tval === TV.SHIELD ||
377
+ art.tval === TV.CLOAK ||
378
+ art.tval === TV.SOFT_ARMOR ||
379
+ art.tval === TV.HARD_ARMOR ||
380
+ art.tval === TV.DRAG_ARMOR) {
381
+ copyGroup(artIdxAllarmor);
382
+ }
383
+ /* Boot abilities. */
384
+ if (art.tval === TV.BOOTS)
385
+ copyGroup(artIdxBoot);
386
+ /* Glove abilities. */
387
+ if (art.tval === TV.GLOVES)
388
+ copyGroup(artIdxGlove);
389
+ /* Headgear abilities. */
390
+ if (art.tval === TV.HELM || art.tval === TV.CROWN)
391
+ copyGroup(artIdxHeadgear);
392
+ /* Shield abilities. */
393
+ if (art.tval === TV.SHIELD)
394
+ copyGroup(artIdxShield);
395
+ /* Cloak abilities. */
396
+ if (art.tval === TV.CLOAK)
397
+ copyGroup(artIdxCloak);
398
+ /* Armor abilities. */
399
+ if (art.tval === TV.SOFT_ARMOR ||
400
+ art.tval === TV.HARD_ARMOR ||
401
+ art.tval === TV.DRAG_ARMOR) {
402
+ copyGroup(artIdxArmor);
403
+ }
404
+ /* General abilities - no constraint. */
405
+ copyGroup(artIdxGen);
406
+ /* Build the cumulative frequency table. */
407
+ for (let i = 0; i < ART_IDX_TOTAL; i++) {
408
+ for (let j = i; j < ART_IDX_TOTAL; j++) {
409
+ freq[j] += fTemp[i];
410
+ }
411
+ }
412
+ return freq;
413
+ }
414
+ /* ------------------------------------------------------------------ */
415
+ /* try_supercharge (obj-randart.c L1627) */
416
+ /* ------------------------------------------------------------------ */
417
+ /**
418
+ * try_supercharge (obj-randart.c L1627): give the artifact one up-front chance
419
+ * at each supercharge ability (huge dice/blows, max shots/might, big speed, big
420
+ * AC, aggravation), weighted by the learned supercharge frequencies. The
421
+ * randint0(a_max) rolls use reg.artifacts.length (z_info->a_max).
422
+ */
423
+ export function trySupercharge(reg, art, targetPower, data, rng) {
424
+ const aMax = reg.artifacts.length;
425
+ /* Huge damage dice or max blows - melee weapon only. */
426
+ if (art.tval === TV.DIGGING ||
427
+ art.tval === TV.HAFTED ||
428
+ art.tval === TV.POLEARM ||
429
+ art.tval === TV.SWORD) {
430
+ if (rng.randint0(aMax) < data.artProbs[ART_IDX.MELEE_DICE_SUPER]) {
431
+ art.dd += 3 + rng.randint0(4);
432
+ }
433
+ else if (rng.randint0(aMax) < data.artProbs[ART_IDX.MELEE_BLOWS_SUPER]) {
434
+ art.modifiers[OBJ_MOD.BLOWS] = INHIBIT_BLOWS - 1;
435
+ }
436
+ }
437
+ /* Bows - max might or shots. */
438
+ if (art.tval === TV.BOW) {
439
+ if (rng.randint0(aMax) < data.artProbs[ART_IDX.BOW_SHOTS_SUPER]) {
440
+ art.modifiers[OBJ_MOD.SHOTS] = INHIBIT_SHOTS - 1;
441
+ }
442
+ else if (rng.randint0(aMax) < data.artProbs[ART_IDX.BOW_MIGHT_SUPER]) {
443
+ art.modifiers[OBJ_MOD.MIGHT] = INHIBIT_MIGHT - 1;
444
+ }
445
+ }
446
+ /* Big speed bonus - any item but more likely on boots. C short-circuits the
447
+ * || so the second randint0 only rolls when the first test fails and the
448
+ * item is boots. */
449
+ if (rng.randint0(aMax) < data.artProbs[ART_IDX.GEN_SPEED_SUPER] ||
450
+ (art.tval === TV.BOOTS &&
451
+ rng.randint0(aMax) < data.artProbs[ART_IDX.BOOT_SPEED])) {
452
+ art.modifiers[OBJ_MOD.SPEED] = 5 + rng.randint0(6);
453
+ if (rng.oneIn(2))
454
+ art.modifiers[OBJ_MOD.SPEED] += rng.randint1(3);
455
+ if (rng.oneIn(6))
456
+ art.modifiers[OBJ_MOD.SPEED] += 1 + rng.randint1(6);
457
+ }
458
+ /* Big AC bonus. */
459
+ if (art.tval === TV.DIGGING ||
460
+ art.tval === TV.HAFTED ||
461
+ art.tval === TV.POLEARM ||
462
+ art.tval === TV.SWORD) {
463
+ if (rng.randint0(aMax) < data.artProbs[ART_IDX.MELEE_AC_SUPER]) {
464
+ art.toA += 19 + rng.randint1(11);
465
+ if (rng.oneIn(2))
466
+ art.toA += rng.randint1(10);
467
+ if (rng.oneIn(6))
468
+ art.toA += rng.randint1(20);
469
+ }
470
+ }
471
+ else if (art.tval !== TV.BOW &&
472
+ rng.randint0(aMax) < data.artProbs[ART_IDX.GEN_AC_SUPER]) {
473
+ art.toA += 19 + rng.randint1(11);
474
+ if (rng.oneIn(2))
475
+ art.toA += rng.randint1(10);
476
+ if (rng.oneIn(6))
477
+ art.toA += rng.randint1(20);
478
+ }
479
+ /* Aggravation. C short-circuits the && so target_power is only tested when
480
+ * the randint0 roll succeeds. */
481
+ if (art.tval === TV.BOW ||
482
+ art.tval === TV.DIGGING ||
483
+ art.tval === TV.HAFTED ||
484
+ art.tval === TV.POLEARM ||
485
+ art.tval === TV.SWORD) {
486
+ if (rng.randint0(aMax) < data.artProbs[ART_IDX.WEAPON_AGGR] &&
487
+ targetPower > AGGR_POWER) {
488
+ art.flags.on(OF.AGGRAVATE);
489
+ }
490
+ }
491
+ else {
492
+ if (rng.randint0(aMax) < data.artProbs[ART_IDX.NONWEAPON_AGGR] &&
493
+ targetPower > AGGR_POWER) {
494
+ art.flags.on(OF.AGGRAVATE);
495
+ }
496
+ }
497
+ }
498
+ /* ------------------------------------------------------------------ */
499
+ /* add_flag (obj-randart.c L1721) */
500
+ /* ------------------------------------------------------------------ */
501
+ /** add_flag (obj-randart.c L1721): add a flag; returns true when it changed. */
502
+ export function addFlag(art, flag) {
503
+ if (art.flags.has(flag))
504
+ return false;
505
+ art.flags.on(flag);
506
+ return true;
507
+ }
508
+ /* ------------------------------------------------------------------ */
509
+ /* add_resist (obj-randart.c L1736) */
510
+ /* ------------------------------------------------------------------ */
511
+ /** add_resist (obj-randart.c L1736): add a resist; true when it changed. */
512
+ export function addResist(art, element) {
513
+ const info = art.elInfo[element];
514
+ if (info.resLevel > 0)
515
+ return false;
516
+ info.resLevel = 1;
517
+ return true;
518
+ }
519
+ /* ------------------------------------------------------------------ */
520
+ /* add_immunity (obj-randart.c L1750) */
521
+ /* ------------------------------------------------------------------ */
522
+ /** add_immunity (obj-randart.c L1750): grant immunity to a random base element. */
523
+ export function addImmunity(art, rng) {
524
+ const r = rng.randint0(4);
525
+ art.elInfo[r].resLevel = 3;
526
+ }
527
+ /* ------------------------------------------------------------------ */
528
+ /* add_mod (obj-randart.c L1761) */
529
+ /* ------------------------------------------------------------------ */
530
+ /**
531
+ * add_mod (obj-randart.c L1761): add, increase (or worsen a negative) a
532
+ * modifier, favouring a few large bonuses over many small ones. Blows, might
533
+ * and moves are "powerful" and applied sparingly. Returns true when changed.
534
+ */
535
+ export function addMod(art, mod, rng) {
536
+ const powerful = mod === OBJ_MOD.BLOWS || mod === OBJ_MOD.MIGHT || mod === OBJ_MOD.MOVES;
537
+ let success = false;
538
+ if (art.modifiers[mod] < 0) {
539
+ /* Negative mods just get a bit worse. */
540
+ if (rng.oneIn(2)) {
541
+ art.modifiers[mod]--;
542
+ success = true;
543
+ }
544
+ }
545
+ else if (powerful) {
546
+ /* Powerful mods need to be applied sparingly. */
547
+ if (art.modifiers[mod] === 0) {
548
+ art.modifiers[mod] = rng.randint1(2);
549
+ success = true;
550
+ }
551
+ else if (rng.oneIn(20 * art.modifiers[mod])) {
552
+ art.modifiers[mod]++;
553
+ success = true;
554
+ }
555
+ }
556
+ else {
557
+ /* Hard cap of 6 on non-speed mods. */
558
+ if (mod !== OBJ_MOD.SPEED && art.modifiers[mod] >= 6) {
559
+ return false;
560
+ }
561
+ /* New mods average 3, old ones are incremented by 1 or 2. */
562
+ if (art.modifiers[mod] === 0) {
563
+ art.modifiers[mod] = rng.randint0(3) + rng.randint1(3);
564
+ success = true;
565
+ }
566
+ else {
567
+ art.modifiers[mod] += rng.randint1(2);
568
+ success = true;
569
+ }
570
+ /* Enforce cap. */
571
+ if (mod !== OBJ_MOD.SPEED && art.modifiers[mod] >= 6) {
572
+ art.modifiers[mod] = 6;
573
+ }
574
+ }
575
+ return success;
576
+ }
577
+ /* ------------------------------------------------------------------ */
578
+ /* add_stat (obj-randart.c L1823) */
579
+ /* ------------------------------------------------------------------ */
580
+ /** add_stat (obj-randart.c L1823): add or increase a random stat modifier. */
581
+ export function addStat(art, rng) {
582
+ addMod(art, OBJ_MOD.STR + rng.randint0(STAT_MAX), rng);
583
+ }
584
+ /* ------------------------------------------------------------------ */
585
+ /* add_sustain (obj-randart.c L1831) */
586
+ /* ------------------------------------------------------------------ */
587
+ /** add_sustain (obj-randart.c L1831): add a random sustain, if any are free. */
588
+ export function addSustain(art, rng) {
589
+ /* Break out if all stats are sustained to avoid an infinite loop. */
590
+ if (art.flags.testAll(OF.SUST_STR, OF.SUST_INT, OF.SUST_WIS, OF.SUST_DEX, OF.SUST_CON)) {
591
+ return;
592
+ }
593
+ let success = false;
594
+ while (!success) {
595
+ const r = rng.randint0(5);
596
+ if (r === 0)
597
+ success = addFlag(art, OF.SUST_STR);
598
+ else if (r === 1)
599
+ success = addFlag(art, OF.SUST_INT);
600
+ else if (r === 2)
601
+ success = addFlag(art, OF.SUST_WIS);
602
+ else if (r === 3)
603
+ success = addFlag(art, OF.SUST_DEX);
604
+ else if (r === 4)
605
+ success = addFlag(art, OF.SUST_CON);
606
+ }
607
+ }
608
+ /* ------------------------------------------------------------------ */
609
+ /* add_low_resist (obj-randart.c L1854) */
610
+ /* ------------------------------------------------------------------ */
611
+ /** add_low_resist (obj-randart.c L1854): add a random unheld low resist. */
612
+ export function addLowResist(art, rng) {
613
+ let count = 0;
614
+ for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
615
+ if (art.elInfo[i].resLevel <= 0)
616
+ count++;
617
+ }
618
+ if (!count)
619
+ return;
620
+ const r = rng.randint0(count);
621
+ count = 0;
622
+ for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
623
+ if (art.elInfo[i].resLevel > 0)
624
+ continue;
625
+ if (r === count++) {
626
+ addResist(art, i);
627
+ return;
628
+ }
629
+ }
630
+ }
631
+ /* ------------------------------------------------------------------ */
632
+ /* add_high_resist (obj-randart.c L1879) */
633
+ /* ------------------------------------------------------------------ */
634
+ /**
635
+ * add_high_resist (obj-randart.c L1879): add a high resist chosen from the
636
+ * learned high-resist frequency distribution. Faithfully preserves the
637
+ * upstream weighting quirk in which the running `temp` accumulator is left in
638
+ * a partial-sum state between retry iterations (it is not reset to the total).
639
+ */
640
+ export function addHighResist(art, data, rng) {
641
+ const n = artIdxHighResist.length;
642
+ let temp = 0;
643
+ for (let k = 0; k < n; k++)
644
+ temp += data.artProbs[artIdxHighResist[k]];
645
+ let success = false;
646
+ let count = 0;
647
+ while (!success && count < MAX_TRIES) {
648
+ /* Randomize from 1 to the current total amount. */
649
+ const r = rng.randint1(temp);
650
+ /* Determine which (weighted) resist this number corresponds to. */
651
+ temp = data.artProbs[artIdxHighResist[0]];
652
+ let i = 0;
653
+ while (r > temp && i < n) {
654
+ temp += data.artProbs[artIdxHighResist[i]];
655
+ i++;
656
+ }
657
+ /* i is the index of the correct high resist. */
658
+ if (i === 0)
659
+ success = addResist(art, ELEM.POIS);
660
+ else if (i === 1)
661
+ success = addFlag(art, OF.PROT_FEAR);
662
+ else if (i === 2)
663
+ success = addResist(art, ELEM.LIGHT);
664
+ else if (i === 3)
665
+ success = addResist(art, ELEM.DARK);
666
+ else if (i === 4)
667
+ success = addFlag(art, OF.PROT_BLIND);
668
+ else if (i === 5)
669
+ success = addFlag(art, OF.PROT_CONF);
670
+ else if (i === 6)
671
+ success = addResist(art, ELEM.SOUND);
672
+ else if (i === 7)
673
+ success = addResist(art, ELEM.SHARD);
674
+ else if (i === 8)
675
+ success = addResist(art, ELEM.NEXUS);
676
+ else if (i === 9)
677
+ success = addResist(art, ELEM.NETHER);
678
+ else if (i === 10)
679
+ success = addResist(art, ELEM.CHAOS);
680
+ else if (i === 11)
681
+ success = addResist(art, ELEM.DISEN);
682
+ else if (i === 12)
683
+ success = addFlag(art, OF.PROT_STUN);
684
+ count++;
685
+ }
686
+ }
687
+ /* ------------------------------------------------------------------ */
688
+ /* append_brand / append_slay (obj-slays.c) */
689
+ /* ------------------------------------------------------------------ */
690
+ /**
691
+ * append_brand (obj-slays.c): try to add brand `pick`, replacing a same-named
692
+ * lower-multiplier brand if present. Returns false when a same-or-greater
693
+ * multiplier brand of the same name already exists.
694
+ */
695
+ function appendBrand(art, pick, reg) {
696
+ const brand = reg.brands[pick];
697
+ if (!art.brands) {
698
+ art.brands = new Array(reg.brands.length).fill(false);
699
+ art.brands[pick] = true;
700
+ return true;
701
+ }
702
+ for (let i = 1; i < reg.brands.length; i++) {
703
+ if (art.brands[i]) {
704
+ if (reg.brands[i].name === brand.name) {
705
+ if (brand.multiplier <= reg.brands[i].multiplier)
706
+ return false;
707
+ art.brands[i] = false;
708
+ art.brands[pick] = true;
709
+ return true;
710
+ }
711
+ }
712
+ }
713
+ art.brands[pick] = true;
714
+ return true;
715
+ }
716
+ /**
717
+ * same_monsters_slain (obj-slays.c): whether two slays affect the same
718
+ * monsters (same race flag and same base).
719
+ */
720
+ function sameMonstersSlain(reg, i, j) {
721
+ const a = reg.slays[i];
722
+ const b = reg.slays[j];
723
+ if (a.raceFlag !== b.raceFlag)
724
+ return false;
725
+ if (!a.base && !b.base)
726
+ return true;
727
+ if ((a.base && !b.base) || (!a.base && b.base))
728
+ return false;
729
+ return a.base === b.base;
730
+ }
731
+ /**
732
+ * append_slay (obj-slays.c): try to add slay `pick`, replacing a
733
+ * same-monsters lower-multiplier slay if present. Returns false when a
734
+ * same-or-greater multiplier slay of the same monsters already exists.
735
+ */
736
+ function appendSlay(art, pick, reg) {
737
+ const slay = reg.slays[pick];
738
+ if (!art.slays) {
739
+ art.slays = new Array(reg.slays.length).fill(false);
740
+ art.slays[pick] = true;
741
+ return true;
742
+ }
743
+ for (let i = 1; i < reg.slays.length; i++) {
744
+ if (art.slays[i]) {
745
+ if (sameMonstersSlain(reg, i, pick)) {
746
+ if (slay.multiplier <= reg.slays[i].multiplier)
747
+ return false;
748
+ art.slays[i] = false;
749
+ art.slays[pick] = true;
750
+ return true;
751
+ }
752
+ }
753
+ }
754
+ art.slays[pick] = true;
755
+ return true;
756
+ }
757
+ /* ------------------------------------------------------------------ */
758
+ /* add_brand (obj-randart.c L1928) */
759
+ /* ------------------------------------------------------------------ */
760
+ /**
761
+ * add_brand (obj-randart.c L1928): add a brand (mostly only one), then
762
+ * frequently add the resist matching the brand's element.
763
+ */
764
+ export function addBrand(reg, art, rng) {
765
+ /* Mostly only one brand. C short-circuits so randint0(4) is only rolled
766
+ * when the artifact already has brands. */
767
+ if (art.brands && rng.randint0(4))
768
+ return;
769
+ /* Get a random brand. */
770
+ let brandIdx = 0;
771
+ for (let count = 0; count < MAX_TRIES; count++) {
772
+ const pick = rng.randint1(reg.brands.length - 1);
773
+ if (!appendBrand(art, pick, reg))
774
+ continue;
775
+ brandIdx = pick;
776
+ break;
777
+ }
778
+ /* Frequently add the corresponding resist. randint0(4) only rolls when a
779
+ * brand was actually added. */
780
+ if (brandIdx && rng.randint0(4)) {
781
+ const brand = reg.brands[brandIdx];
782
+ for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
783
+ if (brand.name === BASE_ELEMENT_PROJ_NAMES[i] &&
784
+ art.elInfo[i].resLevel <= 0) {
785
+ addResist(art, i);
786
+ }
787
+ }
788
+ }
789
+ }
790
+ /* ------------------------------------------------------------------ */
791
+ /* add_slay (obj-randart.c L1962) */
792
+ /* ------------------------------------------------------------------ */
793
+ /**
794
+ * add_slay (obj-randart.c L1962): add a slay, then frequently add more slays
795
+ * if the first choice was weak (power < 105).
796
+ */
797
+ export function addSlay(reg, art, rng) {
798
+ let slayIdx = 0;
799
+ for (let count = 0; count < MAX_TRIES; count++) {
800
+ const pick = rng.randint1(reg.slays.length - 1);
801
+ if (!appendSlay(art, pick, reg))
802
+ continue;
803
+ slayIdx = pick;
804
+ break;
805
+ }
806
+ /* Frequently add more slays if the first choice is weak. randint0(4) only
807
+ * rolls when a slay was actually added. */
808
+ if (slayIdx && rng.randint0(4) && reg.slays[slayIdx].power < 105) {
809
+ addSlay(reg, art, rng);
810
+ }
811
+ }
812
+ /* ------------------------------------------------------------------ */
813
+ /* add_damage_dice (obj-randart.c L1986) */
814
+ /* ------------------------------------------------------------------ */
815
+ /** add_damage_dice (obj-randart.c L1986): add one or two damage dice. */
816
+ export function addDamageDice(art, rng) {
817
+ art.dd += rng.randint1(2);
818
+ }
819
+ /* ------------------------------------------------------------------ */
820
+ /* add_to_hit (obj-randart.c L1997) */
821
+ /* ------------------------------------------------------------------ */
822
+ /**
823
+ * add_to_hit (obj-randart.c L1997): add to-hit unless already too high (the
824
+ * high thresholds are only bypassed by the inhibiting rolls).
825
+ */
826
+ export function addToHit(art, fixed, random, rng) {
827
+ if (art.toH > VERYHIGH_TO_HIT) {
828
+ if (!rng.oneIn(6))
829
+ return;
830
+ }
831
+ else if (art.toH > HIGH_TO_HIT) {
832
+ if (!rng.oneIn(2))
833
+ return;
834
+ }
835
+ art.toH += fixed + rng.randint0(random);
836
+ }
837
+ /* ------------------------------------------------------------------ */
838
+ /* add_to_dam (obj-randart.c L2020) */
839
+ /* ------------------------------------------------------------------ */
840
+ /**
841
+ * add_to_dam (obj-randart.c L2020): add to-dam unless already too high. Note
842
+ * the upstream quirk kept faithfully: the HIGH threshold branch tests to_h,
843
+ * not to_d.
844
+ */
845
+ export function addToDam(art, fixed, random, rng) {
846
+ if (art.toD > VERYHIGH_TO_DAM) {
847
+ if (!rng.oneIn(6))
848
+ return;
849
+ }
850
+ else if (art.toH > HIGH_TO_DAM) {
851
+ if (!rng.oneIn(2))
852
+ return;
853
+ }
854
+ art.toD += fixed + rng.randint0(random);
855
+ }
856
+ /* ------------------------------------------------------------------ */
857
+ /* add_to_AC (obj-randart.c L2044) */
858
+ /* ------------------------------------------------------------------ */
859
+ /**
860
+ * add_to_AC (obj-randart.c L2044): add to-AC unless already too high. Note the
861
+ * upstream quirk kept faithfully: the HIGH threshold branch tests to_h, not
862
+ * to_a.
863
+ */
864
+ export function addToAC(art, fixed, random, rng) {
865
+ if (art.toA > VERYHIGH_TO_AC) {
866
+ if (!rng.oneIn(6))
867
+ return;
868
+ }
869
+ else if (art.toH > HIGH_TO_AC) {
870
+ if (!rng.oneIn(2))
871
+ return;
872
+ }
873
+ art.toA += fixed + rng.randint0(random);
874
+ }
875
+ /* ------------------------------------------------------------------ */
876
+ /* add_weight_mod (obj-randart.c L2068) */
877
+ /* ------------------------------------------------------------------ */
878
+ /** add_weight_mod (obj-randart.c L2068): lower the artifact's weight by 10%. */
879
+ export function addWeightMod(art) {
880
+ art.weight = Math.trunc((art.weight * 9) / 10);
881
+ }
882
+ /* ------------------------------------------------------------------ */
883
+ /* add_activation (obj-randart.c L2078) */
884
+ /* ------------------------------------------------------------------ */
885
+ /**
886
+ * add_activation (obj-randart.c L2078): give the artifact a random activation
887
+ * that is useful but not exploitable and roughly proportionate to its power.
888
+ * z_info->act_max is reg.activations.length (index 0 is the null/zeroed slot,
889
+ * mirroring the zeroed activations[0] upstream).
890
+ */
891
+ export function addActivation(reg, art, targetPower, maxPower, rng) {
892
+ const actMax = reg.activations.length;
893
+ /* Work out the maximum allowed activation power. */
894
+ let maxEffect = 0;
895
+ for (let i = 0; i < actMax; i++) {
896
+ const act = reg.activations[i];
897
+ const power = act ? act.power : 0;
898
+ if (power > maxEffect && power < INHIBIT_POWER)
899
+ maxEffect = power;
900
+ }
901
+ /* Select an activation at random. */
902
+ let count = 0;
903
+ while (count < MAX_TRIES) {
904
+ const x = rng.randint0(actMax);
905
+ const act = reg.activations[x];
906
+ const p = act ? act.power : 0;
907
+ if (p < INHIBIT_POWER &&
908
+ Math.trunc((100 * p) / maxEffect) >
909
+ Math.trunc((50 * targetPower) / maxPower) &&
910
+ Math.trunc((100 * p) / maxEffect) <
911
+ Math.trunc((200 * targetPower) / maxPower)) {
912
+ art.activation = act;
913
+ art.level = act.level;
914
+ art.time.base = p * 8;
915
+ art.time.dice = p > 5 ? Math.trunc(p / 5) : 1;
916
+ art.time.sides = p;
917
+ return;
918
+ }
919
+ count++;
920
+ }
921
+ }
922
+ /* ------------------------------------------------------------------ */
923
+ /* choose_ability (obj-randart.c L2121) */
924
+ /* ------------------------------------------------------------------ */
925
+ /**
926
+ * choose_ability (obj-randart.c L2121): choose an ability index weighted by the
927
+ * given cumulative frequency table (length ART_IDX_TOTAL).
928
+ */
929
+ export function chooseAbility(freqTable, rng) {
930
+ const r = rng.randint1(freqTable[ART_IDX_TOTAL - 1]);
931
+ let ability = 0;
932
+ while (r > freqTable[ability])
933
+ ability++;
934
+ return ability;
935
+ }
936
+ /* ------------------------------------------------------------------ */
937
+ /* add_ability_aux (obj-randart.c L2150) */
938
+ /* ------------------------------------------------------------------ */
939
+ /**
940
+ * add_ability_aux (obj-randart.c L2150): add the ability given by index r. A
941
+ * general dispatch that imposes no item-type restriction (that is handled by
942
+ * the frequency table).
943
+ */
944
+ export function addAbilityAux(reg, art, r, targetPower, data, rng) {
945
+ const kind = reg.lookupKind(art.tval, art.sval);
946
+ switch (r) {
947
+ case ART_IDX.BOW_SHOTS:
948
+ case ART_IDX.NONWEAPON_SHOTS:
949
+ addMod(art, OBJ_MOD.SHOTS, rng);
950
+ break;
951
+ case ART_IDX.BOW_MIGHT:
952
+ addMod(art, OBJ_MOD.MIGHT, rng);
953
+ break;
954
+ case ART_IDX.WEAPON_HIT:
955
+ case ART_IDX.NONWEAPON_HIT:
956
+ addToHit(art, 1, 2 * data.hitIncrement, rng);
957
+ break;
958
+ case ART_IDX.WEAPON_DAM:
959
+ case ART_IDX.NONWEAPON_DAM:
960
+ addToDam(art, 1, 2 * data.damIncrement, rng);
961
+ break;
962
+ case ART_IDX.NONWEAPON_HIT_DAM:
963
+ case ART_IDX.GLOVE_HIT_DAM:
964
+ addToHit(art, 1, 2 * data.hitIncrement, rng);
965
+ addToDam(art, 1, 2 * data.damIncrement, rng);
966
+ break;
967
+ case ART_IDX.WEAPON_AGGR:
968
+ case ART_IDX.NONWEAPON_AGGR:
969
+ if (targetPower > AGGR_POWER)
970
+ addFlag(art, OF.AGGRAVATE);
971
+ break;
972
+ case ART_IDX.MELEE_BLESS:
973
+ addFlag(art, OF.BLESSED);
974
+ break;
975
+ case ART_IDX.BOW_BRAND:
976
+ case ART_IDX.MELEE_BRAND:
977
+ case ART_IDX.NONWEAPON_BRAND:
978
+ addBrand(reg, art, rng);
979
+ break;
980
+ case ART_IDX.BOW_SLAY:
981
+ case ART_IDX.MELEE_SLAY:
982
+ case ART_IDX.NONWEAPON_SLAY:
983
+ addSlay(reg, art, rng);
984
+ break;
985
+ case ART_IDX.MELEE_SINV:
986
+ case ART_IDX.HELM_SINV:
987
+ case ART_IDX.GEN_SINV:
988
+ addFlag(art, OF.SEE_INVIS);
989
+ break;
990
+ case ART_IDX.MELEE_BLOWS:
991
+ case ART_IDX.NONWEAPON_BLOWS:
992
+ addMod(art, OBJ_MOD.BLOWS, rng);
993
+ break;
994
+ case ART_IDX.MELEE_AC:
995
+ case ART_IDX.BOOT_AC:
996
+ case ART_IDX.GLOVE_AC:
997
+ case ART_IDX.HELM_AC:
998
+ case ART_IDX.SHIELD_AC:
999
+ case ART_IDX.CLOAK_AC:
1000
+ case ART_IDX.ARMOR_AC:
1001
+ case ART_IDX.GEN_AC:
1002
+ addToAC(art, 1, 2 * data.acIncrement, rng);
1003
+ break;
1004
+ case ART_IDX.MELEE_DICE:
1005
+ addDamageDice(art, rng);
1006
+ break;
1007
+ case ART_IDX.MELEE_WEIGHT:
1008
+ case ART_IDX.ALLARMOR_WEIGHT:
1009
+ addWeightMod(art);
1010
+ break;
1011
+ case ART_IDX.MELEE_TUNN:
1012
+ case ART_IDX.GEN_TUNN:
1013
+ addMod(art, OBJ_MOD.TUNNEL, rng);
1014
+ break;
1015
+ case ART_IDX.BOOT_FEATHER:
1016
+ case ART_IDX.GEN_FEATHER:
1017
+ addFlag(art, OF.FEATHER);
1018
+ break;
1019
+ case ART_IDX.BOOT_STEALTH:
1020
+ case ART_IDX.CLOAK_STEALTH:
1021
+ case ART_IDX.ARMOR_STEALTH:
1022
+ case ART_IDX.GEN_STEALTH:
1023
+ addMod(art, OBJ_MOD.STEALTH, rng);
1024
+ break;
1025
+ case ART_IDX.BOOT_SPEED:
1026
+ case ART_IDX.GEN_SPEED:
1027
+ addMod(art, OBJ_MOD.SPEED, rng);
1028
+ break;
1029
+ case ART_IDX.GLOVE_FA:
1030
+ case ART_IDX.GEN_FA:
1031
+ addFlag(art, OF.FREE_ACT);
1032
+ break;
1033
+ case ART_IDX.GLOVE_DEX:
1034
+ addMod(art, OBJ_MOD.DEX, rng);
1035
+ break;
1036
+ case ART_IDX.HELM_RBLIND:
1037
+ case ART_IDX.GEN_RBLIND:
1038
+ addFlag(art, OF.PROT_BLIND);
1039
+ break;
1040
+ case ART_IDX.HELM_ESP:
1041
+ case ART_IDX.GEN_ESP:
1042
+ addFlag(art, OF.TELEPATHY);
1043
+ break;
1044
+ case ART_IDX.HELM_WIS:
1045
+ addMod(art, OBJ_MOD.WIS, rng);
1046
+ break;
1047
+ case ART_IDX.HELM_INT:
1048
+ addMod(art, OBJ_MOD.INT, rng);
1049
+ break;
1050
+ case ART_IDX.SHIELD_LRES:
1051
+ case ART_IDX.ARMOR_LRES:
1052
+ case ART_IDX.GEN_LRES:
1053
+ addLowResist(art, rng);
1054
+ break;
1055
+ case ART_IDX.ARMOR_HLIFE:
1056
+ case ART_IDX.GEN_HLIFE:
1057
+ addFlag(art, OF.HOLD_LIFE);
1058
+ break;
1059
+ case ART_IDX.ARMOR_CON:
1060
+ addMod(art, OBJ_MOD.CON, rng);
1061
+ break;
1062
+ case ART_IDX.ARMOR_ALLRES:
1063
+ addResist(art, ELEM.ACID);
1064
+ addResist(art, ELEM.ELEC);
1065
+ addResist(art, ELEM.FIRE);
1066
+ addResist(art, ELEM.COLD);
1067
+ break;
1068
+ case ART_IDX.ARMOR_HRES:
1069
+ addHighResist(art, data, rng);
1070
+ break;
1071
+ case ART_IDX.GEN_STAT:
1072
+ addStat(art, rng);
1073
+ break;
1074
+ case ART_IDX.GEN_SUST:
1075
+ addSustain(art, rng);
1076
+ break;
1077
+ case ART_IDX.GEN_SEARCH:
1078
+ addMod(art, OBJ_MOD.SEARCH, rng);
1079
+ break;
1080
+ case ART_IDX.GEN_INFRA:
1081
+ addMod(art, OBJ_MOD.INFRA, rng);
1082
+ break;
1083
+ case ART_IDX.GEN_IMMUNE:
1084
+ addImmunity(art, rng);
1085
+ break;
1086
+ case ART_IDX.GEN_LIGHT:
1087
+ if (art.tval !== TV.LIGHT)
1088
+ art.modifiers[OBJ_MOD.LIGHT] = 1;
1089
+ break;
1090
+ case ART_IDX.GEN_SDIG:
1091
+ addFlag(art, OF.SLOW_DIGEST);
1092
+ break;
1093
+ case ART_IDX.GEN_REGEN:
1094
+ addFlag(art, OF.REGEN);
1095
+ break;
1096
+ case ART_IDX.GEN_RPOIS:
1097
+ addResist(art, ELEM.POIS);
1098
+ break;
1099
+ case ART_IDX.GEN_RFEAR:
1100
+ addFlag(art, OF.PROT_FEAR);
1101
+ break;
1102
+ case ART_IDX.GEN_RLIGHT:
1103
+ addResist(art, ELEM.LIGHT);
1104
+ break;
1105
+ case ART_IDX.GEN_RDARK:
1106
+ addResist(art, ELEM.DARK);
1107
+ break;
1108
+ case ART_IDX.GEN_RCONF:
1109
+ addFlag(art, OF.PROT_CONF);
1110
+ break;
1111
+ case ART_IDX.GEN_RSOUND:
1112
+ addResist(art, ELEM.SOUND);
1113
+ break;
1114
+ case ART_IDX.GEN_RSHARD:
1115
+ addResist(art, ELEM.SHARD);
1116
+ break;
1117
+ case ART_IDX.GEN_RNEXUS:
1118
+ addResist(art, ELEM.NEXUS);
1119
+ break;
1120
+ case ART_IDX.GEN_RNETHER:
1121
+ addResist(art, ELEM.NETHER);
1122
+ break;
1123
+ case ART_IDX.GEN_RCHAOS:
1124
+ addResist(art, ELEM.CHAOS);
1125
+ break;
1126
+ case ART_IDX.GEN_RDISEN:
1127
+ addResist(art, ELEM.DISEN);
1128
+ break;
1129
+ case ART_IDX.GEN_PSTUN:
1130
+ addFlag(art, OF.PROT_STUN);
1131
+ break;
1132
+ case ART_IDX.BOOT_TRAP_IMM:
1133
+ case ART_IDX.GEN_TRAP_IMM:
1134
+ addFlag(art, OF.TRAP_IMMUNE);
1135
+ break;
1136
+ case ART_IDX.GEN_DAM_RED:
1137
+ addMod(art, OBJ_MOD.DAM_RED, rng);
1138
+ break;
1139
+ case ART_IDX.GEN_MOVES:
1140
+ case ART_IDX.BOOT_MOVES:
1141
+ addMod(art, OBJ_MOD.MOVES, rng);
1142
+ break;
1143
+ case ART_IDX.GEN_ACTIV:
1144
+ if (!art.activation && !kind?.activation) {
1145
+ addActivation(reg, art, targetPower, data.maxPower, rng);
1146
+ }
1147
+ break;
1148
+ default:
1149
+ break;
1150
+ }
1151
+ }
1152
+ /* ------------------------------------------------------------------ */
1153
+ /* Curse conflict helpers (obj-curse.c) */
1154
+ /* ------------------------------------------------------------------ */
1155
+ /**
1156
+ * check_artifact_curses (obj-curse.c L243): drop the curses field if no active
1157
+ * curse remains.
1158
+ */
1159
+ function checkArtifactCurses(art) {
1160
+ if (!art.curses)
1161
+ return;
1162
+ for (let i = 0; i < art.curses.length; i++) {
1163
+ if (art.curses[i])
1164
+ return;
1165
+ }
1166
+ art.curses = null;
1167
+ }
1168
+ /**
1169
+ * curses_conflict (obj-curse.c L95): whether curse `second` is in curse
1170
+ * `first`'s conflict list.
1171
+ */
1172
+ function cursesConflict(reg, first, second) {
1173
+ const c = reg.curses[first];
1174
+ if (!c.conflict)
1175
+ return false;
1176
+ const needle = "|" + reg.curses[second].name + "|";
1177
+ return c.conflict.includes(needle);
1178
+ }
1179
+ /**
1180
+ * artifact_curse_conflicts (obj-curse.c L262): whether curse `pick` is foiled
1181
+ * by an existing artifact property - its TIMED_INC effect fails against a
1182
+ * flag/resist/vulnerability the artifact already has (obj-curse.c L267-296,
1183
+ * consulted only when `timedFoil` is supplied), or it explicitly conflicts with
1184
+ * an artifact flag. Draws no RNG.
1185
+ */
1186
+ function artifactCurseConflicts(reg, art, pick, timedFoil) {
1187
+ const c = reg.curses[pick];
1188
+ /* Reject curses with effects foiled by an existing artifact property. */
1189
+ if (timedFoil && curseTimedIncFoiled(c, art.flags, art.elInfo, timedFoil)) {
1190
+ checkArtifactCurses(art);
1191
+ return true;
1192
+ }
1193
+ for (const flag of c.conflictFlags) {
1194
+ if (art.flags.has(flag)) {
1195
+ checkArtifactCurses(art);
1196
+ return true;
1197
+ }
1198
+ }
1199
+ return false;
1200
+ }
1201
+ /**
1202
+ * append_artifact_curse (obj-curse.c L317): add curse `pick` at the given
1203
+ * power, rejecting conflicts. Returns true when the curse was applied.
1204
+ */
1205
+ function appendArtifactCurse(reg, art, pick, power, timedFoil) {
1206
+ if (!art.curses)
1207
+ art.curses = new Array(reg.curses.length).fill(0);
1208
+ /* Reject conflicting curses. */
1209
+ for (let i = 0; i < reg.curses.length; i++) {
1210
+ if (art.curses[i] && cursesConflict(reg, i, pick)) {
1211
+ checkArtifactCurses(art);
1212
+ return false;
1213
+ }
1214
+ }
1215
+ /* Reject curses foiled by an existing artifact property. */
1216
+ if (artifactCurseConflicts(reg, art, pick, timedFoil)) {
1217
+ checkArtifactCurses(art);
1218
+ return false;
1219
+ }
1220
+ /* Adjust power if our pick is a duplicate. */
1221
+ if (power > art.curses[pick])
1222
+ art.curses[pick] = power;
1223
+ checkArtifactCurses(art);
1224
+ return true;
1225
+ }
1226
+ /* ------------------------------------------------------------------ */
1227
+ /* remove_contradictory_activation (obj-randart.c L2420) */
1228
+ /* ------------------------------------------------------------------ */
1229
+ /**
1230
+ * enum effect_object_property_kind (effects-info.h L40): the kind of object
1231
+ * property an activation effect grants, as summarized for redundancy checks.
1232
+ */
1233
+ export const EFPROP = {
1234
+ OBJECT_FLAG_EXACT: 0,
1235
+ OBJECT_FLAG: 1,
1236
+ RESIST: 2,
1237
+ CURE_FLAG: 3,
1238
+ CURE_RESIST: 4,
1239
+ CONFLICT_FLAG: 5,
1240
+ CONFLICT_RESIST: 6,
1241
+ CONFLICT_VULN: 7,
1242
+ BRAND: 8,
1243
+ SLAY: 9,
1244
+ };
1245
+ /**
1246
+ * remove_contradictory_activation (obj-randart.c L2420): drop the activation
1247
+ * when everything it does is already provided by (or in conflict with) the
1248
+ * artifact's other properties. Upstream summarizes the activation via
1249
+ * effect_summarize_properties; the port injects that summarizer (see
1250
+ * ActivationSummarizer / gap 3.8 WIRING-NEEDED). The redundancy switch below is
1251
+ * a faithful transcription; it draws no RNG.
1252
+ */
1253
+ export function removeContradictoryActivation(reg, art, summarize) {
1254
+ if (!art.activation || !art.activation.effect)
1255
+ return;
1256
+ /* Without the effects-domain summarizer we cannot prove redundancy; keep the
1257
+ * activation (conservative). */
1258
+ if (!summarize)
1259
+ return;
1260
+ const { props, unsummarizedCount } = summarize(art.activation.effect);
1261
+ let redundant = true;
1262
+ if (unsummarizedCount > 0) {
1263
+ /* The activation does at least one thing with no object-property twin. */
1264
+ redundant = false;
1265
+ }
1266
+ else {
1267
+ for (const p of props) {
1268
+ if (!redundant)
1269
+ break;
1270
+ switch (p.kind) {
1271
+ case EFPROP.BRAND: {
1272
+ let maxmult = 1;
1273
+ for (let i = 1; i < reg.brands.length; i++) {
1274
+ if (!art.brands?.[i])
1275
+ continue;
1276
+ if (reg.brands[i].resistFlag !== reg.brands[p.idx].resistFlag) {
1277
+ continue;
1278
+ }
1279
+ maxmult = Math.max(reg.brands[i].multiplier, maxmult);
1280
+ }
1281
+ if (maxmult < reg.brands[p.idx].multiplier)
1282
+ redundant = false;
1283
+ break;
1284
+ }
1285
+ case EFPROP.SLAY: {
1286
+ let maxmult = 1;
1287
+ for (let i = 1; i < reg.slays.length; i++) {
1288
+ if (!art.slays?.[i])
1289
+ continue;
1290
+ if (!sameMonstersSlain(reg, i, p.idx))
1291
+ continue;
1292
+ maxmult = Math.max(reg.slays[i].multiplier, maxmult);
1293
+ }
1294
+ if (maxmult < reg.slays[p.idx].multiplier)
1295
+ redundant = false;
1296
+ break;
1297
+ }
1298
+ case EFPROP.RESIST:
1299
+ case EFPROP.CONFLICT_RESIST:
1300
+ case EFPROP.CONFLICT_VULN: {
1301
+ const res = art.elInfo[p.idx]?.resLevel ?? 0;
1302
+ if (res >= p.reslevelMin && res <= p.reslevelMax)
1303
+ redundant = false;
1304
+ break;
1305
+ }
1306
+ case EFPROP.OBJECT_FLAG:
1307
+ /* Does more than the flag; keep it (also screens HERO/SHERO). */
1308
+ redundant = false;
1309
+ break;
1310
+ case EFPROP.OBJECT_FLAG_EXACT:
1311
+ case EFPROP.CURE_FLAG:
1312
+ case EFPROP.CONFLICT_FLAG:
1313
+ if (!art.flags.has(p.idx))
1314
+ redundant = false;
1315
+ break;
1316
+ default:
1317
+ /* Something unexpected; assume the effect is useful. */
1318
+ redundant = false;
1319
+ break;
1320
+ }
1321
+ }
1322
+ }
1323
+ if (redundant)
1324
+ art.activation = null;
1325
+ }
1326
+ /* ------------------------------------------------------------------ */
1327
+ /* remove_contradictory (obj-randart.c L2530) */
1328
+ /* ------------------------------------------------------------------ */
1329
+ /**
1330
+ * remove_contradictory (obj-randart.c L2530): clean up illogical combinations
1331
+ * of powers (aggravation vs stealth, negative stats vs their sustains,
1332
+ * drain-exp vs hold-life), remove conflicting curses, and drop a redundant
1333
+ * activation.
1334
+ */
1335
+ export function removeContradictory(reg, art, timedFoil, activationSummarize) {
1336
+ if (art.flags.has(OF.AGGRAVATE))
1337
+ art.modifiers[OBJ_MOD.STEALTH] = 0;
1338
+ if (art.modifiers[OBJ_MOD.STR] < 0)
1339
+ art.flags.off(OF.SUST_STR);
1340
+ if (art.modifiers[OBJ_MOD.INT] < 0)
1341
+ art.flags.off(OF.SUST_INT);
1342
+ if (art.modifiers[OBJ_MOD.WIS] < 0)
1343
+ art.flags.off(OF.SUST_WIS);
1344
+ if (art.modifiers[OBJ_MOD.DEX] < 0)
1345
+ art.flags.off(OF.SUST_DEX);
1346
+ if (art.modifiers[OBJ_MOD.CON] < 0)
1347
+ art.flags.off(OF.SUST_CON);
1348
+ if (art.flags.has(OF.DRAIN_EXP))
1349
+ art.flags.off(OF.HOLD_LIFE);
1350
+ /* Remove any conflicting curses. */
1351
+ if (art.curses) {
1352
+ for (let i = 1; i < reg.curses.length; i++) {
1353
+ if (artifactCurseConflicts(reg, art, i, timedFoil)) {
1354
+ if (art.curses)
1355
+ art.curses[i] = 0;
1356
+ checkArtifactCurses(art);
1357
+ }
1358
+ if (!art.curses)
1359
+ break;
1360
+ }
1361
+ }
1362
+ removeContradictoryActivation(reg, art, activationSummarize);
1363
+ }
1364
+ /* ------------------------------------------------------------------ */
1365
+ /* add_ability (obj-randart.c L2567) */
1366
+ /* ------------------------------------------------------------------ */
1367
+ /**
1368
+ * add_ability (obj-randart.c L2567): choose a random ability from the frequency
1369
+ * table, add it, remove contradictions, and bless WIS-bearing sharp weapons.
1370
+ */
1371
+ export function addAbility(reg, art, targetPower, freq, data, rng) {
1372
+ /* Choose a random ability using the frequency table. */
1373
+ const r = chooseAbility(freq, rng);
1374
+ /* Add the appropriate ability. */
1375
+ addAbilityAux(reg, art, r, targetPower, data, rng);
1376
+ /* Remove contradictory or redundant powers. */
1377
+ removeContradictory(reg, art, data.timedFoil, data.activationSummarize);
1378
+ /* Adding WIS to sharp weapons always blesses them. */
1379
+ if (art.modifiers[OBJ_MOD.WIS] &&
1380
+ (art.tval === TV.SWORD || art.tval === TV.POLEARM)) {
1381
+ addFlag(art, OF.BLESSED);
1382
+ }
1383
+ }
1384
+ /* ------------------------------------------------------------------ */
1385
+ /* add_curse (obj-randart.c L2591) */
1386
+ /* ------------------------------------------------------------------ */
1387
+ /**
1388
+ * add_curse (obj-randart.c L2591): randomly select a curse and apply it, unless
1389
+ * the artifact is blessed. Each attempt draws pick then power regardless of
1390
+ * whether the curse is possible on this tval. See the module note on the
1391
+ * randint1(9) + 10 * m_bonus(9, level) evaluation order.
1392
+ */
1393
+ export function addCurse(reg, art, level, rng, timedFoil) {
1394
+ if (art.flags.has(OF.BLESSED))
1395
+ return false;
1396
+ let maxTries = 5;
1397
+ while (maxTries) {
1398
+ const pick = rng.randint1(reg.curses.length - 1);
1399
+ const rand9 = rng.randint1(9);
1400
+ const bonus = rng.mBonus(9, level);
1401
+ const power = rand9 + 10 * bonus;
1402
+ if (!reg.curses[pick].poss[art.tval]) {
1403
+ maxTries--;
1404
+ continue;
1405
+ }
1406
+ return appendArtifactCurse(reg, art, pick, power, timedFoil);
1407
+ }
1408
+ return false;
1409
+ }
1410
+ /* ------------------------------------------------------------------ */
1411
+ /* make_bad (obj-randart.c L2613) */
1412
+ /* ------------------------------------------------------------------ */
1413
+ /**
1414
+ * make_bad (obj-randart.c L2613): make an artifact bad, or worse: possibly add
1415
+ * aggravation / drain-exp / no-teleport, flip some positive modifiers and
1416
+ * combat bonuses to negative, and apply one or two curses.
1417
+ */
1418
+ export function makeBad(reg, art, level, rng, timedFoil) {
1419
+ let num = rng.randint1(2);
1420
+ if (rng.oneIn(7))
1421
+ art.flags.on(OF.AGGRAVATE);
1422
+ if (rng.oneIn(4))
1423
+ art.flags.on(OF.DRAIN_EXP);
1424
+ if (rng.oneIn(7))
1425
+ art.flags.on(OF.NO_TELEPORT);
1426
+ for (let i = 0; i < OBJ_MOD_MAX; i++) {
1427
+ if (art.modifiers[i] > 0) {
1428
+ if (rng.oneIn(2) && i !== OBJ_MOD.MIGHT) {
1429
+ art.modifiers[i] = -art.modifiers[i];
1430
+ }
1431
+ }
1432
+ }
1433
+ if (art.toA > 0 && rng.oneIn(2))
1434
+ art.toA = -art.toA;
1435
+ if (art.toH > 0 && rng.oneIn(2))
1436
+ art.toH = -art.toH;
1437
+ if (art.toD > 0 && rng.oneIn(4))
1438
+ art.toD = -art.toD;
1439
+ while (num) {
1440
+ addCurse(reg, art, level, rng, timedFoil);
1441
+ num--;
1442
+ }
1443
+ }
1444
+ //# sourceMappingURL=randart-build.js.map