@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,881 @@
1
+ /**
2
+ * The terrain-shaping effect handlers, ported from
3
+ * reference/src/effect-handler-general.c and effect-handler-attack.c
4
+ * (Angband 4.2.6): EF_RUBBLE (general L2939, rubble falling into the empty
5
+ * grids around the player), EF_GRANITE (L2991, a granite wall on the
6
+ * originating trap's grid), EF_CREATE_STAIRS (L1975, stairs under the
7
+ * player), EF_LIGHT_LEVEL / EF_DARKEN_LEVEL (L3003, wiz_light / wiz_dark),
8
+ * EF_LIGHT_AREA / EF_DARKEN_AREA (L3026, light_room over the room's grids),
9
+ * EF_DESTRUCTION (attack L1169, the *Destruction* circle that deletes
10
+ * monsters and rebuilds the terrain) and EF_EARTHQUAKE (attack L1290, the
11
+ * radius-r quake with player and monster displacement).
12
+ *
13
+ * light_room / wiz_light are ported here (cave-map.c): SQUARE_GLOW changes,
14
+ * room flooding, illumination wake-up rolls, and player square memory.
15
+ *
16
+ * Like the other game-layer handlers these read their environment from
17
+ * context.env.game and no-op when it is absent (the worldless rule).
18
+ *
19
+ * Simplifications, ledgered in parity/ledger/game-effect-terrain.yaml:
20
+ * - No town or arena (depth 0 short-circuits like the town branch), no
21
+ * birth_levels_persist / show_damage options (#30).
22
+ * - expose_to_sun on the surface rides the day-night cycle.
23
+ * - MDESC monster names and MON_MSG grammar ride the display layer (#25);
24
+ * the race name stands in for the quake and DARKEN_AREA target messages.
25
+ */
26
+
27
+ import { ELEM, FEAT, EF, MON_TMD, RF, SQUARE, TF, TMD } from "../generated/index.js";
28
+ import type { Loc } from "../loc.js";
29
+ import { DDGRID_DDD, distance, loc, locEq, locSum } from "../loc.js";
30
+ import type {
31
+ EffectHandler,
32
+ EffectHandlerContext,
33
+ EffectRegistry,
34
+ Source,
35
+ } from "../effects/interpreter.js";
36
+ import { monsterIsSmart, monsterIsStupid, monsterIsVisible } from "../mon/predicate.js";
37
+ import { monsterWake } from "../mon/take-hit.js";
38
+ import { liveObjectIsKnownArtifact } from "../obj/artifact-known.js";
39
+ import { equipLearnElement } from "../obj/knowledge.js";
40
+ import { featIsBright } from "../world/chunk.js";
41
+ import { los } from "../world/view.js";
42
+ import {
43
+ caveFindDecoy,
44
+ monsterIsDecoyed,
45
+ monsterTargetMonster,
46
+ } from "./effect-mon-origin.js";
47
+ import type { GameState } from "./context.js";
48
+ import {
49
+ deleteMonster,
50
+ monsterSwap,
51
+ movePlayer,
52
+ squareIsEmpty,
53
+ squareMonster,
54
+ } from "./context.js";
55
+ import { gameEnv } from "./effect-game-env.js";
56
+ import type { GameEffectEnv } from "./effect-game-env.js";
57
+ import { floorExcise, floorPile } from "./floor.js";
58
+ import {
59
+ squareForget,
60
+ squareKnowPile,
61
+ squareMemorize,
62
+ squareMemoryBad,
63
+ squareSensePile,
64
+ } from "./known.js";
65
+ import { pushObject } from "./project-feat.js";
66
+ import { squareIsVisibleTrap, squareIsWarded } from "./trap.js";
67
+
68
+ /** msg() over the effect context's optional message sink. */
69
+ function say(ctx: EffectHandlerContext, text: string): void {
70
+ ctx.env.messages?.msg(text);
71
+ }
72
+
73
+ /** origin_get_loc: the grid an effect originates from. */
74
+ function originGrid(env: GameEffectEnv, origin: Source): Loc | null {
75
+ switch (origin.what) {
76
+ case "player":
77
+ return env.state.actor.grid;
78
+ case "monster":
79
+ return env.state.monsters[origin.monster]?.grid ?? null;
80
+ case "trap": {
81
+ const trap = origin.trap as { grid?: Loc } | null;
82
+ return trap?.grid ?? null;
83
+ }
84
+ default:
85
+ return null;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * light_room (cave-map.c L372): flood the room containing `grid` (walls get
91
+ * lit but stop the spread) and light or darken every grid at once. Lighting
92
+ * rolls the illumination wake-ups (smart monsters always, normal 1/4,
93
+ * stupid 1/10); darkening spares internally-lit (BRIGHT) grids. The
94
+ * square-memory half (PF_UNLIGHT memorize, floor forget) rides map memory.
95
+ */
96
+ export function lightRoom(state: GameState, grid: Loc, light: boolean): void {
97
+ const c = state.chunk;
98
+ const pts: Loc[] = [];
99
+ const seen = new Set<number>();
100
+ const add = (g: Loc): void => {
101
+ if (!c.inBounds(g)) return;
102
+ const key = g.y * c.width + g.x;
103
+ if (seen.has(key)) return;
104
+ if (!c.sqinfoHas(g, SQUARE.ROOM)) return;
105
+ seen.add(key);
106
+ pts.push(g);
107
+ };
108
+
109
+ /* Add the initial grid, then spread along projectable room grids. */
110
+ add(grid);
111
+ for (let i = 0; i < pts.length; i++) {
112
+ if (!c.isProjectable(pts[i]!)) continue;
113
+ for (let d = 0; d < 8; d++) {
114
+ add(locSum(pts[i]!, DDGRID_DDD[d]!));
115
+ }
116
+ }
117
+
118
+ if (light) {
119
+ /* cave_light: perma-light, then process the affected monsters. */
120
+ for (const g of pts) c.sqinfoOn(g, SQUARE.GLOW);
121
+ for (const g of pts) {
122
+ const mon = squareMonster(state, g);
123
+ if (!mon) continue;
124
+ let chance = 25;
125
+ if (monsterIsStupid(mon)) chance = 10;
126
+ if (monsterIsSmart(mon)) chance = 100;
127
+ if (
128
+ (mon.mTimed[MON_TMD.SLEEP] ?? 0) > 0 &&
129
+ state.rng.randint0(100) < chance
130
+ ) {
131
+ monsterWake(state.rng, mon, true, 100);
132
+ }
133
+ }
134
+ } else {
135
+ /* cave_unlight: darken all but internally-lit grids. */
136
+ for (const g of pts) {
137
+ if (!featIsBright(c.features, c.feat(g))) c.sqinfoOff(g, SQUARE.GLOW);
138
+ }
139
+ }
140
+
141
+ state.updateFov?.(state);
142
+ }
143
+
144
+ /**
145
+ * wiz_light (cave-map.c:417-479) and wiz_dark (cave-map.c:490-546).
146
+ *
147
+ * The two upstream bodies are line-for-line identical except for ONE
148
+ * expression: wiz_light does `sqinfo_on(..., SQUARE_GLOW)` on each neighbour
149
+ * (cave-map.c:435) where wiz_dark does `sqinfo_off` (cave-map.c:508). Both
150
+ * MEMORIZE terrain, both know/sense the floor piles, and both run the same
151
+ * mark / forget-misremembered / unmark passes. wiz_dark is therefore "light up
152
+ * the map, but perma-DARK the grids" - it is not a forget-everything.
153
+ *
154
+ * Structure, guaranteed by the C:
155
+ * - the neighbour loop is gated on `!square_seemslikewall(grid)` (TF_ROCK,
156
+ * cave-square.c:769), but the pile pass and the forget pass run for EVERY
157
+ * grid in 1..h-2 / 1..w-2, walls included (the `continue` at cave-map.c:426
158
+ * is dead: square_in_bounds_fully is always true in that range);
159
+ * - a neighbour is memorized only when `!square_isfloor(a_grid) ||
160
+ * square_isvisibletrap(a_grid)` (cave-map.c:439-440 / :510-511), and each
161
+ * memorized neighbour is square_mark'ed (cave-square.c:1585);
162
+ * - `full` picks square_know_pile over square_sense_pile (cave-map.c:448-452 /
163
+ * :519-523), threaded from context->value.base by both effect handlers
164
+ * (effect-handler-general.c:3005 / :3016) and true for the wizard command
165
+ * (cmd-wizard.c:2909);
166
+ * - then `!square_ismark(grid) && square_ismemorybad(grid) ->
167
+ * square_forget(grid)` (cave-map.c:456-459 / :527-530);
168
+ * - then a square_unmark sweep over 1..h-2 / 1..w-2 only (cave-map.c:463-470 /
169
+ * :534-541). Upstream WART preserved: a MARK set on row 0 / column 0 by the
170
+ * neighbour loop is never swept, so it survives into the savefile. It is
171
+ * never read again (square_ismark is only ever called on 1..h-2 grids), so
172
+ * the wart is inert; it is kept because core keeps warts.
173
+ *
174
+ * SQUARE_MARK's whole life in 4.2.6 is inside these two functions: it is set
175
+ * only at cave-map.c:441 / :512, read only at cave-map.c:456 / :527, and
176
+ * cleared by the sweep. The four other square_unmark calls
177
+ * (project-feat.c:332/355/465/526, effect-handler-general.c:1263) are
178
+ * vestigial no-ops - nothing marks those grids, and MAP_AREA's own forget check
179
+ * (effect-handler-general.c:1252) deliberately omits the !square_ismark half.
180
+ *
181
+ * `isCurrentCave` is upstream's `c != cave` guard (square_memorize
182
+ * cave-square.c:1576, square_forget :1582, square_know_pile :1169,
183
+ * square_sense_pile :1147 all return early when c is not the live cave).
184
+ * generate.c:1109 (arena) and :1256 (a "known" labyrinth) call
185
+ * wiz_light(chunk, p, false) on a chunk that is not yet `cave`, so those calls
186
+ * set SQUARE_GLOW and nothing else. Pass false to reproduce that.
187
+ */
188
+ export function wizLightLevel(
189
+ state: GameState,
190
+ lit: boolean,
191
+ full: boolean,
192
+ isCurrentCave = true,
193
+ ): void {
194
+ const c = state.chunk;
195
+ for (let y = 1; y < c.height - 1; y++) {
196
+ for (let x = 1; x < c.width - 1; x++) {
197
+ const grid = loc(x, y);
198
+ /* Process all non-walls (square_seemslikewall, cave-square.c:769). */
199
+ if (!c.feature(grid).flags.has(TF.ROCK)) {
200
+ /* Scan all neighbors (ddgrid_ddd[8] is the grid itself). */
201
+ for (let i = 0; i < 9; i++) {
202
+ const a = locSum(grid, DDGRID_DDD[i]!);
203
+ /* Perma-light / perma-darken: the ONLY difference between the two
204
+ * upstream functions (cave-map.c:435 vs :508). */
205
+ if (lit) c.sqinfoOn(a, SQUARE.GLOW);
206
+ else c.sqinfoOff(a, SQUARE.GLOW);
207
+ /* Memorize normal features (cave-map.c:439-442 / :510-513): only
208
+ * non-floor terrain, or a floor grid carrying a VISIBLE trap. Plain
209
+ * floor is lit but deliberately NOT remembered. */
210
+ if (!c.isFloor(a) || squareIsVisibleTrap(state, a)) {
211
+ if (isCurrentCave) squareMemorize(state, a);
212
+ c.sqinfoOn(a, SQUARE.MARK);
213
+ }
214
+ }
215
+ }
216
+ /* Memorize objects (cave-map.c:445-452 / :516-523). */
217
+ if (isCurrentCave) {
218
+ if (full) squareKnowPile(state, grid);
219
+ else squareSensePile(state, grid);
220
+ }
221
+ /* Forget grids that are both unprocessed and misremembered in the
222
+ * mapping area (cave-map.c:456-459 / :527-530). */
223
+ if (
224
+ isCurrentCave &&
225
+ !c.sqinfoHas(grid, SQUARE.MARK) &&
226
+ squareMemoryBad(state, grid)
227
+ ) {
228
+ squareForget(state, grid);
229
+ }
230
+ }
231
+ }
232
+ /* Unmark grids (cave-map.c:463-470 / :534-541). */
233
+ for (let y = 1; y < c.height - 1; y++) {
234
+ for (let x = 1; x < c.width - 1; x++) {
235
+ c.sqinfoOff(loc(x, y), SQUARE.MARK);
236
+ }
237
+ }
238
+ /*
239
+ * cave-map.c:474 sets PU_UPDATE_VIEW; it does NOT call update_view. The
240
+ * difference matters at generate.c:1109 and :1256, where wiz_light runs on a
241
+ * chunk that is not yet `cave`: upstream's flag is serviced at the next
242
+ * update_stuff, by which time the player has been placed on the new level. This
243
+ * port has no PU_ flags and refreshes immediately, so on the not-current-cave
244
+ * path it would build the view while `state.chunk` is the NEW level and the
245
+ * player's grid is still the OLD one.
246
+ *
247
+ * That threw `square out of bounds: 75,31` on arena entry the moment core
248
+ * acquired a default updateFov - a live crash in the web build, which has always
249
+ * had one, reachable through EF_SINGLE_COMBAT. It was invisible for as long as
250
+ * the seam could be absent. Deferring to the caller's own refresh (changeLevel
251
+ * calls updateFov after placePlayer) is what upstream's flag does.
252
+ */
253
+ if (isCurrentCave) state.updateFov?.(state);
254
+ }
255
+
256
+ /** square_changeable: no perma-grids, shops, stairs or artifact piles. */
257
+ function squareChangeable(state: GameState, grid: Loc): boolean {
258
+ const c = state.chunk;
259
+ if (c.isPerm(grid) || c.isShop(grid) || c.isStairs(grid)) return false;
260
+ for (const obj of floorPile(state, grid)) {
261
+ if (obj.artifact) return false;
262
+ }
263
+ return true;
264
+ }
265
+
266
+ /**
267
+ * EF_RUBBLE: rubble falls into the empty grids around the player.
268
+ */
269
+ const handleRUBBLE: EffectHandler = (ctx) => {
270
+ const env = gameEnv(ctx);
271
+ if (!env) return true;
272
+ const { state } = env;
273
+ const c = state.chunk;
274
+ const pgrid = state.actor.grid;
275
+
276
+ /* Work out how many grids to fill, limited to the open neighbours. */
277
+ let rubbleGrids = state.rng.randint1(3);
278
+ let openGrids = 0;
279
+ for (let d = 0; d < 8; d++) {
280
+ const grid = locSum(pgrid, DDGRID_DDD[d]!);
281
+ if (c.inBounds(grid) && squareIsEmpty(state, grid)) openGrids++;
282
+ }
283
+ if (rubbleGrids > openGrids) rubbleGrids = openGrids;
284
+
285
+ /* Avoid infinite loops */
286
+ let iterations = 0;
287
+ while (rubbleGrids > 0 && iterations < 10) {
288
+ /* Look around the player */
289
+ for (let d = 0; d < 8; d++) {
290
+ const grid = locSum(pgrid, DDGRID_DDD[d]!);
291
+ if (!c.inBoundsFully(grid)) continue;
292
+ if (!squareIsEmpty(state, grid)) continue;
293
+
294
+ if (state.rng.oneIn(3)) {
295
+ c.setFeat(grid, state.rng.oneIn(2) ? FEAT.PASS_RUBBLE : FEAT.RUBBLE);
296
+ rubbleGrids--;
297
+ }
298
+ }
299
+ iterations++;
300
+ }
301
+
302
+ ctx.ident = true;
303
+ state.updateFov?.(state);
304
+ return true;
305
+ };
306
+
307
+ /**
308
+ * EF_GRANITE: a granite wall on the originating trap's grid (the earthquake
309
+ * trap's wall-sealing effect).
310
+ */
311
+ const handleGRANITE: EffectHandler = (ctx) => {
312
+ const env = gameEnv(ctx);
313
+ if (!env) return true;
314
+ if (ctx.origin.what !== "trap") return true;
315
+ const grid = originGrid(env, ctx.origin);
316
+ if (!grid) return true;
317
+
318
+ env.state.chunk.setFeat(grid, FEAT.GRANITE);
319
+ env.state.updateFov?.(env.state);
320
+ return true;
321
+ };
322
+
323
+ /**
324
+ * EF_CREATE_STAIRS: stairs on the player's grid (square_add_stairs picks the
325
+ * direction: always down in town, never down on quest or bottom levels).
326
+ */
327
+ const handleCREATE_STAIRS: EffectHandler = (ctx) => {
328
+ const env = gameEnv(ctx);
329
+ if (!env) return true;
330
+ const { state } = env;
331
+ const grid = state.actor.grid;
332
+ ctx.ident = true;
333
+
334
+ /* Fails in arenas (birth_levels_persist rides #30). */
335
+ if (state.arenaLevel) {
336
+ say(ctx, "Nothing happens!");
337
+ return false;
338
+ }
339
+
340
+ /* Only allow stairs to be created on empty floor. */
341
+ if (!state.chunk.isFloor(grid)) {
342
+ say(ctx, "There is no empty floor here.");
343
+ return false;
344
+ }
345
+
346
+ /* Push objects off the grid. */
347
+ if (floorPile(state, grid).length > 0) pushObject(state, grid);
348
+
349
+ /* square_add_stairs */
350
+ let down = state.rng.randint0(100) < 50;
351
+ const depth = state.chunk.depth;
352
+ if (depth === 0) {
353
+ down = true;
354
+ } else if (env.teleport?.isQuest?.(depth) || depth >= state.z.maxDepth - 1) {
355
+ down = false;
356
+ }
357
+ state.chunk.setFeat(grid, down ? FEAT.MORE : FEAT.LESS);
358
+
359
+ return true;
360
+ };
361
+
362
+ /**
363
+ * EF_LIGHT_LEVEL: light the whole level (wiz_light); a nonzero value base is
364
+ * the "full" clairvoyant form with its message.
365
+ */
366
+ const handleLIGHT_LEVEL: EffectHandler = (ctx) => {
367
+ const env = gameEnv(ctx);
368
+ if (!env) return true;
369
+ /* bool full = context->value.base ? true : false (effect-handler-general.c
370
+ * :3005): the same flag gates the message AND square_know_pile vs
371
+ * square_sense_pile inside wiz_light. */
372
+ const full = ctx.value.base ? true : false;
373
+ if (full) {
374
+ say(ctx, "An image of your surroundings forms in your mind...");
375
+ }
376
+ wizLightLevel(env.state, true, full);
377
+ ctx.ident = true;
378
+ return true;
379
+ };
380
+
381
+ /**
382
+ * EF_DARKEN_LEVEL: darken the whole level (wiz_dark).
383
+ */
384
+ const handleDARKEN_LEVEL: EffectHandler = (ctx) => {
385
+ const env = gameEnv(ctx);
386
+ if (!env) return true;
387
+ /* bool full = context->value.base (effect-handler-general.c:3016). */
388
+ const full = ctx.value.base ? true : false;
389
+ if (full) {
390
+ say(ctx, "A great blackness rolls through the dungeon...");
391
+ }
392
+ wizLightLevel(env.state, false, full);
393
+ ctx.ident = true;
394
+ return true;
395
+ };
396
+
397
+ /**
398
+ * EF_LIGHT_AREA: light the room around the player.
399
+ */
400
+ const handleLIGHT_AREA: EffectHandler = (ctx) => {
401
+ const env = gameEnv(ctx);
402
+ if (!env) return true;
403
+ const { state } = env;
404
+
405
+ /* Message */
406
+ if (!((state.actor.player.timed[TMD.BLIND] ?? 0) > 0)) {
407
+ say(ctx, "You are surrounded by a white light.");
408
+ }
409
+
410
+ /* Light up the room */
411
+ lightRoom(state, state.actor.grid, true);
412
+
413
+ /* Assume seen */
414
+ ctx.ident = true;
415
+ return true;
416
+ };
417
+
418
+ /**
419
+ * EF_DARKEN_AREA: darken the room around the player, a targeted monster, or
420
+ * the player's decoy (effect-handler-general.c EF_DARKEN_AREA). A monster
421
+ * caster targeting another monster darkens its room; a decoyed caster darkens
422
+ * the decoy's room (and the effect is unseen if the decoy is out of sight or
423
+ * the player is blind). The player-cast form blinds an unresisting caster.
424
+ * (monster_desc MDESC_TARG is deferred (8.9); the race name stands in.)
425
+ */
426
+ const handleDARKEN_AREA: EffectHandler = (ctx) => {
427
+ const env = gameEnv(ctx);
428
+ if (!env) return true;
429
+ const { state } = env;
430
+ let target = state.actor.grid;
431
+ let message = !((state.actor.player.timed[TMD.BLIND] ?? 0) > 0);
432
+ let decoyUnseen = false;
433
+
434
+ const mon =
435
+ ctx.origin.what === "monster"
436
+ ? (state.monsters[ctx.origin.monster] ?? null)
437
+ : null;
438
+
439
+ /* Check for monster targeting another monster. */
440
+ const tMon =
441
+ ctx.origin.what === "monster"
442
+ ? monsterTargetMonster(state, ctx.origin.monster)
443
+ : null;
444
+ if (tMon) {
445
+ target = tMon.grid;
446
+ if (message) {
447
+ say(ctx, `Darkness surrounds the ${tMon.race.name}.`);
448
+ message = false;
449
+ }
450
+ }
451
+
452
+ /* Check for a decoy. */
453
+ if (mon && monsterIsDecoyed(state, mon)) {
454
+ const decoy = caveFindDecoy(state);
455
+ if (decoy) target = decoy;
456
+ if (
457
+ !decoy ||
458
+ !los(state.chunk, state.actor.grid, decoy) ||
459
+ (state.actor.player.timed[TMD.BLIND] ?? 0) > 0
460
+ ) {
461
+ decoyUnseen = true;
462
+ }
463
+ if (message && !decoyUnseen) {
464
+ say(ctx, "Darkness surrounds the decoy.");
465
+ message = false;
466
+ }
467
+ }
468
+
469
+ if (message) {
470
+ say(ctx, "Darkness surrounds you.");
471
+ }
472
+
473
+ /* Darken the room */
474
+ lightRoom(state, target, false);
475
+
476
+ /* Hack - blind the player directly if player-cast */
477
+ if (
478
+ ctx.origin.what === "player" &&
479
+ env.cast.playerActor.resistLevel(ELEM.DARK) <= 0
480
+ ) {
481
+ const amount = 3 + state.rng.randint1(5);
482
+ ctx.env.player?.timed?.incTimed(TMD.BLIND, amount, true, !ctx.aware, true);
483
+ }
484
+
485
+ /* Assume seen (unless the decoy was out of sight). */
486
+ ctx.ident = !decoyUnseen;
487
+ return true;
488
+ };
489
+
490
+ /**
491
+ * EF_DESTRUCTION: the *Destruction* circle - monsters within the radius are
492
+ * deleted (not killed), non-permanent terrain is rebuilt (square_destroy)
493
+ * and a light or dark subtype blinds an unresisting player.
494
+ */
495
+ const handleDESTRUCTION: EffectHandler = (ctx) => {
496
+ const env = gameEnv(ctx);
497
+ if (!env) return true;
498
+ const { state } = env;
499
+ const c = state.chunk;
500
+ const r = ctx.radius;
501
+ const elem = ctx.subtype;
502
+ const pgrid = state.actor.grid;
503
+
504
+ ctx.ident = true;
505
+
506
+ /* No effect in town or arena. */
507
+ if (c.depth === 0 || state.arenaLevel) {
508
+ say(ctx, "The ground shakes for a moment.");
509
+ return true;
510
+ }
511
+
512
+ /* Big area of affect */
513
+ for (let y = pgrid.y - r; y <= pgrid.y + r; y++) {
514
+ for (let x = pgrid.x - r; x <= pgrid.x + r; x++) {
515
+ const grid = loc(x, y);
516
+ if (!c.inBoundsFully(grid)) continue;
517
+
518
+ /* Stay in the circle of death */
519
+ if (distance(pgrid, grid) > r) continue;
520
+
521
+ /* Lose room and vault */
522
+ c.sqinfoOff(grid, SQUARE.ROOM);
523
+ c.sqinfoOff(grid, SQUARE.VAULT);
524
+
525
+ /* Forget completely (effect-handler-attack.c:1201-1207). */
526
+ if (!featIsBright(c.features, c.feat(grid))) {
527
+ c.sqinfoOff(grid, SQUARE.GLOW);
528
+ }
529
+ c.sqinfoOff(grid, SQUARE.SEEN);
530
+ squareForget(state, grid);
531
+
532
+ /* Deal with player later */
533
+ if (locEq(grid, pgrid)) continue;
534
+
535
+ /* Delete the monster (if any) */
536
+ const midx = c.mon(grid);
537
+ if (midx > 0) deleteMonster(state, midx);
538
+
539
+ /* Don't remove stairs */
540
+ if (c.isStairs(grid)) continue;
541
+
542
+ /* Destroy any grid that isn't a permanent wall */
543
+ if (!c.isPerm(grid)) {
544
+ /* Deal with artifacts before removing the pile
545
+ * (effect-handler-attack.c:1220-1243). */
546
+ const loseArts = state.options?.get("birth_lose_arts") ?? false;
547
+ /* square_excise_pile (cave-square.c:1031): drop the whole pile. The
548
+ * port's pile is a Map entry, so excising every member removes it -
549
+ * there is no square_set_obj(c, grid, NULL) head pointer to clear. */
550
+ for (const obj of [...floorPile(state, grid)]) {
551
+ if (obj.artifact) {
552
+ const lostForever = loseArts || liveObjectIsKnownArtifact(obj);
553
+ if (lostForever) state.onArtifactLost?.(obj.artifact);
554
+ state.artifacts?.markCreated(obj.artifact.aidx, lostForever);
555
+ }
556
+ floorExcise(state, grid, obj);
557
+ }
558
+ /* square_destroy */
559
+ const roll = state.rng.randint0(200);
560
+ let feat: number = FEAT.FLOOR;
561
+ if (roll < 20) feat = FEAT.GRANITE;
562
+ else if (roll < 70) feat = FEAT.QUARTZ;
563
+ else if (roll < 100) feat = FEAT.MAGMA;
564
+ c.setFeat(grid, feat);
565
+ }
566
+ }
567
+ }
568
+
569
+ /* Player is affected */
570
+ if (elem === ELEM.LIGHT || elem === ELEM.DARK) {
571
+ say(
572
+ ctx,
573
+ elem === ELEM.LIGHT
574
+ ? "There is a searing blast of light!"
575
+ : "Darkness seems to crush you!",
576
+ );
577
+ equipLearnElement(state.actor.player, state.runeEnv, elem);
578
+ if (env.cast.playerActor.resistLevel(elem) <= 0) {
579
+ const amount = 10 + state.rng.randint1(10);
580
+ ctx.env.player?.timed?.incTimed(TMD.BLIND, amount, true, true, true);
581
+ }
582
+ }
583
+
584
+ /* Fully update the visuals */
585
+ state.updateFov?.(state);
586
+ return true;
587
+ };
588
+
589
+ /**
590
+ * EF_EARTHQUAKE: the radius-r quake centred on the instigator. Walls and
591
+ * floors are shuffled (square_earthquake), the player jumps to a safe grid
592
+ * or is crushed, and monsters that cannot coexist with rock take damage,
593
+ * escape, or are buried (deleted).
594
+ */
595
+ const handleEARTHQUAKE: EffectHandler = (ctx) => {
596
+ const env = gameEnv(ctx);
597
+ if (!env) return true;
598
+ const { state } = env;
599
+ const c = state.chunk;
600
+ let r = ctx.radius;
601
+ const targeted = ctx.subtype !== 0;
602
+ const pgrid = state.actor.grid;
603
+ let centre = originGrid(env, ctx.origin) ?? pgrid;
604
+
605
+ ctx.ident = true;
606
+
607
+ /* Sometimes ask for a target (get_aim_dir / target_get: the aimed seam). */
608
+ if (targeted && env.aimed) centre = env.aimed;
609
+
610
+ if (c.depth > 0 && (!state.arenaLevel || ctx.origin.what === "monster")) {
611
+ say(ctx, "The ground shakes! The ceiling caves in!");
612
+ } else {
613
+ /* No effect in town or arena. */
614
+ say(ctx, "The ground shakes for a moment.");
615
+ return true;
616
+ }
617
+
618
+ /* Paranoia -- Enforce maximum range */
619
+ if (r > 15) r = 15;
620
+
621
+ /* A map of the maximal blast area, indexed [16 + dy][16 + dx]. */
622
+ const map: boolean[][] = Array.from(
623
+ { length: 32 },
624
+ () => new Array<boolean>(32).fill(false),
625
+ );
626
+ const mapAt = (g: Loc): boolean =>
627
+ map[16 + g.y - centre.y]?.[16 + g.x - centre.x] ?? false;
628
+ const mapSet = (g: Loc, v: boolean): void => {
629
+ const row = map[16 + g.y - centre.y];
630
+ if (row) row[16 + g.x - centre.x] = v;
631
+ };
632
+
633
+ /* Check around the epicenter */
634
+ let hurt = false;
635
+ for (let dy = -r; dy <= r; dy++) {
636
+ for (let dx = -r; dx <= r; dx++) {
637
+ const grid = locSum(centre, loc(dx, dy));
638
+ if (!c.inBoundsFully(grid)) continue;
639
+ if (distance(centre, grid) > r) continue;
640
+
641
+ /* Lose room and vault; forget completely (memory rides #25). */
642
+ c.sqinfoOff(grid, SQUARE.ROOM);
643
+ c.sqinfoOff(grid, SQUARE.VAULT);
644
+ if (!featIsBright(c.features, c.feat(grid))) {
645
+ c.sqinfoOff(grid, SQUARE.GLOW);
646
+ }
647
+ c.sqinfoOff(grid, SQUARE.SEEN);
648
+
649
+ /* Skip the epicenter */
650
+ if (dx === 0 && dy === 0) continue;
651
+
652
+ /* Skip most grids */
653
+ if (state.rng.randint0(100) < 85) continue;
654
+
655
+ /* Damage this grid */
656
+ mapSet(grid, true);
657
+
658
+ /* Take note of player damage */
659
+ if (locEq(grid, pgrid)) hurt = true;
660
+ }
661
+ }
662
+
663
+ /* First, determine the effects on the player (if necessary) */
664
+ let damage = 0;
665
+ if (hurt) {
666
+ /* Check around the player */
667
+ let safeGrids = 0;
668
+ let safeGrid = loc(0, 0);
669
+ for (let i = 0; i < 8; i++) {
670
+ const grid = locSum(pgrid, DDGRID_DDD[i]!);
671
+ /* square_isopen: skip non-empty grids (pushing into traps is fine). */
672
+ if (!c.isFloor(grid) || c.mon(grid) !== 0) continue;
673
+ /* Important -- Skip grids marked for damage */
674
+ if (mapAt(grid)) continue;
675
+ /* Count "safe" grids, apply the randomizer */
676
+ if (++safeGrids > 1 && state.rng.randint0(safeGrids) !== 0) continue;
677
+ safeGrid = grid;
678
+ }
679
+
680
+ /* Random message */
681
+ switch (state.rng.randint1(3)) {
682
+ case 1:
683
+ say(ctx, "The cave ceiling collapses on you!");
684
+ break;
685
+ case 2:
686
+ say(ctx, "The cave floor twists in an unnatural way!");
687
+ break;
688
+ default:
689
+ say(ctx, "The cave quakes!");
690
+ say(ctx, "You are pummeled with debris!");
691
+ break;
692
+ }
693
+
694
+ const player = ctx.env.player;
695
+ if (!safeGrids) {
696
+ /* Hurt the player a lot */
697
+ damage = player?.applyDamageReduction
698
+ ? player.applyDamageReduction(300)
699
+ : 300;
700
+ say(ctx, "You are severely crushed!");
701
+ } else {
702
+ /* Destroy the grid, and push the player to (relative) safety */
703
+ let hurtMsg = "";
704
+ switch (state.rng.randint1(3)) {
705
+ case 1:
706
+ hurtMsg = "You nimbly dodge the blast!";
707
+ damage = 0;
708
+ break;
709
+ case 2: {
710
+ hurtMsg = "You are bashed by rubble!";
711
+ damage = state.rng.damroll(10, 4);
712
+ const stun = state.rng.randint1(50);
713
+ player?.timed?.incTimed(TMD.STUN, stun, true, true, true);
714
+ break;
715
+ }
716
+ default: {
717
+ hurtMsg = "You are crushed between the floor and ceiling!";
718
+ damage = state.rng.damroll(10, 4);
719
+ const stun = state.rng.randint1(50);
720
+ player?.timed?.incTimed(TMD.STUN, stun, true, true, true);
721
+ break;
722
+ }
723
+ }
724
+
725
+ if (damage > 0 && player?.applyDamageReduction) {
726
+ damage = player.applyDamageReduction(damage);
727
+ }
728
+ say(ctx, hurtMsg);
729
+
730
+ /* Move player (monster_swap into an open grid + post-move). */
731
+ movePlayer(state, safeGrid);
732
+ env.teleport?.onPlayerPostMove?.(true);
733
+ }
734
+ }
735
+
736
+ /* Examine the quaked region: process monsters */
737
+ for (let dy = -r; dy <= r; dy++) {
738
+ for (let dx = -r; dx <= r; dx++) {
739
+ const grid = locSum(centre, loc(dx, dy));
740
+
741
+ /* Skip unaffected grids */
742
+ if (!mapAt(grid)) continue;
743
+
744
+ const mon = squareMonster(state, grid);
745
+ if (!mon) continue;
746
+
747
+ /* Most monsters cannot co-exist with rock */
748
+ if (
749
+ mon.race.flags.has(RF.KILL_WALL) ||
750
+ mon.race.flags.has(RF.PASS_WALL)
751
+ ) {
752
+ continue;
753
+ }
754
+
755
+ /* Assume not safe */
756
+ let safeGrids = 0;
757
+ let safeGrid = loc(0, 0);
758
+
759
+ /* Monster can move to escape the wall */
760
+ if (!mon.race.flags.has(RF.NEVER_MOVE)) {
761
+ /* Look for safety */
762
+ for (let i = 0; i < 8; i++) {
763
+ const safe = locSum(grid, DDGRID_DDD[i]!);
764
+ /* Skip non-empty grids */
765
+ if (!squareIsEmpty(state, safe)) continue;
766
+ /* No safety on glyph of warding */
767
+ if (squareIsWarded(state, safe)) continue;
768
+ /* Important -- Skip quake grids */
769
+ if (mapAt(safe)) continue;
770
+ /* Count safe grids, apply the randomizer */
771
+ if (++safeGrids > 1 && state.rng.randint0(safeGrids) !== 0) {
772
+ continue;
773
+ }
774
+ safeGrid = safe;
775
+ }
776
+ }
777
+
778
+ /* Take damage from the quake */
779
+ const mDam = safeGrids ? state.rng.damroll(4, 8) : mon.hp + 1;
780
+
781
+ /* Monster is certainly awake, not thinking about player */
782
+ monsterWake(state.rng, mon, false, 0);
783
+
784
+ /* Apply damage directly */
785
+ mon.hp -= mDam;
786
+
787
+ if (mon.hp < 0) {
788
+ /* MON_MSG_QUAKE_DEATH; the race name stands in for MDESC (#25). */
789
+ if (monsterIsVisible(mon)) {
790
+ say(ctx, `${mon.race.name} is embedded in rock!`);
791
+ }
792
+ /* Delete (not kill) "dead" monsters. */
793
+ deleteMonster(state, mon.midx);
794
+ } else {
795
+ if (monsterIsVisible(mon)) {
796
+ say(ctx, `${mon.race.name} wails out in pain!`);
797
+ }
798
+ /* Escape from the rock */
799
+ if (safeGrids) monsterSwap(state, grid, safeGrid);
800
+ }
801
+ }
802
+ }
803
+
804
+ /* Important -- no wall on player */
805
+ if (
806
+ Math.abs(pgrid.x - centre.x) <= 15 &&
807
+ Math.abs(pgrid.y - centre.y) <= 15
808
+ ) {
809
+ mapSet(pgrid, false);
810
+ }
811
+
812
+ /* Examine the quaked region and damage marked grids if possible */
813
+ for (let dy = -r; dy <= r; dy++) {
814
+ for (let dx = -r; dx <= r; dx++) {
815
+ const grid = locSum(centre, loc(dx, dy));
816
+ if (!c.inBoundsFully(grid)) continue;
817
+
818
+ /* Unaffected grids only get their light redrawn (#25). */
819
+ if (!mapAt(grid)) continue;
820
+
821
+ /* Destroy location and all objects (if valid) */
822
+ if (!squareChangeable(state, grid)) continue;
823
+ for (const obj of [...floorPile(state, grid)]) {
824
+ floorExcise(state, grid, obj);
825
+ }
826
+ /* square_earthquake */
827
+ const t = state.rng.randint0(100);
828
+ if (!c.isPassable(grid)) {
829
+ c.setFeat(grid, FEAT.FLOOR);
830
+ continue;
831
+ }
832
+ c.setFeat(grid, t < 20 ? FEAT.GRANITE : t < 70 ? FEAT.QUARTZ : FEAT.MAGMA);
833
+ }
834
+ }
835
+
836
+ /* Apply damage to the player last, so messages are ordered properly. */
837
+ if (damage > 0) ctx.env.player?.takeHit?.(damage, "an earthquake");
838
+
839
+ /* Fully update the visuals */
840
+ state.updateFov?.(state);
841
+ return true;
842
+ };
843
+
844
+ /** The terrain handlers, keyed by upstream EF code. */
845
+ const TERRAIN_HANDLERS: ReadonlyMap<number, EffectHandler> = new Map<
846
+ number,
847
+ EffectHandler
848
+ >([
849
+ [EF.RUBBLE, handleRUBBLE],
850
+ [EF.GRANITE, handleGRANITE],
851
+ /* effect_handler_CREATE_STAIRS (effect-handler-general.c:1975) */
852
+ [EF.CREATE_STAIRS, handleCREATE_STAIRS],
853
+ /* effect_handler_LIGHT_LEVEL (effect-handler-general.c:3003) */
854
+ [EF.LIGHT_LEVEL, handleLIGHT_LEVEL],
855
+ /* effect_handler_DARKEN_LEVEL (effect-handler-general.c:3013) */
856
+ [EF.DARKEN_LEVEL, handleDARKEN_LEVEL],
857
+ /* effect_handler_LIGHT_AREA (effect-handler-general.c:3026) */
858
+ [EF.LIGHT_AREA, handleLIGHT_AREA],
859
+ /* effect_handler_DARKEN_AREA (effect-handler-general.c:3044) */
860
+ [EF.DARKEN_AREA, handleDARKEN_AREA],
861
+ /* effect_handler_DESTRUCTION (effect-handler-attack.c:1169) */
862
+ [EF.DESTRUCTION, handleDESTRUCTION],
863
+ [EF.EARTHQUAKE, handleEARTHQUAKE],
864
+ ]);
865
+
866
+ /**
867
+ * Register the terrain-shaping handlers, overriding the stubs
868
+ * registerCoreHandlers installed. Call after registerCoreHandlers. Each
869
+ * handler reads its game environment from context.env.game (attach it with
870
+ * attachGameEnv) and no-ops when it is absent.
871
+ */
872
+ export function registerTerrainHandlers(registry: EffectRegistry): void {
873
+ for (const [code, handler] of TERRAIN_HANDLERS) {
874
+ registry.register(code, { handler, status: "implemented" });
875
+ }
876
+ }
877
+
878
+ /** The terrain EF codes this module registers. */
879
+ export const TERRAIN_HANDLER_CODES: readonly number[] = [
880
+ ...TERRAIN_HANDLERS.keys(),
881
+ ];