@v12-engine/engine 0.1.0 → 0.4.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 (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
package/dist/life.js ADDED
@@ -0,0 +1,287 @@
1
+ import { footprintOf } from "./defs.js";
2
+ import { statsOf } from "./stats.js";
3
+ import { damaged, entityDied, healed } from "./engineEvents.js";
4
+ import { replicateEvent } from "./replication.js";
5
+ import { deposit, fighting } from "./entity.js";
6
+ import { absorb, healthFloor, isInvulnerable, overheal } from "./abilities/buffs.js";
7
+ import { dashing } from "./dashing.js";
8
+ import { cheatDeath } from "./abilities/triggers.js";
9
+ import { clearOrders } from "./orders/queue.js";
10
+ import { hurtWhileChannelling } from "./orders/cast.js";
11
+ import { expose } from "./systems/fog.js";
12
+ //#region src/life.ts
13
+ /**
14
+ * How things are hurt, healed and die in a world (`world.life`): damage through the hooks, armor and shields; healing;
15
+ * death through its hooks, the entity leaving the world, a fallen hero waiting out of it. The world's `damage`, `heal`
16
+ * and `kill` are this
17
+ */
18
+ /**
19
+ * How a world's entities are hurt, healed and die
20
+ *
21
+ * @beta
22
+ */
23
+ var Life = class {
24
+ world;
25
+ /** Who died and is to be taken out of the world at the end of the tick (`World.step`) */
26
+ dead = [];
27
+ constructor(world) {
28
+ this.world = world;
29
+ }
30
+ /**
31
+ * Deals damage. In order:
32
+ * 1. the `beforeDamage` hook, which can change the amount or call it off;
33
+ * 2. armor or magic resist take their part, then the damage is made more or less (`incomingDamage`, `outgoingDamage`:
34
+ * `RuleSettings.combat.damageScale`), and shields take theirs;
35
+ * 3. the rest comes off the target's health, and it dies when nothing is left (see `kill`);
36
+ * 4. the `afterDamage` hook, for what follows from a hit: life steal, effects on hit.
37
+ */
38
+ damage(target, amount, source, options = {}) {
39
+ if (!target.alive || target.def.invulnerable || target.def.targetableBy || this.dying.has(target)) return;
40
+ if (this.world.cheats.invulnerable && this.world.debugPlayers.has(target.owner)) return;
41
+ if (target.buffs.length && isInvulnerable(this.world, target)) return;
42
+ const attack = options.attack ?? false;
43
+ const crit = options.crit ?? false;
44
+ const { ability, tags } = options;
45
+ let type = options.damageType ?? "physical";
46
+ const { hooks } = this.world;
47
+ if (hooks.has("beforeDamage")) {
48
+ const before = hooks.run("beforeDamage", {
49
+ target,
50
+ source,
51
+ amount,
52
+ type,
53
+ attack,
54
+ crit,
55
+ ability,
56
+ tags,
57
+ cancelled: false
58
+ });
59
+ if (before.cancelled || !target.alive) return;
60
+ amount = before.amount;
61
+ type = before.type;
62
+ }
63
+ const from = source ? statsOf(this.world, source) : void 0;
64
+ const { combat } = this.world.settings;
65
+ const own = statsOf(this.world, target);
66
+ const arrived = Math.max(amount * combat.mitigation(type, own, from) * combat.damageScale(type, own, from), 0);
67
+ let dealt = target.def.uses ? 1 : target.buffs.length ? absorb(target, arrived) : arrived;
68
+ if (target.buffs.length && dealt > 0) {
69
+ const floor = healthFloor(this.world, target);
70
+ if (floor > 0 && target.health - dealt < floor) dealt = Math.max(target.health - floor, 0);
71
+ }
72
+ const taken = Math.min(dealt, target.health);
73
+ target.health -= dealt;
74
+ target.hurtAt = this.world.time;
75
+ if (source && target.get(fighting)) target.get(fighting).lastAttacker = source.id;
76
+ if (dealt > 0 && target.orders.length) hurtWhileChannelling(this.world, target);
77
+ if (source && this.world.areEnemies(source.owner, target.owner)) expose(source, this.world.player(target.owner).team);
78
+ this.world.events.emit(damaged, {
79
+ target,
80
+ source,
81
+ amount: dealt,
82
+ type,
83
+ crit,
84
+ attack,
85
+ ability,
86
+ tags
87
+ });
88
+ if (target.health <= 0) this.die(target, source, attack, "damage", {
89
+ type,
90
+ amount: dealt,
91
+ overkill: Math.max(dealt - taken, 0),
92
+ crit,
93
+ ability,
94
+ tags,
95
+ ...options.how && { how: options.how }
96
+ });
97
+ if (hooks.has("afterDamage")) hooks.run("afterDamage", {
98
+ target,
99
+ source,
100
+ dealt,
101
+ taken,
102
+ type,
103
+ attack,
104
+ crit,
105
+ ability,
106
+ tags
107
+ });
108
+ }
109
+ /**
110
+ * Gives health back, made more or less by what the target gets of it (`incomingHealing`:
111
+ * `RuleSettings.combat.healingScale`), then after the `beforeHeal` hook had its say. Returns how much of it was needed
112
+ */
113
+ heal(target, amount, source) {
114
+ if (!target.alive || amount <= 0 || this.dying.has(target)) return 0;
115
+ amount *= this.world.settings.combat.healingScale(statsOf(this.world, target), source && statsOf(this.world, source));
116
+ if (amount <= 0) return 0;
117
+ const before = this.world.hooks.run("beforeHeal", {
118
+ target,
119
+ source,
120
+ amount,
121
+ cancelled: false
122
+ });
123
+ if (before.cancelled) return 0;
124
+ amount = before.amount;
125
+ const healed$1 = Math.min(amount, target.maxHealth - target.health);
126
+ if (amount > healed$1 && (target.buffs.length || source?.buffs.length)) overheal(this.world, target, source, amount - Math.max(healed$1, 0));
127
+ if (healed$1 <= 0) return 0;
128
+ target.health += healed$1;
129
+ this.world.events.emit(healed, {
130
+ target,
131
+ source,
132
+ amount: healed$1
133
+ });
134
+ return healed$1;
135
+ }
136
+ /**
137
+ * Kills an entity by the rules, not by damage: felled, cancelled, run out of time. `attack` says that an attack of
138
+ * the killer did it; `reason` why (`DeathReason`: `killed` when left out, or the game's own word, `sold`), for the
139
+ * hooks and the screen
140
+ */
141
+ kill(entity, killer, attack = false, reason = "killed") {
142
+ this.die(entity, killer, attack, reason);
143
+ }
144
+ /**
145
+ * How anything dies. In order:
146
+ * 1. the `beforeDeath` hook, which can keep it alive;
147
+ * 2. its orders and production are called off;
148
+ * 3. the `death` hook, while it still stands where it was: experience, loot, bounty;
149
+ * 4. it leaves the world (a fallen hero waits out of it to be brought back);
150
+ * 5. the `afterDeath` hook, for what follows: effects of the killer on a kill.
151
+ */
152
+ die(entity, killer, attack, reason, cause) {
153
+ if (!entity.alive || this.dying.has(entity)) return;
154
+ if (this.world.hooks.run("beforeDeath", {
155
+ entity,
156
+ killer,
157
+ attack,
158
+ fromDamage: !!cause,
159
+ cause,
160
+ reason,
161
+ cancelled: false
162
+ }).cancelled) return;
163
+ if ((cause || reason === "killed") && cheatDeath(this.world, entity)) return;
164
+ this.dying.add(entity);
165
+ try {
166
+ clearOrders(this.world, entity);
167
+ this.world.leave(entity);
168
+ const death = {
169
+ entity,
170
+ killer,
171
+ attack,
172
+ cause,
173
+ reason,
174
+ ...cause?.how && { how: cause.how }
175
+ };
176
+ this.world.hooks.run("death", death);
177
+ this.fall(entity, killer, attack, cause, death);
178
+ } finally {
179
+ this.dying.delete(entity);
180
+ }
181
+ }
182
+ /** Who is being killed right now: their `death` hooks are running. They take no damage, no healing, and die once */
183
+ dying = /* @__PURE__ */ new Set();
184
+ /** Whether an entity is being killed right now: alive still, while its `death` hooks run, and past saving */
185
+ isDying(entity) {
186
+ return this.dying.has(entity);
187
+ }
188
+ /** What follows the `death` hooks: the entity is gone from the world, and it is told */
189
+ fall(entity, killer, attack, cause, death) {
190
+ entity.setAlive(false);
191
+ entity.health = 0;
192
+ if (entity.buffs.length) death.carried = entity.buffs.slice();
193
+ entity.clearBuffs();
194
+ entity.remove(dashing);
195
+ this.detach(entity);
196
+ if (!this.world.hooks.has("fallenHero") || !this.world.hooks.run("fallenHero", {
197
+ entity,
198
+ killer,
199
+ stays: false
200
+ }).stays) this.dead.push(entity);
201
+ this.world.events.emit(entityDied, {
202
+ entity,
203
+ killer,
204
+ attack,
205
+ cause,
206
+ how: death.how,
207
+ reason: death.reason
208
+ });
209
+ this.world.hooks.run("afterDeath", death);
210
+ const above = this.world.get(entity.get(deposit)?.under);
211
+ if (above?.alive && !this.isDying(above)) this.kill(above, void 0, false, "removed");
212
+ }
213
+ detach(entity) {
214
+ this.world.nav.removeAgent(entity.id);
215
+ if (entity.isStructure) this.world.spatial.removeStatic(entity);
216
+ if (entity.cell) {
217
+ const fp = footprintOf(entity.def);
218
+ this.world.grid.release(entity.cell.x, entity.cell.z, fp.w, fp.d, entity.id);
219
+ this.world.nav.removeObstacle(entity.id);
220
+ }
221
+ const under = this.world.get(entity.on);
222
+ if (under?.get(deposit) && under.cell) {
223
+ if (under.get(deposit).under === entity.id) under.get(deposit).under = void 0;
224
+ if (under.alive) {
225
+ const fp = footprintOf(under.def);
226
+ this.world.grid.occupy(under.cell.x, under.cell.z, fp.w, fp.d, under.id);
227
+ }
228
+ }
229
+ }
230
+ };
231
+ /** A death, to those who see the dead: who killed it where they see the killer too (`SessionEvent` `death`) */
232
+ var toldDeath = replicateEvent(entityDied, "death", ({ entity, killer, attack, cause, how, reason }, view) => {
233
+ if (!view.knows(entity)) return void 0;
234
+ const seen = killer && killer !== entity && view.knows(killer) ? killer : void 0;
235
+ return {
236
+ type: "death",
237
+ id: entity.id,
238
+ from: seen && {
239
+ x: seen.pos.x,
240
+ z: seen.pos.z
241
+ },
242
+ killer: seen?.id,
243
+ killerType: seen?.def.id,
244
+ attack,
245
+ damageType: cause?.type,
246
+ ability: cause?.ability,
247
+ overkill: cause?.overkill,
248
+ crit: cause?.crit,
249
+ how,
250
+ ...reason !== "damage" && { reason },
251
+ ...cause?.tags?.length && { tags: [...cause.tags] }
252
+ };
253
+ });
254
+ /** A hit, to those who see who took it: who dealt it where they see them too */
255
+ var toldDamage = replicateEvent(damaged, "damage", ({ target, source, amount, type, attack, crit, ability, tags }, view) => {
256
+ if (!view.knows(target)) return void 0;
257
+ const seen = source && view.knows(source) ? source : void 0;
258
+ return {
259
+ type: "damage",
260
+ id: target.id,
261
+ amount,
262
+ damageType: type,
263
+ source: seen?.id,
264
+ sourceType: seen?.def.id,
265
+ attack,
266
+ crit,
267
+ ability: seen ? ability : void 0,
268
+ tags
269
+ };
270
+ });
271
+ /** Healing, to those who see who was healed */
272
+ var toldHeal = replicateEvent(healed, "heal", ({ target, source, amount }, view) => view.knows(target) ? {
273
+ type: "heal",
274
+ id: target.id,
275
+ amount,
276
+ source: source && view.knows(source) ? source.id : void 0
277
+ } : void 0);
278
+ /** A critical strike's number over who took it */
279
+ var toldCrit = replicateEvent(damaged, "crit", ({ target, amount, crit }, view) => crit && view.knows(target) ? {
280
+ type: "crit",
281
+ id: target.id,
282
+ amount: Math.round(amount)
283
+ } : void 0);
284
+ //#endregion
285
+ export { Life, toldCrit, toldDamage, toldDeath, toldHeal };
286
+
287
+ //# sourceMappingURL=life.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"life.js","names":["healed","healedEvent"],"sources":["../src/life.ts"],"sourcesContent":["/**\n * How things are hurt, healed and die in a world (`world.life`): damage through the hooks, armor and shields; healing;\n * death through its hooks, the entity leaving the world, a fallen hero waiting out of it. The world's `damage`, `heal`\n * and `kill` are this\n */\nimport { damaged, entityDied, healed as healedEvent } from '#engine/engineEvents'\nimport { dashing } from './dashing'\nimport { absorb, healthFloor, isInvulnerable, overheal } from './abilities/buffs'\nimport { footprintOf } from './defs'\nimport { type BuffInstance, type Entity, fighting, deposit } from './entity'\nimport type { Death } from './hooks'\nimport { hurtWhileChannelling } from './orders/cast'\nimport { cheatDeath } from './abilities/triggers'\nimport { clearOrders } from './orders/queue'\nimport { statsOf } from './stats'\nimport { expose } from './systems/fog'\nimport type { DamageOptions, DeathCause, DeathReason, World } from './world'\nimport { replicateEvent } from './replication'\n\n/**\n * How a world's entities are hurt, healed and die\n *\n * @beta\n */\nexport class Life {\n\t/** Who died and is to be taken out of the world at the end of the tick (`World.step`) */\n\treadonly dead: Entity[] = []\n\n\tconstructor(private readonly world: World) {}\n\n\t/**\n\t * Deals damage. In order:\n\t * 1. the `beforeDamage` hook, which can change the amount or call it off;\n\t * 2. armor or magic resist take their part, then the damage is made more or less (`incomingDamage`, `outgoingDamage`:\n\t * `RuleSettings.combat.damageScale`), and shields take theirs;\n\t * 3. the rest comes off the target's health, and it dies when nothing is left (see `kill`);\n\t * 4. the `afterDamage` hook, for what follows from a hit: life steal, effects on hit.\n\t */\n\tdamage(target: Entity, amount: number, source?: Entity, options: DamageOptions = {}): void {\n\t\t// one already being killed takes no more: its death goes on as it began\n\t\tif (!target.alive || target.def.invulnerable || target.def.targetableBy || this.dying.has(target)) return\n\t\t// the cheat: what those who may use the debug tools own is not hurt\n\t\tif (this.world.cheats.invulnerable && this.world.debugPlayers.has(target.owner)) return\n\t\t// a buff that keeps it from harm (AB9): Divine Shield, a stasis\n\t\tif (target.buffs.length && isInvulnerable(this.world, target)) return\n\t\tconst attack = options.attack ?? false\n\t\tconst crit = options.crit ?? false\n\t\tconst { ability, tags } = options\n\t\tlet type = options.damageType ?? 'physical'\n\t\t// the event made only for a game that hears it: damage is dealt on every hit\n\t\tconst { hooks } = this.world\n\t\tif (hooks.has('beforeDamage')) {\n\t\t\tconst before = hooks.run('beforeDamage', { target, source, amount, type, attack, crit, ability, tags, cancelled: false })\n\t\t\tif (before.cancelled || !target.alive) return\n\t\t\tamount = before.amount\n\t\t\ttype = before.type\n\t\t}\n\t\tconst from = source ? statsOf(this.world, source) : undefined\n\t\tconst { combat } = this.world.settings\n\t\tconst own = statsOf(this.world, target)\n\t\t// armor or magic resist, then what makes it more or less for either side (`incomingDamage`, `outgoingDamage`)\n\t\tconst arrived = Math.max(amount * combat.mitigation(type, own, from) * combat.damageScale(type, own, from), 0)\n\t\t// what counts hits takes one, however hard it is struck\n\t\tlet dealt = target.def.uses ? 1 : target.buffs.length ? absorb(target, arrived) : arrived\n\t\t// a floor a buff keeps its health at (AB9): hurt down to it, never past it\n\t\tif (target.buffs.length && dealt > 0) {\n\t\t\tconst floor = healthFloor(this.world, target)\n\t\t\tif (floor > 0 && target.health - dealt < floor) dealt = Math.max(target.health - floor, 0)\n\t\t}\n\t\tconst taken = Math.min(dealt, target.health)\n\t\ttarget.health -= dealt\n\t\ttarget.hurtAt = this.world.time\n\t\tif (source && target.get(fighting)) target.get(fighting)!.lastAttacker = source.id\n\t\t// a recall, and whatever else is kept up only while unhurt, is broken off\n\t\tif (dealt > 0 && target.orders.length) hurtWhileChannelling(this.world, target)\n\t\tif (source && this.world.areEnemies(source.owner, target.owner)) expose(source, this.world.player(target.owner).team)\n\t\tthis.world.events.emit(damaged, { target, source, amount: dealt, type, crit, attack, ability, tags })\n\t\tif (target.health <= 0)\n\t\t\tthis.die(target, source, attack, 'damage', {\n\t\t\t\ttype,\n\t\t\t\tamount: dealt,\n\t\t\t\toverkill: Math.max(dealt - taken, 0),\n\t\t\t\tcrit,\n\t\t\t\tability,\n\t\t\t\ttags,\n\t\t\t\t...(options.how && { how: options.how })\n\t\t\t})\n\t\tif (hooks.has('afterDamage')) hooks.run('afterDamage', { target, source, dealt, taken, type, attack, crit, ability, tags })\n\t}\n\n\t/**\n\t * Gives health back, made more or less by what the target gets of it (`incomingHealing`:\n\t * `RuleSettings.combat.healingScale`), then after the `beforeHeal` hook had its say. Returns how much of it was needed\n\t */\n\theal(target: Entity, amount: number, source?: Entity): number {\n\t\tif (!target.alive || amount <= 0 || this.dying.has(target)) return 0\n\t\tamount *= this.world.settings.combat.healingScale(statsOf(this.world, target), source && statsOf(this.world, source))\n\t\tif (amount <= 0) return 0\n\t\tconst before = this.world.hooks.run('beforeHeal', { target, source, amount, cancelled: false })\n\t\tif (before.cancelled) return 0\n\t\tamount = before.amount\n\t\tconst healed = Math.min(amount, target.maxHealth - target.health)\n\t\t// what spills over full health, where a buff of the healer's or the healed one's makes it a shield (`BuffDef.overheal`)\n\t\tif (amount > healed && (target.buffs.length || source?.buffs.length)) overheal(this.world, target, source, amount - Math.max(healed, 0))\n\t\tif (healed <= 0) return 0\n\t\ttarget.health += healed\n\t\tthis.world.events.emit(healedEvent, { target, source, amount: healed })\n\t\treturn healed\n\t}\n\n\t/**\n\t * Kills an entity by the rules, not by damage: felled, cancelled, run out of time. `attack` says that an attack of\n\t * the killer did it; `reason` why (`DeathReason`: `killed` when left out, or the game's own word, `sold`), for the\n\t * hooks and the screen\n\t */\n\tkill(entity: Entity, killer?: Entity, attack = false, reason: DeathReason = 'killed'): void {\n\t\tthis.die(entity, killer, attack, reason)\n\t}\n\n\t/**\n\t * How anything dies. In order:\n\t * 1. the `beforeDeath` hook, which can keep it alive;\n\t * 2. its orders and production are called off;\n\t * 3. the `death` hook, while it still stands where it was: experience, loot, bounty;\n\t * 4. it leaves the world (a fallen hero waits out of it to be brought back);\n\t * 5. the `afterDeath` hook, for what follows: effects of the killer on a kill.\n\t */\n\tprivate die(entity: Entity, killer: Entity | undefined, attack: boolean, reason: DeathReason, cause?: DeathCause): void {\n\t\tif (!entity.alive || this.dying.has(entity)) return\n\t\tif (this.world.hooks.run('beforeDeath', { entity, killer, attack, fromDamage: !!cause, cause, reason, cancelled: false }).cancelled) return\n\t\t// a passive that cheats death (`onFatal`, AB9), of a blow or a kill, not of what the rules take away\n\t\tif ((cause || reason === 'killed') && cheatDeath(this.world, entity)) return\n\t\t// from here on it is dying: still alive and where it was for the `death` hooks, but what they do to it, or what\n\t\t// what they do does to it (a blast that kills a neighbour whose own blast comes back), kills it no second time\n\t\tthis.dying.add(entity)\n\t\ttry {\n\t\t\tclearOrders(this.world, entity)\n\t\t\tthis.world.leave(entity)\n\t\t\t// how the blow says it dies, for the `death` hook to keep or change\n\t\t\tconst death: Death = { entity, killer, attack, cause, reason, ...(cause?.how && { how: cause.how }) }\n\t\t\tthis.world.hooks.run('death', death)\n\t\t\tthis.fall(entity, killer, attack, cause, death)\n\t\t} finally {\n\t\t\tthis.dying.delete(entity)\n\t\t}\n\t}\n\n\t/** Who is being killed right now: their `death` hooks are running. They take no damage, no healing, and die once */\n\tprivate readonly dying = new Set<Entity>()\n\n\t/** Whether an entity is being killed right now: alive still, while its `death` hooks run, and past saving */\n\tisDying(entity: Entity): boolean {\n\t\treturn this.dying.has(entity)\n\t}\n\n\t/** What follows the `death` hooks: the entity is gone from the world, and it is told */\n\tprivate fall(entity: Entity, killer: Entity | undefined, attack: boolean, cause: DeathCause | undefined, death: Death): void {\n\t\tentity.setAlive(false)\n\t\tentity.health = 0\n\t\t// what it carried, for what asks it after (an `onKill`'s effects, B44)\n\t\tif (entity.buffs.length) (death as { carried?: readonly BuffInstance[] }).carried = entity.buffs.slice()\n\t\tentity.clearBuffs()\n\t\tentity.remove(dashing)\n\t\tthis.detach(entity)\n\t\t// what stays around, out of the world, until it is brought back: a fallen hero, where the heroes pack is on\n\t\tif (!this.world.hooks.has('fallenHero') || !this.world.hooks.run('fallenHero', { entity, killer, stays: false }).stays) this.dead.push(entity)\n\t\tthis.world.events.emit(entityDied, { entity, killer, attack, cause, how: death.how, reason: death.reason })\n\t\tthis.world.hooks.run('afterDeath', death)\n\t\t// a resource used up takes down what stood on it: there is nothing for it to stand on\n\t\tconst above = this.world.get(entity.get(deposit)?.under)\n\t\tif (above?.alive && !this.isDying(above)) this.kill(above, undefined, false, 'removed')\n\t}\n\n\tprivate detach(entity: Entity): void {\n\t\tthis.world.nav.removeAgent(entity.id)\n\t\tif (entity.isStructure) this.world.spatial.removeStatic(entity)\n\t\tif (entity.cell) {\n\t\t\tconst fp = footprintOf(entity.def)\n\t\t\tthis.world.grid.release(entity.cell.x, entity.cell.z, fp.w, fp.d, entity.id)\n\t\t\tthis.world.nav.removeObstacle(entity.id)\n\t\t}\n\t\t// what stood on a resource: the resource has its ground again, and is free to be built on\n\t\tconst under = this.world.get(entity.on)\n\t\tif (under?.get(deposit) && under.cell) {\n\t\t\tif (under.get(deposit)!.under === entity.id) under.get(deposit)!.under = undefined\n\t\t\tif (under.alive) {\n\t\t\t\tconst fp = footprintOf(under.def)\n\t\t\t\tthis.world.grid.occupy(under.cell.x, under.cell.z, fp.w, fp.d, under.id)\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** A death, to those who see the dead: who killed it where they see the killer too (`SessionEvent` `death`) */\nexport const toldDeath = replicateEvent(entityDied, 'death', ({ entity, killer, attack, cause, how, reason }, view) => {\n\tif (!view.knows(entity)) return undefined\n\tconst seen = killer && killer !== entity && view.knows(killer) ? killer : undefined\n\treturn {\n\t\ttype: 'death',\n\t\tid: entity.id,\n\t\tfrom: seen && { x: seen.pos.x, z: seen.pos.z },\n\t\tkiller: seen?.id,\n\t\tkillerType: seen?.def.id,\n\t\tattack,\n\t\tdamageType: cause?.type,\n\t\tability: cause?.ability,\n\t\toverkill: cause?.overkill,\n\t\tcrit: cause?.crit,\n\t\thow,\n\t\t...(reason !== 'damage' && { reason }),\n\t\t...(cause?.tags?.length && { tags: [...cause.tags] })\n\t}\n})\n\n/** A hit, to those who see who took it: who dealt it where they see them too */\nexport const toldDamage = replicateEvent(damaged, 'damage', ({ target, source, amount, type, attack, crit, ability, tags }, view) => {\n\tif (!view.knows(target)) return undefined\n\tconst seen = source && view.knows(source) ? source : undefined\n\treturn {\n\t\ttype: 'damage',\n\t\tid: target.id,\n\t\tamount,\n\t\tdamageType: type,\n\t\tsource: seen?.id,\n\t\tsourceType: seen?.def.id,\n\t\tattack,\n\t\tcrit,\n\t\tability: seen ? ability : undefined,\n\t\ttags\n\t}\n})\n\n/** Healing, to those who see who was healed */\nexport const toldHeal = replicateEvent(healedEvent, 'heal', ({ target, source, amount }, view) =>\n\tview.knows(target) ? { type: 'heal', id: target.id, amount, source: source && view.knows(source) ? source.id : undefined } : undefined\n)\n\n/** A critical strike's number over who took it */\nexport const toldCrit = replicateEvent(damaged, 'crit', ({ target, amount, crit }, view) =>\n\tcrit && view.knows(target) ? { type: 'crit', id: target.id, amount: Math.round(amount) } : undefined\n)\n"],"mappings":"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"}
package/dist/log.d.ts CHANGED
@@ -13,7 +13,11 @@
13
13
  * @beta
14
14
  */
15
15
  export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
16
- /** @beta */
16
+ /**
17
+ * The levels of log entries from least to most important, in the order `Logger.says` ranks them
18
+ *
19
+ * @beta
20
+ */
17
21
  export declare const LOG_LEVELS: readonly LogLevel[];
18
22
  /**
19
23
  * One thing said. Plain data: it crosses a session, a worker and a file as it is
@@ -21,14 +25,17 @@ export declare const LOG_LEVELS: readonly LogLevel[];
21
25
  * @beta
22
26
  */
23
27
  export interface LogEntry {
28
+ /** How much the entry matters */
24
29
  level: LogLevel;
25
30
  /** What part said it: `server`, `game`, `assets`, a mod's own */
26
31
  category: string;
32
+ /** What was said, in words */
27
33
  message: string;
28
34
  /** What it is about, by name: an entity's id, a player, a file, an error (`errorFields`) */
29
35
  fields?: Record<string, unknown>;
30
36
  /** The game it was said in, and its tick, where it was said in one */
31
37
  game?: string;
38
+ /** The tick of the game it was said in, where it was said in a world */
32
39
  tick?: number;
33
40
  /** When, in milliseconds of the clock (`Date.now`). Never read by the simulation */
34
41
  time: number;
@@ -47,12 +54,17 @@ export type LogSink = (entry: LogEntry) => void;
47
54
  export type LogContext = () => Partial<Pick<LogEntry, 'game' | 'tick'>> & {
48
55
  fields?: Record<string, unknown>;
49
56
  };
50
- /** @beta */
57
+ /**
58
+ * The options a `Logger` is made with
59
+ *
60
+ * @beta
61
+ */
51
62
  export interface LoggerOptions {
52
63
  /** The logger this one passes its entries up to. None for one that stands alone */
53
64
  parent?: Logger;
54
65
  /** The least an entry must matter to be said here: everything when left out */
55
66
  level?: LogLevel;
67
+ /** What the logger adds to each entry it passes on: the game, the tick and the fields */
56
68
  context?: LogContext;
57
69
  }
58
70
  /**
@@ -77,7 +89,11 @@ export declare function logLine(entry: LogEntry): string;
77
89
  * @beta
78
90
  */
79
91
  export declare const consoleSink: LogSink;
80
- /** @beta */
92
+ /**
93
+ * A logger: it takes entries of a level and above and sends them to its sinks and its parent
94
+ *
95
+ * @beta
96
+ */
81
97
  export declare class Logger {
82
98
  /** The least an entry must matter to be said: what is under it is dropped here, and goes no further */
83
99
  level: LogLevel;
@@ -91,10 +107,15 @@ export declare class Logger {
91
107
  child(options?: Omit<LoggerOptions, 'parent'> | LogContext): Logger;
92
108
  /** Whether an entry of this level would be said: for not putting together what nobody will read */
93
109
  says(level: LogLevel): boolean;
110
+ /** Says an entry of the level, the category and the message, with its fields when given; dropped when the logger does not say that level */
94
111
  log(level: LogLevel, category: string, message: string, fields?: Record<string, unknown>): void;
112
+ /** Says a `debug` entry */
95
113
  debug(category: string, message: string, fields?: Record<string, unknown>): void;
114
+ /** Says an `info` entry */
96
115
  info(category: string, message: string, fields?: Record<string, unknown>): void;
116
+ /** Says a `warn` entry */
97
117
  warn(category: string, message: string, fields?: Record<string, unknown>): void;
118
+ /** Says an `error` entry */
98
119
  error(category: string, message: string, fields?: Record<string, unknown>): void;
99
120
  /**
100
121
  * Takes an entry made elsewhere (a world's, by the client that shows it; a server's, sent to a tool) as if it was
@@ -125,9 +146,11 @@ export declare const rootConsole: {
125
146
  * @beta
126
147
  */
127
148
  export interface LogRing {
149
+ /** The sink to give to a logger (`Logger.to`) to have the ring keep what it is sent */
128
150
  sink: LogSink;
129
151
  /** The entries kept, the oldest first */
130
152
  entries(): readonly LogEntry[];
153
+ /** Empties the ring of the entries it keeps */
131
154
  clear(): void;
132
155
  /** Calls back for each entry as it comes. Returns what stops it */
133
156
  onEntry(listener: LogSink): () => void;
package/dist/log.js ADDED
@@ -0,0 +1,192 @@
1
+ //#region src/log.ts
2
+ /**
3
+ * The levels of log entries from least to most important, in the order `Logger.says` ranks them
4
+ *
5
+ * @beta
6
+ */
7
+ var LOG_LEVELS = [
8
+ "debug",
9
+ "info",
10
+ "warn",
11
+ "error"
12
+ ];
13
+ /**
14
+ * An error as plain data, for an entry's fields: what it is called, what it says, and where it was thrown
15
+ *
16
+ * @beta
17
+ */
18
+ function errorFields(error) {
19
+ if (error instanceof Error) return {
20
+ name: error.name,
21
+ message: error.message,
22
+ ...error.stack && { stack: error.stack }
23
+ };
24
+ return {
25
+ name: "Error",
26
+ message: String(error)
27
+ };
28
+ }
29
+ /**
30
+ * An entry as one line of text: `warn [server] tick 120 of td: a connection took in too slowly {bytes: 12}`
31
+ *
32
+ * @beta
33
+ */
34
+ function logLine(entry) {
35
+ const where = entry.game !== void 0 ? ` ${entry.tick !== void 0 ? `tick ${entry.tick} of ` : ""}${entry.game}:` : "";
36
+ const fields = entry.fields && Object.keys(entry.fields).length ? ` ${JSON.stringify(entry.fields)}` : "";
37
+ return `${entry.level} [${entry.category}]${where} ${entry.message}${fields}`;
38
+ }
39
+ /**
40
+ * Writes entries to the console, each by its level. An error among the fields is shown as the console shows errors
41
+ *
42
+ * @beta
43
+ */
44
+ var consoleSink = (entry) => {
45
+ const { error, ...fields } = entry.fields ?? {};
46
+ const line = logLine({
47
+ ...entry,
48
+ fields
49
+ });
50
+ const write = entry.level === "error" ? console.error : entry.level === "warn" ? console.warn : entry.level === "debug" ? console.debug : console.log;
51
+ const thrown = error && typeof error === "object" && "stack" in error ? error.stack : void 0;
52
+ if (thrown) write(line, `\n${thrown}`);
53
+ else write(line);
54
+ };
55
+ /**
56
+ * A logger: it takes entries of a level and above and sends them to its sinks and its parent
57
+ *
58
+ * @beta
59
+ */
60
+ var Logger = class Logger {
61
+ /** The least an entry must matter to be said: what is under it is dropped here, and goes no further */
62
+ level;
63
+ parent;
64
+ context;
65
+ sinks = /* @__PURE__ */ new Set();
66
+ constructor(options = {}) {
67
+ this.parent = options.parent;
68
+ this.level = options.level ?? "debug";
69
+ this.context = options.context;
70
+ }
71
+ /** Sends this logger's entries, and those of every logger under it, to a sink. Returns what stops it */
72
+ to(sink) {
73
+ this.sinks.add(sink);
74
+ return () => this.sinks.delete(sink);
75
+ }
76
+ /** A logger under this one: its entries carry what `context` adds, and are passed up here */
77
+ child(options = {}) {
78
+ return new Logger({
79
+ parent: this,
80
+ ...typeof options === "function" ? { context: options } : options
81
+ });
82
+ }
83
+ /** Whether an entry of this level would be said: for not putting together what nobody will read */
84
+ says(level) {
85
+ return LOG_LEVELS.indexOf(level) >= LOG_LEVELS.indexOf(this.level);
86
+ }
87
+ /** Says an entry of the level, the category and the message, with its fields when given; dropped when the logger does not say that level */
88
+ log(level, category, message, fields) {
89
+ if (!this.says(level)) return;
90
+ this.pass({
91
+ level,
92
+ category,
93
+ message,
94
+ ...fields && { fields },
95
+ time: Date.now()
96
+ });
97
+ }
98
+ /** Says a `debug` entry */
99
+ debug(category, message, fields) {
100
+ this.log("debug", category, message, fields);
101
+ }
102
+ /** Says an `info` entry */
103
+ info(category, message, fields) {
104
+ this.log("info", category, message, fields);
105
+ }
106
+ /** Says a `warn` entry */
107
+ warn(category, message, fields) {
108
+ this.log("warn", category, message, fields);
109
+ }
110
+ /** Says an `error` entry */
111
+ error(category, message, fields) {
112
+ this.log("error", category, message, fields);
113
+ }
114
+ /**
115
+ * Takes an entry made elsewhere (a world's, by the client that shows it; a server's, sent to a tool) as if it was
116
+ * said here: to this logger's sinks, and up. What it already says of its game and its tick is kept
117
+ */
118
+ pass(entry) {
119
+ if (!this.says(entry.level)) return;
120
+ const added = this.context?.();
121
+ const full = added ? {
122
+ ...entry,
123
+ ...entry.game === void 0 && added.game !== void 0 && { game: added.game },
124
+ ...entry.tick === void 0 && added.tick !== void 0 && { tick: added.tick },
125
+ ...added.fields && { fields: {
126
+ ...added.fields,
127
+ ...entry.fields
128
+ } }
129
+ } : entry;
130
+ for (const sink of this.sinks) try {
131
+ sink(full);
132
+ } catch {
133
+ this.sinks.delete(sink);
134
+ }
135
+ this.parent?.pass(full);
136
+ }
137
+ };
138
+ /**
139
+ * The logger everything is under when nothing else is said: a world's, a server's, the client's. It writes to the
140
+ * console (`rootConsole.stop()` ends that, for a page or a server that keeps its log elsewhere), from `info` up
141
+ *
142
+ * @beta
143
+ */
144
+ var rootLogger = new Logger({ level: "info" });
145
+ /**
146
+ * The root logger's writing to the console: stopped and started again
147
+ *
148
+ * @beta
149
+ */
150
+ var rootConsole = (() => {
151
+ let stop = rootLogger.to(consoleSink);
152
+ return {
153
+ get on() {
154
+ return stop !== null;
155
+ },
156
+ stop() {
157
+ stop?.();
158
+ stop = null;
159
+ },
160
+ start() {
161
+ stop ??= rootLogger.to(consoleSink);
162
+ }
163
+ };
164
+ })();
165
+ /**
166
+ * Keeps the last `size` entries (500 when left out) of whatever its sink is given
167
+ *
168
+ * @beta
169
+ */
170
+ function createLogRing(size = 500) {
171
+ let kept = [];
172
+ const listeners = /* @__PURE__ */ new Set();
173
+ return {
174
+ sink(entry) {
175
+ kept.push(entry);
176
+ if (kept.length > size) kept = kept.slice(kept.length - size);
177
+ for (const listener of listeners) listener(entry);
178
+ },
179
+ entries: () => kept,
180
+ clear() {
181
+ kept = [];
182
+ },
183
+ onEntry(listener) {
184
+ listeners.add(listener);
185
+ return () => listeners.delete(listener);
186
+ }
187
+ };
188
+ }
189
+ //#endregion
190
+ export { LOG_LEVELS, Logger, consoleSink, createLogRing, errorFields, logLine, rootConsole, rootLogger };
191
+
192
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","names":[],"sources":["../src/log.ts"],"sourcesContent":["/**\n * The log: what the engine, a server, the client and a game say about what they do, as entries of plain data that go\n * to whoever asked for them (a sink). A world has its own (`world.log`), whose entries say which game and which tick\n * they are from; every logger passes its entries up to the one it was made under, so that a sink at the top\n * (`rootLogger.to`, or a server's own) sees all of them.\n *\n * The log says, and nothing else: it reads nothing of the simulation's chances, changes nothing in a world, and is\n * not kept in a save. Two runs of a game are the same whether anyone listens or not.\n */\n\n/**\n * How much an entry matters: `debug` for whoever looks closely, `error` for what went wrong\n *\n * @beta\n */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\n/**\n * The levels of log entries from least to most important, in the order `Logger.says` ranks them\n *\n * @beta\n */\nexport const LOG_LEVELS: readonly LogLevel[] = ['debug', 'info', 'warn', 'error']\n\n/**\n * One thing said. Plain data: it crosses a session, a worker and a file as it is\n *\n * @beta\n */\nexport interface LogEntry {\n\t/** How much the entry matters */\n\tlevel: LogLevel\n\t/** What part said it: `server`, `game`, `assets`, a mod's own */\n\tcategory: string\n\t/** What was said, in words */\n\tmessage: string\n\t/** What it is about, by name: an entity's id, a player, a file, an error (`errorFields`) */\n\tfields?: Record<string, unknown>\n\t/** The game it was said in, and its tick, where it was said in one */\n\tgame?: string\n\t/** The tick of the game it was said in, where it was said in a world */\n\ttick?: number\n\t/** When, in milliseconds of the clock (`Date.now`). Never read by the simulation */\n\ttime: number\n}\n\n/**\n * Where entries go: the console, a file, a panel, a service\n *\n * @beta\n */\nexport type LogSink = (entry: LogEntry) => void\n\n/**\n * What a logger adds to each of its entries: the game and the tick of a world, the fields of a part\n *\n * @beta\n */\nexport type LogContext = () => Partial<Pick<LogEntry, 'game' | 'tick'>> & { fields?: Record<string, unknown> }\n\n/**\n * The options a `Logger` is made with\n *\n * @beta\n */\nexport interface LoggerOptions {\n\t/** The logger this one passes its entries up to. None for one that stands alone */\n\tparent?: Logger\n\t/** The least an entry must matter to be said here: everything when left out */\n\tlevel?: LogLevel\n\t/** What the logger adds to each entry it passes on: the game, the tick and the fields */\n\tcontext?: LogContext\n}\n\n/**\n * An error as plain data, for an entry's fields: what it is called, what it says, and where it was thrown\n *\n * @beta\n */\nexport function errorFields(error: unknown): { name: string; message: string; stack?: string } {\n\tif (error instanceof Error) return { name: error.name, message: error.message, ...(error.stack && { stack: error.stack }) }\n\treturn { name: 'Error', message: String(error) }\n}\n\n/**\n * An entry as one line of text: `warn [server] tick 120 of td: a connection took in too slowly {bytes: 12}`\n *\n * @beta\n */\nexport function logLine(entry: LogEntry): string {\n\tconst where = entry.game !== undefined ? ` ${entry.tick !== undefined ? `tick ${entry.tick} of ` : ''}${entry.game}:` : ''\n\tconst fields = entry.fields && Object.keys(entry.fields).length ? ` ${JSON.stringify(entry.fields)}` : ''\n\treturn `${entry.level} [${entry.category}]${where} ${entry.message}${fields}`\n}\n\n/**\n * Writes entries to the console, each by its level. An error among the fields is shown as the console shows errors\n *\n * @beta\n */\nexport const consoleSink: LogSink = (entry) => {\n\tconst { error, ...fields } = entry.fields ?? {}\n\tconst line = logLine({ ...entry, fields })\n\tconst write =\n\t\tentry.level === 'error' ? console.error : entry.level === 'warn' ? console.warn : entry.level === 'debug' ? console.debug : console.log\n\tconst thrown = error && typeof error === 'object' && 'stack' in error ? (error as { stack?: string }).stack : undefined\n\tif (thrown) write(line, `\\n${thrown}`)\n\telse write(line)\n}\n\n/**\n * A logger: it takes entries of a level and above and sends them to its sinks and its parent\n *\n * @beta\n */\nexport class Logger {\n\t/** The least an entry must matter to be said: what is under it is dropped here, and goes no further */\n\tlevel: LogLevel\n\tprivate readonly parent?: Logger\n\tprivate readonly context?: LogContext\n\tprivate readonly sinks = new Set<LogSink>()\n\n\tconstructor(options: LoggerOptions = {}) {\n\t\tthis.parent = options.parent\n\t\tthis.level = options.level ?? 'debug'\n\t\tthis.context = options.context\n\t}\n\n\t/** Sends this logger's entries, and those of every logger under it, to a sink. Returns what stops it */\n\tto(sink: LogSink): () => void {\n\t\tthis.sinks.add(sink)\n\t\treturn () => this.sinks.delete(sink)\n\t}\n\n\t/** A logger under this one: its entries carry what `context` adds, and are passed up here */\n\tchild(options: Omit<LoggerOptions, 'parent'> | LogContext = {}): Logger {\n\t\treturn new Logger({ parent: this, ...(typeof options === 'function' ? { context: options } : options) })\n\t}\n\n\t/** Whether an entry of this level would be said: for not putting together what nobody will read */\n\tsays(level: LogLevel): boolean {\n\t\treturn LOG_LEVELS.indexOf(level) >= LOG_LEVELS.indexOf(this.level)\n\t}\n\n\t/** Says an entry of the level, the category and the message, with its fields when given; dropped when the logger does not say that level */\n\tlog(level: LogLevel, category: string, message: string, fields?: Record<string, unknown>): void {\n\t\tif (!this.says(level)) return\n\t\tthis.pass({ level, category, message, ...(fields && { fields }), time: Date.now() })\n\t}\n\n\t/** Says a `debug` entry */\n\tdebug(category: string, message: string, fields?: Record<string, unknown>): void {\n\t\tthis.log('debug', category, message, fields)\n\t}\n\t/** Says an `info` entry */\n\tinfo(category: string, message: string, fields?: Record<string, unknown>): void {\n\t\tthis.log('info', category, message, fields)\n\t}\n\t/** Says a `warn` entry */\n\twarn(category: string, message: string, fields?: Record<string, unknown>): void {\n\t\tthis.log('warn', category, message, fields)\n\t}\n\t/** Says an `error` entry */\n\terror(category: string, message: string, fields?: Record<string, unknown>): void {\n\t\tthis.log('error', category, message, fields)\n\t}\n\n\t/**\n\t * Takes an entry made elsewhere (a world's, by the client that shows it; a server's, sent to a tool) as if it was\n\t * said here: to this logger's sinks, and up. What it already says of its game and its tick is kept\n\t */\n\tpass(entry: LogEntry): void {\n\t\tif (!this.says(entry.level)) return\n\t\tconst added = this.context?.()\n\t\tconst full: LogEntry = added\n\t\t\t? {\n\t\t\t\t\t...entry,\n\t\t\t\t\t...(entry.game === undefined && added.game !== undefined && { game: added.game }),\n\t\t\t\t\t...(entry.tick === undefined && added.tick !== undefined && { tick: added.tick }),\n\t\t\t\t\t...(added.fields && { fields: { ...added.fields, ...entry.fields } })\n\t\t\t\t}\n\t\t\t: entry\n\t\t// a sink that throws is not a reason for what was being done to stop: the log is never the cause of a failure\n\t\tfor (const sink of this.sinks) {\n\t\t\ttry {\n\t\t\t\tsink(full)\n\t\t\t} catch {\n\t\t\t\tthis.sinks.delete(sink)\n\t\t\t}\n\t\t}\n\t\tthis.parent?.pass(full)\n\t}\n}\n\n/**\n * The logger everything is under when nothing else is said: a world's, a server's, the client's. It writes to the\n * console (`rootConsole.stop()` ends that, for a page or a server that keeps its log elsewhere), from `info` up\n *\n * @beta\n */\nexport const rootLogger = new Logger({ level: 'info' })\n\n/**\n * The root logger's writing to the console: stopped and started again\n *\n * @beta\n */\nexport const rootConsole = (() => {\n\tlet stop: (() => void) | null = rootLogger.to(consoleSink)\n\treturn {\n\t\tget on(): boolean {\n\t\t\treturn stop !== null\n\t\t},\n\t\tstop(): void {\n\t\t\tstop?.()\n\t\t\tstop = null\n\t\t},\n\t\tstart(): void {\n\t\t\tstop ??= rootLogger.to(consoleSink)\n\t\t}\n\t}\n})()\n\n/**\n * The last entries, kept: what a console panel shows, and what goes with a report of a crash\n *\n * @beta\n */\nexport interface LogRing {\n\t/** The sink to give to a logger (`Logger.to`) to have the ring keep what it is sent */\n\tsink: LogSink\n\t/** The entries kept, the oldest first */\n\tentries(): readonly LogEntry[]\n\t/** Empties the ring of the entries it keeps */\n\tclear(): void\n\t/** Calls back for each entry as it comes. Returns what stops it */\n\tonEntry(listener: LogSink): () => void\n}\n\n/**\n * Keeps the last `size` entries (500 when left out) of whatever its sink is given\n *\n * @beta\n */\nexport function createLogRing(size = 500): LogRing {\n\tlet kept: LogEntry[] = []\n\tconst listeners = new Set<LogSink>()\n\treturn {\n\t\tsink(entry) {\n\t\t\tkept.push(entry)\n\t\t\tif (kept.length > size) kept = kept.slice(kept.length - size)\n\t\t\tfor (const listener of listeners) listener(entry)\n\t\t},\n\t\tentries: () => kept,\n\t\tclear() {\n\t\t\tkept = []\n\t\t},\n\t\tonEntry(listener) {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => listeners.delete(listener)\n\t\t}\n\t}\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type DamageType } from './defs';
1
+ import type { DamageType } from './defs';
2
2
  import type { Entity } from './entity';
3
3
  import type { GamePack } from './packs/pack';
4
4
  import type { World } from './world';
@@ -36,4 +36,4 @@ export declare function burnMana(world: World, target: Entity, amount: number, s
36
36
  *
37
37
  * @beta
38
38
  */
39
- export declare function withManaBurn(): GamePack;
39
+ export declare function manaBurnPack(): GamePack;