@v12-engine/engine 0.1.1 → 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/hooks.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import type { ChatAudience } from './talk';
2
- import type { AbilityDef, BuffDef, Cost, DamageType, StatChange, Stats, UnitTypeDef } from './defs';
2
+ import type { AbilityDef, BuffDef, Cost, DamageType, EffectDef, StatChange, Stats, UnitTypeDef } from './defs';
3
3
  import type { Camp } from './camps';
4
4
  import type { BuffInstance, Entity, EntityId, ItemInstance, Order, PlayerId } from './entity';
5
5
  import type { FormationDef } from './formation';
6
6
  import type { AreaDef } from './areas';
7
7
  import type { GameMap, MapCamp, MapObject, MapRegion } from './map';
8
8
  import type { Rect, Vec2 } from './math';
9
- import type { MessageRef } from './messages';
10
- import type { DeathCause, DeathReason, World } from './world';
9
+ import { type MessageRef } from './messages';
10
+ import type { DeathCause, DeathReason, Missile, World } from './world';
11
11
  /**
12
12
  * Hooks are how game modules and mods take part in what the engine does, while it does it: make an attack
13
13
  * hit harder, keep a unit from dying, pay for a kill, refuse an order. A hook is a list of handlers that run
@@ -17,39 +17,31 @@ import type { DeathCause, DeathReason, World } from './world';
17
17
  * happened, once the tick is over, and cannot change anything. Code that is part of the rules uses hooks.
18
18
  */
19
19
  /**
20
- * Damage about to be dealt, before armor and shields. Change `amount` or `type`, or set `cancelled`
20
+ * Damage about to be dealt, before armor and shields. Change `amount` or `type`, or `cancel()`
21
21
  *
22
22
  * @beta
23
23
  */
24
24
  export interface BeforeDamage {
25
+ /** The entity about to take the damage */
25
26
  readonly target: Entity;
27
+ /** The entity that deals it, left out when nothing does (the rules, a trap) */
26
28
  readonly source?: Entity;
29
+ /** The damage in hit points before armor and shields; a handler may change it */
27
30
  amount: number;
31
+ /** The damage type, which armor and resistance read; a handler may change it */
28
32
  type: DamageType;
29
33
  /** A basic attack, not an ability */
30
34
  readonly attack: boolean;
35
+ /** Whether the blow is a critical hit */
31
36
  readonly crit: boolean;
32
37
  /** The ability that deals it, by id. Left out for a basic attack */
33
38
  readonly ability?: string;
34
39
  /** Words of the game's own about it, see `DamageOptions.tags` */
35
40
  readonly tags?: readonly string[];
41
+ /** Whether a handler has called it off; set by `cancel()` */
36
42
  cancelled: boolean;
37
- }
38
- /**
39
- * What a hit is multiplied by for the attack's type against the target's armour type (`GameRules.combat.damageTable`),
40
- * before armour and shields: change `multiplier` to say otherwise. Asked only when the game has a table, or a hook
41
- * of its own for it
42
- */
43
- export interface DamageMultiplier {
44
- readonly target: Entity;
45
- readonly source?: Entity;
46
- /** The attack's type, as the attack or the ability said it (`AttackDef.attackType`, `DamageOptions.attackType`) */
47
- readonly attackType?: string;
48
- /** The target's armour type (`UnitTypeDef.armourType`) */
49
- readonly armourType?: string;
50
- /** A basic attack, not an ability */
51
- readonly attack: boolean;
52
- multiplier: number;
43
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
44
+ cancel(reason?: MessageRef): void;
53
45
  }
54
46
  /**
55
47
  * Damage that was dealt. The target may have died of it
@@ -57,36 +49,51 @@ export interface DamageMultiplier {
57
49
  * @beta
58
50
  */
59
51
  export interface AfterDamage {
52
+ /** The entity that took the damage */
60
53
  readonly target: Entity;
54
+ /** The entity that dealt it, left out when nothing did */
61
55
  readonly source?: Entity;
62
56
  /** What came off its health, after armor and shields */
63
57
  readonly dealt: number;
64
58
  /** The part of that it had health for: overkill left out */
65
59
  readonly taken: number;
60
+ /** The damage type it was dealt as */
66
61
  readonly type: DamageType;
62
+ /** Whether it was a basic attack, not an ability */
67
63
  readonly attack: boolean;
64
+ /** Whether the blow was a critical hit */
68
65
  readonly crit: boolean;
66
+ /** The ability that dealt it, by id; left out for a basic attack */
69
67
  readonly ability?: string;
68
+ /** Words of the game's own about it (`DamageOptions.tags`) */
70
69
  readonly tags?: readonly string[];
71
70
  }
72
71
  /**
73
- * Health about to be given back. Change `amount`, or set `cancelled`
72
+ * Health about to be given back. Change `amount`, or `cancel()`
74
73
  *
75
74
  * @beta
76
75
  */
77
76
  export interface BeforeHeal {
77
+ /** The entity about to be healed */
78
78
  readonly target: Entity;
79
+ /** The entity that heals it, left out when nothing does */
79
80
  readonly source?: Entity;
81
+ /** How much health is given; a handler may change it */
80
82
  amount: number;
83
+ /** Whether a handler has called it off; set by `cancel()` */
81
84
  cancelled: boolean;
85
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
86
+ cancel(reason?: MessageRef): void;
82
87
  }
83
88
  /**
84
- * Something is about to die. Set `prevented` to keep it alive: it is then up to the handler what health it has
89
+ * Something is about to die. `cancel()` keeps it alive: it is then up to the handler what health it has
85
90
  *
86
91
  * @beta
87
92
  */
