@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,1323 @@
1
+ /**
2
+ * The WIZARD / DEBUG command surface, ported from Angband 4.2.6:
3
+ * - reference/src/cmd-wizard.c (the do_cmd_wiz_* command actions)
4
+ * - reference/src/wiz-debug.c (wiz_cheat_death)
5
+ *
6
+ * UPSTREAM HAS TWO SEPARATE CONCEPTS HERE, and this module gates on the second.
7
+ * The port originally collapsed them into one `wizard` boolean, which silently
8
+ * made every debug command unreachable unless wizard mode was also on - a gate
9
+ * upstream does not have:
10
+ *
11
+ * - DEBUG consent (player_can_debug_prereq, reference/src/player-util.c
12
+ * L1296-1307) gates all 41 debug-menu commands. It consults ONLY
13
+ * `player->noscore & NOSCORE_DEBUG`; on the first use it asks confirm_debug()
14
+ * and, if accepted, ORs the bit in permanently. It never reads
15
+ * player->wizard. Every row of every cmd_debug_* table in
16
+ * reference/src/ui-game.c L247-322 uses this prereq and nothing else.
17
+ * - WIZARD mode (player->wizard, toggled by ^W / do_cmd_wizard,
18
+ * reference/src/cmd-misc.c L40-67) is a separate, much smaller thing: it
19
+ * changes six display / knowledge behaviours and nothing in this module.
20
+ * Its 15 upstream call sites are the toggle itself, cheat death
21
+ * (player-util.c L246), the "[=-WIZARD-=]" title (ui-display.c L178,
22
+ * ui-player.c L628), all-artifacts-known (ui-knowledge.c L1695), the seven
23
+ * look/target coordinate+noise+scent lines (ui-target.c), the headless
24
+ * stats build (main-stats.c L435) and the borg's cheat-death check.
25
+ *
26
+ * So WizardDeps carries BOTH flags: `debug` (the player_can_debug_prereq result)
27
+ * gates the commands here, and `wizard` gates only wizCheatDeath, whose upstream
28
+ * path is `player->wizard || OPT(player, cheat_live)`. A normal, faithful game
29
+ * (design decision 16: no save-scumming, faithful play) reaches neither without
30
+ * the player accepting an explicit, savefile-marking warning first.
31
+ *
32
+ * MOST of these commands are thin wrappers that drive already-ported engine
33
+ * systems with debug parameters, so this module wires to the existing port and
34
+ * does not re-implement the engine:
35
+ * - object / gold / artifact creation -> obj/make.ts (objectPrep, applyMagic,
36
+ * makeGold, copyArtifactData) through the shared MakeDeps bundle;
37
+ * - detection / mapping / teleport / summon-random / project-los / restore
38
+ * stat+exp -> the effect interpreter's effect_simple (effects/interpreter.ts
39
+ * effectSimple) over a game effect context (game/effect-env.ts +
40
+ * game/effect-game-env.ts), the same stack items and spells run through;
41
+ * - banish -> deleteMonster (game/context.ts);
42
+ * - create_trap -> placeTrap (game/trap.ts);
43
+ * - summon_named -> scatterExt + placeNewMonster (world/scatter.ts,
44
+ * game/mon-place.ts);
45
+ * - curse_item -> appendObjectCurse / removeObjectCurse (obj/object.ts);
46
+ * - exp / level / stat edits -> player/exp.ts (playerExpGain / playerExpLose);
47
+ * - learn_object_kinds -> the per-game FlavorKnowledge (obj/knowledge.ts);
48
+ * - recall / wipe monster -> cheatMonsterLore / wipeMonsterLore (mon/lore.ts);
49
+ * - wizard_light -> wizLightLevel (game/effect-terrain.ts);
50
+ * - push_object -> pushObject (game/project-feat.ts).
51
+ *
52
+ * The Term / prompt UI halves stay with the shell (the "which item / which
53
+ * monster / how many" menus and the map-highlight redraws): where a command
54
+ * needs a selection or count, this module takes it as a parameter. The map
55
+ * QUERY commands (query_feature / query_square_flag / peek_noise_scent) and
56
+ * dump_level_map port their DATA half only - they return the grids or map the
57
+ * shell would highlight or write, not the drawing.
58
+ *
59
+ * The item / player debug shells whose non-UI halves are engine data or state
60
+ * changes are ported here too (their Term rendering and menu loops stay with the
61
+ * shell, WP-14): wizDisplayItem (wiz_display_item DATA), wizPlayItemBegin /
62
+ * wizPlayItemReject / wizPlayItemAccept (the do_cmd_wiz_play_item session
63
+ * snapshot / restore / commit), wizStatItem (do_cmd_wiz_stat_item's make_object
64
+ * rarity sampler) and wizEditPlayerStart (do_cmd_wiz_edit_player_start's batch
65
+ * stat/gold/exp apply). The NOSCORE_* cheat-flag model and the markNoscore seam
66
+ * (15.3) live here as well.
67
+ *
68
+ * DEFERRED (see parity/ledger/wizard-debug.yaml): the wiz-spoil.c spoiler
69
+ * generators and the three Monte-Carlo collectors (do_cmd_wiz_collect_*) are
70
+ * dev-tooling ports that live in packages/cli (spoilers.ts, stats.ts,
71
+ * wiz-stats.ts) alongside the other headless generation harnesses, not in this
72
+ * engine module.
73
+ */
74
+ import { EF, KF, ORIGIN, PROJ, TMD } from "../generated/index.js";
75
+ import { PLAYER_EXP, PY_MAX_EXP, playerExpGain, playerExpLose } from "../player/exp.js";
76
+ import { PY_MAX_LEVEL } from "../player/calcs.js";
77
+ import { STAT_MAX } from "../player/types.js";
78
+ import { applyMagic, copyArtifactData, egoApplyMagic, makeGold, makeObject, objectPrep, } from "../obj/make.js";
79
+ import { appendObjectCurse, objectCopy, objectWeightOne, removeObjectCurse, tvalCanHaveCharges, tvalCanHaveTimeout, tvalIsAmmo, tvalIsMoney, } from "../obj/object.js";
80
+ import { objectValue } from "../obj/value.js";
81
+ import { OBJ_NOTICE, objectLearnOnWield } from "../obj/knowledge.js";
82
+ import { MAX_PVAL, OBJ_MOD_MAX } from "../obj/types.js";
83
+ import { MON_GROUP } from "../mon/types.js";
84
+ import { PY_FOOD_FULL_DEFAULT as PY_FOOD_FULL } from "../player/birth.js";
85
+ import { cheatMonsterLore, getLore, wipeMonsterLore } from "../mon/lore.js";
86
+ import { sourceNone, sourcePlayer } from "../effects/interpreter.js";
87
+ import { scatterExt } from "../world/scatter.js";
88
+ import { deleteMonster, monsterMax, squareIsEmpty } from "./context.js";
89
+ import { dropNear, floorPile } from "./floor.js";
90
+ import { objectIsInQuiver } from "./gear.js";
91
+ import { placeNewMonster } from "./mon-place.js";
92
+ import { placeTrap, squareIsTrap, squareIsWebbed } from "./trap.js";
93
+ import { pushObject } from "./project-feat.js";
94
+ import { wizLightLevel } from "./effect-terrain.js";
95
+ import { squareIsKnown, updatePlayerObjectKnowledge } from "./known.js";
96
+ import { buildEffectContext } from "./effect-env.js";
97
+ import { attachGameEnv } from "./effect-game-env.js";
98
+ /**
99
+ * player_can_debug_prereq (player-util.c L1296-1307): the gate on every debug
100
+ * command. Returns false (and the command no-ops) until the character has
101
+ * consented to debug mode. Deliberately independent of wizard mode.
102
+ */
103
+ export function debugEnabled(deps) {
104
+ return deps.debug === true;
105
+ }
106
+ /**
107
+ * player->wizard (cmd-misc.c L40-67). Only wizCheatDeath gates on this here; see
108
+ * WizardDeps.wizard for where the other wizard-mode behaviours live.
109
+ */
110
+ export function wizardEnabled(deps) {
111
+ return deps.wizard === true;
112
+ }
113
+ /* ------------------------------------------------------------------ *
114
+ * NOSCORE cheat flags (player.h L92-100).
115
+ * ------------------------------------------------------------------ */
116
+ /**
117
+ * NOSCORE_*: the "ways in which players can be marked as cheaters" bit model
118
+ * (player.h L92-100). Stored on player->noscore (a uint16), persisted in the
119
+ * savefile (save.c L622 wr_u16b / load.c L965 rd_u16b) and re-asserted from the
120
+ * savefile's own wizard flag on load (savefile.c L650). A set cheat bit
121
+ * invalidates the high-score entry (score.c L289). The bit values match
122
+ * upstream exactly so a loaded uint16 is interpreted identically.
123
+ */
124
+ export const NOSCORE = {
125
+ /** Character used wizard mode (wiz-debug.c L32, cmd-misc.c L51). */
126
+ WIZARD: 0x0002,
127
+ /** Character used a debug command / debug options (player-util.c L1303). */
128
+ DEBUG: 0x0008,
129
+ /** Character jumped levels (cmd-wizard.c L1366); transient, cleared after
130
+ * the jump completes (generate.c L824-828). Does NOT invalidate the score. */
131
+ JUMPING: 0x0010,
132
+ /** Character was played by the Borg (cmd-misc.c L140, main-win.c L3396). */
133
+ BORG: 0x0020,
134
+ };
135
+ /**
136
+ * The two upstream build switches that decide whether NOSCORE_BORG exists and
137
+ * whether it disqualifies a score. Upstream expresses these as #ifdefs
138
+ * (player.h L97-99 wraps the bit in ALLOW_BORG; score.c L292-297 skips the borg
139
+ * branch when SCORE_BORGS is defined), so the port records the configuration it
140
+ * builds under as named constants instead of leaving the choice implicit.
141
+ *
142
+ * ALLOW_BORG: true. The Borg ships as a bundled mod (decision 31), so the bit
143
+ * exists and can be set.
144
+ * SCORE_BORGS: false, matching upstream's default - a borg-played character is
145
+ * not eligible for the high-score table.
146
+ */
147
+ export const ALLOW_BORG = true;
148
+ export const SCORE_BORGS = false;
149
+ /**
150
+ * The cheat bits that invalidate a high-score entry (score.c L289-298).
151
+ * NOSCORE_WIZARD | NOSCORE_DEBUG always disqualify; NOSCORE_BORG additionally
152
+ * does so only under ALLOW_BORG && !SCORE_BORGS, which is this port's
153
+ * configuration. NOSCORE_JUMPING is deliberately absent: it is a transient
154
+ * generation marker, not a scoring disqualifier.
155
+ */
156
+ export const NOSCORE_SCORE_INVALIDATING = NOSCORE.WIZARD |
157
+ NOSCORE.DEBUG |
158
+ (ALLOW_BORG && !SCORE_BORGS ? NOSCORE.BORG : 0);
159
+ /** markNoscore (obj-mark analogue): OR cheat bits into a noscore value. Pure. */
160
+ export function markNoscore(current, bits) {
161
+ return (current | bits) & 0xffff;
162
+ }
163
+ /**
164
+ * noscoreInvalidatesScore (score.c L289): true when the character's cheat flags
165
+ * disqualify it from the high-score table.
166
+ */
167
+ export function noscoreInvalidatesScore(noscore) {
168
+ return (noscore & NOSCORE_SCORE_INVALIDATING) !== 0;
169
+ }
170
+ /** Build a game effect context (the same shape spellCast / useAux build). */
171
+ function effContext(state, eff) {
172
+ const base = buildEffectContext(state, eff.envDeps);
173
+ return attachGameEnv(base, {
174
+ state,
175
+ cast: eff.cast,
176
+ ...(eff.teleport ? { teleport: eff.teleport } : {}),
177
+ ...(eff.general ? { general: eff.general } : {}),
178
+ ...(eff.item ? { item: eff.item } : {}),
179
+ ...(eff.summon ? { summon: eff.summon } : {}),
180
+ });
181
+ }
182
+ /** Run one effect_simple with a player (or none) source; false if no bundle. */
183
+ function runSimple(state, eff, index, params) {
184
+ if (!eff)
185
+ return false;
186
+ const ctx = effContext(state, eff);
187
+ return eff.registry.effectSimple(index, ctx, {
188
+ origin: params.none ? sourceNone() : sourcePlayer(),
189
+ diceString: params.diceString ?? "0",
190
+ subtype: params.subtype ?? 0,
191
+ radius: params.radius ?? 0,
192
+ other: params.other ?? 0,
193
+ y: params.y ?? 0,
194
+ x: params.x ?? 0,
195
+ });
196
+ }
197
+ /* ------------------------------------------------------------------ *
198
+ * Shared object-creation building blocks (cmd-wizard.c L139-L302).
199
+ * ------------------------------------------------------------------ */
200
+ /**
201
+ * wiz_create_object_from_kind (cmd-wizard.c L169): a fresh instance of a kind,
202
+ * money made as gold, everything else prepped and given plain magic (no
203
+ * messages, no artifacts).
204
+ */
205
+ export function wizCreateObjectFromKind(state, kind, makeDeps) {
206
+ if (tvalIsMoney(kind.tval)) {
207
+ return makeGold(state.rng, makeDeps, state.chunk.depth, kind.name);
208
+ }
209
+ const obj = objectPrep(state.rng, makeDeps.reg, makeDeps.constants, kind, state.chunk.depth, "randomise");
210
+ /* apply_magic(obj, depth, allow_artifacts=false, good=false, great=false,
211
+ * extra=false). */
212
+ applyMagic(state.rng, makeDeps, obj, state.chunk.depth, false, false, false, false, state.chunk.depth);
213
+ return obj;
214
+ }
215
+ /**
216
+ * wiz_create_object_from_artifact (cmd-wizard.c L139): instantiate an artifact
217
+ * on its base kind and mark it created in the shared registry (L157), so the
218
+ * normal generation paths will not spawn it again.
219
+ */
220
+ export function wizCreateObjectFromArtifact(state, art, makeDeps) {
221
+ if (!art.name)
222
+ return null;
223
+ const kind = makeDeps.reg.lookupKind(art.tval, art.sval);
224
+ if (!kind)
225
+ return null;
226
+ const obj = objectPrep(state.rng, makeDeps.reg, makeDeps.constants, kind, art.allocMin, "randomise");
227
+ obj.artifact = art;
228
+ copyArtifactData(state.rng, makeDeps.reg, obj, art);
229
+ makeDeps.artifacts.markCreated(art.aidx, true);
230
+ return obj;
231
+ }
232
+ /**
233
+ * wiz_drop_object (cmd-wizard.c L292): mark the object as a cheat and drop it
234
+ * from heaven near the player.
235
+ */
236
+ export function wizDropObject(state, obj) {
237
+ if (!obj)
238
+ return;
239
+ obj.origin = ORIGIN.CHEAT;
240
+ obj.originDepth = state.chunk.depth;
241
+ dropNear(state, obj, 0, state.actor.grid, true, true);
242
+ }
243
+ /* ------------------------------------------------------------------ *
244
+ * The command actions.
245
+ * ------------------------------------------------------------------ */
246
+ /**
247
+ * do_cmd_wiz_acquire (L389): acquire `quantity` good (or great) objects and
248
+ * drop them near the player. Wires to make_object (the acquirement() loop).
249
+ */
250
+ export function wizAcquire(state, params, deps) {
251
+ if (!debugEnabled(deps) || !deps.makeDeps)
252
+ return false;
253
+ const great = params.great ?? false;
254
+ for (let i = 0; i < params.quantity; i++) {
255
+ /* acquirement: make_object(cave, level, good=true, great, extra=true). */
256
+ const obj = makeObject(state.rng, deps.makeDeps, state.chunk.depth, true, great, true, 0, state.chunk.depth);
257
+ if (!obj)
258
+ continue;
259
+ obj.origin = ORIGIN.ACQUIRE;
260
+ obj.originDepth = state.chunk.depth;
261
+ dropNear(state, obj, 0, state.actor.grid, true, true);
262
+ }
263
+ return true;
264
+ }
265
+ /**
266
+ * do_cmd_wiz_advance (L414): max stats, a heap of gold, level 50, full HP/SP.
267
+ */
268
+ export function wizAdvance(state, deps) {
269
+ if (!debugEnabled(deps) || !deps.expDeps)
270
+ return false;
271
+ const p = state.actor.player;
272
+ for (let i = 0; i < STAT_MAX; i++) {
273
+ p.statCur[i] = 118;
274
+ p.statMax[i] = 118;
275
+ }
276
+ p.au = 1000000;
277
+ playerExpGain(p, PY_MAX_EXP, deps.expDeps);
278
+ p.chp = p.mhp;
279
+ p.chpFrac = 0;
280
+ p.csp = p.msp;
281
+ p.cspFrac = 0;
282
+ return true;
283
+ }
284
+ /**
285
+ * do_cmd_wiz_banish (L449): delete every monster within `range` grids
286
+ * (measured by mon->cdis, as upstream).
287
+ */
288
+ export function wizBanish(state, params, deps) {
289
+ if (!debugEnabled(deps))
290
+ return false;
291
+ for (let i = 1; i < monsterMax(state); i++) {
292
+ const mon = state.monsters[i];
293
+ if (!mon)
294
+ continue;
295
+ if (mon.cdis > params.range)
296
+ continue;
297
+ deleteMonster(state, i);
298
+ }
299
+ return true;
300
+ }
301
+ /**
302
+ * do_cmd_wiz_create_all_artifact (L728): create every artifact and drop them.
303
+ */
304
+ export function wizCreateAllArtifact(state, deps) {
305
+ if (!debugEnabled(deps) || !deps.makeDeps || !deps.artifacts)
306
+ return false;
307
+ for (let i = 1; i < deps.artifacts.length; i++) {
308
+ const art = deps.artifacts[i];
309
+ if (!art)
310
+ continue;
311
+ wizDropObject(state, wizCreateObjectFromArtifact(state, art, deps.makeDeps));
312
+ }
313
+ return true;
314
+ }
315
+ /**
316
+ * do_cmd_wiz_create_all_artifact_from_tval (L746): create every artifact of a
317
+ * given tval.
318
+ */
319
+ export function wizCreateAllArtifactFromTval(state, params, deps) {
320
+ if (!debugEnabled(deps) || !deps.makeDeps || !deps.artifacts)
321
+ return false;
322
+ for (let i = 1; i < deps.artifacts.length; i++) {
323
+ const art = deps.artifacts[i];
324
+ if (!art || art.tval !== params.tval)
325
+ continue;
326
+ wizDropObject(state, wizCreateObjectFromArtifact(state, art, deps.makeDeps));
327
+ }
328
+ return true;
329
+ }
330
+ /**
331
+ * do_cmd_wiz_create_all_obj (L780): create one of every ordinary kind (skip
332
+ * instant-artifact kinds) and drop them.
333
+ */
334
+ export function wizCreateAllObj(state, deps) {
335
+ if (!debugEnabled(deps) || !deps.makeDeps)
336
+ return false;
337
+ const kinds = deps.makeDeps.reg.kinds;
338
+ for (const kind of kinds) {
339
+ if (!kind || !kind.base || !kind.base.name)
340
+ continue;
341
+ if (kind.kindFlags.has(KF_INSTA_ART))
342
+ continue;
343
+ wizDropObject(state, wizCreateObjectFromKind(state, kind, deps.makeDeps));
344
+ }
345
+ return true;
346
+ }
347
+ /**
348
+ * do_cmd_wiz_create_all_obj_from_tval (L803): create one of every kind with a
349
+ * given tval; `art` selects whether instant-artifact kinds are included.
350
+ */
351
+ export function wizCreateAllObjFromTval(state, params, deps) {
352
+ if (!debugEnabled(deps) || !deps.makeDeps)
353
+ return false;
354
+ const art = params.art ?? false;
355
+ for (const kind of deps.makeDeps.reg.kinds) {
356
+ if (!kind || kind.tval !== params.tval)
357
+ continue;
358
+ if (!art && kind.kindFlags.has(KF_INSTA_ART))
359
+ continue;
360
+ wizDropObject(state, wizCreateObjectFromKind(state, kind, deps.makeDeps));
361
+ }
362
+ return true;
363
+ }
364
+ /**
365
+ * do_cmd_wiz_create_artifact (L842): create one artifact by index.
366
+ */
367
+ export function wizCreateArtifact(state, params, deps) {
368
+ if (!debugEnabled(deps) || !deps.makeDeps || !deps.artifacts)
369
+ return false;
370
+ const ind = params.index;
371
+ if (ind < 1 || ind >= deps.artifacts.length) {
372
+ deps.msg?.("That's not a valid artifact.");
373
+ return false;
374
+ }
375
+ const art = deps.artifacts[ind];
376
+ if (!art) {
377
+ deps.msg?.("That's not a valid artifact.");
378
+ return false;
379
+ }
380
+ wizDropObject(state, wizCreateObjectFromArtifact(state, art, deps.makeDeps));
381
+ return true;
382
+ }
383
+ /**
384
+ * do_cmd_wiz_create_obj (L873): create one object of a kind by index.
385
+ */
386
+ export function wizCreateObj(state, params, deps) {
387
+ if (!debugEnabled(deps) || !deps.makeDeps)
388
+ return false;
389
+ const kinds = deps.makeDeps.reg.kinds;
390
+ const ind = params.index;
391
+ if (ind < 0 || ind >= kinds.length) {
392
+ deps.msg?.("That's not a valid kind of object.");
393
+ return false;
394
+ }
395
+ const kind = kinds[ind];
396
+ if (!kind) {
397
+ deps.msg?.("That's not a valid kind of object.");
398
+ return false;
399
+ }
400
+ wizDropObject(state, wizCreateObjectFromKind(state, kind, deps.makeDeps));
401
+ return true;
402
+ }
403
+ /**
404
+ * do_cmd_wiz_create_trap (L904): place a trap of type `index` under the player
405
+ * when the grid permits it.
406
+ */
407
+ export function wizCreateTrap(state, params, deps) {
408
+ if (!debugEnabled(deps) || !deps.trapDeps)
409
+ return false;
410
+ const grid = state.actor.grid;
411
+ const tidx = params.index;
412
+ if (!state.chunk.isFloor(grid) ||
413
+ squareIsTrap(state, grid) ||
414
+ squareIsWebbed(state, grid) ||
415
+ floorPile(state, grid).length > 0) {
416
+ deps.msg?.("You can't place a trap there!");
417
+ return false;
418
+ }
419
+ if (state.chunk.depth === 0) {
420
+ deps.msg?.("You can't place a trap in the town!");
421
+ return false;
422
+ }
423
+ if (tidx < 1 || tidx >= deps.trapDeps.kinds.length) {
424
+ deps.msg?.("Trap not found.");
425
+ return false;
426
+ }
427
+ placeTrap(state, grid, tidx, 0, deps.trapDeps);
428
+ return true;
429
+ }
430
+ /**
431
+ * do_cmd_wiz_cure_all (L941): remove equipment curses, restore every stat and
432
+ * lost experience, top HP/SP, clear the affliction timers and feed the player.
433
+ */
434
+ export function wizCureAll(state, deps) {
435
+ if (!debugEnabled(deps) || !deps.effect)
436
+ return false;
437
+ const p = state.actor.player;
438
+ /* Remove curses from equipped items. */
439
+ for (const handle of p.equipment) {
440
+ if (!handle)
441
+ continue;
442
+ const obj = state.gear.store.get(handle);
443
+ if (obj && obj.curses)
444
+ obj.curses = null;
445
+ }
446
+ const ctx = effContext(state, deps.effect);
447
+ /* Restore stats (EF_RESTORE_STAT, one per stat) and lost experience. */
448
+ for (let i = 0; i < STAT_MAX; i++) {
449
+ deps.effect.registry.effectSimple(EF.RESTORE_STAT, ctx, {
450
+ origin: sourcePlayer(),
451
+ diceString: "0",
452
+ subtype: i,
453
+ });
454
+ }
455
+ deps.effect.registry.effectSimple(EF.RESTORE_EXP, ctx, {
456
+ origin: sourceNone(),
457
+ diceString: "0",
458
+ });
459
+ /* Heal and restore mana. */
460
+ p.chp = p.mhp;
461
+ p.chpFrac = 0;
462
+ p.csp = p.msp;
463
+ p.cspFrac = 0;
464
+ /* Cure the affliction timers (player_clear_timed). */
465
+ const timed = ctx.player?.timed;
466
+ if (timed) {
467
+ for (const idx of CURE_ALL_TIMED)
468
+ timed.clearTimed(idx, true, false);
469
+ /* No longer hungry (player_set_timed FOOD). */
470
+ timed.setTimed(TMD.FOOD, PY_FOOD_FULL - 1, false, false);
471
+ }
472
+ deps.msg?.("You feel *much* better!");
473
+ return true;
474
+ }
475
+ /** The affliction timers cure_all clears (cmd-wizard.c L972-981). */
476
+ const CURE_ALL_TIMED = [
477
+ TMD.BLIND,
478
+ TMD.CONFUSED,
479
+ TMD.POISONED,
480
+ TMD.AFRAID,
481
+ TMD.PARALYZED,
482
+ TMD.IMAGE,
483
+ TMD.STUN,
484
+ TMD.CUT,
485
+ TMD.SLOW,
486
+ TMD.AMNESIA,
487
+ ];
488
+ /**
489
+ * do_cmd_wiz_curse_item (L1004): add a curse (power > 0) or remove one
490
+ * (power == 0) on an item. The "which item / which curse" prompts are the
491
+ * shell's; the object, curse index and power arrive as parameters.
492
+ */
493
+ export function wizCurseItem(state, params, deps) {
494
+ if (!debugEnabled(deps) || !deps.curses)
495
+ return false;
496
+ const { obj, index, power } = params;
497
+ if (index <= 0 || index >= deps.curses.length)
498
+ return false;
499
+ if (power < 0)
500
+ return false;
501
+ if (power) {
502
+ appendObjectCurse(state.rng, obj, index, power, deps.curses);
503
+ }
504
+ else if (!removeObjectCurse(obj, index)) {
505
+ return false;
506
+ }
507
+ return true;
508
+ }
509
+ /**
510
+ * do_cmd_wiz_detect_all_local (L1068): detect traps / doors / stairs / gold /
511
+ * objects / visible + invisible monsters in a 22x40 rectangle.
512
+ */
513
+ export function wizDetectAllLocal(state, deps) {
514
+ if (!debugEnabled(deps) || !deps.effect)
515
+ return false;
516
+ const local = { y: 22, x: 40 };
517
+ runSimple(state, deps.effect, EF.DETECT_TRAPS, local);
518
+ runSimple(state, deps.effect, EF.DETECT_DOORS, local);
519
+ runSimple(state, deps.effect, EF.DETECT_STAIRS, local);
520
+ runSimple(state, deps.effect, EF.DETECT_GOLD, local);
521
+ runSimple(state, deps.effect, EF.DETECT_OBJECTS, local);
522
+ runSimple(state, deps.effect, EF.DETECT_VISIBLE_MONSTERS, local);
523
+ runSimple(state, deps.effect, EF.DETECT_INVISIBLE_MONSTERS, local);
524
+ return true;
525
+ }
526
+ /**
527
+ * do_cmd_wiz_detect_all_monsters (L1091): detect all monsters in a 500x500
528
+ * rectangle (i.e. the whole level).
529
+ */
530
+ export function wizDetectAllMonsters(state, deps) {
531
+ if (!debugEnabled(deps) || !deps.effect)
532
+ return false;
533
+ const whole = { y: 500, x: 500 };
534
+ runSimple(state, deps.effect, EF.DETECT_VISIBLE_MONSTERS, whole);
535
+ runSimple(state, deps.effect, EF.DETECT_INVISIBLE_MONSTERS, whole);
536
+ return true;
537
+ }
538
+ /**
539
+ * do_cmd_wiz_magic_map (L1418): map the area around the player (22x40).
540
+ */
541
+ export function wizMagicMap(state, deps) {
542
+ if (!debugEnabled(deps) || !deps.effect)
543
+ return false;
544
+ return runSimple(state, deps.effect, EF.MAP_AREA, { y: 22, x: 40 });
545
+ }
546
+ /**
547
+ * do_cmd_wiz_hit_all_los (L1303): PROJECT_LOS 10000 damage as PROJ_DISP_ALL
548
+ * (dispel every monster in line of sight).
549
+ */
550
+ export function wizHitAllLos(state, deps) {
551
+ if (!debugEnabled(deps) || !deps.effect)
552
+ return false;
553
+ return runSimple(state, deps.effect, EF.PROJECT_LOS, {
554
+ diceString: "10000",
555
+ subtype: PROJ.DISP_ALL,
556
+ });
557
+ }
558
+ /**
559
+ * do_cmd_wiz_edit_player_exp (L1137): set the player's experience to `value`,
560
+ * clamped to [0, PY_MAX_EXP], gaining or losing to reach it.
561
+ */
562
+ export function wizEditPlayerExp(state, params, deps) {
563
+ if (!debugEnabled(deps) || !deps.expDeps)
564
+ return false;
565
+ const p = state.actor.player;
566
+ const newv = Math.min(PY_MAX_EXP, Math.max(0, params.value));
567
+ if (newv > p.exp) {
568
+ playerExpGain(p, newv - p.exp, deps.expDeps);
569
+ }
570
+ else {
571
+ playerExpLose(p, p.exp - newv, false, deps.expDeps);
572
+ }
573
+ return true;
574
+ }
575
+ /**
576
+ * do_cmd_wiz_edit_player_gold (L1169): set the player's gold to `value`,
577
+ * clamped to [0, INT32_MAX].
578
+ */
579
+ export function wizEditPlayerGold(state, params, deps) {
580
+ if (!debugEnabled(deps))
581
+ return false;
582
+ state.actor.player.au = Math.min(2147483647, Math.max(0, params.value));
583
+ return true;
584
+ }
585
+ /**
586
+ * do_cmd_wiz_edit_player_stat (L1247): set one stat to `value`, clamped to
587
+ * [3, 118].
588
+ */
589
+ export function wizEditPlayerStat(state, params, deps) {
590
+ if (!debugEnabled(deps))
591
+ return false;
592
+ const { stat } = params;
593
+ if (stat < 0 || stat >= STAT_MAX)
594
+ return false;
595
+ const newv = Math.min(118, Math.max(3, params.value));
596
+ const p = state.actor.player;
597
+ p.statCur[stat] = newv;
598
+ p.statMax[stat] = newv;
599
+ return true;
600
+ }
601
+ /**
602
+ * do_cmd_wiz_increase_exp (L1314): gain `quantity` (>= 1) experience.
603
+ */
604
+ export function wizIncreaseExp(state, params, deps) {
605
+ if (!debugEnabled(deps) || !deps.expDeps)
606
+ return false;
607
+ const n = params.quantity < 1 ? 1 : params.quantity;
608
+ playerExpGain(state.actor.player, n, deps.expDeps);
609
+ return true;
610
+ }
611
+ /**
612
+ * do_cmd_wiz_jump_level (L1339): jump to dungeon level `level` (dungeon_change_
613
+ * level - the port signals a pending level change). Out-of-range is a no-op.
614
+ *
615
+ * `chooseGen` is the answer to "Choose cave profile? " (L1360-1363). It is the
616
+ * ONLY thing that sets NOSCORE_JUMPING (L1365-1367), and that bit is not really
617
+ * a cheat marker: choose_profile consumes it as the one-shot signal to ask which
618
+ * profile to build (generate.c:824). Marking it unconditionally - which this
619
+ * function used to do - both mis-flags the savefile and would make every jump
620
+ * ask for a profile name.
621
+ */
622
+ export function wizJumpLevel(state, params, deps) {
623
+ if (!debugEnabled(deps))
624
+ return false;
625
+ const level = params.level;
626
+ if (level < 0 || level >= state.z.maxDepth)
627
+ return false;
628
+ /* player->noscore |= NOSCORE_JUMPING (cmd-wizard.c L1366). */
629
+ if (params.chooseGen)
630
+ deps.markNoscore?.(NOSCORE.JUMPING);
631
+ deps.msg?.(`You jump to dungeon level ${level}.`);
632
+ state.targetDepth = level;
633
+ state.generateLevel = true;
634
+ return true;
635
+ }
636
+ /**
637
+ * do_cmd_wiz_learn_object_kinds (L1386): make the player aware of every kind up
638
+ * to `level`. Awareness lives in the per-game FlavorKnowledge in the port.
639
+ */
640
+ export function wizLearnObjectKinds(state, params, deps) {
641
+ if (!debugEnabled(deps) || !deps.makeDeps || !deps.flavor)
642
+ return false;
643
+ for (const kind of deps.makeDeps.reg.kinds) {
644
+ if (!kind || !kind.name)
645
+ continue;
646
+ if (kind.level <= params.level)
647
+ deps.flavor.setAware(kind);
648
+ }
649
+ deps.msg?.("You now know about many items!");
650
+ return true;
651
+ }
652
+ /**
653
+ * do_cmd_wiz_recall_monster (L2161): fully learn a monster race's lore, or all
654
+ * races when `all` is set.
655
+ */
656
+ export function wizRecallMonster(state, params, deps) {
657
+ if (!debugEnabled(deps))
658
+ return false;
659
+ if (params.all) {
660
+ if (!deps.races)
661
+ return false;
662
+ for (const race of deps.races) {
663
+ if (race)
664
+ cheatMonsterLore(race, getLore(state.lore, race));
665
+ }
666
+ return true;
667
+ }
668
+ if (!params.race)
669
+ return false;
670
+ cheatMonsterLore(params.race, getLore(state.lore, params.race));
671
+ return true;
672
+ }
673
+ /**
674
+ * do_cmd_wiz_wipe_recall (L2860): forget a monster race's lore, or all races.
675
+ */
676
+ export function wizWipeRecall(state, params, deps) {
677
+ if (!debugEnabled(deps))
678
+ return false;
679
+ if (params.all) {
680
+ if (!deps.races)
681
+ return false;
682
+ for (const race of deps.races) {
683
+ if (race)
684
+ wipeMonsterLore(race, getLore(state.lore, race));
685
+ }
686
+ return true;
687
+ }
688
+ if (!params.race)
689
+ return false;
690
+ wipeMonsterLore(params.race, getLore(state.lore, params.race));
691
+ return true;
692
+ }
693
+ /**
694
+ * do_cmd_wiz_rerate (L2209): reroll the player's per-level hitpoint table until
695
+ * it lands in the legal band, and report the life rating. Returns the rating.
696
+ */
697
+ export function wizRerate(state, deps) {
698
+ if (!debugEnabled(deps))
699
+ return null;
700
+ const p = state.actor.player;
701
+ let minValue = Math.trunc((PY_MAX_LEVEL * 3 * (p.hitdie - 1)) / 8);
702
+ minValue += PY_MAX_LEVEL;
703
+ let maxValue = Math.trunc((PY_MAX_LEVEL * 5 * (p.hitdie - 1)) / 8);
704
+ maxValue += PY_MAX_LEVEL;
705
+ p.playerHp[0] = p.hitdie;
706
+ for (;;) {
707
+ for (let i = 1; i < PY_MAX_LEVEL; i++) {
708
+ p.playerHp[i] = state.rng.randint1(p.hitdie) + p.playerHp[i - 1];
709
+ }
710
+ const top = p.playerHp[PY_MAX_LEVEL - 1];
711
+ if (top >= minValue && top <= maxValue)
712
+ break;
713
+ }
714
+ const percent = Math.trunc((p.playerHp[PY_MAX_LEVEL - 1] * 200) /
715
+ (p.hitdie + (PY_MAX_LEVEL - 1) * p.hitdie));
716
+ deps.msg?.(`Current Life Rating is ${percent}/100.`);
717
+ return percent;
718
+ }
719
+ /**
720
+ * do_cmd_wiz_reroll_item (L2254): reroll a non-artifact item on its kind at the
721
+ * player's depth. `roll` is 0 normal, 1 good, 2 excellent (good + great). The
722
+ * rerolled properties are written back onto the object in place.
723
+ */
724
+ export function wizRerollItem(state, params, deps) {
725
+ if (!debugEnabled(deps) || !deps.makeDeps)
726
+ return false;
727
+ const { obj } = params;
728
+ if (obj.artifact)
729
+ return false;
730
+ const good = params.roll >= 1;
731
+ const great = params.roll >= 2;
732
+ const fresh = objectPrep(state.rng, deps.makeDeps.reg, deps.makeDeps.constants, obj.kind, state.chunk.depth, "randomise");
733
+ applyMagic(state.rng, deps.makeDeps, fresh, state.chunk.depth, false, good, great, false, state.chunk.depth);
734
+ /* Copy the rolled combat / property values back onto the target object,
735
+ * keeping its identity and pile position (obj is not a fresh allocation
736
+ * here, so pile links stay intact). */
737
+ obj.ego = fresh.ego;
738
+ obj.dd = fresh.dd;
739
+ obj.ds = fresh.ds;
740
+ obj.ac = fresh.ac;
741
+ obj.toA = fresh.toA;
742
+ obj.toH = fresh.toH;
743
+ obj.toD = fresh.toD;
744
+ obj.weight = fresh.weight;
745
+ for (let i = 0; i < obj.modifiers.length; i++) {
746
+ obj.modifiers[i] = fresh.modifiers[i];
747
+ }
748
+ obj.flags.copy(fresh.flags);
749
+ obj.slays = fresh.slays;
750
+ obj.brands = fresh.brands;
751
+ obj.curses = fresh.curses;
752
+ for (let i = 0; i < obj.elInfo.length; i++) {
753
+ const dst = obj.elInfo[i];
754
+ const src = fresh.elInfo[i];
755
+ dst.resLevel = src.resLevel;
756
+ dst.flags = src.flags;
757
+ }
758
+ obj.origin = ORIGIN.CHEAT;
759
+ return true;
760
+ }
761
+ /**
762
+ * do_cmd_wiz_tweak_item (L2698): apply the complete DATA command. The shell
763
+ * owns the prompts; the values arrive as parameters. Every field is optional;
764
+ * only supplied fields are changed. Selecting an ego or artifact follows C's
765
+ * object_prep + ego_apply_magic / copy_artifact_data sequence, including its
766
+ * RNG draws, before the scalar modifier prompts are applied.
767
+ */
768
+ export function wizTweakItem(state, params, deps) {
769
+ if (!debugEnabled(deps))
770
+ return false;
771
+ const { obj } = params;
772
+ if (obj.artifact)
773
+ return false;
774
+ const copyPreparedFields = (fresh) => {
775
+ /* object_prep mutates the existing C object while preserving its pile /
776
+ * identity fields. Copy the generated fields back while retaining those
777
+ * live carrier fields in the port's object model. */
778
+ obj.ego = fresh.ego;
779
+ obj.artifact = fresh.artifact;
780
+ obj.tval = fresh.tval;
781
+ obj.sval = fresh.sval;
782
+ obj.pval = fresh.pval;
783
+ obj.weight = fresh.weight;
784
+ obj.dd = fresh.dd;
785
+ obj.ds = fresh.ds;
786
+ obj.ac = fresh.ac;
787
+ obj.toA = fresh.toA;
788
+ obj.toH = fresh.toH;
789
+ obj.toD = fresh.toD;
790
+ obj.flags.copy(fresh.flags);
791
+ for (let i = 0; i < obj.modifiers.length; i++) {
792
+ obj.modifiers[i] = fresh.modifiers[i];
793
+ }
794
+ for (let i = 0; i < obj.elInfo.length; i++) {
795
+ obj.elInfo[i].resLevel = fresh.elInfo[i].resLevel;
796
+ obj.elInfo[i].flags = fresh.elInfo[i].flags;
797
+ }
798
+ obj.brands = fresh.brands ? [...fresh.brands] : null;
799
+ obj.slays = fresh.slays ? [...fresh.slays] : null;
800
+ obj.curses = fresh.curses ? fresh.curses.map((c) => ({ ...c })) : null;
801
+ obj.effect = fresh.effect;
802
+ obj.effectMsg = fresh.effectMsg;
803
+ obj.activation = fresh.activation;
804
+ obj.time = { ...fresh.time };
805
+ obj.timeout = fresh.timeout;
806
+ };
807
+ if (params.ego !== undefined) {
808
+ if (params.ego && !deps.makeDeps)
809
+ return false;
810
+ if (params.ego && deps.makeDeps) {
811
+ const fresh = objectPrep(state.rng, deps.makeDeps.reg, deps.makeDeps.constants, obj.kind, state.chunk.depth, "randomise");
812
+ fresh.ego = params.ego;
813
+ egoApplyMagic(state.rng, deps.makeDeps.reg, fresh, state.chunk.depth);
814
+ copyPreparedFields(fresh);
815
+ }
816
+ else {
817
+ obj.ego = null;
818
+ }
819
+ }
820
+ if (params.artifact !== undefined) {
821
+ if (params.artifact && !deps.makeDeps)
822
+ return false;
823
+ if (params.artifact && deps.makeDeps) {
824
+ const fresh = objectPrep(state.rng, deps.makeDeps.reg, deps.makeDeps.constants, obj.kind, params.artifact.allocMin, "randomise");
825
+ fresh.ego = null;
826
+ fresh.artifact = params.artifact;
827
+ copyArtifactData(state.rng, deps.makeDeps.reg, fresh, params.artifact);
828
+ copyPreparedFields(fresh);
829
+ }
830
+ else {
831
+ obj.artifact = null;
832
+ }
833
+ }
834
+ if (params.modifiers) {
835
+ for (let i = 0; i < obj.modifiers.length && i < params.modifiers.length; i++) {
836
+ obj.modifiers[i] = params.modifiers[i];
837
+ }
838
+ }
839
+ if (params.toA !== undefined)
840
+ obj.toA = params.toA;
841
+ if (params.toH !== undefined)
842
+ obj.toH = params.toH;
843
+ if (params.toD !== undefined)
844
+ obj.toD = params.toD;
845
+ return true;
846
+ }
847
+ /**
848
+ * do_cmd_wiz_summon_named (L2569): summon a specific monster near the player.
849
+ * Wires to scatter_ext + place_new_monster, trying up to 10 empty grids.
850
+ */
851
+ export function wizSummonNamed(state, params, deps) {
852
+ if (!debugEnabled(deps) || !deps.monPlace)
853
+ return false;
854
+ const info = { index: 0, role: MON_GROUP.LEADER };
855
+ for (let i = 0; i < 10; i++) {
856
+ const spots = scatterExt(state.chunk, state.rng, 1, state.actor.grid, 1, true, (_c, g) => squareIsEmpty(state, g));
857
+ if (spots.length === 0) {
858
+ deps.msg?.("Could not place monster.");
859
+ return false;
860
+ }
861
+ /* wiz_create_monster (cmd-wizard.c L2614-2615): ORIGIN_DROP_WIZARD. */
862
+ if (placeNewMonster(state, spots[0], params.race, true, true, info, deps.monPlace, ORIGIN.DROP_WIZARD)) {
863
+ return true;
864
+ }
865
+ }
866
+ deps.msg?.("Could not place monster.");
867
+ return false;
868
+ }
869
+ /**
870
+ * do_cmd_wiz_summon_random (L2629): summon `quantity` random monsters near the
871
+ * player (one EF_SUMMON per monster, value 1).
872
+ */
873
+ export function wizSummonRandom(state, params, deps) {
874
+ if (!debugEnabled(deps) || !deps.effect)
875
+ return false;
876
+ const n = params.quantity < 1 ? 1 : params.quantity;
877
+ for (let i = 0; i < n; i++) {
878
+ runSimple(state, deps.effect, EF.SUMMON, { diceString: "1" });
879
+ }
880
+ return true;
881
+ }
882
+ /**
883
+ * do_cmd_wiz_teleport_random (L2651): teleport the player a given range.
884
+ */
885
+ export function wizTeleportRandom(state, params, deps) {
886
+ if (!debugEnabled(deps) || !deps.effect || params.range < 1)
887
+ return false;
888
+ return runSimple(state, deps.effect, EF.TELEPORT, {
889
+ diceString: String(params.range),
890
+ });
891
+ }
892
+ /**
893
+ * do_cmd_wiz_teleport_to (L2673): teleport the player onto a target grid, if it
894
+ * is passable.
895
+ */
896
+ export function wizTeleportTo(state, params, deps) {
897
+ if (!debugEnabled(deps) || !deps.effect)
898
+ return false;
899
+ if (!state.chunk.isPassable(params.grid)) {
900
+ deps.msg?.("The square you are aiming for is impassable.");
901
+ return false;
902
+ }
903
+ return runSimple(state, deps.effect, EF.TELEPORT_TO, {
904
+ y: params.grid.y,
905
+ x: params.grid.x,
906
+ });
907
+ }
908
+ /**
909
+ * do_cmd_wiz_push_object (L1871): push the pile off a chosen grid.
910
+ */
911
+ export function wizPushObject(state, params, deps) {
912
+ if (!debugEnabled(deps))
913
+ return false;
914
+ pushObject(state, params.grid);
915
+ return true;
916
+ }
917
+ /**
918
+ * do_cmd_wiz_wizard_light (L2907): permanently light and know the whole level.
919
+ */
920
+ export function wizWizardLight(state, deps) {
921
+ if (!debugEnabled(deps))
922
+ return false;
923
+ /* wiz_light(cave, player, true) (cmd-wizard.c:2909): the wizard command is
924
+ * always the `full` form, so it square_know_piles rather than sense_piles. */
925
+ wizLightLevel(state, true, true);
926
+ return true;
927
+ }
928
+ /**
929
+ * wiz_cheat_death (wiz-debug.c L28): survive a lethal blow - reset age, refill
930
+ * HP/SP, cure the afflictions, feed, cancel recall / deep descent and return to
931
+ * town. The recall / deep-descent counters are player upkeep the port carries
932
+ * on the player; word_recall / deep_descent live there.
933
+ */
934
+ export function wizCheatDeath(state, deps) {
935
+ /* player->wizard || OPT(player, cheat_live) (player-util.c L246); the caller
936
+ * (game/take-hit-hooks.ts) enforces the cheat_live half. */
937
+ if (!wizardEnabled(deps))
938
+ return false;
939
+ const p = state.actor.player;
940
+ /* player->noscore |= NOSCORE_WIZARD (wiz-debug.c L32). */
941
+ deps.markNoscore?.(NOSCORE.WIZARD);
942
+ p.age = 1;
943
+ state.isDead = false;
944
+ p.chp = p.mhp;
945
+ p.chpFrac = 0;
946
+ p.csp = p.msp;
947
+ p.cspFrac = 0;
948
+ /* Timed clear + food need the effect/timed bundle (wiz-debug.c L43-53). When
949
+ * the shell has not assembled it yet, HP/SP/age still revive (W2-009). */
950
+ if (deps.effect) {
951
+ const ctx = effContext(state, deps.effect);
952
+ const timed = ctx.player?.timed;
953
+ if (timed) {
954
+ for (const idx of CHEAT_DEATH_TIMED)
955
+ timed.clearTimed(idx, true, false);
956
+ timed.setTimed(TMD.FOOD, PY_FOOD_FULL - 1, false, false);
957
+ }
958
+ }
959
+ /* Cancel recall (wiz-debug.c L56-64) and deep descent (L67-74). Both are
960
+ * counters on the player, so zeroing them is state, not UI - and without this
961
+ * a cheated death left a pending recall or descent still counting down in
962
+ * process_world, which would fire from the town you were just returned to. */
963
+ if (p.wordRecall) {
964
+ deps.msg?.("A tension leaves the air around you...");
965
+ p.wordRecall = 0;
966
+ }
967
+ if (p.deepDescent) {
968
+ deps.msg?.("The air around you stops swirling...");
969
+ p.deepDescent = 0;
970
+ }
971
+ /* Back to the town. */
972
+ state.targetDepth = 0;
973
+ state.generateLevel = true;
974
+ return true;
975
+ }
976
+ /** The affliction timers cheat_death clears (wiz-debug.c L43-50). */
977
+ const CHEAT_DEATH_TIMED = [
978
+ TMD.BLIND,
979
+ TMD.CONFUSED,
980
+ TMD.POISONED,
981
+ TMD.AFRAID,
982
+ TMD.PARALYZED,
983
+ TMD.IMAGE,
984
+ TMD.STUN,
985
+ TMD.CUT,
986
+ ];
987
+ export function wizDisplayItem(obj, deps, opts = {}) {
988
+ if (!debugEnabled(deps) || !deps.makeDeps)
989
+ return null;
990
+ const all = opts.all ?? true;
991
+ const known = opts.known ?? null;
992
+ /* The object the "+" combat fields and the known flag set are read from. */
993
+ const view = all ? obj : known ?? obj;
994
+ return {
995
+ dd: obj.dd,
996
+ ds: obj.ds,
997
+ toH: view.toH,
998
+ toD: view.toD,
999
+ ac: obj.ac,
1000
+ toA: view.toA,
1001
+ kidx: obj.kind.kidx,
1002
+ tval: obj.tval,
1003
+ sval: obj.sval,
1004
+ weight: objectWeightOne(obj, deps.curses),
1005
+ timeout: obj.timeout,
1006
+ number: obj.number,
1007
+ pval: obj.pval,
1008
+ name1: obj.artifact ? obj.artifact.aidx : 0,
1009
+ egoidx: obj.ego ? obj.ego.eidx : -1,
1010
+ cost: objectValue(deps.makeDeps.reg, obj, 1, true),
1011
+ flags: obj.flags,
1012
+ flagsKnown: (known ?? obj).flags,
1013
+ };
1014
+ }
1015
+ /**
1016
+ * do_cmd_wiz_change_item_quantity (CMD_WIZ_CHANGE_ITEM_QUANTITY, cmd-wizard.c
1017
+ * L484-575), the [q] entry of the do_cmd_wiz_play_item session (L1771-1789).
1018
+ *
1019
+ * Refuses an equipped item ("Can not change the quantity of an equipped item.",
1020
+ * L495) and any artifact ("Can not modify the quantity of an artifact.", L501),
1021
+ * then computes the ceiling nmax the same three ways upstream does (L505-517):
1022
+ * - obj->kind->base->max_stack, always;
1023
+ * - for a charge-carrying device with pval > 0, (MAX_PVAL * number) / pval, so
1024
+ * the scaled-up charges cannot overflow MAX_PVAL;
1025
+ * - for a quiver item, quiver_slot_size / (ammo ? 1 : thrown_quiver_mult).
1026
+ * The requested count is then clamped to [1, nmax] (L520 MAX(1, MIN(nmax, n))).
1027
+ *
1028
+ * Upstream warts preserved: charges and timeouts are rescaled by INTEGER
1029
+ * division `(pval * n) / number` BEFORE obj->number is assigned (L524-530), so
1030
+ * both reads use the OLD number; and the whole body is skipped when n equals the
1031
+ * current number, leaving charges untouched. `update` false suppresses only the
1032
+ * weight/upkeep refresh (L551-570), never the number change itself.
1033
+ *
1034
+ * The PU_BONUS / PU_INVEN / PN_COMBINE / PR_* upkeep bits are UI (the shell's);
1035
+ * the carried-weight arithmetic upstream does alongside them IS state and is
1036
+ * applied here.
1037
+ */
1038
+ export function wizChangeItemQuantity(state, params, deps) {
1039
+ if (!debugEnabled(deps) || !deps.makeDeps)
1040
+ return null;
1041
+ const { obj, handle } = params;
1042
+ const p = state.actor.player;
1043
+ /* cmd-wizard.c L494-497: an explicitly supplied equipped item is refused. */
1044
+ if (handle !== undefined && p.equipment.includes(handle)) {
1045
+ deps.msg?.("Can not change the quantity of an equipped item.");
1046
+ return null;
1047
+ }
1048
+ /* L499-503: artifacts are one of a kind. */
1049
+ if (obj.artifact) {
1050
+ deps.msg?.("Can not modify the quantity of an artifact.");
1051
+ return null;
1052
+ }
1053
+ const z = deps.makeDeps.constants;
1054
+ let nmax = obj.kind.base.maxStack;
1055
+ if (tvalCanHaveCharges(obj.tval) && obj.pval > 0 && obj.number > 0) {
1056
+ nmax = Math.min(Math.trunc((MAX_PVAL * obj.number) / obj.pval), nmax);
1057
+ }
1058
+ if (handle !== undefined && objectIsInQuiver(state.gear, handle)) {
1059
+ nmax = Math.min(Math.trunc(z.quiverSlotSize / (tvalIsAmmo(obj.tval) ? 1 : z.thrownQuiverMult)), nmax);
1060
+ }
1061
+ const n = Math.max(1, Math.min(nmax, params.quantity));
1062
+ if (n === obj.number)
1063
+ return { number: obj.number, max: nmax, changed: false };
1064
+ /* L523-530: rescale charges / timeouts against the OLD number. */
1065
+ if (tvalCanHaveCharges(obj.tval) && obj.number > 0) {
1066
+ obj.pval = Math.trunc((obj.pval * n) / obj.number);
1067
+ }
1068
+ if (tvalCanHaveTimeout(obj.tval) && obj.number > 0) {
1069
+ obj.timeout = Math.trunc((obj.timeout * n) / obj.number);
1070
+ }
1071
+ /* L532-570: with "update" absent or true, restate the carried weight. */
1072
+ if ((params.update ?? true) && handle !== undefined) {
1073
+ const one = objectWeightOne(obj, deps.curses);
1074
+ p.upkeep.totalWeight -= obj.number * one;
1075
+ p.upkeep.totalWeight += n * one;
1076
+ }
1077
+ obj.number = n;
1078
+ return { number: n, max: nmax, changed: true };
1079
+ }
1080
+ /**
1081
+ * wizPlayItemBegin (do_cmd_wiz_play_item, cmd-wizard.c L1642-1645): snapshot the
1082
+ * object so the [t]weak / [r]eroll / [c]urse edits can be rejected. Upstream
1083
+ * allocates a fresh object and object_copy()s the working item into it; the port
1084
+ * uses objectCopy (obj/object.ts) which produces the same value snapshot.
1085
+ * Returns the preserved copy the shell hands back to Accept / Reject.
1086
+ */
1087
+ export function wizPlayItemBegin(obj, deps) {
1088
+ if (!debugEnabled(deps))
1089
+ return null;
1090
+ return objectCopy(obj);
1091
+ }
1092
+ /** The mutable item properties wiz_play_item's reject restores (object_copy). */
1093
+ function restoreItemFields(dst, src) {
1094
+ dst.kind = src.kind;
1095
+ dst.ego = src.ego;
1096
+ dst.artifact = src.artifact;
1097
+ dst.tval = src.tval;
1098
+ dst.sval = src.sval;
1099
+ dst.pval = src.pval;
1100
+ dst.weight = src.weight;
1101
+ dst.dd = src.dd;
1102
+ dst.ds = src.ds;
1103
+ dst.ac = src.ac;
1104
+ dst.toA = src.toA;
1105
+ dst.toH = src.toH;
1106
+ dst.toD = src.toD;
1107
+ dst.flags.copy(src.flags);
1108
+ for (let i = 0; i < dst.modifiers.length; i++) {
1109
+ dst.modifiers[i] = src.modifiers[i];
1110
+ }
1111
+ for (let i = 0; i < dst.elInfo.length; i++) {
1112
+ const d = dst.elInfo[i];
1113
+ const s = src.elInfo[i];
1114
+ d.resLevel = s.resLevel;
1115
+ d.flags = s.flags;
1116
+ }
1117
+ dst.brands = src.brands ? [...src.brands] : null;
1118
+ dst.slays = src.slays ? [...src.slays] : null;
1119
+ dst.curses = src.curses ? src.curses.map((c) => ({ ...c })) : null;
1120
+ dst.effect = src.effect;
1121
+ dst.effectMsg = src.effectMsg;
1122
+ dst.activation = src.activation;
1123
+ dst.time = { ...src.time };
1124
+ dst.timeout = src.timeout;
1125
+ dst.number = src.number;
1126
+ dst.notice = src.notice;
1127
+ dst.origin = src.origin;
1128
+ dst.originDepth = src.originDepth;
1129
+ dst.originRace = src.originRace;
1130
+ }
1131
+ /**
1132
+ * wizPlayItemReject (do_cmd_wiz_play_item, cmd-wizard.c L1822-1843): the play
1133
+ * session was abandoned with changes; copy the preserved original back onto the
1134
+ * working object in place. Upstream restores the pile links after object_copy;
1135
+ * the port mutates the existing object (its pile membership is by array position
1136
+ * in floor/gear, not per-object links), so no link fix-up is needed.
1137
+ */
1138
+ export function wizPlayItemReject(obj, original, deps) {
1139
+ if (!debugEnabled(deps))
1140
+ return false;
1141
+ restoreItemFields(obj, original);
1142
+ return true;
1143
+ }
1144
+ /**
1145
+ * wizPlayItemAccept (do_cmd_wiz_play_item, cmd-wizard.c L1679-1718): commit the
1146
+ * changes. When the item actually changed and is equipped, upstream clears the
1147
+ * known WORN notice and re-runs object_learn_on_wield so the panel reflects the
1148
+ * edited properties. The total_weight / redraw upkeep is UI (the shell's). The
1149
+ * caller supplies whether the item is worn (the slot it was picked from).
1150
+ */
1151
+ export function wizPlayItemAccept(state, obj, params, deps) {
1152
+ if (!debugEnabled(deps))
1153
+ return false;
1154
+ if (params.changed && params.equipped) {
1155
+ obj.notice &= ~OBJ_NOTICE_WORN;
1156
+ objectLearnOnWield(state.actor.player, obj, state.runeEnv);
1157
+ updatePlayerObjectKnowledge(state); /* player_learn_rune sweep (L1373). */
1158
+ }
1159
+ return true;
1160
+ }
1161
+ /** OBJ_NOTICE_WORN: the "has been worn" learn gate cleared on accept. */
1162
+ const OBJ_NOTICE_WORN = OBJ_NOTICE.WORN;
1163
+ /**
1164
+ * do_cmd_wiz_stat_item (cmd-wizard.c L2386-2562): roll `nRolls` items with
1165
+ * make_object at `level` and classify each as match / better / worse / other
1166
+ * against the target object. `roll` is 0 normal, 1 good, 2 excellent (good +
1167
+ * great). The interrupt polling and the running Term readout are UI and are
1168
+ * omitted; the classification math, RNG draw order and the artifact-preserve
1169
+ * quirk are faithful.
1170
+ *
1171
+ * Upstream quirk preserved (L2504-2506, L2559-2561): it marks the TARGET
1172
+ * object's artifact uncreated before each roll (so make_object may regenerate
1173
+ * it) and re-marks it created at the end - note it tests obj->artifact, the
1174
+ * target's, not the rolled test object's, exactly as upstream does.
1175
+ */
1176
+ export function wizStatItem(state, params, deps) {
1177
+ if (!debugEnabled(deps) || !deps.makeDeps)
1178
+ return null;
1179
+ const { obj } = params;
1180
+ const good = params.roll >= 1;
1181
+ const great = params.roll >= 2;
1182
+ const level = params.level;
1183
+ const n = params.nRolls ?? TEST_ROLL;
1184
+ let matches = 0;
1185
+ let better = 0;
1186
+ let worse = 0;
1187
+ let other = 0;
1188
+ let i = 0;
1189
+ for (; i < n; i++) {
1190
+ /* make_object(cave, level, good, great, false, NULL, 0). */
1191
+ const test = makeObject(state.rng, deps.makeDeps, level, good, great, false, 0, level);
1192
+ /* Allow the target artifact to be regenerated (L2504-2506). */
1193
+ if (obj.artifact)
1194
+ deps.makeDeps.artifacts.markCreated(obj.artifact.aidx, false);
1195
+ if (!test)
1196
+ continue;
1197
+ /* Same tval and sval? (L2512-2516) */
1198
+ if (obj.tval !== test.tval || obj.sval !== test.sval)
1199
+ continue;
1200
+ /* Compare modifiers (L2518-2528). */
1201
+ let isMatch = true;
1202
+ let isBetter = true;
1203
+ let isWorse = true;
1204
+ for (let j = 0; j < OBJ_MOD_MAX; j++) {
1205
+ const tm = test.modifiers[j];
1206
+ const om = obj.modifiers[j];
1207
+ if (tm !== om) {
1208
+ isMatch = false;
1209
+ if (tm < om)
1210
+ isBetter = false;
1211
+ else
1212
+ isWorse = false;
1213
+ }
1214
+ }
1215
+ if (isMatch && test.toA === obj.toA && test.toH === obj.toH && test.toD === obj.toD) {
1216
+ matches++;
1217
+ }
1218
+ else if (isBetter && test.toA >= obj.toA && test.toH >= obj.toH && test.toD >= obj.toD) {
1219
+ better++;
1220
+ }
1221
+ else if (isWorse && test.toA <= obj.toA && test.toH <= obj.toH && test.toD <= obj.toD) {
1222
+ worse++;
1223
+ }
1224
+ else {
1225
+ other++;
1226
+ }
1227
+ }
1228
+ /* Normally leave a single artifact created (L2559-2561). */
1229
+ if (obj.artifact)
1230
+ deps.makeDeps.artifacts.markCreated(obj.artifact.aidx, true);
1231
+ return { rolls: i, matches, better, worse, other };
1232
+ }
1233
+ /** TEST_ROLL (cmd-wizard.c L2385): the default sample size. */
1234
+ const TEST_ROLL = 100000;
1235
+ /**
1236
+ * do_cmd_wiz_edit_player_start (cmd-wizard.c L1202-1239): the batch player
1237
+ * editor. Upstream chains a queued CMD_WIZ_EDIT_PLAYER_STAT per stat plus a
1238
+ * gold and an exp edit through the edit_player_state machine; the queue
1239
+ * plumbing is UI. The engine effect is: apply the six stat edits, the gold
1240
+ * edit, and the exp edit. Each field is optional; a supplied value is applied
1241
+ * through the already-ported per-field editor (same clamps), so an absent field
1242
+ * is left unchanged (the shell's "cancel this stage" path).
1243
+ */
1244
+ export function wizEditPlayerStart(state, params, deps) {
1245
+ if (!debugEnabled(deps))
1246
+ return false;
1247
+ if (params.stats) {
1248
+ for (let stat = 0; stat < STAT_MAX && stat < params.stats.length; stat++) {
1249
+ const v = params.stats[stat];
1250
+ if (v !== undefined)
1251
+ wizEditPlayerStat(state, { stat, value: v }, deps);
1252
+ }
1253
+ }
1254
+ if (params.gold !== undefined)
1255
+ wizEditPlayerGold(state, { value: params.gold }, deps);
1256
+ if (params.exp !== undefined)
1257
+ wizEditPlayerExp(state, { value: params.exp }, deps);
1258
+ return true;
1259
+ }
1260
+ /* ------------------------------------------------------------------ *
1261
+ * The map QUERY commands (DATA half only; the highlight redraw is the shell's).
1262
+ * ------------------------------------------------------------------ */
1263
+ /**
1264
+ * do_cmd_wiz_query_feature (L1930, DATA half): the fully-in-bounds grids whose
1265
+ * feature is one of `features`. The shell highlights them.
1266
+ */
1267
+ export function wizQueryFeature(state, params, deps) {
1268
+ if (!debugEnabled(deps))
1269
+ return [];
1270
+ const out = [];
1271
+ const c = state.chunk;
1272
+ for (let y = 1; y < c.height - 1; y++) {
1273
+ for (let x = 1; x < c.width - 1; x++) {
1274
+ const grid = { x, y };
1275
+ if (params.features.includes(c.feat(grid)))
1276
+ out.push(grid);
1277
+ }
1278
+ }
1279
+ return out;
1280
+ }
1281
+ /**
1282
+ * do_cmd_wiz_query_square_flag (L2105, DATA half): the fully-in-bounds grids
1283
+ * carrying a SQUARE_* flag; flag 0 selects the known grids (as upstream).
1284
+ */
1285
+ export function wizQuerySquareFlag(state, params, deps) {
1286
+ if (!debugEnabled(deps))
1287
+ return [];
1288
+ const out = [];
1289
+ const c = state.chunk;
1290
+ for (let y = 1; y < c.height - 1; y++) {
1291
+ for (let x = 1; x < c.width - 1; x++) {
1292
+ const grid = { x, y };
1293
+ const show = params.flag
1294
+ ? c.sqinfoHas(grid, params.flag)
1295
+ : squareIsKnown(state, grid);
1296
+ if (show)
1297
+ out.push(grid);
1298
+ }
1299
+ }
1300
+ return out;
1301
+ }
1302
+ /**
1303
+ * do_cmd_wiz_peek_noise_scent (L1477, DATA half): the fully-in-bounds grids at
1304
+ * exactly `depth` on the chosen flow heatmap ("noise" or "scent"). The shell
1305
+ * steps depth from 0 upward and highlights each returned set.
1306
+ */
1307
+ export function wizPeekFlow(state, params, deps) {
1308
+ if (!debugEnabled(deps))
1309
+ return [];
1310
+ const out = [];
1311
+ const c = state.chunk;
1312
+ const map = params.which === "scent" ? c.scent : c.noise;
1313
+ for (let y = 1; y < c.height - 1; y++) {
1314
+ for (let x = 1; x < c.width - 1; x++) {
1315
+ if (map[y * c.width + x] === params.depth)
1316
+ out.push({ x, y });
1317
+ }
1318
+ }
1319
+ return out;
1320
+ }
1321
+ /** KF_INSTA_ART: the kind-flag marking instant-artifact base kinds. */
1322
+ const KF_INSTA_ART = KF.INSTA_ART;
1323
+ //# sourceMappingURL=wizard.js.map