@rpgm-tools/neo-angband-core 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (848) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/perceive.d.ts.map +1 -1
  3. package/dist/agent/perceive.js +2 -2
  4. package/dist/agent/perceive.js.map +1 -1
  5. package/dist/combat/blow-vectors.d.ts +78 -0
  6. package/dist/combat/blow-vectors.d.ts.map +1 -0
  7. package/dist/combat/blow-vectors.fixtures.d.ts +19 -0
  8. package/dist/combat/blow-vectors.fixtures.d.ts.map +1 -0
  9. package/dist/combat/blow-vectors.fixtures.js +81 -0
  10. package/dist/combat/blow-vectors.fixtures.js.map +1 -0
  11. package/dist/combat/blow-vectors.js +195 -0
  12. package/dist/combat/blow-vectors.js.map +1 -0
  13. package/dist/combat/brand-slay.d.ts +22 -9
  14. package/dist/combat/brand-slay.d.ts.map +1 -1
  15. package/dist/combat/brand-slay.js +37 -10
  16. package/dist/combat/brand-slay.js.map +1 -1
  17. package/dist/combat/index.d.ts +1 -1
  18. package/dist/combat/index.js +1 -1
  19. package/dist/combat/melee.d.ts +25 -13
  20. package/dist/combat/melee.d.ts.map +1 -1
  21. package/dist/combat/melee.js +23 -19
  22. package/dist/combat/melee.js.map +1 -1
  23. package/dist/combat/mon-melee.d.ts +166 -7
  24. package/dist/combat/mon-melee.d.ts.map +1 -1
  25. package/dist/combat/mon-melee.js +469 -338
  26. package/dist/combat/mon-melee.js.map +1 -1
  27. package/dist/combat/ranged.d.ts +15 -13
  28. package/dist/combat/ranged.d.ts.map +1 -1
  29. package/dist/combat/ranged.js +31 -29
  30. package/dist/combat/ranged.js.map +1 -1
  31. package/dist/constants.d.ts +14 -0
  32. package/dist/constants.d.ts.map +1 -1
  33. package/dist/constants.js +14 -0
  34. package/dist/constants.js.map +1 -1
  35. package/dist/datafile.d.ts +48 -0
  36. package/dist/datafile.d.ts.map +1 -0
  37. package/dist/datafile.js +102 -0
  38. package/dist/datafile.js.map +1 -0
  39. package/dist/effects/effect-info-registry.d.ts +237 -0
  40. package/dist/effects/effect-info-registry.d.ts.map +1 -0
  41. package/dist/effects/effect-info-registry.js +138 -0
  42. package/dist/effects/effect-info-registry.js.map +1 -0
  43. package/dist/effects/effect-info-vectors.d.ts +92 -0
  44. package/dist/effects/effect-info-vectors.d.ts.map +1 -0
  45. package/dist/effects/effect-info-vectors.fixtures.d.ts +18 -0
  46. package/dist/effects/effect-info-vectors.fixtures.d.ts.map +1 -0
  47. package/dist/effects/effect-info-vectors.fixtures.js +51 -0
  48. package/dist/effects/effect-info-vectors.fixtures.js.map +1 -0
  49. package/dist/effects/effect-info-vectors.js +315 -0
  50. package/dist/effects/effect-info-vectors.js.map +1 -0
  51. package/dist/effects/effect-info.d.ts +5 -1
  52. package/dist/effects/effect-info.d.ts.map +1 -1
  53. package/dist/effects/effect-info.js +245 -143
  54. package/dist/effects/effect-info.js.map +1 -1
  55. package/dist/effects/effect.d.ts +4 -3
  56. package/dist/effects/effect.d.ts.map +1 -1
  57. package/dist/effects/effect.js +88 -70
  58. package/dist/effects/effect.js.map +1 -1
  59. package/dist/effects/handlers.d.ts +1 -1
  60. package/dist/effects/handlers.d.ts.map +1 -1
  61. package/dist/effects/handlers.js +5 -2
  62. package/dist/effects/handlers.js.map +1 -1
  63. package/dist/effects/interpreter.d.ts +11 -0
  64. package/dist/effects/interpreter.d.ts.map +1 -1
  65. package/dist/effects/interpreter.js +13 -0
  66. package/dist/effects/interpreter.js.map +1 -1
  67. package/dist/game/cave-cmd.d.ts +9 -5
  68. package/dist/game/cave-cmd.d.ts.map +1 -1
  69. package/dist/game/cave-cmd.js +56 -11
  70. package/dist/game/cave-cmd.js.map +1 -1
  71. package/dist/game/cave-square.d.ts +42 -0
  72. package/dist/game/cave-square.d.ts.map +1 -0
  73. package/dist/game/cave-square.js +73 -0
  74. package/dist/game/cave-square.js.map +1 -0
  75. package/dist/game/char-sheet.d.ts +12 -8
  76. package/dist/game/char-sheet.d.ts.map +1 -1
  77. package/dist/game/char-sheet.js +41 -8
  78. package/dist/game/char-sheet.js.map +1 -1
  79. package/dist/game/chest.d.ts +2 -3
  80. package/dist/game/chest.d.ts.map +1 -1
  81. package/dist/game/chest.js +17 -6
  82. package/dist/game/chest.js.map +1 -1
  83. package/dist/game/context.d.ts +213 -22
  84. package/dist/game/context.d.ts.map +1 -1
  85. package/dist/game/context.js +109 -17
  86. package/dist/game/context.js.map +1 -1
  87. package/dist/game/describe.d.ts +13 -0
  88. package/dist/game/describe.d.ts.map +1 -1
  89. package/dist/game/describe.js +32 -4
  90. package/dist/game/describe.js.map +1 -1
  91. package/dist/game/display.d.ts +97 -8
  92. package/dist/game/display.d.ts.map +1 -1
  93. package/dist/game/display.js +157 -13
  94. package/dist/game/display.js.map +1 -1
  95. package/dist/game/dump-level.d.ts.map +1 -1
  96. package/dist/game/dump-level.js +3 -2
  97. package/dist/game/dump-level.js.map +1 -1
  98. package/dist/game/effect-attack.d.ts.map +1 -1
  99. package/dist/game/effect-attack.js +36 -27
  100. package/dist/game/effect-attack.js.map +1 -1
  101. package/dist/game/effect-detect.d.ts +4 -4
  102. package/dist/game/effect-detect.d.ts.map +1 -1
  103. package/dist/game/effect-detect.js +42 -9
  104. package/dist/game/effect-detect.js.map +1 -1
  105. package/dist/game/effect-env.d.ts +7 -1
  106. package/dist/game/effect-env.d.ts.map +1 -1
  107. package/dist/game/effect-env.js +1 -0
  108. package/dist/game/effect-env.js.map +1 -1
  109. package/dist/game/effect-general.d.ts +5 -3
  110. package/dist/game/effect-general.d.ts.map +1 -1
  111. package/dist/game/effect-general.js +94 -43
  112. package/dist/game/effect-general.js.map +1 -1
  113. package/dist/game/effect-item.d.ts +2 -1
  114. package/dist/game/effect-item.d.ts.map +1 -1
  115. package/dist/game/effect-item.js +136 -82
  116. package/dist/game/effect-item.js.map +1 -1
  117. package/dist/game/effect-melee.d.ts +10 -4
  118. package/dist/game/effect-melee.d.ts.map +1 -1
  119. package/dist/game/effect-melee.js +44 -19
  120. package/dist/game/effect-melee.js.map +1 -1
  121. package/dist/game/effect-monster.d.ts +26 -4
  122. package/dist/game/effect-monster.d.ts.map +1 -1
  123. package/dist/game/effect-monster.js +52 -9
  124. package/dist/game/effect-monster.js.map +1 -1
  125. package/dist/game/effect-teleport.d.ts +58 -19
  126. package/dist/game/effect-teleport.d.ts.map +1 -1
  127. package/dist/game/effect-teleport.js +143 -27
  128. package/dist/game/effect-teleport.js.map +1 -1
  129. package/dist/game/effect-terrain.d.ts +1 -3
  130. package/dist/game/effect-terrain.d.ts.map +1 -1
  131. package/dist/game/effect-terrain.js +38 -22
  132. package/dist/game/effect-terrain.js.map +1 -1
  133. package/dist/game/equip-cmp.d.ts.map +1 -1
  134. package/dist/game/equip-cmp.js +10 -7
  135. package/dist/game/equip-cmp.js.map +1 -1
  136. package/dist/game/floor.d.ts +16 -4
  137. package/dist/game/floor.d.ts.map +1 -1
  138. package/dist/game/floor.js +22 -4
  139. package/dist/game/floor.js.map +1 -1
  140. package/dist/game/gear.d.ts +101 -13
  141. package/dist/game/gear.d.ts.map +1 -1
  142. package/dist/game/gear.js +183 -24
  143. package/dist/game/gear.js.map +1 -1
  144. package/dist/game/harness.d.ts +2 -1
  145. package/dist/game/harness.d.ts.map +1 -1
  146. package/dist/game/harness.js +12 -1
  147. package/dist/game/harness.js.map +1 -1
  148. package/dist/game/ignore-cmd.d.ts +47 -8
  149. package/dist/game/ignore-cmd.d.ts.map +1 -1
  150. package/dist/game/ignore-cmd.js +76 -8
  151. package/dist/game/ignore-cmd.js.map +1 -1
  152. package/dist/game/known.d.ts +223 -34
  153. package/dist/game/known.d.ts.map +1 -1
  154. package/dist/game/known.js +301 -67
  155. package/dist/game/known.js.map +1 -1
  156. package/dist/game/loop.d.ts +4 -3
  157. package/dist/game/loop.d.ts.map +1 -1
  158. package/dist/game/loop.js +49 -29
  159. package/dist/game/loop.js.map +1 -1
  160. package/dist/game/lore-color.d.ts.map +1 -1
  161. package/dist/game/lore-color.js +13 -1
  162. package/dist/game/lore-color.js.map +1 -1
  163. package/dist/game/mon-cast.d.ts +3 -4
  164. package/dist/game/mon-cast.d.ts.map +1 -1
  165. package/dist/game/mon-cast.js +30 -2
  166. package/dist/game/mon-cast.js.map +1 -1
  167. package/dist/game/mon-cmd.d.ts +4 -5
  168. package/dist/game/mon-cmd.d.ts.map +1 -1
  169. package/dist/game/mon-cmd.js +80 -27
  170. package/dist/game/mon-cmd.js.map +1 -1
  171. package/dist/game/mon-death.d.ts +8 -4
  172. package/dist/game/mon-death.d.ts.map +1 -1
  173. package/dist/game/mon-death.js +6 -9
  174. package/dist/game/mon-death.js.map +1 -1
  175. package/dist/game/mon-group.d.ts +9 -5
  176. package/dist/game/mon-group.d.ts.map +1 -1
  177. package/dist/game/mon-group.js +9 -5
  178. package/dist/game/mon-group.js.map +1 -1
  179. package/dist/game/mon-message.d.ts +90 -40
  180. package/dist/game/mon-message.d.ts.map +1 -1
  181. package/dist/game/mon-message.js +267 -59
  182. package/dist/game/mon-message.js.map +1 -1
  183. package/dist/game/mon-place.d.ts +11 -1
  184. package/dist/game/mon-place.d.ts.map +1 -1
  185. package/dist/game/mon-place.js +15 -3
  186. package/dist/game/mon-place.js.map +1 -1
  187. package/dist/game/mon-ranged.d.ts +2 -1
  188. package/dist/game/mon-ranged.d.ts.map +1 -1
  189. package/dist/game/mon-ranged.js +11 -5
  190. package/dist/game/mon-ranged.js.map +1 -1
  191. package/dist/game/mon-side.d.ts +3 -2
  192. package/dist/game/mon-side.d.ts.map +1 -1
  193. package/dist/game/mon-side.js +15 -14
  194. package/dist/game/mon-side.js.map +1 -1
  195. package/dist/game/monster-turn.d.ts +20 -10
  196. package/dist/game/monster-turn.d.ts.map +1 -1
  197. package/dist/game/monster-turn.js +110 -83
  198. package/dist/game/monster-turn.js.map +1 -1
  199. package/dist/game/notice.d.ts +36 -0
  200. package/dist/game/notice.d.ts.map +1 -0
  201. package/dist/game/notice.js +79 -0
  202. package/dist/game/notice.js.map +1 -0
  203. package/dist/game/obj-cmd.d.ts +14 -3
  204. package/dist/game/obj-cmd.d.ts.map +1 -1
  205. package/dist/game/obj-cmd.js +109 -35
  206. package/dist/game/obj-cmd.js.map +1 -1
  207. package/dist/game/obj-list.d.ts +13 -2
  208. package/dist/game/obj-list.d.ts.map +1 -1
  209. package/dist/game/obj-list.js +42 -27
  210. package/dist/game/obj-list.js.map +1 -1
  211. package/dist/game/object-inspect.d.ts +9 -0
  212. package/dist/game/object-inspect.d.ts.map +1 -1
  213. package/dist/game/object-inspect.js +4 -0
  214. package/dist/game/object-inspect.js.map +1 -1
  215. package/dist/game/pickup.d.ts +0 -2
  216. package/dist/game/pickup.d.ts.map +1 -1
  217. package/dist/game/pickup.js +18 -3
  218. package/dist/game/pickup.js.map +1 -1
  219. package/dist/game/player-side-vectors.d.ts +174 -0
  220. package/dist/game/player-side-vectors.d.ts.map +1 -0
  221. package/dist/game/player-side-vectors.fixtures.d.ts +33 -0
  222. package/dist/game/player-side-vectors.fixtures.d.ts.map +1 -0
  223. package/dist/game/player-side-vectors.fixtures.js +191 -0
  224. package/dist/game/player-side-vectors.fixtures.js.map +1 -0
  225. package/dist/game/player-side-vectors.js +292 -0
  226. package/dist/game/player-side-vectors.js.map +1 -0
  227. package/dist/game/player-side.d.ts +129 -1
  228. package/dist/game/player-side.d.ts.map +1 -1
  229. package/dist/game/player-side.js +520 -338
  230. package/dist/game/player-side.js.map +1 -1
  231. package/dist/game/player-turn.d.ts +26 -7
  232. package/dist/game/player-turn.d.ts.map +1 -1
  233. package/dist/game/player-turn.js +180 -33
  234. package/dist/game/player-turn.js.map +1 -1
  235. package/dist/game/poly.d.ts +38 -0
  236. package/dist/game/poly.d.ts.map +1 -0
  237. package/dist/game/poly.js +82 -0
  238. package/dist/game/poly.js.map +1 -0
  239. package/dist/game/project-cast.d.ts +20 -3
  240. package/dist/game/project-cast.d.ts.map +1 -1
  241. package/dist/game/project-cast.js +49 -6
  242. package/dist/game/project-cast.js.map +1 -1
  243. package/dist/game/project-feat-vectors.d.ts +124 -0
  244. package/dist/game/project-feat-vectors.d.ts.map +1 -0
  245. package/dist/game/project-feat-vectors.fixtures.d.ts +13 -0
  246. package/dist/game/project-feat-vectors.fixtures.d.ts.map +1 -0
  247. package/dist/game/project-feat-vectors.fixtures.js +94 -0
  248. package/dist/game/project-feat-vectors.fixtures.js.map +1 -0
  249. package/dist/game/project-feat-vectors.js +229 -0
  250. package/dist/game/project-feat-vectors.js.map +1 -0
  251. package/dist/game/project-feat.d.ts +53 -1
  252. package/dist/game/project-feat.d.ts.map +1 -1
  253. package/dist/game/project-feat.js +374 -247
  254. package/dist/game/project-feat.js.map +1 -1
  255. package/dist/game/project-monster.d.ts +21 -8
  256. package/dist/game/project-monster.d.ts.map +1 -1
  257. package/dist/game/project-monster.js +45 -21
  258. package/dist/game/project-monster.js.map +1 -1
  259. package/dist/game/project-obj.d.ts +62 -0
  260. package/dist/game/project-obj.d.ts.map +1 -1
  261. package/dist/game/project-obj.js +72 -41
  262. package/dist/game/project-obj.js.map +1 -1
  263. package/dist/game/project-player.d.ts +8 -0
  264. package/dist/game/project-player.d.ts.map +1 -1
  265. package/dist/game/project-player.js.map +1 -1
  266. package/dist/game/projection-handlers.d.ts +81 -0
  267. package/dist/game/projection-handlers.d.ts.map +1 -0
  268. package/dist/game/projection-handlers.js +93 -0
  269. package/dist/game/projection-handlers.js.map +1 -0
  270. package/dist/game/quest.d.ts +23 -0
  271. package/dist/game/quest.d.ts.map +1 -1
  272. package/dist/game/quest.js +42 -0
  273. package/dist/game/quest.js.map +1 -1
  274. package/dist/game/ranged-cmd.d.ts +13 -2
  275. package/dist/game/ranged-cmd.d.ts.map +1 -1
  276. package/dist/game/ranged-cmd.js +32 -15
  277. package/dist/game/ranged-cmd.js.map +1 -1
  278. package/dist/game/repeat.d.ts +78 -0
  279. package/dist/game/repeat.d.ts.map +1 -0
  280. package/dist/game/repeat.js +88 -0
  281. package/dist/game/repeat.js.map +1 -0
  282. package/dist/game/shape-inspect.d.ts +74 -0
  283. package/dist/game/shape-inspect.d.ts.map +1 -0
  284. package/dist/game/shape-inspect.js +114 -0
  285. package/dist/game/shape-inspect.js.map +1 -0
  286. package/dist/game/spell-cmd.d.ts +15 -4
  287. package/dist/game/spell-cmd.d.ts.map +1 -1
  288. package/dist/game/spell-cmd.js +35 -6
  289. package/dist/game/spell-cmd.js.map +1 -1
  290. package/dist/game/spoil.d.ts.map +1 -1
  291. package/dist/game/spoil.js +89 -40
  292. package/dist/game/spoil.js.map +1 -1
  293. package/dist/game/steal.d.ts +3 -3
  294. package/dist/game/steal.d.ts.map +1 -1
  295. package/dist/game/steal.js +9 -4
  296. package/dist/game/steal.js.map +1 -1
  297. package/dist/game/target-loop.d.ts +10 -4
  298. package/dist/game/target-loop.d.ts.map +1 -1
  299. package/dist/game/target-loop.js +14 -8
  300. package/dist/game/target-loop.js.map +1 -1
  301. package/dist/game/target.d.ts +4 -4
  302. package/dist/game/target.d.ts.map +1 -1
  303. package/dist/game/target.js +19 -8
  304. package/dist/game/target.js.map +1 -1
  305. package/dist/game/ui-entry.d.ts +63 -4
  306. package/dist/game/ui-entry.d.ts.map +1 -1
  307. package/dist/game/ui-entry.js +151 -23
  308. package/dist/game/ui-entry.js.map +1 -1
  309. package/dist/game/wizard.d.ts +23 -5
  310. package/dist/game/wizard.d.ts.map +1 -1
  311. package/dist/game/wizard.js +93 -11
  312. package/dist/game/wizard.js.map +1 -1
  313. package/dist/game/world.d.ts.map +1 -1
  314. package/dist/game/world.js +6 -0
  315. package/dist/game/world.js.map +1 -1
  316. package/dist/gen/cave.d.ts +49 -8
  317. package/dist/gen/cave.d.ts.map +1 -1
  318. package/dist/gen/cave.js +200 -28
  319. package/dist/gen/cave.js.map +1 -1
  320. package/dist/gen/generate.d.ts +54 -9
  321. package/dist/gen/generate.d.ts.map +1 -1
  322. package/dist/gen/generate.js +55 -8
  323. package/dist/gen/generate.js.map +1 -1
  324. package/dist/gen/glyph-vectors.d.ts +109 -0
  325. package/dist/gen/glyph-vectors.d.ts.map +1 -0
  326. package/dist/gen/glyph-vectors.fixtures.d.ts +18 -0
  327. package/dist/gen/glyph-vectors.fixtures.d.ts.map +1 -0
  328. package/dist/gen/glyph-vectors.fixtures.js +94 -0
  329. package/dist/gen/glyph-vectors.fixtures.js.map +1 -0
  330. package/dist/gen/glyph-vectors.js +218 -0
  331. package/dist/gen/glyph-vectors.js.map +1 -0
  332. package/dist/gen/glyph.d.ts +104 -0
  333. package/dist/gen/glyph.d.ts.map +1 -0
  334. package/dist/gen/glyph.js +72 -0
  335. package/dist/gen/glyph.js.map +1 -0
  336. package/dist/gen/room.d.ts +26 -2
  337. package/dist/gen/room.d.ts.map +1 -1
  338. package/dist/gen/room.js +414 -264
  339. package/dist/gen/room.js.map +1 -1
  340. package/dist/gen/util.d.ts +11 -2
  341. package/dist/gen/util.d.ts.map +1 -1
  342. package/dist/gen/util.js +31 -9
  343. package/dist/gen/util.js.map +1 -1
  344. package/dist/i18n/i18n.d.ts +207 -0
  345. package/dist/i18n/i18n.d.ts.map +1 -0
  346. package/dist/i18n/i18n.js +405 -0
  347. package/dist/i18n/i18n.js.map +1 -0
  348. package/dist/i18n/text.d.ts +62 -0
  349. package/dist/i18n/text.d.ts.map +1 -0
  350. package/dist/i18n/text.js +120 -0
  351. package/dist/i18n/text.js.map +1 -0
  352. package/dist/index.d.ts +25 -0
  353. package/dist/index.d.ts.map +1 -1
  354. package/dist/index.js +38 -0
  355. package/dist/index.js.map +1 -1
  356. package/dist/mod/extension.d.ts +115 -0
  357. package/dist/mod/extension.d.ts.map +1 -0
  358. package/dist/mod/extension.js +85 -0
  359. package/dist/mod/extension.js.map +1 -0
  360. package/dist/mod/ids.d.ts +10 -0
  361. package/dist/mod/ids.d.ts.map +1 -1
  362. package/dist/mod/ids.js +90 -21
  363. package/dist/mod/ids.js.map +1 -1
  364. package/dist/mod/record-keys.d.ts +43 -0
  365. package/dist/mod/record-keys.d.ts.map +1 -0
  366. package/dist/mod/record-keys.js +100 -0
  367. package/dist/mod/record-keys.js.map +1 -0
  368. package/dist/mod/registry-host.d.ts +472 -0
  369. package/dist/mod/registry-host.d.ts.map +1 -1
  370. package/dist/mod/registry-host.js +313 -0
  371. package/dist/mod/registry-host.js.map +1 -1
  372. package/dist/mod/save-blocks.d.ts +1 -1
  373. package/dist/mon/bind.d.ts.map +1 -1
  374. package/dist/mon/bind.js +6 -3
  375. package/dist/mon/bind.js.map +1 -1
  376. package/dist/mon/knowledge-groups.d.ts +0 -6
  377. package/dist/mon/knowledge-groups.d.ts.map +1 -1
  378. package/dist/mon/knowledge-groups.js +12 -8
  379. package/dist/mon/knowledge-groups.js.map +1 -1
  380. package/dist/mon/lore-describe.d.ts +46 -10
  381. package/dist/mon/lore-describe.d.ts.map +1 -1
  382. package/dist/mon/lore-describe.js +74 -22
  383. package/dist/mon/lore-describe.js.map +1 -1
  384. package/dist/mon/lore-file.d.ts +126 -0
  385. package/dist/mon/lore-file.d.ts.map +1 -0
  386. package/dist/mon/lore-file.js +291 -0
  387. package/dist/mon/lore-file.js.map +1 -0
  388. package/dist/mon/lore.d.ts +9 -3
  389. package/dist/mon/lore.d.ts.map +1 -1
  390. package/dist/mon/lore.js +9 -3
  391. package/dist/mon/lore.js.map +1 -1
  392. package/dist/mon/make.d.ts +4 -2
  393. package/dist/mon/make.d.ts.map +1 -1
  394. package/dist/mon/make.js +4 -2
  395. package/dist/mon/make.js.map +1 -1
  396. package/dist/mon/monster.d.ts +1 -1
  397. package/dist/mon/monster.js +1 -1
  398. package/dist/mon/predicate.d.ts +14 -9
  399. package/dist/mon/predicate.d.ts.map +1 -1
  400. package/dist/mon/predicate.js +14 -9
  401. package/dist/mon/predicate.js.map +1 -1
  402. package/dist/mon/project-mon.d.ts +16 -3
  403. package/dist/mon/project-mon.d.ts.map +1 -1
  404. package/dist/mon/project-mon.js +14 -5
  405. package/dist/mon/project-mon.js.map +1 -1
  406. package/dist/mon/steal.d.ts +31 -4
  407. package/dist/mon/steal.d.ts.map +1 -1
  408. package/dist/mon/steal.js +20 -7
  409. package/dist/mon/steal.js.map +1 -1
  410. package/dist/mon/take-hit.d.ts +8 -3
  411. package/dist/mon/take-hit.d.ts.map +1 -1
  412. package/dist/mon/take-hit.js +8 -3
  413. package/dist/mon/take-hit.js.map +1 -1
  414. package/dist/mon/timed.d.ts +15 -9
  415. package/dist/mon/timed.d.ts.map +1 -1
  416. package/dist/mon/timed.js +13 -8
  417. package/dist/mon/timed.js.map +1 -1
  418. package/dist/mon/types.d.ts +11 -4
  419. package/dist/mon/types.d.ts.map +1 -1
  420. package/dist/mon/types.js.map +1 -1
  421. package/dist/msg.d.ts +40 -1
  422. package/dist/msg.d.ts.map +1 -1
  423. package/dist/msg.js +42 -1
  424. package/dist/msg.js.map +1 -1
  425. package/dist/obj/artifact-fake.d.ts +46 -14
  426. package/dist/obj/artifact-fake.d.ts.map +1 -1
  427. package/dist/obj/artifact-fake.js +46 -17
  428. package/dist/obj/artifact-fake.js.map +1 -1
  429. package/dist/obj/bind.d.ts +23 -0
  430. package/dist/obj/bind.d.ts.map +1 -1
  431. package/dist/obj/bind.js +49 -9
  432. package/dist/obj/bind.js.map +1 -1
  433. package/dist/obj/desc-vectors.d.ts +68 -0
  434. package/dist/obj/desc-vectors.d.ts.map +1 -0
  435. package/dist/obj/desc-vectors.fixtures.d.ts +12 -0
  436. package/dist/obj/desc-vectors.fixtures.d.ts.map +1 -0
  437. package/dist/obj/desc-vectors.fixtures.js +95 -0
  438. package/dist/obj/desc-vectors.fixtures.js.map +1 -0
  439. package/dist/obj/desc-vectors.js +86 -0
  440. package/dist/obj/desc-vectors.js.map +1 -0
  441. package/dist/obj/desc.d.ts +17 -2
  442. package/dist/obj/desc.d.ts.map +1 -1
  443. package/dist/obj/desc.js +129 -54
  444. package/dist/obj/desc.js.map +1 -1
  445. package/dist/obj/effects-info.d.ts.map +1 -1
  446. package/dist/obj/effects-info.js +87 -58
  447. package/dist/obj/effects-info.js.map +1 -1
  448. package/dist/obj/fake-object.d.ts +70 -0
  449. package/dist/obj/fake-object.d.ts.map +1 -0
  450. package/dist/obj/fake-object.js +104 -0
  451. package/dist/obj/fake-object.js.map +1 -0
  452. package/dist/obj/ignore.d.ts +55 -12
  453. package/dist/obj/ignore.d.ts.map +1 -1
  454. package/dist/obj/ignore.js +68 -31
  455. package/dist/obj/ignore.js.map +1 -1
  456. package/dist/obj/knowledge.d.ts +46 -3
  457. package/dist/obj/knowledge.d.ts.map +1 -1
  458. package/dist/obj/knowledge.js +169 -151
  459. package/dist/obj/knowledge.js.map +1 -1
  460. package/dist/obj/known-object.d.ts +68 -8
  461. package/dist/obj/known-object.d.ts.map +1 -1
  462. package/dist/obj/known-object.js +90 -10
  463. package/dist/obj/known-object.js.map +1 -1
  464. package/dist/obj/make.d.ts +15 -4
  465. package/dist/obj/make.d.ts.map +1 -1
  466. package/dist/obj/make.js +49 -27
  467. package/dist/obj/make.js.map +1 -1
  468. package/dist/obj/object-info.d.ts +10 -0
  469. package/dist/obj/object-info.d.ts.map +1 -1
  470. package/dist/obj/object-info.js +93 -7
  471. package/dist/obj/object-info.js.map +1 -1
  472. package/dist/obj/object.d.ts +42 -4
  473. package/dist/obj/object.d.ts.map +1 -1
  474. package/dist/obj/object.js +362 -147
  475. package/dist/obj/object.js.map +1 -1
  476. package/dist/obj/power.d.ts +23 -4
  477. package/dist/obj/power.d.ts.map +1 -1
  478. package/dist/obj/power.js +231 -65
  479. package/dist/obj/power.js.map +1 -1
  480. package/dist/obj/randart-build.d.ts +27 -22
  481. package/dist/obj/randart-build.d.ts.map +1 -1
  482. package/dist/obj/randart-build.js +435 -357
  483. package/dist/obj/randart-build.js.map +1 -1
  484. package/dist/obj/randart-data.d.ts +62 -24
  485. package/dist/obj/randart-data.d.ts.map +1 -1
  486. package/dist/obj/randart-data.js +333 -189
  487. package/dist/obj/randart-data.js.map +1 -1
  488. package/dist/obj/randart-file.d.ts +21 -0
  489. package/dist/obj/randart-file.d.ts.map +1 -0
  490. package/dist/obj/randart-file.js +119 -0
  491. package/dist/obj/randart-file.js.map +1 -0
  492. package/dist/obj/randart-log.d.ts +63 -0
  493. package/dist/obj/randart-log.d.ts.map +1 -0
  494. package/dist/obj/randart-log.js +72 -0
  495. package/dist/obj/randart-log.js.map +1 -0
  496. package/dist/obj/randart-registry.d.ts +178 -0
  497. package/dist/obj/randart-registry.d.ts.map +1 -0
  498. package/dist/obj/randart-registry.js +140 -0
  499. package/dist/obj/randart-registry.js.map +1 -0
  500. package/dist/obj/randart-vectors.d.ts +97 -0
  501. package/dist/obj/randart-vectors.d.ts.map +1 -0
  502. package/dist/obj/randart-vectors.fixtures.d.ts +18 -0
  503. package/dist/obj/randart-vectors.fixtures.d.ts.map +1 -0
  504. package/dist/obj/randart-vectors.fixtures.js +50 -0
  505. package/dist/obj/randart-vectors.fixtures.js.map +1 -0
  506. package/dist/obj/randart-vectors.js +311 -0
  507. package/dist/obj/randart-vectors.js.map +1 -0
  508. package/dist/obj/randart.d.ts +53 -15
  509. package/dist/obj/randart.d.ts.map +1 -1
  510. package/dist/obj/randart.js +166 -44
  511. package/dist/obj/randart.js.map +1 -1
  512. package/dist/obj/rune-registry.d.ts +180 -0
  513. package/dist/obj/rune-registry.d.ts.map +1 -0
  514. package/dist/obj/rune-registry.js +161 -0
  515. package/dist/obj/rune-registry.js.map +1 -0
  516. package/dist/obj/rune-vectors.d.ts +99 -0
  517. package/dist/obj/rune-vectors.d.ts.map +1 -0
  518. package/dist/obj/rune-vectors.fixtures.d.ts +44 -0
  519. package/dist/obj/rune-vectors.fixtures.d.ts.map +1 -0
  520. package/dist/obj/rune-vectors.fixtures.js +125 -0
  521. package/dist/obj/rune-vectors.fixtures.js.map +1 -0
  522. package/dist/obj/rune-vectors.js +159 -0
  523. package/dist/obj/rune-vectors.js.map +1 -0
  524. package/dist/obj/tval-registry.d.ts +174 -0
  525. package/dist/obj/tval-registry.d.ts.map +1 -0
  526. package/dist/obj/tval-registry.js +151 -0
  527. package/dist/obj/tval-registry.js.map +1 -0
  528. package/dist/obj/tval-vectors.d.ts +85 -0
  529. package/dist/obj/tval-vectors.d.ts.map +1 -0
  530. package/dist/obj/tval-vectors.fixtures.d.ts +24 -0
  531. package/dist/obj/tval-vectors.fixtures.d.ts.map +1 -0
  532. package/dist/obj/tval-vectors.fixtures.js +41 -0
  533. package/dist/obj/tval-vectors.fixtures.js.map +1 -0
  534. package/dist/obj/tval-vectors.js +76 -0
  535. package/dist/obj/tval-vectors.js.map +1 -0
  536. package/dist/obj/types.d.ts +18 -7
  537. package/dist/obj/types.d.ts.map +1 -1
  538. package/dist/obj/types.js.map +1 -1
  539. package/dist/obj/value.d.ts.map +1 -1
  540. package/dist/obj/value.js +23 -20
  541. package/dist/obj/value.js.map +1 -1
  542. package/dist/parser.d.ts +116 -0
  543. package/dist/parser.d.ts.map +1 -0
  544. package/dist/parser.js +205 -0
  545. package/dist/parser.js.map +1 -0
  546. package/dist/player/bind.d.ts.map +1 -1
  547. package/dist/player/bind.js +3 -2
  548. package/dist/player/bind.js.map +1 -1
  549. package/dist/player/birth.d.ts +2 -1
  550. package/dist/player/birth.d.ts.map +1 -1
  551. package/dist/player/birth.js +2 -1
  552. package/dist/player/birth.js.map +1 -1
  553. package/dist/player/calcs.d.ts +58 -23
  554. package/dist/player/calcs.d.ts.map +1 -1
  555. package/dist/player/calcs.js +93 -36
  556. package/dist/player/calcs.js.map +1 -1
  557. package/dist/player/death.d.ts +50 -0
  558. package/dist/player/death.d.ts.map +1 -0
  559. package/dist/player/death.js +46 -0
  560. package/dist/player/death.js.map +1 -0
  561. package/dist/player/options-file.d.ts +129 -0
  562. package/dist/player/options-file.d.ts.map +1 -0
  563. package/dist/player/options-file.js +309 -0
  564. package/dist/player/options-file.js.map +1 -0
  565. package/dist/player/options.d.ts +2 -1
  566. package/dist/player/options.d.ts.map +1 -1
  567. package/dist/player/options.js +2 -1
  568. package/dist/player/options.js.map +1 -1
  569. package/dist/player/player.d.ts +50 -3
  570. package/dist/player/player.d.ts.map +1 -1
  571. package/dist/player/player.js +10 -1
  572. package/dist/player/player.js.map +1 -1
  573. package/dist/player/shape-lore.d.ts +11 -7
  574. package/dist/player/shape-lore.d.ts.map +1 -1
  575. package/dist/player/shape-lore.js +24 -11
  576. package/dist/player/shape-lore.js.map +1 -1
  577. package/dist/player/timed.d.ts +5 -3
  578. package/dist/player/timed.d.ts.map +1 -1
  579. package/dist/player/timed.js +11 -2
  580. package/dist/player/timed.js.map +1 -1
  581. package/dist/player/types.d.ts +29 -4
  582. package/dist/player/types.d.ts.map +1 -1
  583. package/dist/player/types.js +24 -1
  584. package/dist/player/types.js.map +1 -1
  585. package/dist/session/boot.d.ts +26 -2
  586. package/dist/session/boot.d.ts.map +1 -1
  587. package/dist/session/boot.js +21 -2
  588. package/dist/session/boot.js.map +1 -1
  589. package/dist/session/game.d.ts +15 -0
  590. package/dist/session/game.d.ts.map +1 -1
  591. package/dist/session/game.js +616 -140
  592. package/dist/session/game.js.map +1 -1
  593. package/dist/session/save-migrate.d.ts.map +1 -1
  594. package/dist/session/save-migrate.js +76 -1
  595. package/dist/session/save-migrate.js.map +1 -1
  596. package/dist/session/save.d.ts +75 -12
  597. package/dist/session/save.d.ts.map +1 -1
  598. package/dist/session/save.js +177 -18
  599. package/dist/session/save.js.map +1 -1
  600. package/dist/store/bind.d.ts +1 -1
  601. package/dist/store/bind.d.ts.map +1 -1
  602. package/dist/store/bind.js +4 -3
  603. package/dist/store/bind.js.map +1 -1
  604. package/dist/store/mass-produce-vectors.d.ts +40 -0
  605. package/dist/store/mass-produce-vectors.d.ts.map +1 -0
  606. package/dist/store/mass-produce-vectors.fixtures.d.ts +13 -0
  607. package/dist/store/mass-produce-vectors.fixtures.d.ts.map +1 -0
  608. package/dist/store/mass-produce-vectors.fixtures.js +52 -0
  609. package/dist/store/mass-produce-vectors.fixtures.js.map +1 -0
  610. package/dist/store/mass-produce-vectors.js +44 -0
  611. package/dist/store/mass-produce-vectors.js.map +1 -0
  612. package/dist/store/store.d.ts +104 -7
  613. package/dist/store/store.d.ts.map +1 -1
  614. package/dist/store/store.js +199 -77
  615. package/dist/store/store.js.map +1 -1
  616. package/dist/store/transact.d.ts +14 -5
  617. package/dist/store/transact.d.ts.map +1 -1
  618. package/dist/store/transact.js +17 -16
  619. package/dist/store/transact.js.map +1 -1
  620. package/dist/store/types.d.ts +3 -2
  621. package/dist/store/types.d.ts.map +1 -1
  622. package/dist/store/types.js +1 -1
  623. package/dist/version.d.ts +1 -1
  624. package/dist/version.js +1 -1
  625. package/dist/visuals/index.d.ts +1 -0
  626. package/dist/visuals/index.d.ts.map +1 -1
  627. package/dist/visuals/index.js +1 -0
  628. package/dist/visuals/index.js.map +1 -1
  629. package/dist/visuals/map-text.d.ts +8 -0
  630. package/dist/visuals/map-text.d.ts.map +1 -1
  631. package/dist/visuals/map-text.js +1 -1
  632. package/dist/visuals/map-text.js.map +1 -1
  633. package/dist/visuals/object-glyph.d.ts +56 -0
  634. package/dist/visuals/object-glyph.d.ts.map +1 -0
  635. package/dist/visuals/object-glyph.js +52 -0
  636. package/dist/visuals/object-glyph.js.map +1 -0
  637. package/dist/visuals/prefs.d.ts +14 -22
  638. package/dist/visuals/prefs.d.ts.map +1 -1
  639. package/dist/visuals/prefs.js +4 -23
  640. package/dist/visuals/prefs.js.map +1 -1
  641. package/dist/visuals/tile-prefs.d.ts +26 -0
  642. package/dist/visuals/tile-prefs.d.ts.map +1 -1
  643. package/dist/visuals/tile-prefs.js +28 -0
  644. package/dist/visuals/tile-prefs.js.map +1 -1
  645. package/dist/world/feature.d.ts +2 -1
  646. package/dist/world/feature.d.ts.map +1 -1
  647. package/dist/world/feature.js +2 -0
  648. package/dist/world/feature.js.map +1 -1
  649. package/dist/world/project.d.ts +10 -2
  650. package/dist/world/project.d.ts.map +1 -1
  651. package/dist/world/project.js +18 -6
  652. package/dist/world/project.js.map +1 -1
  653. package/dist/world/projection.d.ts +37 -3
  654. package/dist/world/projection.d.ts.map +1 -1
  655. package/dist/world/projection.js +69 -7
  656. package/dist/world/projection.js.map +1 -1
  657. package/dist/world/trap.d.ts +2 -1
  658. package/dist/world/trap.d.ts.map +1 -1
  659. package/dist/world/trap.js +2 -1
  660. package/dist/world/trap.js.map +1 -1
  661. package/dist/world/view.d.ts +1 -1
  662. package/dist/world/view.d.ts.map +1 -1
  663. package/dist/world/view.js +11 -3
  664. package/dist/world/view.js.map +1 -1
  665. package/package.json +1 -1
  666. package/src/agent/perceive.ts +2 -3
  667. package/src/combat/blow-vectors.fixtures.ts +99 -0
  668. package/src/combat/blow-vectors.json +482 -0
  669. package/src/combat/blow-vectors.ts +280 -0
  670. package/src/combat/brand-slay.ts +42 -11
  671. package/src/combat/index.ts +1 -1
  672. package/src/combat/melee.ts +37 -19
  673. package/src/combat/mon-melee.ts +611 -364
  674. package/src/combat/ranged.ts +43 -26
  675. package/src/constants.ts +15 -0
  676. package/src/datafile.ts +148 -0
  677. package/src/effects/effect-info-registry.ts +313 -0
  678. package/src/effects/effect-info-vectors.fixtures.ts +61 -0
  679. package/src/effects/effect-info-vectors.json +11532 -0
  680. package/src/effects/effect-info-vectors.ts +376 -0
  681. package/src/effects/effect-info.ts +1005 -859
  682. package/src/effects/effect.ts +96 -62
  683. package/src/effects/handlers.ts +5 -2
  684. package/src/effects/interpreter.ts +14 -0
  685. package/src/game/cave-cmd.ts +54 -11
  686. package/src/game/cave-square.ts +80 -0
  687. package/src/game/char-sheet.ts +59 -16
  688. package/src/game/chest.ts +25 -8
  689. package/src/game/context.ts +293 -27
  690. package/src/game/describe.ts +34 -4
  691. package/src/game/display.ts +215 -19
  692. package/src/game/dump-level.ts +3 -2
  693. package/src/game/effect-attack.ts +41 -28
  694. package/src/game/effect-detect.ts +45 -8
  695. package/src/game/effect-env.ts +8 -0
  696. package/src/game/effect-general.ts +110 -47
  697. package/src/game/effect-item.ts +1075 -999
  698. package/src/game/effect-melee.ts +51 -18
  699. package/src/game/effect-monster.ts +55 -9
  700. package/src/game/effect-teleport.ts +173 -38
  701. package/src/game/effect-terrain.ts +38 -22
  702. package/src/game/equip-cmp.ts +483 -480
  703. package/src/game/floor.ts +22 -4
  704. package/src/game/gear.ts +210 -21
  705. package/src/game/harness.ts +12 -1
  706. package/src/game/ignore-cmd.ts +96 -8
  707. package/src/game/known.ts +392 -73
  708. package/src/game/loop.ts +52 -27
  709. package/src/game/lore-color.ts +13 -1
  710. package/src/game/mon-cast.ts +31 -6
  711. package/src/game/mon-cmd.ts +95 -30
  712. package/src/game/mon-death.ts +14 -12
  713. package/src/game/mon-group.ts +9 -5
  714. package/src/game/mon-message.ts +363 -65
  715. package/src/game/mon-place.ts +15 -3
  716. package/src/game/mon-ranged.ts +14 -5
  717. package/src/game/mon-side.ts +16 -12
  718. package/src/game/monster-turn.ts +120 -87
  719. package/src/game/notice.ts +85 -0
  720. package/src/game/obj-cmd.ts +126 -37
  721. package/src/game/obj-list.ts +44 -26
  722. package/src/game/object-inspect.ts +13 -0
  723. package/src/game/pickup.ts +29 -5
  724. package/src/game/player-side-vectors.fixtures.ts +215 -0
  725. package/src/game/player-side-vectors.json +6914 -0
  726. package/src/game/player-side-vectors.ts +420 -0
  727. package/src/game/player-side.ts +622 -340
  728. package/src/game/player-turn.ts +228 -31
  729. package/src/game/poly.ts +107 -0
  730. package/src/game/project-cast.ts +63 -6
  731. package/src/game/project-feat-vectors.fixtures.ts +106 -0
  732. package/src/game/project-feat-vectors.json +6554 -0
  733. package/src/game/project-feat-vectors.ts +323 -0
  734. package/src/game/project-feat.ts +417 -248
  735. package/src/game/project-monster.ts +69 -30
  736. package/src/game/project-obj-vectors.json +1 -0
  737. package/src/game/project-obj.ts +115 -47
  738. package/src/game/project-player.ts +8 -0
  739. package/src/game/projection-handlers.ts +110 -0
  740. package/src/game/quest.ts +48 -0
  741. package/src/game/ranged-cmd.ts +45 -11
  742. package/src/game/repeat.ts +92 -0
  743. package/src/game/shape-inspect.ts +166 -0
  744. package/src/game/spell-cmd.ts +39 -6
  745. package/src/game/spoil.ts +92 -39
  746. package/src/game/steal.ts +9 -4
  747. package/src/game/target-loop.ts +14 -7
  748. package/src/game/target.ts +18 -7
  749. package/src/game/ui-entry.ts +172 -22
  750. package/src/game/wizard.ts +97 -10
  751. package/src/game/world.ts +6 -0
  752. package/src/gen/cave.ts +225 -26
  753. package/src/gen/generate.ts +62 -9
  754. package/src/gen/glyph-vectors.fixtures.ts +122 -0
  755. package/src/gen/glyph-vectors.json +5996 -0
  756. package/src/gen/glyph-vectors.ts +280 -0
  757. package/src/gen/glyph.ts +132 -0
  758. package/src/gen/room.ts +446 -265
  759. package/src/gen/util.ts +32 -9
  760. package/src/i18n/i18n.ts +492 -0
  761. package/src/i18n/text.ts +117 -0
  762. package/src/index.ts +307 -254
  763. package/src/mod/extension.ts +136 -0
  764. package/src/mod/ids.ts +92 -21
  765. package/src/mod/record-keys.ts +102 -0
  766. package/src/mod/registry-host.ts +1063 -234
  767. package/src/mon/bind.ts +14 -8
  768. package/src/mon/knowledge-groups.ts +12 -12
  769. package/src/mon/lore-describe.ts +93 -26
  770. package/src/mon/lore-file.ts +365 -0
  771. package/src/mon/lore.ts +9 -3
  772. package/src/mon/make.ts +4 -2
  773. package/src/mon/monster.ts +1 -1
  774. package/src/mon/predicate.ts +14 -9
  775. package/src/mon/project-mon.ts +23 -5
  776. package/src/mon/steal.ts +39 -7
  777. package/src/mon/take-hit.ts +8 -3
  778. package/src/mon/timed.ts +15 -9
  779. package/src/mon/types.ts +11 -4
  780. package/src/msg.ts +55 -1
  781. package/src/obj/artifact-fake.ts +47 -17
  782. package/src/obj/bind.ts +52 -9
  783. package/src/obj/desc-vectors.fixtures.ts +119 -0
  784. package/src/obj/desc-vectors.json +2360 -0
  785. package/src/obj/desc-vectors.ts +128 -0
  786. package/src/obj/desc.ts +159 -55
  787. package/src/obj/effects-info.ts +90 -59
  788. package/src/obj/fake-object.ts +135 -0
  789. package/src/obj/ignore.ts +95 -28
  790. package/src/obj/knowledge.ts +291 -139
  791. package/src/obj/known-object.ts +126 -11
  792. package/src/obj/make.ts +53 -29
  793. package/src/obj/object-info.ts +103 -6
  794. package/src/obj/object.ts +392 -151
  795. package/src/obj/power.ts +297 -59
  796. package/src/obj/randart-build.ts +1875 -1705
  797. package/src/obj/randart-data.ts +1547 -1344
  798. package/src/obj/randart-file.ts +130 -0
  799. package/src/obj/randart-log.ts +78 -0
  800. package/src/obj/randart-registry.ts +247 -0
  801. package/src/obj/randart-vectors.fixtures.ts +61 -0
  802. package/src/obj/randart-vectors.json +836 -0
  803. package/src/obj/randart-vectors.ts +369 -0
  804. package/src/obj/randart.ts +722 -552
  805. package/src/obj/rune-registry.ts +270 -0
  806. package/src/obj/rune-vectors.fixtures.ts +164 -0
  807. package/src/obj/rune-vectors.json +121 -0
  808. package/src/obj/rune-vectors.ts +229 -0
  809. package/src/obj/tval-kind-vectors.json +391 -0
  810. package/src/obj/tval-registry.ts +243 -0
  811. package/src/obj/tval-vectors.fixtures.ts +50 -0
  812. package/src/obj/tval-vectors.json +38 -0
  813. package/src/obj/tval-vectors.ts +126 -0
  814. package/src/obj/types.ts +18 -7
  815. package/src/obj/value.ts +26 -20
  816. package/src/parser.ts +214 -0
  817. package/src/player/bind.ts +5 -2
  818. package/src/player/birth.ts +2 -1
  819. package/src/player/calcs.ts +123 -42
  820. package/src/player/death.ts +78 -0
  821. package/src/player/options-file.ts +387 -0
  822. package/src/player/options.ts +2 -1
  823. package/src/player/player.ts +60 -4
  824. package/src/player/shape-lore.ts +33 -14
  825. package/src/player/timed.ts +14 -4
  826. package/src/player/types.ts +30 -4
  827. package/src/session/boot.ts +51 -1
  828. package/src/session/game.ts +720 -163
  829. package/src/session/save-migrate.ts +81 -1
  830. package/src/session/save.ts +264 -22
  831. package/src/store/bind.ts +4 -3
  832. package/src/store/mass-produce-vectors.fixtures.ts +64 -0
  833. package/src/store/mass-produce-vectors.json +1169 -0
  834. package/src/store/mass-produce-vectors.ts +67 -0
  835. package/src/store/store.ts +266 -63
  836. package/src/store/transact.ts +39 -16
  837. package/src/store/types.ts +3 -2
  838. package/src/version.ts +1 -1
  839. package/src/visuals/index.ts +1 -0
  840. package/src/visuals/map-text.ts +1 -1
  841. package/src/visuals/object-glyph.ts +76 -0
  842. package/src/visuals/prefs.ts +22 -32
  843. package/src/visuals/tile-prefs.ts +32 -0
  844. package/src/world/feature.ts +4 -1
  845. package/src/world/project.ts +19 -4
  846. package/src/world/projection.ts +79 -8
  847. package/src/world/trap.ts +25 -21
  848. package/src/world/view.ts +11 -1
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Golden vectors for project_p: what EVERY projection does to the PLAYER,
3
+ * recorded from the code BEFORE the dispatch switch became a registry.
4
+ *
5
+ * WHY A RECORDING AND NOT "THE TESTS STILL PASS". player-side.test.ts asserts
6
+ * particular behaviours - SHARD cuts, PROT_STUN blocks a SOUND stun, a resisted
7
+ * breath still teaches its rune - and those were written to pin the bugs they
8
+ * were found by, not the cross product. Converting a 21-case switch over
9
+ * faithful behaviour to a registry buys moddability and nothing else, so the
10
+ * standard is "nothing moved", and only a recording of the producer can say so.
11
+ *
12
+ * WHAT A SCENARIO CAPTURES. project_p is the widest-reaching of the three
13
+ * projection handlers: it damages the pack, drains stats and experience, sets
14
+ * nine timed effects, disenchants worn gear, spends mana and energy, and
15
+ * teleports the player outright. So the snapshot is broad on purpose - every
16
+ * message in order, the extra damage returned, the whole timed array, both stat
17
+ * arrays, exp / mana / energy, where the player ended up, and what is left of
18
+ * the pack and the worn armour.
19
+ *
20
+ * AND THE RNG POSITION. `rngProbe` is one draw taken after the scenario. Two
21
+ * implementations can agree on every visible value while drawing a different
22
+ * NUMBER of randoms, and here that is not hypothetical: FIRE, COLD, DARK,
23
+ * NETHER and POIS all roll `randint0(dam)` and then decide, TIME picks a branch
24
+ * with two draws before doing anything, and POIS's acid sting runs adjust_dam,
25
+ * which evaluates a dice denominator. Every one of those is invisible in the
26
+ * result and diverges the whole game a few turns later.
27
+ *
28
+ * The fixtures are INJECTED (`PlayerSideFixtures`) so this module needs no
29
+ * node:fs and stays importable anywhere; the one copy that reads the disk is
30
+ * `player-side-vectors.fixtures.ts`, shared by the test and the generator so
31
+ * they cannot disagree about what they are measuring.
32
+ */
33
+ import { ELEM, PROJ, TMD } from "../generated/index.js";
34
+ import { loc } from "../loc.js";
35
+ import { makePlayerSideEffects } from "./player-side.js";
36
+ /**
37
+ * The projections worth recording: every arm of the switch, plus three that
38
+ * fall to the empty default. The default group is sampled rather than
39
+ * enumerated because the vectors would then be measuring `PROJ`'s size rather
40
+ * than project_p's behaviour - its membership is asserted separately by the
41
+ * coverage guard in the test.
42
+ */
43
+ export const VECTOR_PROJECTIONS = [
44
+ ["ACID", PROJ.ACID],
45
+ ["ELEC", PROJ.ELEC],
46
+ ["FIRE", PROJ.FIRE],
47
+ ["COLD", PROJ.COLD],
48
+ ["POIS", PROJ.POIS],
49
+ ["LIGHT", PROJ.LIGHT],
50
+ ["DARK", PROJ.DARK],
51
+ ["DARK_WEAK", PROJ.DARK_WEAK],
52
+ ["SOUND", PROJ.SOUND],
53
+ ["SHARD", PROJ.SHARD],
54
+ ["NEXUS", PROJ.NEXUS],
55
+ ["NETHER", PROJ.NETHER],
56
+ ["CHAOS", PROJ.CHAOS],
57
+ ["DISEN", PROJ.DISEN],
58
+ ["WATER", PROJ.WATER],
59
+ ["ICE", PROJ.ICE],
60
+ ["GRAVITY", PROJ.GRAVITY],
61
+ ["INERTIA", PROJ.INERTIA],
62
+ ["FORCE", PROJ.FORCE],
63
+ ["TIME", PROJ.TIME],
64
+ ["PLASMA", PROJ.PLASMA],
65
+ /* The empty-handler group: no player side effect at all. */
66
+ ["METEOR", PROJ.METEOR],
67
+ ["MISSILE", PROJ.MISSILE],
68
+ ["MANA", PROJ.MANA],
69
+ ];
70
+ /**
71
+ * Damage values. The `randint0(dam) > 500` gates in FIRE, COLD and DARK cannot
72
+ * fire below 501 at all, so a grid that only ran small hits would record the
73
+ * powerful-attack arms as dead code. 5000 clears every threshold in the file.
74
+ */
75
+ export const VECTOR_DAMAGE = [10, 5000];
76
+ /**
77
+ * Monster spell power. The bonus arms gate on >= 60 (POIS), >= 70 (DARK) and
78
+ * >= 80 (FIRE, COLD, NETHER); 0 is below all of them and 80 is above all.
79
+ */
80
+ export const VECTOR_POWER = [0, 80];
81
+ /**
82
+ * res_level the projection actor reports for EVERY element. 3 is immunity,
83
+ * which is what ACID / ELEC / FIRE / COLD / ICE check before touching the pack;
84
+ * 1 is the plain resist that makes nine handlers bail with "You resist the
85
+ * effect!" - and those early breaks are exactly what a mis-keyed registry would
86
+ * skip.
87
+ */
88
+ export const VECTOR_RESISTS = [
89
+ ["none", 0],
90
+ ["resist", 1],
91
+ ["immune", 3],
92
+ ];
93
+ /**
94
+ * The seeds the grid runs.
95
+ *
96
+ * SIX, NOT TWO, and the reason is worth keeping. Seven handlers ignore `power`
97
+ * and NEXUS ignores `dam` as well, so for those the whole rest of the grid
98
+ * collapses onto ONE rng stream per seed - two seeds gave NEXUS four distinct
99
+ * paths and its 1-in-4 teleport-level arm came up empty in all 96 of its rows.
100
+ * A dimension that does not vary the handler's input does not sample it.
101
+ */
102
+ export const VECTOR_SEEDS = [1, 7, 16, 29, 43, 61];
103
+ /** Where a monster-sourced projection comes from: away from the player. */
104
+ const CASTER_GRID = loc(7, 7);
105
+ /** Name by index for a TMD value, so a vector reads as an effect not a number. */
106
+ function timedName(idx) {
107
+ for (const [name, value] of Object.entries(TMD)) {
108
+ if (value === idx)
109
+ return name;
110
+ }
111
+ return `TMD_${String(idx)}`;
112
+ }
113
+ /**
114
+ * A stub projection actor reporting one res_level for every element.
115
+ *
116
+ * FLAT ON PURPOSE. Per-element resist profiles would multiply the grid by the
117
+ * element count to separate handlers that are already separated by `proj`; what
118
+ * the vectors need is that each handler's resisted and unresisted arms are both
119
+ * reached, and one level applied to all elements does that in three rows.
120
+ */
121
+ function stubActor(level, energyRef) {
122
+ return {
123
+ resistLevel: () => level,
124
+ get energy() {
125
+ return energyRef.value;
126
+ },
127
+ set energy(v) {
128
+ energyRef.value = v;
129
+ },
130
+ };
131
+ }
132
+ /**
133
+ * Run one scenario and record it.
134
+ *
135
+ * Built fresh from a seeded state each time, so a vector is a function of its
136
+ * own inputs alone - no ordering between rows, which is what lets one `it()`
137
+ * per row report a divergence by name.
138
+ */
139
+ export function recordPlayerSide(fx, projName, proj, dam, power, resistName, resistLevel, warded, originName, seed) {
140
+ const state = fx.makeState(seed);
141
+ const p = state.actor.player;
142
+ /* A level and an experience total, because four handlers drain experience and
143
+ * a level-1 player with 0 exp records every drain as a no-op. GRAVITY's blink
144
+ * also compares randint1(127) against p->lev. */
145
+ p.lev = 20;
146
+ p.exp = 50_000;
147
+ p.maxExp = 50_000;
148
+ p.msp = 40;
149
+ p.csp = 40;
150
+ /* Stats above the floor, so a drain has somewhere to go. */
151
+ for (let i = 0; i < p.statCur.length; i++) {
152
+ p.statCur[i] = 15;
153
+ p.statMax[i] = 15;
154
+ }
155
+ fx.equipArmour(state, warded);
156
+ fx.fillPack(state);
157
+ const monsterIdx = originName === "monster" ? fx.addMonster(state, CASTER_GRID) : 0;
158
+ const messages = [];
159
+ /* state.actor.energy is a live field on the harness actor; the stub reads and
160
+ * writes THROUGH it so NETHER's "Your energy is sapped!" stays observable. */
161
+ const energyRef = { value: 100 };
162
+ state.actor.energy = 100;
163
+ /* The teleport seams GRAVITY, NEXUS and FORCE reach through. Recorded rather
164
+ * than omitted: `changeLevel` is the ONLY observable half of NEXUS's
165
+ * teleport-level arm - the harness has no session to change level for - and
166
+ * without it that arm looks identical to a no-op. */
167
+ let levelChangeTo = null;
168
+ let postMoves = 0;
169
+ const deps = {
170
+ timed: fx.timed,
171
+ actor: stubActor(resistLevel, energyRef),
172
+ projections: fx.projections,
173
+ expDeps: { rng: state.rng },
174
+ lifeDrainPercent: 2,
175
+ teleport: {
176
+ changeLevel: (depth) => {
177
+ levelChangeTo = depth;
178
+ },
179
+ onPlayerPostMove: () => {
180
+ postMoves++;
181
+ },
182
+ },
183
+ msg: (t) => messages.push(t),
184
+ };
185
+ const hook = makePlayerSideEffects(state, deps);
186
+ const xtra = hook({
187
+ origin: originName === "monster"
188
+ ? {
189
+ isPlayer: false,
190
+ isMonster: true,
191
+ monster: monsterIdx,
192
+ grid: CASTER_GRID,
193
+ killer: "a recorded caster",
194
+ }
195
+ : {
196
+ isPlayer: false,
197
+ isMonster: false,
198
+ isTrap: true,
199
+ /* On the player's OWN grid: FORCE's trap arm reads exactly that,
200
+ * and pushes them in a random direction when it holds. */
201
+ grid: state.actor.grid,
202
+ killer: "a recorded trap",
203
+ },
204
+ r: 0,
205
+ grid: state.actor.grid,
206
+ dam,
207
+ typ: proj,
208
+ power,
209
+ obvious: true,
210
+ });
211
+ const timedOn = [];
212
+ for (let i = 0; i < p.timed.length; i++) {
213
+ if ((p.timed[i] ?? 0) > 0)
214
+ timedOn.push(`${timedName(i)}=${String(p.timed[i])}`);
215
+ }
216
+ let packItems = 0;
217
+ for (const handle of state.gear.pack) {
218
+ packItems += state.gear.store.get(handle)?.number ?? 0;
219
+ }
220
+ let gearEnchant = 0;
221
+ for (const handle of [...state.gear.pack, ...p.equipment]) {
222
+ const obj = state.gear.store.get(handle);
223
+ if (obj)
224
+ gearEnchant += obj.toH + obj.toD + obj.toA;
225
+ }
226
+ return {
227
+ id: `${projName}/dam${String(dam)}/pow${String(power)}/${resistName}` +
228
+ `/${warded ? "warded" : "bare"}/${originName}/seed${String(seed)}`,
229
+ proj: projName,
230
+ dam,
231
+ power,
232
+ resist: resistName,
233
+ warded,
234
+ origin: originName,
235
+ seed,
236
+ xtra,
237
+ messages,
238
+ timed: timedOn.sort(),
239
+ statCur: [...p.statCur],
240
+ statMax: [...p.statMax],
241
+ exp: p.exp,
242
+ maxExp: p.maxExp,
243
+ csp: p.csp,
244
+ energy: state.actor.energy,
245
+ grid: [state.actor.grid.x, state.actor.grid.y],
246
+ levelChangeTo,
247
+ postMoves,
248
+ packStacks: state.gear.pack.length,
249
+ packItems,
250
+ gearEnchant,
251
+ /* Nearly every arm teaches a rune - the sustains, HOLD_LIFE, PROT_STUN -
252
+ * and equip_learn_flag is a real side effect upstream performs whether or
253
+ * not the effect landed. Counting them makes a dropped learn visible. */
254
+ learnedFlags: p.objKnown.flags.count(),
255
+ /* Capped well under Rand_div's 0x10000000 limit. */
256
+ rngProbe: state.rng.randint0(100_000_000),
257
+ };
258
+ }
259
+ /** Every scenario in the grid, in a fixed order. */
260
+ export function recordAllPlayerSide(fx) {
261
+ const out = [];
262
+ for (const [projName, proj] of VECTOR_PROJECTIONS) {
263
+ for (const dam of VECTOR_DAMAGE) {
264
+ for (const power of VECTOR_POWER) {
265
+ for (const [resistName, resistLevel] of VECTOR_RESISTS) {
266
+ for (const warded of [false, true]) {
267
+ for (const originName of ["monster", "trap"]) {
268
+ for (const seed of VECTOR_SEEDS) {
269
+ out.push(recordPlayerSide(fx, projName, proj, dam, power, resistName, resistLevel, warded, originName, seed));
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ }
277
+ return out;
278
+ }
279
+ /** The elements whose immunity gates a pack-damage arm, for the coverage guard. */
280
+ export const PACK_DAMAGE_ELEMENTS = [
281
+ ELEM.ACID,
282
+ ELEM.ELEC,
283
+ ELEM.FIRE,
284
+ ELEM.COLD,
285
+ ];
286
+ /**
287
+ * The dungeon depth every scenario runs at. Not incidental: the harness builds
288
+ * at depth 0, the TOWN, and teleport_player_level cannot go up from there - so
289
+ * its up/down coin flip, a real RNG draw, never happened on the first pass.
290
+ */
291
+ export const VECTOR_DEPTH = 5;
292
+ //# sourceMappingURL=player-side-vectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-side-vectors.js","sourceRoot":"","sources":["../../src/game/player-side-vectors.ts"],"names":[],"mappings":"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"}
@@ -22,11 +22,33 @@
22
22
  * distinct: drainStat is effect_simple(EF_DRAIN_STAT) (sustain saves with the
23
23
  * "You feel very %s..." messages), drainStatsRandom is
24
24
  * project_player_drain_stats (no sustain, always "You're not as %s...").
25
+ *
26
+ * THE DISPATCH IS A REGISTRY, as of 2026-08-09. It was a 21-case switch, and
27
+ * the last of the three - project_f's 37 and project_o's 11 were converted the
28
+ * day before, so a mod's projection reached terrain and objects but not the
29
+ * player, which is the half that matters. PLAYER_SIDE_HANDLERS is keyed by
30
+ * projection CODE exactly as the other two are, and `deps.playerHandlers` is
31
+ * the table the game actually dispatches through - supplied by wireGame from
32
+ * the per-game ProjectionHandlerRegistry (game/projection-handlers.ts), which a
33
+ * mod writes one code at a time through "registry:projection".
34
+ *
35
+ * What made this one a real refactor rather than a mechanical lift: the arms
36
+ * read ten helpers built per game, and `incCheck` reads a `currentSource`
37
+ * stamped per PROJECTION. `PlayerSideCtx` is those helpers made explicit, which
38
+ * is what lets the arms be ordinary top-level functions.
39
+ *
40
+ * The 6,912 vectors in player-side-vectors.json were recorded from the SWITCH
41
+ * and are replayed against the table, because the conversion bought moddability
42
+ * and was required to change nothing else - including the number of rng draws,
43
+ * which no visible value would have shown.
25
44
  */
26
45
  import type { ProjectionInfo } from "../world/projection.js";
27
46
  import type { TimedEffect } from "../player/types.js";
28
- import type { PlayerIncCheckQueries } from "../player/timed.js";
47
+ import type { PlayerIncCheckHooks, PlayerIncCheckQueries, TimedNotifyQueries } from "../player/timed.js";
48
+ import type { Monster } from "../mon/monster.js";
49
+ import type { Player } from "../player/player.js";
29
50
  import type { ExpDeps } from "../player/exp.js";
51
+ import type { Rng } from "../rng.js";
30
52
  import type { GameState } from "./context.js";
31
53
  import type { PlayerProjActor, ProjectPlayerSideContext } from "./project-player.js";
32
54
  import type { TeleportEnv } from "./effect-teleport.js";
@@ -39,6 +61,92 @@ import type { TeleportEnv } from "./effect-teleport.js";
39
61
  * the timed check reads the live duration array.
40
62
  */
41
63
  export declare function makeIncCheckQueries(state: GameState): PlayerIncCheckQueries;
64
+ /**
65
+ * makeTimedNotifyQueries: the obj_k reads player_set_timed's notify suppression
66
+ * needs (player-timed.c:828-839).
67
+ *
68
+ * "Don't mention effects which already match the known player state" - a
69
+ * temporary resist you are KNOWN to be immune to, or a flag synonym you are
70
+ * KNOWN to have from worn gear. It silences a message and never changes the
71
+ * duration, which is why it went unnoticed: nothing supplied these queries in
72
+ * production, so every such effect announced itself.
73
+ *
74
+ * hasFlagNotTimed is player_of_has_not_timed (player-timed.c:747-763): the
75
+ * player's own flags UNION every equipped object's, deliberately WITHOUT timed
76
+ * effects - that exclusion is the whole point of the predicate.
77
+ */
78
+ export declare function makeTimedNotifyQueries(state: GameState): TimedNotifyQueries;
79
+ /**
80
+ * makeIncCheckHooks: player_inc_check's SIDE EFFECTS over the live state
81
+ * (player-timed.c:945-953 for object flags, :967 and :985 for resists and
82
+ * vulnerabilities).
83
+ *
84
+ * The two equip-learn calls are UNCONDITIONAL in upstream's non-lore branch -
85
+ * a trap you are immune to, a potion, a monster's breath and a monster's blow
86
+ * all teach the rune the same way. Only update_smart_learn and the "You resist
87
+ * the effect!" line are gated on `cave->mon_current > 0`, which is what
88
+ * `monster` supplies here.
89
+ *
90
+ * Everything below is RNG-free: equipLearnFlag / equipLearnElement walk the
91
+ * worn slots and write knowledge (obj/knowledge.ts:773, :795), and neither they
92
+ * nor playerLearnFlagRune / objectCursesFindFlags draw. That was measured
93
+ * rather than assumed, because supplying these on paths that previously had no
94
+ * hooks would otherwise move the RNG stream under every seeded test.
95
+ */
96
+ export declare function makeIncCheckHooks(state: GameState, opts?: {
97
+ /** The message sink for "You resist the effect!" (monster sources only). */
98
+ msg?: (text: string) => void;
99
+ /** cave->mon_current: the acting monster, when one is acting. */
100
+ monster?: Monster | null;
101
+ }): PlayerIncCheckHooks;
102
+ /**
103
+ * What one per-projection player handler is handed: the projection being
104
+ * resolved, and the toolkit the arms used to close over.
105
+ *
106
+ * THE TOOLKIT IS THE WHOLE REASON THIS TYPE EXISTS. project_f's and project_o's
107
+ * handlers took (state, grid, dam) and a bag of env, so lifting them to module
108
+ * level was mechanical. project_p's arms read ten helpers built per game -
109
+ * player_inc_timed bound to the timed registry, player_inc_check bound to the
110
+ * live derived state, the two distinct stat drains, the HOLD_LIFE life drain -
111
+ * and one of them, `incCheck`, reads a `currentSource` that is stamped per
112
+ * PROJECTION. Passing those in explicitly is what lets the arms below be
113
+ * ordinary top-level functions, and lets a mod supply its own.
114
+ */
115
+ export interface PlayerSideCtx {
116
+ readonly state: GameState;
117
+ readonly deps: PlayerSideDeps;
118
+ /** The upstream handler context: origin, grid, typ, power, obvious. */
119
+ readonly proj: ProjectPlayerSideContext;
120
+ /** context->dam, which nine arms scale their effects off. */
121
+ readonly dam: number;
122
+ /** Monster spell power: the >= 60 / 70 / 80 gates on the bonus arms. */
123
+ readonly power: number;
124
+ readonly rng: Rng;
125
+ /** The player, so an arm does not spell out state.actor.player every line. */
126
+ p(): Player;
127
+ msg(text: string): void;
128
+ /** player_inc_timed through the bound registry. */
129
+ incTimed(idx: number, v: number, check: boolean): boolean;
130
+ /** player_inc_check as a pure predicate, for the pre-message resist test. */
131
+ incCheck(idx: number): boolean;
132
+ /** el_info[elem].res_level === 3. */
133
+ isImmune(elem: number): boolean;
134
+ /** el_info[elem].res_level > 0. */
135
+ resists(elem: number): boolean;
136
+ /** effect_simple(EF_DRAIN_STAT): the sustain saves it. */
137
+ drainStat(stat: number): void;
138
+ /** project_player_drain_stats(num): no sustain, always the message. */
139
+ drainStatsRandom(num: number): void;
140
+ /** Experience drain with the HOLD_LIFE gate. */
141
+ drainLife(amount: number, text: string): void;
142
+ /**
143
+ * Extra damage applied after damage reduction. Mutable and written in place,
144
+ * exactly as `ProjectObjCtx.out` is - POIS's acid sting is the only writer.
145
+ */
146
+ xtra: number;
147
+ }
148
+ /** One projection's side effects on the player. Writes `ctx.xtra` if any. */
149
+ export type PlayerSideHandler = (ctx: PlayerSideCtx) => void;
42
150
  /** Everything the side-effect handlers need beyond the GameState. */
43
151
  export interface PlayerSideDeps {
44
152
  /** The bound timed-effect registry (players.timed), TMD-indexed. */
@@ -53,7 +161,27 @@ export interface PlayerSideDeps {
53
161
  lifeDrainPercent: number;
54
162
  /** The teleport seams (no-teleport curse, post-move) for GRAVITY's blink. */
55
163
  teleport?: TeleportEnv;
164
+ /**
165
+ * The player-handler table to dispatch through, defaulting to
166
+ * PLAYER_SIDE_HANDLERS. Supplied by wireGame from
167
+ * `GameState.projectionHandlers`, by identity, exactly as `featHandlers` and
168
+ * `objHandlers` are - see game/projection-handlers.ts.
169
+ */
170
+ playerHandlers?: ReadonlyMap<string, PlayerSideHandler>;
56
171
  msg?(text: string): void;
57
172
  }
173
+ /**
174
+ * project_player_handler_f[]: the per-projection player side effects, keyed by
175
+ * projection CODE.
176
+ *
177
+ * KEYED BY CODE, NOT BY PROJ VALUE, and the same way project_f's and
178
+ * project_o's tables are. A mod's own projection is appended to the bound
179
+ * projection table at a slot core never compiled in, so a numeric key would put
180
+ * its handler somewhere nothing looks; the code is the identity that survives.
181
+ *
182
+ * A projection with NO entry does nothing to the player, which is upstream's
183
+ * empty handler and is why there is no default arm here to write.
184
+ */
185
+ export declare const PLAYER_SIDE_HANDLERS: ReadonlyMap<string, PlayerSideHandler>;
58
186
  export declare function makePlayerSideEffects(state: GameState, deps: PlayerSideDeps): (ctx: ProjectPlayerSideContext) => number;
59
187
  //# sourceMappingURL=player-side.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"player-side.d.ts","sourceRoot":"","sources":["../../src/game/player-side.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,qBAAqB,CAmB3E;AAED,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,gEAAgE;IAChE,KAAK,EAAE,eAAe,CAAC;IACvB,mEAAmE;IACnE,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IACvC,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAsCD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,cAAc,GACnB,CAAC,GAAG,EAAE,wBAAwB,KAAK,MAAM,CA6Z3C"}
1
+ {"version":3,"file":"player-side.d.ts","sourceRoot":"","sources":["../../src/game/player-side.ts"],"names":[],"mappings":"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"}