88
93
  export interface BeforeDeath {
94
+ /** The entity about to die */
89
95
  readonly entity: Entity;
96
+ /** The entity that killed it, left out when nothing did */
90
97
  readonly killer?: Entity;
91
98
  /** An attack of the killer did it */
92
99
  readonly attack: boolean;
@@ -96,7 +103,10 @@ export interface BeforeDeath {
96
103
  readonly cause?: DeathCause;
97
104
  /** Why it dies (`DeathReason`): `damage`, or what the rules said (`cancelled`, `expired`, a game's own word) */
98
105
  readonly reason: DeathReason;
99
- prevented: boolean;
106
+ /** Whether a handler has called it off; set by `cancel()` */
107
+ cancelled: boolean;
108
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
109
+ cancel(reason?: MessageRef): void;
100
110
  }
101
111
  /**
102
112
  * Something dies. In `death` it still stands where it was; in `afterDeath` it is gone from the world
@@ -104,8 +114,11 @@ export interface BeforeDeath {
104
114
  * @beta
105
115
  */
106
116
  export interface Death {
117
+ /** The entity that died */
107
118
  readonly entity: Entity;
119
+ /** The entity that killed it, left out when nothing did */
108
120
  readonly killer?: Entity;
121
+ /** Whether an attack of the killer did it */
109
122
  readonly attack: boolean;
110
123
  /** The blow that did it, when it ran out of health: its damage type, the ability, how much too much */
111
124
  readonly cause?: DeathCause;
@@ -117,17 +130,26 @@ export interface Death {
117
130
  * (`SessionEvent` `death`) to show it its way (`UnitLook.death`). Nothing when left out
118
131
  */
119
132
  how?: string;
133
+ /**
134
+ * The buffs it carried as it fell, in `afterDeath` (where they are taken off it already): an `onKill`'s effects ask
135
+ * them of the one killed (B44). Left out when it carried none
136
+ */
137
+ readonly carried?: readonly BuffInstance[];
120
138
  }
121
139
  /**
122
- * An order about to be given to a unit. Set `rejected` to refuse it
140
+ * An order about to be given to a unit. Set `rejected` to refuse it. A cast that goes off at once, in the middle of
141
+ * what the unit is doing (a potion drunk on the way, a leap), is asked here too, as the cast order it stands for
123
142
  *
124
143
  * @beta
125
144
  */
126
145
  export interface BeforeOrder {
146
+ /** The entity the order is for */
127
147
  readonly entity: Entity;
148
+ /** The order about to be given */
128
149
  readonly order: Order;
129
150
  /** Added to the end of what it does, rather than in place of it */
130
151
  readonly queued: boolean;
152
+ /** Whether a handler refuses the order; it is then not given */
131
153
  rejected: boolean;
132
154
  }
133
155
  /**
@@ -141,12 +163,15 @@ export interface BeforeOrder {
141
163
  * @beta
142
164
  */
143
165
  export interface TargetScore {
166
+ /** The unit looking for a target */
144
167
  attacker: Entity;
168
+ /** The candidate it is scoring */
145
169
  target: Entity;
146
170
  /** Edge to edge */
147
171
  distance: number;
148
- /** Attackers like this one (its layer, its reach) the target has already, and how many it has room for (`GameRules.combat.engageRoom`) */
172
+ /** Attackers like this one (its layer, its reach) the target has already, and how many it has room for (`RuleSettings.combat.engageRoom`) */
149
173
  engaged: number;
174
+ /** How many attackers like it the target has already (`RuleSettings.combat.engageRoom`) */
150
175
  room: number;
151
176
  /** What the engine makes of it: things that fight back first, then the closest, and a full one only when nothing else is near */
152
177
  score: number;
@@ -161,30 +186,38 @@ export interface Approach {
161
186
  point: Vec2;
162
187
  }
163
188
  /**
164
- * An ally standing in a unit's way is asked to step aside, to `point` (see `GameRules.movement.makesWay`, `lookAhead`): change
189
+ * An ally standing in a unit's way is asked to step aside, to `point` (see `RuleSettings.movement.makesWay`, `lookAhead`): change
165
190
  * where it goes, or make it null to leave it standing. `mover` is on its way, heading the way of `direction`
166
191
  *
167
192
  * @beta
168
193
  */
169
194
  export interface MakeWay {
195
+ /** The unit that is on its way */
170
196
  readonly mover: Entity;
197
+ /** The ally standing in its way, asked to step aside */
171
198
  readonly other: Entity;
172
199
  /** Where the mover is heading, a unit long */
173
200
  readonly direction: Vec2;
201
+ /** Where the other unit goes; change it, or null to leave it standing */
174
202
  point: Vec2 | null;
175
203
  }
176
204
  /**
177
205
  * A unit is about to go round units standing in its way (`around`), by `point`, which is `longer` ground units more
178
- * than the `straight` way to the next corner of its path (see `GameRules.movement.goesAround`): change the point, or make it
206
+ * than the `straight` way to the next corner of its path (see `RuleSettings.movement.goesAround`): change the point, or make it
179
207
  * null to have it go straight through, asking them aside. Asked as it comes up to them: keep it cheap
180
208
  *
181
209
  * @beta
182
210
  */
183
211
  export interface Detour {
212
+ /** The unit about to go round the others */
184
213
  readonly entity: Entity;
214
+ /** The units standing in its way */
185
215
  readonly around: readonly Entity[];
216
+ /** The distance of the straight way to the next corner of its path, in ground units */
186
217
  readonly straight: number;
218
+ /** How many ground units longer the way by `point` is than the straight way */
187
219
  readonly longer: number;
220
+ /** The point it goes by round the others; change it, or null to go straight through */
188
221
  point: Vec2 | null;
189
222
  }
190
223
  /**
@@ -195,23 +228,32 @@ export interface Detour {
195
228
  * @beta
196
229
  */
197
230
  export interface Formation {
231
+ /** The units ordered, those that walk or those that fly, each laid out apart */
198
232
  readonly units: readonly Entity[];
233
+ /** The point they are ordered to */
199
234
  readonly target: Vec2;
235
+ /** The formation the units are laid out in */
200
236
  readonly formation: FormationDef;
237
+ /** Where each unit goes, by entity id; a handler may change, add or remove places */
201
238
  readonly points: Map<EntityId, Vec2>;
202
239
  }
203
240
  /**
204
- * Whether a structure may be placed. Set `allowed` to false, with a `reason` the player is told
241
+ * Whether a structure may be placed. `cancel(reason)` refuses it, with what the player is told
205
242
  *
206
243
  * @beta
207
244
  */
208
245
  export interface CanPlace {
246
+ /** The unit type of the structure to be placed */
209
247
  readonly def: UnitTypeDef;
210
248
  /** The ground it would cover */
211
249
  readonly site: Rect;
212
250
  /** Who would build it. Left out when the engine asks for itself */
213
251
  readonly player?: PlayerId;
214
- allowed: boolean;
252
+ /** Whether a handler has refused the placing; set by `cancel()` */
253
+ cancelled: boolean;
254
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
255
+ cancel(reason?: MessageRef): void;
256
+ /** What the player is told of why it was refused */
215
257
  reason?: MessageRef;
216
258
  }
217
259
  /**
@@ -222,17 +264,27 @@ export interface CanPlace {
222
264
  * @beta
223
265
  */
224
266
  export interface BeforeCast {
267
+ /** The unit that casts */
225
268
  readonly caster: Entity;
269
+ /** The ability being cast */
226
270
  readonly ability: AbilityDef;
271
+ /** The level of the ability it is cast at */
227
272
  readonly level: number;
273
+ /** The unit it is cast on, left out for a point or no target */
228
274
  readonly target?: Entity;
275
+ /** The point it is cast at (the target's place for a unit target) */
229
276
  readonly point: Vec2;
230
277
  /** What it is cast from, for an item's ability */
231
278
  readonly item?: ItemInstance;
279
+ /** The mana it costs; a handler may change it */
232
280
  manaCost: number;
233
281
  /** Seconds until it can be used again */
234
282
  cooldown: number;
283
+ /** Whether a handler has called the cast off; set by `cancel()` */
235
284
  cancelled: boolean;
285
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
286
+ cancel(reason?: MessageRef): void;
287
+ /** What the player is told of why it was called off */
236
288
  reason?: MessageRef;
237
289
  }
238
290
  /**
@@ -241,11 +293,17 @@ export interface BeforeCast {
241
293
  * @beta
242
294
  */
243
295
  export interface AfterCast {
296
+ /** The unit that cast */
244
297
  readonly caster: Entity;
298
+ /** The ability that went off */
245
299
  readonly ability: AbilityDef;
300
+ /** The level it was cast at */
246
301
  readonly level: number;
302
+ /** The unit it was cast on, left out for a point or no target */
247
303
  readonly target?: Entity;
304
+ /** The point it was cast at */
248
305
  readonly point: Vec2;
306
+ /** The item it was cast from, for an item's ability */
249
307
  readonly item?: ItemInstance;
250
308
  /** It went off charged, and spent the charge */
251
309
  readonly charged: boolean;
@@ -256,13 +314,20 @@ export interface AfterCast {
256
314
  * @beta
257
315
  */
258
316
  export interface BeforeBuff {
317
+ /** The unit about to get the buff */
259
318
  readonly target: Entity;
319
+ /** The buff to be put on */
260
320
  readonly buff: BuffDef;
321
+ /** The unit that puts it on, left out when nothing does */
261
322
  readonly source?: Entity;
323
+ /** The level the buff is put on at; a handler may change it */
262
324
  level: number;
263
325
  /** Seconds, after tenacity. Infinity for one that stays */
264
326
  duration: number;
327
+ /** Whether a handler has called it off; set by `cancel()` */
265
328
  cancelled: boolean;
329
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
330
+ cancel(reason?: MessageRef): void;
266
331
  }
267
332
  /**
268
333
  * A buff that came off: it ran out (`expired`), or was taken off. Not called for the buffs of something that dies
@@ -270,11 +335,18 @@ export interface BeforeBuff {
270
335
  * @beta
271
336
  */
272
337
  export interface BuffEnd {
338
+ /** The entity the buff was on */
273
339
  readonly entity: Entity;
340
+ /** The buff instance that ended, with its level and source */
274
341
  readonly buff: BuffInstance;
342
+ /** Whether the buff ran out its duration; false when it was taken off */
275
343
  readonly expired: boolean;
276
344
  }
277
- /** @beta */
345
+ /**
346
+ * One of the five things that are made: a unit trained, an upgrade researched, a building morphed, a hero revived, a structure put down
347
+ *
348
+ * @beta
349
+ */
278
350
  export type ProductionKind = 'unit' | 'upgrade' | 'morph' | 'revive' | 'structure';
279
351
  /**
280
352
  * Something about to be made: a unit trained, an upgrade researched, a building upgraded, a hero brought back,
@@ -283,16 +355,23 @@ export type ProductionKind = 'unit' | 'upgrade' | 'morph' | 'revive' | 'structur
283
355
  * @beta
284
356
  */
285
357
  export interface BeforeProduce {
358
+ /** The player the production is for */
286
359
  readonly player: PlayerId;
287
360
  /** The building it is made in, or the worker putting down a structure */
288
361
  readonly producer: Entity;
362
+ /** What is being made: `unit`, `upgrade`, `morph`, `revive` or `structure` */
289
363
  readonly kind: ProductionKind;
290
364
  /** Unit type, upgrade, the type a building becomes, the id of a hero, or a structure type */
291
365
  readonly id: string;
366
+ /** What it costs the player; a handler may change it */
292
367
  cost: Cost;
293
368
  /** Seconds it takes */
294
369
  time: number;
370
+ /** Whether a handler has called it off; set by `cancel()` */
295
371
  cancelled: boolean;
372
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
373
+ cancel(reason?: MessageRef): void;
374
+ /** What the player is told of why it was called off */
296
375
  reason?: MessageRef;
297
376
  }
298
377
  /** Every hook, and what its handlers get */
@@ -304,21 +383,26 @@ export interface BeforeProduce {
304
383
  * @beta
305
384
  */
306
385
  export interface Idle {
386
+ /** The unit with nothing to do */
307
387
  readonly entity: Entity;
388
+ /** Seconds the tick lasts */
308
389
  readonly dt: number;
309
390
  /** Whether it fights by itself: it has an attack and is not told to stand down. The engine only does that */
310
391
  readonly fights: boolean;
392
+ /** Whether a handler took over the idle unit; set it to stop the engine's own idle behaviour */
311
393
  handled: boolean;
312
394
  }
313
395
  /**
314
396
  * Whether an attacker may attack a target: what the engine makes of it (its attack's targets, whether they are
315
- * enemies) is in `allowed`, to change. A buff that lets a unit hit what flies; a truce. Asked very often, the same
397
+ * enemies) is in `cancelled`, to change. A buff that lets a unit hit what flies; a truce. Asked very often, the same
316
398
  * object handed out again and again: keep nothing of it
317
399
  */
318
400
  export interface CanAttack {
319
401
  attacker: Entity;
320
402
  target: Entity;
321
- allowed: boolean;
403
+ cancelled: boolean;
404
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
405
+ cancel(reason?: MessageRef): void;
322
406
  /**
323
407
  * Whether a player told the attacker to attack this one (an attack order): what a game lets of its own side, as a
324
408
  * deny (`denying`). Never when a unit picks a target by itself or fights back, so nothing turns on its own side
@@ -350,6 +434,8 @@ export interface BeforeAttack {
350
434
  /** How what it kills dies, for the screen (`AttackDef.how`, worked out for this blow): changed as the game likes */
351
435
  how?: string;
352
436
  cancelled: boolean;
437
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
438
+ cancel(reason?: MessageRef): void;
353
439
  }
354
440
  /**
355
441
  * The stats of an entity being added up, once what the engine knows of (its type, levels, research, items, buffs) is
@@ -363,8 +449,8 @@ export interface StatsHook {
363
449
  add(change: StatChange, times?: number): void;
364
450
  }
365
451
  /**
366
- * Whether an ability can be used now: what the engine makes of it (level, cooldown, mana, silence) in `refusal`, to
367
- * clear ("free while Clearcasting") or to set ("not while carrying the flag"). The cost itself is `beforeCast`'s: one
452
+ * Whether an ability can be used now: what the engine makes of it (level, cooldown, mana, silence) is `cancelled` with its
453
+ * `reason`: `cancelled = false` clears it ("free while Clearcasting"), `cancel(reason)` sets it ("not while carrying the flag"). The cost itself is `beforeCast`'s: one
368
454
  * that is let through for free sets its `manaCost` to 0 there too. The player's screen is told what this decided for
369
455
  * the abilities of their own units
370
456
  */
@@ -374,10 +460,13 @@ export interface CanCast {
374
460
  readonly level: number;
375
461
  /** What it is used from, for an item's ability */
376
462
  readonly item?: ItemInstance;
377
- refusal?: MessageRef;
463
+ reason?: MessageRef;
464
+ cancelled: boolean;
465
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
466
+ cancel(reason?: MessageRef): void;
378
467
  }
379
468
  /**
380
- * Whether an ability may be used on a target: what the engine makes of it (the ability's `targets`) in `refusal`, to
469
+ * Whether an ability may be used on a target: what the engine makes of it (the ability's `targets`) is `cancelled`, with its `reason`: `cancelled = false` to
381
470
  * clear ("can target allied buildings below half health") or to set. The screen only knows the declared targets: what
382
471
  * this changes, the simulation says when the order comes
383
472
  */
@@ -385,7 +474,66 @@ export interface CanTarget {
385
474
  readonly caster: Entity;
386
475
  readonly ability: AbilityDef;
387
476
  readonly target: Entity;
388
- refusal?: MessageRef;
477
+ reason?: MessageRef;
478
+ cancelled: boolean;
479
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
480
+ cancel(reason?: MessageRef): void;
481
+ }
482
+ /**
483
+ * An effect of an ability about to reach one target (`beforeEffect`): who it is from, the effect, whom it reaches, where
484
+ * it went off from. Cancelled, it does not reach that one, and only that one: the rest of an area are reached, a missile
485
+ * passes it by (it is in its `hit`, so it is not asked again). Asked wherever any effect reaches any target: who an
486
+ * effect applies to (`effectTargets`, so a `damage`, `heal`, `buff`, `knockback`, `pull`, `dispel`, a game's own that
487
+ * asks), a missile's hit (with `missile`: a shield that eats it takes it out with `removeMissile`), what a game's own
488
+ * effect asks (`mayReach`). Not for an aura's buff, which is kept up rather than landed. Asked only where a handler
489
+ * is there: a game without one pays nothing
490
+ *
491
+ * @beta
492
+ */
493
+ export interface BeforeEffect {
494
+ /** Whose the effect is */
495
+ readonly caster: Entity;
496
+ /** The ability the effect belongs to */
497
+ readonly ability: AbilityDef;
498
+ /** The level it was cast at */
499
+ readonly level: number;
500
+ /** The effect, as it runs (a chain lowered: `lowerChain`) */
501
+ readonly effect: EffectDef;
502
+ /** Whom it is about to reach */
503
+ readonly target: Entity;
504
+ /** What it went off from, when not the caster (`EffectContext.origin`) */
505
+ readonly origin?: Entity | Vec2;
506
+ /** Where it landed */
507
+ readonly point: Vec2;
508
+ /** The missile that reached the target, for a missile's hit */
509
+ readonly missile?: Missile;
510
+ /** Whether a handler has called it off for this target; set by `cancel()` */
511
+ cancelled: boolean;
512
+ /** It does not reach this target */
513
+ cancel(): void;
514
+ }
515
+ /**
516
+ * An effect of an ability has reached one target (`effectLanded`), after its handler ran: what a game does with each
517
+ * one an ability reached (a passive's stack for each hit, an execute below a threshold). For every target the
518
+ * handler's `effectTargets` gave; asked only where a handler is there
519
+ *
520
+ * @beta
521
+ */
522
+ export interface EffectLanded {
523
+ /** The unit that cast the ability the effect is from */
524
+ readonly caster: Entity;
525
+ /** The ability the effect is from */
526
+ readonly ability: AbilityDef;
527
+ /** The level the ability was cast at */
528
+ readonly level: number;
529
+ /** The effect that reached the target, as it runs */
530
+ readonly effect: EffectDef;
531
+ /** Whom it reached: dead now, maybe, of it */
532
+ readonly target: Entity;
533
+ /** What it went off from, when not the caster: an entity or a point */
534
+ readonly origin?: Entity | Vec2;
535
+ /** Where the effect landed */
536
+ readonly point: Vec2;
389
537
  }
390
538
  /**
391
539
  * Whether a team sees an entity of someone else's: what the fog and invisibility make of it in `visible`, to change.
@@ -399,7 +547,7 @@ export interface Visible {
399
547
  /**
400
548
  * Whether a player may make something, as far as what it requires goes: a unit, a level of research (`level`), what a
401
549
  * building upgrades to, a structure. What the engine makes of it (the finished buildings it requires: `missing`) is in
402
- * `refusal`, to clear or set: "needs Blacksmith upgrade 2", "needs a level 5 hero", "locked until the objective". The
550
+ * `cancelled` with its `reason`, to clear (`cancelled = false`) or set (`cancel(reason)`): "needs Blacksmith upgrade 2", "needs a level 5 hero", "locked until the objective". The
403
551
  * player's screen is told what this decided, for what they could make
404
552
  */
405
553
  export interface Requirement {
@@ -410,7 +558,10 @@ export interface Requirement {
410
558
  readonly level?: number;
411
559
  /** Required building types the player does not have */
412
560
  readonly missing: readonly string[];
413
- refusal?: MessageRef;
561
+ reason?: MessageRef;
562
+ cancelled: boolean;
563
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
564
+ cancel(reason?: MessageRef): void;
414
565
  }
415
566
  /**
416
567
  * Whether a player may make a unit type or research an upgrade at all, before what it requires (see `isAvailable`):
@@ -421,11 +572,15 @@ export interface Requirement {
421
572
  * @beta
422
573
  */
423
574
  export interface Available {
575
+ /** The player who would make it */
424
576
  readonly player: PlayerId;
577
+ /** Whether it is for a `unit` type or an `upgrade` */
425
578
  readonly kind: 'unit' | 'upgrade';
579
+ /** The unit type or upgrade being asked about */
426
580
  readonly id: string;
427
581
  /** The race the player plays, if the game has races */
428
582
  readonly race: string | undefined;
583
+ /** Whether the player may make it at all; the engine sets it from the race, a handler may change it */
429
584
  available: boolean;
430
585
  }
431
586
  /**
@@ -443,6 +598,8 @@ export interface BeforeTalk {
443
598
  readonly point?: Vec2;
444
599
  readonly pingKind?: string;
445
600
  cancelled: boolean;
601
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
602
+ cancel(reason?: MessageRef): void;
446
603
  }
447
604
  /**
448
605
  * Resources about to be given to an ally (see `give`): change how much arrives (`received`), or call it off with a
@@ -455,6 +612,8 @@ export interface BeforeTrade {
455
612
  readonly sent: number;
456
613
  received: number;
457
614
  cancelled: boolean;
615
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
616
+ cancel(reason?: MessageRef): void;
458
617
  reason?: MessageRef;
459
618
  }
460
619
  /**
@@ -463,8 +622,13 @@ export interface BeforeTrade {
463
622
  * @beta
464
623
  */
465
624
  export interface BeforeSurrender {
625
+ /** The player about to give up */
466
626
  readonly player: PlayerId;
627
+ /** Whether a handler has called it off; set by `cancel()` */
467
628
  cancelled: boolean;
629
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
630
+ cancel(reason?: MessageRef): void;
631
+ /** What the player is told of why they cannot give up */
468
632
  reason?: MessageRef;
469
633
  }
470
634
  /**
@@ -474,36 +638,50 @@ export interface BeforeSurrender {
474
638
  * @beta
475
639
  */
476
640
  export interface BeforePause {
641
+ /** The player asking for the pause */
477
642
  readonly player: PlayerId;
643
+ /** How many pauses the player has left before this one */
478
644
  readonly left: number;
645
+ /** How long the pause lasts at most, in seconds; a handler may change it */
479
646
  seconds: number;
647
+ /** Whether a handler has called it off; set by `cancel()` */
480
648
  cancelled: boolean;
649
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
650
+ cancel(reason?: MessageRef): void;
651
+ /** What the player is told of why the pause was refused */
481
652
  reason?: MessageRef;
482
653
  }
483
654
  /**
484
655
  * A player's cap of a pool of supply, once what their buildings provide is added up (see the supply system): change
485
- * `cap` (a starting amount, an upgrade, a rule of the game's own). The game's most (`GameRules.supply.max`, a pool's
656
+ * `cap` (a starting amount, an upgrade, a rule of the game's own). The game's most (`RuleSettings.supply.max`, a pool's
486
657
  * `max`) still holds after
487
658
  *
488
659
  * @beta
489
660
  */
490
661
  export interface SupplyCap {
662
+ /** The player whose supply cap it is */
491
663
  readonly player: PlayerId;
492
- /** `supply` for the one there always is, or the name of one of the game's own (`GameRules.supply.pools`) */
664
+ /** `supply` for the one there always is, or the name of one of the game's own (`RuleSettings.supply.pools`) */
493
665
  readonly pool: string;
666
+ /** The cap of the pool in supply points, once buildings are added up; a handler may change it */
494
667
  cap: number;
495
668
  }
496
669
  /**
497
- * Whether a worker may gather from a resource: by default, a resource of a kind it gathers (`harvester.kinds`). Refuse
670
+ * Whether a worker may gather from a resource: by default, a resource of a kind it gathers (`harvester.ids`). Refuse
498
671
  * it for a game's own rule: a mine only its owner's cursed mine stands on, a tree of a sacred grove. Asked when it is
499
672
  * told to, and of every resource it would go on to by itself
500
673
  *
501
674
  * @beta
502
675
  */
503
676
  export interface CanHarvest {
677
+ /** The worker that would gather */
504
678
  readonly worker: Entity;
679
+ /** The resource entity it would gather from */
505
680
  readonly source: Entity;
506
- allowed: boolean;
681
+ /** Whether a handler has refused it; set by `cancel()` */
682
+ cancelled: boolean;
683
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
684
+ cancel(reason?: MessageRef): void;
507
685
  /** What the player is told when it is refused */
508
686
  reason?: MessageRef;
509
687
  }
@@ -514,6 +692,8 @@ export interface BeforeDeposit {
514
692
  readonly kind: string;
515
693
  amount: number;
516
694
  cancelled: boolean;
695
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
696
+ cancel(reason?: MessageRef): void;
517
697
  }
518
698
  /** An item about to be bought at a shop: change what it costs, or call it off with a `reason` */
519
699
  export interface BeforeBuy {
@@ -522,6 +702,8 @@ export interface BeforeBuy {
522
702
  readonly item: string;
523
703
  cost: Cost;
524
704
  cancelled: boolean;
705
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
706
+ cancel(reason?: MessageRef): void;
525
707
  reason?: MessageRef;
526
708
  }
527
709
  /** An item about to be picked up off the ground (`ground` its id there): call it off with a `reason` */
@@ -530,6 +712,8 @@ export interface BeforePickUp {
530
712
  readonly item: string;
531
713
  readonly ground: number;
532
714
  cancelled: boolean;
715
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
716
+ cancel(reason?: MessageRef): void;
533
717
  reason?: MessageRef;
534
718
  }
535
719
  /** An item about to be put down: call it off with a `reason` (a cursed blade) */
@@ -537,6 +721,8 @@ export interface BeforeDrop {
537
721
  readonly entity: Entity;
538
722
  readonly item: ItemInstance;
539
723
  cancelled: boolean;
724
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
725
+ cancel(reason?: MessageRef): void;
540
726
  reason?: MessageRef;
541
727
  }
542
728
  /** Experience about to go to a hero: change `amount` (the killer gets more), or make it 0. `from` is what was killed, when that is where it comes from */
@@ -545,11 +731,13 @@ export interface BeforeXp {
545
731
  readonly from?: Entity;
546
732
  amount: number;
547
733
  }
548
- /** Whether a hero may put a point into an ability: what the engine makes of it in `allowed`, to change. The screen hears of it with what the hero can learn */
734
+ /** Whether a hero may put a point into an ability: what the engine makes of it in `cancelled`, to change. The screen hears of it with what the hero can learn */
549
735
  export interface CanLearn {
550
736
  readonly hero: Entity;
551
737
  readonly ability: string;
552
- allowed: boolean;
738
+ cancelled: boolean;
739
+ /** Stops it. The reason is what the player is told, where this hook tells them (`reason`) */
740
+ cancel(reason?: MessageRef): void;
553
741
  }
554
742
  /** Something was made: a unit trained (`unit`), research done (`level`), a building upgraded, a hero brought back */
555
743
  export interface Produced {
@@ -579,6 +767,7 @@ export interface Morphed {
579
767
  * @beta
580
768
  */
581
769
  export interface FromMapObject {
770
+ /** The entity that was placed on the map and has become this entity */
582
771
  readonly entity: Entity;
583
772
  /** As the map has it: where, whose, its name */
584
773
  readonly object: Readonly<MapObject>;
@@ -591,14 +780,16 @@ export interface FromMapObject {
591
780
  * @beta
592
781
  */
593
782
  export interface FromMapCamp {
783
+ /** The camp in the world that the map's camp has become */
594
784
  readonly camp: Camp;
785
+ /** The camp as the map has it: where, its units */
595
786
  readonly from: Readonly<MapCamp>;
596
787
  /** The game's own fields for camps, see `FromMapObject.data` */
597
788
  readonly data: Readonly<Record<string, unknown>>;
598
789
  }
599
790
  /**
600
791
  * Something that has died, before it leaves the world: whether it stays (`stays`), out of the world, in the world's
601
- * entities, to be brought back. No when nothing says so; the heroes pack says yes for a hero (`withHeroes`), and a
792
+ * entities, to be brought back. No when nothing says so; the heroes pack says yes for a hero (`heroesPack`), and a
602
793
  * handler after it (a higher `priority`) can say no for a game where heroes fall for good
603
794
  *
604
795
  * @beta
@@ -617,7 +808,9 @@ export interface FallenHero {
617
808
  * @beta
618
809
  */
619
810
  export interface FromMapRegion {
811
+ /** The area of the world that the map's region has become */
620
812
  readonly area: AreaDef;
813
+ /** The region as the map has it: its name and shape */
621
814
  readonly region: Readonly<MapRegion>;
622
815
  /** The game's own fields for regions, see `FromMapObject.data` */
623
816
  readonly data: Readonly<Record<string, unknown>>;
@@ -633,14 +826,23 @@ export interface FromMap {
633
826
  /** The map it was made from */
634
827
  readonly map: Readonly<GameMap>;
635
828
  }
636
- /** @beta */
829
+ /**
830
+ * The map of hooks the engine runs, by name, to the event each one hands its handlers
831
+ *
832
+ * @beta
833
+ */
637
834
  export interface HookEvents {
835
+ /** Its handlers get a `BeforeDamage`: damage about to be dealt, before armor and shields. Change `amount` or `type`, or `cancel()` */
638
836
  beforeDamage: BeforeDamage;
639
- damageMultiplier: DamageMultiplier;
837
+ /** Its handlers get a `AfterDamage`: damage that was dealt. The target may have died of it */
640
838
  afterDamage: AfterDamage;
839
+ /** Its handlers get a `BeforeHeal`: health about to be given back. Change `amount`, or `cancel()` */
641
840
  beforeHeal: BeforeHeal;
841
+ /** Its handlers get a `BeforeDeath`: something is about to die. `cancel()` keeps it alive: it is then up to the handler what health it has */
642
842
  beforeDeath: BeforeDeath;
843
+ /** Its handlers get a `Death`: something dies. In `death` it still stands where it was; in `afterDeath` it is gone from the world */
643
844
  death: Death;
845
+ /** Its handlers get a `Death`: something dies. In `death` it still stands where it was; in `afterDeath` it is gone from the world */
644
846
  afterDeath: Death;
645
847
  /** Whether what died stays in the world's entities, out of the world, to be brought back (`FallenHero`). @beta */
646
848
  fallenHero: FallenHero;
@@ -655,39 +857,77 @@ export interface HookEvents {
655
857
  spawn: Entity;
656
858
  /** Something left the world for good, at the end of the tick it died in */
657
859
  remove: Entity;
860
+ /** Its handlers get a `BeforeOrder`: an order about to be given to a unit. Set `rejected` to refuse it */
658
861
  beforeOrder: BeforeOrder;
862
+ /** Its handlers get a `TargetScore`: how much a unit wants to attack something, as it looks for a target by itself. Higher is picked first: raise or lower `score`, or make it `-Infinity` to pass the target over. Towers... */
659
863
  targetScore: TargetScore;
864
+ /** Its handlers get a `Approach`: where an attacker goes to fight a target from: its spot around it (see `engagement.ts`), or the target itself, in `point`, to change. A flank for cavalry, behind for assassins. Asked... */
660
865
  approach: Approach;
866
+ /** Its handlers get a `MakeWay`: an ally standing in a unit's way is asked to step aside, to `point` (see `RuleSettings.movement.makesWay`, `lookAhead`): change where it goes, or make it null to leave it standing.... */
661
867
  makeWay: MakeWay;
868
+ /** Its handlers get a `Detour`: a unit is about to go round units standing in its way (`around`), by `point`, which is `longer` ground units more than the `straight` way to the next corner of its path (see `RuleSettings.movement.goesAround`):... */
662
869
  detour: Detour;
870
+ /** Its handlers get a `Formation`: units ordered to a point together have their places in a formation worked out (`FormationDef`, `formationPoints`): change any in `points`, by the unit's id, or add or remove some. `units`... */
663
871
  formation: Formation;
872
+ /** Its handlers get a `CanPlace`: whether a structure may be placed. `cancel(reason)` refuses it, with what the player is told */
664
873
  canPlace: CanPlace;
874
+ /** Its handlers get a `BeforeCast`: an ability about to go off, before it is paid for. Change what it costs, or call it off with a `reason`. Whether the caster has the mana was already checked against the ability's own... */
665
875
  beforeCast: BeforeCast;
876
+ /** Its handlers get a `AfterCast`: an ability that went off */
666
877
  afterCast: AfterCast;
878
+ /** Its handlers get a `BeforeBuff`: a buff about to be put on, or put on again. Change how long it lasts or how strong it is, or call it off (immunity) */
667
879
  beforeBuff: BeforeBuff;
880
+ /** Its handlers get a `BuffEnd`: a buff that came off: it ran out (`expired`), or was taken off. Not called for the buffs of something that dies */
668
881
  buffEnd: BuffEnd;
882
+ /** Its handlers get a `BeforeProduce`: something about to be made: a unit trained, an upgrade researched, a building upgraded, a hero brought back, a structure put down by a worker. Change what it costs and how long it takes,... */
669
883
  beforeProduce: BeforeProduce;
884
+ /** Its handlers get a `Idle`: a unit with nothing to do, this tick: no orders. Set `handled` and do what it does instead of what idle units do (fight back, go for enemies that come close, which is only for those... */
670
885
  idle: Idle;
886
+ /** Its handlers get a `CanAttack`: whether an attacker may attack a target: what the engine makes of it (its attack's targets, whether they are enemies) is in `cancelled`, to change. A buff that lets a unit hit what... */
671
887
  canAttack: CanAttack;
888
+ /** Its handlers get a `BeforeAttack`: an attack going off, as the engine has it: change what it does, or call it off. `target` is left out for an attack at the ground. `splash` is the radius of an attack that hits an area;... */
672
889
  beforeAttack: BeforeAttack;
890
+ /** Its handlers get a `StatsHook`: the stats of an entity being added up, once what the engine knows of (its type, levels, research, items, buffs) is in: `add` more, as a stat change (`{ stats: { armor: 2 } }`, `{ percent:... */
673
891
  stats: StatsHook;
892
+ /** Its handlers get a `CanCast`: whether an ability can be used now: what the engine makes of it (level, cooldown, mana, silence) is `cancelled` with its `reason`: `cancelled = false` clears it ("free while Clearcasting"),... */
674
893
  canCast: CanCast;
894
+ /** Its handlers get a `CanTarget`: whether an ability may be used on a target: what the engine makes of it (the ability's `targets`) is `cancelled`, with its `reason`: `cancelled = false` to clear ("can target allied... */
675
895
  canTarget: CanTarget;
896
+ /** An effect about to reach one target: cancel it for that one (`BeforeEffect`). @beta */
897
+ beforeEffect: BeforeEffect;
898
+ /** An effect reached one target, its handler done (`EffectLanded`). @beta */
899
+ effectLanded: EffectLanded;
900
+ /** Its handlers get a `Visible`: whether a team sees an entity of someone else's: what the fog and invisibility make of it in `visible`, to change. Units in brush seen only from up close; a watchtower. Asked very often: keep it cheap */
676
901
  visible: Visible;
902
+ /** Its handlers get a `Requirement`: whether a player may make something, as far as what it requires goes: a unit, a level of research (`level`), what a building upgrades to, a structure. What the engine makes of it (the... */
677
903
  requirement: Requirement;
904
+ /** Its handlers get a `Available`: whether a player may make a unit type or research an upgrade at all, before what it requires (see `isAvailable`): by default (`available`), what is of no race or of theirs (`race`).... */
678
905
  available: Available;
906
+ /** Its handlers get a `BeforeDeposit`: resources a worker hands in: change `amount` (more from mines near the keep), or call it off */
679
907
  beforeDeposit: BeforeDeposit;
908
+ /** Its handlers get a `CanHarvest`: whether a worker may gather from a resource: by default, a resource of a kind it gathers (`harvester.ids`). Refuse it for a game's own rule: a mine only its owner's cursed mine stands... */
680
909
  canHarvest: CanHarvest;
910
+ /** Its handlers get a `BeforeTalk`: a player about to ping the map or say a line (see `ping`, `chat`): change the words (`text`) or who hears them (`to`), or call it off: a muted player, a word filter, no talking in a... */
681
911
  beforeTalk: BeforeTalk;
912
+ /** Its handlers get a `BeforeTrade`: resources about to be given to an ally (see `give`): change how much arrives (`received`), or call it off with a `reason`: no trading in the first minutes, a cap on what goes to one player */
682
913
  beforeTrade: BeforeTrade;
914
+ /** Its handlers get a `BeforeSurrender`: a player is about to give up (see `surrender`): call it off with a `reason`, as a game that does not let them before a time */
683
915
  beforeSurrender: BeforeSurrender;
916
+ /** Its handlers get a `SupplyCap`: a player's cap of a pool of supply, once what their buildings provide is added up (see the supply system): change `cap` (a starting amount, an upgrade, a rule of the game's own). The... */
684
917
  supplyCap: SupplyCap;
918
+ /** Its handlers get a `BeforePause`: a player asks for a pause (see `askPause`): how many they have left before this one (`left`), and how long it lasts at most (`seconds`, which can be changed); call it off with a `reason` */
685
919
  beforePause: BeforePause;
920
+ /** Its handlers get a `BeforeBuy`: an item about to be bought at a shop: change what it costs, or call it off with a `reason` */
686
921
  beforeBuy: BeforeBuy;
922
+ /** Its handlers get a `BeforePickUp`: an item about to be picked up off the ground (`ground` its id there): call it off with a `reason` */
687
923
  beforePickUp: BeforePickUp;
924
+ /** Its handlers get a `BeforeDrop`: an item about to be put down: call it off with a `reason` (a cursed blade) */
688
925
  beforeDrop: BeforeDrop;
926
+ /** Its handlers get a `BeforeXp`: experience about to go to a hero: change `amount` (the killer gets more), or make it 0. `from` is what was killed, when that is where it comes from */
689
927
  beforeXp: BeforeXp;
928
+ /** Its handlers get a `CanLearn`: whether a hero may put a point into an ability: what the engine makes of it in `cancelled`, to change. The screen hears of it with what the hero can learn */
690
929
  canLearn: CanLearn;
930
+ /** Its handlers get a `Produced`: something was made: a unit trained (`unit`), research done (`level`), a building upgraded, a hero brought back */
691
931
  produced: Produced;
692
932
  /** Something placed on a map has become an entity, as the world is made from the map: what the game does with its own fields */
693
933
  mapObject: FromMapObject;
@@ -698,9 +938,17 @@ export interface HookEvents {
698
938
  /** The world made from a map is all there, about to start (`FromMap`): what a pack starts from the map's own data. @beta */
699
939
  mapStart: FromMap;
700
940
  }
701
- /** @beta */
941
+ /**
942
+ * The name of one of the engine's hooks, a key of `HookEvents`
943
+ *
944
+ * @beta
945
+ */
702
946
  export type HookName = keyof HookEvents;
703
- /** @beta */
947
+ /**
948
+ * The function a handler for the hook `K` is, taking the world and the hook's event
949
+ *
950
+ * @beta
951
+ */
704
952
  export type HookHandler<K extends HookName> = (world: World, event: HookEvents[K]) => void;
705
953
  /**
706
954
  * A hook of a game's own, made with `defineHookType`: a moment of its rules others can take part in, the way the
@@ -709,19 +957,22 @@ export type HookHandler<K extends HookName> = (world: World, event: HookEvents[K
709
957
  * @beta
710
958
  */
711
959
  export interface HookKey<T> {
960
+ /** The hook's id, shared by every game, which `Hooks` lists it by */
712
961
  readonly id: string;
713
962
  /** Only there for the type of the event */
714
963
  readonly event?: T;
715
964
  }
716
965
  /**
717
- * A hook of a game's own: `const lifeLost = defineHookType<{ invader: Entity; lives: number; cancelled: boolean }>('td.lifeLost')`.
966
+ * A hook of a game's own: `const lifeLost = defineHookType<{ invader: Entity; lives: number } & Cancellable>({ id: 'td.lifeLost' })`.
718
967
  * The game runs it where the moment is (`world.hooks.run(lifeLost, { ... })`) and reads back what the handlers made
719
968
  * of the event; handlers are written with `defineHook({ hook: lifeLost, ... })`, by the game or by a mod on it.
720
969
  * Ids are shared by every game: give them a prefix of the game's
721
970
  *
722
971
  * @beta
723
972
  */
724
- export declare function defineHookType<T>(id: string): HookKey<T>;
973
+ export declare function defineHookType<T>(def: {
974
+ id: string;
975
+ }): HookKey<T>;
725
976
  /**
726
977
  * A hook: one of the engine's by name, or a game's own
727
978
  *
@@ -729,10 +980,35 @@ export declare function defineHookType<T>(id: string): HookKey<T>;
729
980
  */
730
981
  export type AnyHook = HookName | HookKey<any>;
731
982
  /**
732
- * A handler and the hook it is for. Its `id` is how others take it out or put something in its place
983
+ * What a hook that may be stopped carries: `cancel(reason?)` stops it, `cancelled` says whether it was, and `reason` is
984
+ * what the player is told, for the hooks that tell them (`canPlace`, `canHarvest`, `canCast`, `canTarget`,
985
+ * `requirement`). The engine's own refusal comes in as `cancelled` already true, with its `reason`: `cancelled = false`
986
+ * lets it through
733
987
  *
734
988
  * @beta
735
989
  */
990
+ export interface Cancellable {
991
+ /** Whether a handler has stopped the event; `cancel()` sets it */
992
+ cancelled: boolean;
993
+ /** What the player is told of why it was stopped, for the hooks that tell them */
994
+ reason?: MessageRef;
995
+ /** Stops the event, with the `reason` the player is told when given */
996
+ cancel(reason?: MessageRef): void;
997
+ }
998
+ /** An event of a hook that may be stopped, as whoever runs the hook puts it together: `cancel` is given as it runs (`Hooks.run`) @beta */
999
+ export type Uncancelled<T> = T extends Cancellable ? Omit<T, 'cancel'> & {
1000
+ cancel?: Cancellable['cancel'];
1001
+ } : T;
1002
+ /** What a hook that tells the player refuses with: its reason, or the engine's word where a handler gave none; nothing where it lets through @beta */
1003
+ export declare function refusalOf(event: {
1004
+ cancelled: boolean;
1005
+ reason?: MessageRef;
1006
+ }): MessageRef | undefined;
1007
+ /**
1008
+ * A handler and the hook it is for. Its `id` is how others take it out or put something in its place
1009
+ *
1010
+ * @public
1011
+ */
736
1012
  export type HookDef = {
737
1013
  hook: AnyHook;
738
1014
  id: string;
@@ -743,7 +1019,7 @@ export type HookDef = {
743
1019
  /**
744
1020
  * Typed help for writing a hook: `defineHook({ hook: 'death', id: 'bounty', run(world, { entity }) { ... } })`
745
1021
  *
746
- * @beta
1022
+ * @public
747
1023
  */
748
1024
  export declare function defineHook<K extends HookName>(def: {
749
1025
  hook: K;
@@ -751,7 +1027,11 @@ export declare function defineHook<K extends HookName>(def: {
751
1027
  priority?: number;
752
1028
  run: HookHandler<K>;
753
1029
  }): HookDef;
754
- /** @beta */
1030
+ /**
1031
+ * Typed help for a handler of a game's own hook (`HookKey`), taking the world and the hook's event
1032
+ *
1033
+ * @public
1034
+ */
755
1035
  export declare function defineHook<T>(def: {
756
1036
  hook: HookKey<T>;
757
1037
  id: string;
@@ -769,12 +1049,14 @@ export declare class Hooks {
769
1049
  constructor(world: World);
770
1050
  /** Adds a handler. One with the same id on the same hook is replaced */
771
1051
  add(def: HookDef): void;
1052
+ /** Takes the handler with the id off the hook; nothing happens when there is none */
772
1053
  remove(hook: AnyHook, id: string): void;
773
1054
  /** Whether a hook has any handlers. For hooks run very often, to not even put the event together when nobody listens */
774
1055
  has(hook: AnyHook): boolean;
775
1056
  /** Ids of the handlers of a hook, in the order they run */
776
1057
  handlers(hook: AnyHook): string[];
777
1058
  /** Runs the handlers of a hook on the event, in order, and hands the event back for the caller to read */
778
- run<K extends HookName>(hook: K, event: HookEvents[K]): HookEvents[K];
779
- run<T>(hook: HookKey<T>, event: T): T;
1059
+ run<K extends HookName>(hook: K, event: Uncancelled<HookEvents[K]>): HookEvents[K];
1060
+ /** Runs the handlers of a game's own hook on the event in order and returns the event */
1061
+ run<T>(hook: HookKey<T>, event: Uncancelled<T>): T;
780
1062
  }