@v12-engine/engine 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
@@ -0,0 +1,443 @@
1
+ import { at } from "../defs.js";
2
+ import { buffApplied, buffRemoved } from "../engineEvents.js";
3
+ import { replicateEvent } from "../replication.js";
4
+ import { scaled } from "./scaled.js";
5
+ import { buffEffects } from "./land.js";
6
+ //#region src/abilities/buffs.ts
7
+ /**
8
+ * Auras keep their buff alive by renewing it. It wears off this long after leaving the aura
9
+ *
10
+ * @beta
11
+ */
12
+ var AURA_LINGER = .75;
13
+ /**
14
+ * The flags of buffs that the questions below ask about, one bit each (`buffFlags`). A bit says that a buff on the
15
+ * entity declares the flag, as it is or as a function: maybe, ask the buffs. No bit, and none of them holds it
16
+ *
17
+ * @internal
18
+ */
19
+ var BuffFlag = {
20
+ stun: 1,
21
+ root: 2,
22
+ disarm: 4,
23
+ invulnerable: 8,
24
+ untargetable: 16,
25
+ phasing: 32,
26
+ invisible: 64,
27
+ grounds: 128,
28
+ unstoppable: 256,
29
+ spellImmune: 512,
30
+ control: 1024,
31
+ grounded: 2048,
32
+ silence: 4096
33
+ };
34
+ /** The flags a buff declares, whatever it makes of them for its carrier */
35
+ function flagsOf(def) {
36
+ return (def.stun || def.airborne || def.suppress ? BuffFlag.stun : 0) | (def.root ? BuffFlag.root : 0) | (def.disarm ? BuffFlag.disarm : 0) | (def.invulnerable ? BuffFlag.invulnerable : 0) | (def.untargetable ? BuffFlag.untargetable : 0) | (def.phasing ? BuffFlag.phasing : 0) | (def.invisible ? BuffFlag.invisible : 0) | (def.grounds ? BuffFlag.grounds : 0) | (def.unstoppable ? BuffFlag.unstoppable : 0) | (def.spellImmune ? BuffFlag.spellImmune : 0) | (def.control ? BuffFlag.control : 0) | (def.grounded ? BuffFlag.grounded : 0) | (def.silence ? BuffFlag.silence : 0);
37
+ }
38
+ /**
39
+ * The flags the buffs on an entity declare (`BuffFlag`), all of them together. Whether a unit is stunned, rooted or
40
+ * invisible is asked of every unit several times a tick, and almost always none of its buffs says anything of it: one
41
+ * bit answers that, and only a unit whose buffs do declare it goes through them. Worked out again after its buffs
42
+ * changed (the entity's writes of them put it back) or the buff definitions did (`world.redefine`, a hot reload)
43
+ *
44
+ * @internal
45
+ */
46
+ function buffFlags(world, entity) {
47
+ const version = world.registry.buffs.version;
48
+ if (entity.buffFlags >= 0 && entity.buffFlagsOf === version) return entity.buffFlags;
49
+ let flags = 0;
50
+ for (const instance of entity.buffs) flags |= flagsOf(world.registry.buff(instance.id));
51
+ entity.buffFlags = flags;
52
+ entity.buffFlagsOf = version;
53
+ return flags;
54
+ }
55
+ /** Whether a buff on an entity declares a flag (`BuffFlag`): where none does, none holds it, and the buffs need no asking */
56
+ var declares = (world, entity, flag) => entity.buffs.length > 0 && (buffFlags(world, entity) & flag) !== 0;
57
+ /**
58
+ * Whether `entity` has a buff with the id `buff` on it now
59
+ *
60
+ * @beta
61
+ */
62
+ function hasBuff(entity, buff) {
63
+ return entity.buffs.some((instance) => instance.id === buff);
64
+ }
65
+ /**
66
+ * Puts a buff on an entity. Buffs do not stack with themselves: a second one of the
67
+ * same kind renews the first when it lasts longer.
68
+ *
69
+ * @public
70
+ */
71
+ function applyBuff(world, target, buff, duration, source, level = 1, ability) {
72
+ if (!target.alive) return;
73
+ const def = world.registry.buff(buff);
74
+ if (def.harmful && target.buffs.length && holdsUp(def) && isUnstoppable(world, target)) return;
75
+ let remaining = duration ?? def.duration ?? Infinity;
76
+ if (world.hooks.has("beforeBuff")) {
77
+ const before = world.hooks.run("beforeBuff", {
78
+ target,
79
+ buff: def,
80
+ source,
81
+ level,
82
+ duration: remaining,
83
+ cancelled: false
84
+ });
85
+ if (before.cancelled) return;
86
+ level = before.level;
87
+ remaining = before.duration;
88
+ }
89
+ const shield = def.shield === void 0 ? void 0 : fullShield(world, def, source ?? target, level);
90
+ const from = source?.id ?? 0;
91
+ const policy = def.stacking ?? "strongest";
92
+ const existing = policy === "independent" ? void 0 : target.buffs.find((instance) => instance.id === buff && (policy !== "perSource" || instance.source === from));
93
+ if (existing) {
94
+ const decision = typeof policy === "function" ? policy(existing, {
95
+ level,
96
+ duration: remaining,
97
+ source: from
98
+ }) : policy === "refresh" ? "replace" : level > existing.level ? "replace" : level === existing.level && remaining > existing.remaining ? "renew" : "keep";
99
+ if (decision === "keep") return;
100
+ const previousLevel = existing.level;
101
+ if (existing.kept) delete existing.kept;
102
+ if (decision === "replace") {
103
+ Object.assign(existing, {
104
+ level,
105
+ remaining,
106
+ source: from
107
+ });
108
+ if (shield !== void 0) existing.shield = shield;
109
+ if (ability !== void 0) existing.ability = ability;
110
+ } else if (decision === "renew") {
111
+ existing.remaining = remaining;
112
+ if (shield !== void 0) existing.shield = Math.max(existing.shield ?? 0, shield);
113
+ }
114
+ if (decision !== "add") {
115
+ world.events.emit(buffApplied, {
116
+ target,
117
+ buff,
118
+ level: existing.level,
119
+ source,
120
+ renewed: true,
121
+ previousLevel
122
+ });
123
+ return;
124
+ }
125
+ }
126
+ world.wake(target);
127
+ const instance = {
128
+ id: buff,
129
+ level,
130
+ remaining,
131
+ elapsed: 0,
132
+ source: from,
133
+ shield,
134
+ ability
135
+ };
136
+ target.addBuff(instance);
137
+ world.events.emit(buffApplied, {
138
+ target,
139
+ buff,
140
+ level,
141
+ source,
142
+ renewed: false
143
+ });
144
+ if (typeof def.onApply === "function") def.onApply(world, target, instance);
145
+ else if (def.onApply) buffEffects(world, target, instance, def.onApply);
146
+ }
147
+ /** What the shield of a buff holds when it is new */
148
+ function fullShield(world, def, source, level) {
149
+ return scaled(world, source, at(def.shield, level), def.shieldScaling, level) * world.settings.combat.healPower(world, source);
150
+ }
151
+ /**
152
+ * Takes a buff off, before its time is up: the one of it `source` put on, for buffs each source has their own of, or
153
+ * the first. The `buffEnd` hook hears of it, and the buff's `onRemove`
154
+ *
155
+ * @beta
156
+ */
157
+ function removeBuff(world, entity, buff, source) {
158
+ const index = entity.buffs.findIndex((instance) => instance.id === buff && (!source || instance.source === source.id));
159
+ if (index < 0) return;
160
+ const instance = entity.dropBuff(index);
161
+ world.registry.buff(instance.id).onRemove?.(world, entity, instance, false);
162
+ world.hooks.run("buffEnd", {
163
+ entity,
164
+ buff: instance,
165
+ expired: false
166
+ });
167
+ world.events.emit(buffRemoved, {
168
+ entity,
169
+ buff: instance.id,
170
+ expired: false
171
+ });
172
+ }
173
+ /**
174
+ * Whether nothing of an ability happens to an entity: it carries a buff that keeps it out of the way of
175
+ * that kind of thing, like someone up in the air when the ground shakes
176
+ */
177
+ /** Whether a flag of a buff holds for its carrier now: as it is declared, or as its function says */
178
+ var holds = (world, carrier, instance, flag) => typeof flag === "function" ? flag(world, carrier, instance) : !!flag;
179
+ /** Whether an ability gets through a unit's immunity to spells: always, never, or as its function says for the unit */
180
+ var pierces = (world, ability, target) => typeof ability.piercesImmunity === "function" ? ability.piercesImmunity(world, target) : !!ability.piercesImmunity;
181
+ /** Whether a buff a unit carries keeps it from attacking now (`BuffDef.disarm`) */
182
+ var isDisarmed = (world, entity) => declares(world, entity, BuffFlag.disarm) && entity.buffs.some((instance) => {
183
+ const def = world.registry.buff(instance.id);
184
+ return holds(world, entity, instance, def.disarm) && !shrugged(world, entity, def);
185
+ });
186
+ /**
187
+ * Whether a unit takes no damage and no enemy's ability may be cast on it: by its type (`UnitTypeDef.invulnerable`) or
188
+ * a buff it carries (`BuffDef.invulnerable`), as declared or as code decides
189
+ *
190
+ * @beta
191
+ */
192
+ function isInvulnerable(world, entity) {
193
+ if (entity.def.invulnerable) return true;
194
+ if (!declares(world, entity, BuffFlag.invulnerable)) return false;
195
+ return entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).invulnerable));
196
+ }
197
+ /**
198
+ * Whether a unit is out of everyone else's reach: a buff it carries says so (`BuffDef.untargetable`), as declared or as
199
+ * code decides
200
+ *
201
+ * @beta
202
+ */
203
+ function isUntargetable(world, entity) {
204
+ if (!declares(world, entity, BuffFlag.untargetable)) return false;
205
+ return entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).untargetable));
206
+ }
207
+ /**
208
+ * The least health damage leaves a unit with, by the buffs it carries (`BuffDef.minHealth`): the highest of them, 0
209
+ * where none says
210
+ *
211
+ * @beta
212
+ */
213
+ function healthFloor(world, entity) {
214
+ let floor = 0;
215
+ for (const instance of entity.buffs) {
216
+ const least = world.registry.buff(instance.id).minHealth;
217
+ if (least === void 0) continue;
218
+ floor = Math.max(floor, typeof least === "function" ? least(world, entity, instance) : at(least, instance.level));
219
+ }
220
+ return floor;
221
+ }
222
+ /**
223
+ * Whether a unit is immune to spells: by its type, or a buff it carries (an avatar), as declared or as code decides
224
+ *
225
+ * @beta
226
+ */
227
+ function isSpellImmune(world, entity) {
228
+ const own = entity.def.spellImmune;
229
+ if (typeof own === "function" ? own(world, entity) : own) return true;
230
+ if (!declares(world, entity, BuffFlag.spellImmune)) return false;
231
+ return entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).spellImmune));
232
+ }
233
+ /**
234
+ * Whether `ability` does nothing to `entity`: it is spell immune and the ability does not pierce that, or a buff on it avoids one of the ability's tags
235
+ *
236
+ * @beta
237
+ */
238
+ function avoids(world, entity, ability) {
239
+ if (!pierces(world, ability, entity) && isSpellImmune(world, entity)) return true;
240
+ const { tags } = ability;
241
+ if (!tags?.length || !entity.buffs.length) return false;
242
+ return entity.buffs.some((instance) => world.registry.buff(instance.id).avoids?.some((tag) => tags.includes(tag)));
243
+ }
244
+ /** Whether a buff keeps a unit from doing what it wants: stuns and slows. Tenacity cuts those short, but not a suppression */
245
+ function isCrowdControl(def) {
246
+ if (!def.harmful || def.suppress) return false;
247
+ if (def.stun || def.airborne || def.grounds || def.root || def.silence || def.control || def.grounded) return true;
248
+ const slower = (value) => value !== void 0 && at(value, 1) < 0;
249
+ return slower(def.percent?.moveSpeed) || slower(def.percent?.attackSpeed);
250
+ }
251
+ /**
252
+ * Whether a buff holds a unit up in any way (`unstoppable` is proof against these): stuns, roots, silences, disarms,
253
+ * controls, suppressions and grounds. Not a slow
254
+ *
255
+ * @beta
256
+ */
257
+ var holdsUp = (def) => !!(def.stun || def.airborne || def.root || def.silence || def.disarm || def.control || def.suppress || def.grounded);
258
+ /**
259
+ * Nothing that holds a unit up does anything to it now: it carries a buff that is `unstoppable`
260
+ *
261
+ * @beta
262
+ */
263
+ var isUnstoppable = (world, entity) => declares(world, entity, BuffFlag.unstoppable);
264
+ /** Whether what a harmful buff does is lost on its carrier now, which is unstoppable */
265
+ var shrugged = (world, entity, def) => !!def.harmful && isUnstoppable(world, entity);
266
+ /**
267
+ * Whether `entity` is stunned now: a buff on it stuns it, or has it airborne
268
+ *
269
+ * @beta
270
+ */
271
+ var isStunned = (world, entity) => declares(world, entity, BuffFlag.stun) && entity.buffs.some((instance) => {
272
+ const def = world.registry.buff(instance.id);
273
+ return (def.airborne || def.suppress || holds(world, entity, instance, def.stun)) && !shrugged(world, entity, def);
274
+ });
275
+ /**
276
+ * Held to the spot: it can do everything but walk
277
+ *
278
+ * @beta
279
+ */
280
+ var isRooted = (world, entity) => declares(world, entity, BuffFlag.root) && entity.buffs.some((instance) => {
281
+ const def = world.registry.buff(instance.id);
282
+ return holds(world, entity, instance, def.root) && !shrugged(world, entity, def);
283
+ });
284
+ /**
285
+ * The buff that takes a unit's orders now (`BuffDef.control`): the last it carries of them, unless it is unstoppable
286
+ *
287
+ * @beta
288
+ */
289
+ function controlOf(world, entity) {
290
+ if (!declares(world, entity, BuffFlag.control)) return void 0;
291
+ for (let i = entity.buffs.length - 1; i >= 0; i--) {
292
+ const def = world.registry.buff(entity.buffs[i].id);
293
+ if (def.control && !shrugged(world, entity, def)) return entity.buffs[i];
294
+ }
295
+ }
296
+ /**
297
+ * Whether a unit walks through other units now, and they through it: a buff it carries says so (`BuffDef.phasing`), as
298
+ * declared or as code decides
299
+ *
300
+ * @beta
301
+ */
302
+ var isPhasing = (world, entity) => declares(world, entity, BuffFlag.phasing) && entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).phasing));
303
+ /**
304
+ * The buffs a unit carries that have a tag (`BuffDef.tags`): a `fire` on it, the `anti-heal` it is under
305
+ *
306
+ * @beta
307
+ */
308
+ function buffsTagged(world, entity, tag) {
309
+ return entity.buffs.filter((instance) => world.registry.buff(instance.id).tags?.includes(tag));
310
+ }
311
+ /**
312
+ * What a unit pays its abilities' mana costs with in health, for each point of mana, by the buffs it carries
313
+ * (`BuffDef.paysWithHealth`): the highest of them; 0 where it pays with mana
314
+ *
315
+ * @beta
316
+ */
317
+ function healthPerMana(world, entity) {
318
+ let rate = 0;
319
+ for (const instance of entity.buffs) {
320
+ const pays = world.registry.buff(instance.id).paysWithHealth;
321
+ if (pays) rate = Math.max(rate, pays === true ? 1 : pays);
322
+ }
323
+ return rate;
324
+ }
325
+ /**
326
+ * Whether a buff takes a unit's orders now (`BuffDef.control`): it refuses any new
327
+ *
328
+ * @beta
329
+ */
330
+ var isControlled = (world, entity) => controlOf(world, entity) !== void 0;
331
+ /**
332
+ * Whether a unit cannot rush or jump of its own now (`BuffDef.grounded`)
333
+ *
334
+ * @beta
335
+ */
336
+ var isGrounded = (world, entity) => declares(world, entity, BuffFlag.grounded) && entity.buffs.some((instance) => {
337
+ const def = world.registry.buff(instance.id);
338
+ return def.grounded && !shrugged(world, entity, def);
339
+ });
340
+ /**
341
+ * Whether a `cleanse` takes a buff off: harmful, and holding its carrier up (`holdsUp`) or slowing it, but neither a
342
+ * suppression nor being thrown up
343
+ *
344
+ * @beta
345
+ */
346
+ var isCleansable = (def) => !!def.harmful && !def.suppress && !def.airborne && (holdsUp(def) || isCrowdControl(def));
347
+ /**
348
+ * Kept from using its abilities: from this one, when it says which (a silence of fire spells only). Without an
349
+ * ability, whether anything keeps it from using some
350
+ *
351
+ * @beta
352
+ */
353
+ var isSilenced = (world, entity, ability) => declares(world, entity, BuffFlag.silence) && entity.buffs.some((instance) => {
354
+ const def = world.registry.buff(instance.id);
355
+ return silences(def.silence, ability) && !shrugged(world, entity, def);
356
+ });
357
+ /**
358
+ * Whether a buff's `silence` keeps its carrier from an ability, or from any when none is said. For both ends
359
+ *
360
+ * @beta
361
+ */
362
+ var silences = (silence, ability) => typeof silence === "function" ? ability ? silence(ability) : true : !!silence;
363
+ /**
364
+ * Where an entity is right now. What flies is in the air, unless something holds it down
365
+ *
366
+ * @beta
367
+ */
368
+ function layerOf(world, entity) {
369
+ if (!entity.flying) return "ground";
370
+ return declares(world, entity, BuffFlag.grounds) ? "ground" : "air";
371
+ }
372
+ /** The part of the healed one's max health an overheal's shield holds at the most, where its buff does not say */
373
+ var OVERHEAL_MOST = 1 / 3;
374
+ /**
375
+ * Healing past full health, `over` of it, becomes a shield on whoever was healed, where the healer carries a buff that
376
+ * says so of what it gives (`BuffDef.overheal`, `of: 'given'`) or the healed one of what it gets (`of: 'taken'`): its
377
+ * buff put on the healed one, its shield what spilled over (by `part`), up to `most` of its max health. What
378
+ * `World.heal` does with what it could not give
379
+ *
380
+ * @beta
381
+ */
382
+ function overheal(world, target, source, over) {
383
+ if (over <= 0 || !target.alive) return;
384
+ const shields = (carrier, of) => {
385
+ for (const instance of carrier.buffs.slice()) {
386
+ const rule = world.registry.buff(instance.id).overheal;
387
+ if (!rule || (rule.of ?? "given") !== of) continue;
388
+ const amount = over * at(rule.part ?? 1, instance.level);
389
+ if (amount <= 0) continue;
390
+ applyBuff(world, target, rule.buff, void 0, source ?? carrier, instance.level);
391
+ let shield;
392
+ for (const each of target.buffs) if (each.id === rule.buff) shield = each;
393
+ if (shield) shield.shield = Math.min((shield.shield ?? 0) + amount, Math.max((rule.most ?? OVERHEAL_MOST) * target.maxHealth, shield.shield ?? 0));
394
+ }
395
+ };
396
+ if (source?.buffs.length) shields(source, "given");
397
+ if (target.buffs.length) shields(target, "taken");
398
+ }
399
+ /**
400
+ * What is left of the shields on an entity
401
+ *
402
+ * @beta
403
+ */
404
+ function shieldOf(entity) {
405
+ let total = 0;
406
+ for (const instance of entity.buffs) total += instance.shield ?? 0;
407
+ return total;
408
+ }
409
+ /** Lets the shields of an entity take damage. Returns what they could not hold */
410
+ function absorb(entity, amount) {
411
+ let left = amount;
412
+ for (const instance of entity.buffs) {
413
+ if (!instance.shield || left <= 0) continue;
414
+ const taken = Math.min(instance.shield, left);
415
+ instance.shield -= taken;
416
+ left -= taken;
417
+ }
418
+ return left;
419
+ }
420
+ /**
421
+ * A buff put on, to those who see who has it. Put on again, only where its level changed: an aura renews its buff
422
+ * every round, and what is left of it is the snapshot's (`EntityState.buffTimes`)
423
+ */
424
+ var toldBuffOn = replicateEvent(buffApplied, "buff", ({ target, buff, level, source, renewed, previousLevel }, view) => view.knows(target) && !(renewed && previousLevel === level) ? {
425
+ type: "buff",
426
+ id: target.id,
427
+ buff,
428
+ on: true,
429
+ level,
430
+ renewed,
431
+ source: source && view.knows(source) ? source.id : void 0
432
+ } : void 0);
433
+ /** A buff gone, to those who see who had it */
434
+ var toldBuffOff = replicateEvent(buffRemoved, "buff", ({ entity, buff }, view) => view.knows(entity) ? {
435
+ type: "buff",
436
+ id: entity.id,
437
+ buff,
438
+ on: false
439
+ } : void 0);
440
+ //#endregion
441
+ export { AURA_LINGER, BuffFlag, absorb, applyBuff, avoids, buffFlags, buffsTagged, controlOf, fullShield, hasBuff, healthFloor, healthPerMana, holdsUp, isCleansable, isControlled, isCrowdControl, isDisarmed, isGrounded, isInvulnerable, isPhasing, isRooted, isSilenced, isSpellImmune, isStunned, isUnstoppable, isUntargetable, layerOf, overheal, pierces, removeBuff, shieldOf, silences, toldBuffOff, toldBuffOn };
442
+
443
+ //# sourceMappingURL=buffs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffs.js","names":[],"sources":["../../src/abilities/buffs.ts"],"sourcesContent":["import { buffApplied, buffRemoved } from '#engine/engineEvents'\nimport { type AbilityDef, at, type BuffCheck, type BuffDef, type Layer, type Scaled } from '#engine/defs'\nimport type { BuffInstance, Entity } from '#engine/entity'\nimport { buffEffects } from './land'\nimport { scaled } from './scaled'\nimport type { World } from '#engine/world'\nimport { replicateEvent } from '../replication'\n\n/**\n * Auras keep their buff alive by renewing it. It wears off this long after leaving the aura\n *\n * @beta\n */\nexport const AURA_LINGER = 0.75\n\n/**\n * The flags of buffs that the questions below ask about, one bit each (`buffFlags`). A bit says that a buff on the\n * entity declares the flag, as it is or as a function: maybe, ask the buffs. No bit, and none of them holds it\n *\n * @internal\n */\nexport const BuffFlag = {\n\tstun: 1 << 0,\n\troot: 1 << 1,\n\tdisarm: 1 << 2,\n\tinvulnerable: 1 << 3,\n\tuntargetable: 1 << 4,\n\tphasing: 1 << 5,\n\tinvisible: 1 << 6,\n\tgrounds: 1 << 7,\n\tunstoppable: 1 << 8,\n\tspellImmune: 1 << 9,\n\tcontrol: 1 << 10,\n\tgrounded: 1 << 11,\n\tsilence: 1 << 12\n} as const\n\n/** The flags a buff declares, whatever it makes of them for its carrier */\nfunction flagsOf(def: BuffDef): number {\n\treturn (\n\t\t(def.stun || def.airborne || def.suppress ? BuffFlag.stun : 0) |\n\t\t(def.root ? BuffFlag.root : 0) |\n\t\t(def.disarm ? BuffFlag.disarm : 0) |\n\t\t(def.invulnerable ? BuffFlag.invulnerable : 0) |\n\t\t(def.untargetable ? BuffFlag.untargetable : 0) |\n\t\t(def.phasing ? BuffFlag.phasing : 0) |\n\t\t(def.invisible ? BuffFlag.invisible : 0) |\n\t\t(def.grounds ? BuffFlag.grounds : 0) |\n\t\t(def.unstoppable ? BuffFlag.unstoppable : 0) |\n\t\t(def.spellImmune ? BuffFlag.spellImmune : 0) |\n\t\t(def.control ? BuffFlag.control : 0) |\n\t\t(def.grounded ? BuffFlag.grounded : 0) |\n\t\t(def.silence ? BuffFlag.silence : 0)\n\t)\n}\n\n/**\n * The flags the buffs on an entity declare (`BuffFlag`), all of them together. Whether a unit is stunned, rooted or\n * invisible is asked of every unit several times a tick, and almost always none of its buffs says anything of it: one\n * bit answers that, and only a unit whose buffs do declare it goes through them. Worked out again after its buffs\n * changed (the entity's writes of them put it back) or the buff definitions did (`world.redefine`, a hot reload)\n *\n * @internal\n */\nexport function buffFlags(world: World, entity: Entity): number {\n\tconst version = world.registry.buffs.version\n\tif (entity.buffFlags >= 0 && entity.buffFlagsOf === version) return entity.buffFlags\n\tlet flags = 0\n\tfor (const instance of entity.buffs) flags |= flagsOf(world.registry.buff(instance.id))\n\tentity.buffFlags = flags\n\tentity.buffFlagsOf = version\n\treturn flags\n}\n\n/** Whether a buff on an entity declares a flag (`BuffFlag`): where none does, none holds it, and the buffs need no asking */\nconst declares = (world: World, entity: Entity, flag: number): boolean => entity.buffs.length > 0 && (buffFlags(world, entity) & flag) !== 0\n\n/**\n * Whether `entity` has a buff with the id `buff` on it now\n *\n * @beta\n */\nexport function hasBuff(entity: Entity, buff: string): boolean {\n\treturn entity.buffs.some((instance) => instance.id === buff)\n}\n\n/**\n * Puts a buff on an entity. Buffs do not stack with themselves: a second one of the\n * same kind renews the first when it lasts longer.\n *\n * @public\n */\nexport function applyBuff(world: World, target: Entity, buff: string, duration?: number, source?: Entity, level = 1, ability?: string): void {\n\tif (!target.alive) return\n\tconst def = world.registry.buff(buff)\n\t// what holds a unit up does not take on one that nothing holds up (`unstoppable`)\n\tif (def.harmful && target.buffs.length && holdsUp(def) && isUnstoppable(world, target)) return\n\tlet remaining = duration ?? def.duration ?? Infinity\n\tif (world.hooks.has('beforeBuff')) {\n\t\tconst before = world.hooks.run('beforeBuff', { target, buff: def, source, level, duration: remaining, cancelled: false })\n\t\tif (before.cancelled) return\n\t\tlevel = before.level\n\t\tremaining = before.duration\n\t}\n\tconst shield = def.shield === undefined ? undefined : fullShield(world, def, source ?? target, level)\n\tconst from = source?.id ?? 0\n\tconst policy = def.stacking ?? 'strongest'\n\t// the one of it there is already, that this one is about: none for those that are each of their own\n\tconst existing =\n\t\tpolicy === 'independent'\n\t\t\t? undefined\n\t\t\t: target.buffs.find((instance) => instance.id === buff && (policy !== 'perSource' || instance.source === from))\n\tif (existing) {\n\t\tconst decision =\n\t\t\ttypeof policy === 'function'\n\t\t\t\t? policy(existing, { level, duration: remaining, source: from })\n\t\t\t\t: policy === 'refresh'\n\t\t\t\t\t? 'replace'\n\t\t\t\t\t: // the stronger one wins, the longer one among equals\n\t\t\t\t\t\tlevel > existing.level\n\t\t\t\t\t\t? 'replace'\n\t\t\t\t\t\t: level === existing.level && remaining > existing.remaining\n\t\t\t\t\t\t\t? 'renew'\n\t\t\t\t\t\t\t: 'keep'\n\t\tif (decision === 'keep') return\n\t\tconst previousLevel = existing.level\n\t\t// put on again for a time of its own: an aura that keeps it up says so again after (`keptUp`)\n\t\tif (existing.kept) delete existing.kept\n\t\tif (decision === 'replace') {\n\t\t\t// only what the renewer brings: an aura renewing a cast buff keeps its `ability` (its `onEnd`)\n\t\t\tObject.assign(existing, { level, remaining, source: from })\n\t\t\tif (shield !== undefined) existing.shield = shield\n\t\t\tif (ability !== undefined) existing.ability = ability\n\t\t} else if (decision === 'renew') {\n\t\t\texisting.remaining = remaining\n\t\t\t// a shield that is put on again is as good as new\n\t\t\tif (shield !== undefined) existing.shield = Math.max(existing.shield ?? 0, shield)\n\t\t}\n\t\tif (decision !== 'add') {\n\t\t\tworld.events.emit(buffApplied, { target, buff, level: existing.level, source, renewed: true, previousLevel })\n\t\t\treturn\n\t\t}\n\t}\n\t// a buff runs out tick by tick, which scenery does not get\n\tworld.wake(target)\n\tconst instance: BuffInstance = { id: buff, level, remaining, elapsed: 0, source: from, shield, ability }\n\ttarget.addBuff(instance)\n\tworld.events.emit(buffApplied, { target, buff, level, source, renewed: false })\n\tif (typeof def.onApply === 'function') def.onApply(world, target, instance)\n\telse if (def.onApply) buffEffects(world, target, instance, def.onApply)\n}\n\n/** What the shield of a buff holds when it is new */\nexport function fullShield(world: World, def: BuffDef, source: Entity, level: number): number {\n\treturn scaled(world, source, at(def.shield, level), def.shieldScaling, level) * world.settings.combat.healPower(world, source)\n}\n\n/**\n * Takes a buff off, before its time is up: the one of it `source` put on, for buffs each source has their own of, or\n * the first. The `buffEnd` hook hears of it, and the buff's `onRemove`\n *\n * @beta\n */\nexport function removeBuff(world: World, entity: Entity, buff: string, source?: Entity): void {\n\tconst index = entity.buffs.findIndex((instance) => instance.id === buff && (!source || instance.source === source.id))\n\tif (index < 0) return\n\tconst instance = entity.dropBuff(index)!\n\tworld.registry.buff(instance.id).onRemove?.(world, entity, instance, false)\n\tworld.hooks.run('buffEnd', { entity, buff: instance, expired: false })\n\tworld.events.emit(buffRemoved, { entity, buff: instance.id, expired: false })\n}\n\n/**\n * Whether nothing of an ability happens to an entity: it carries a buff that keeps it out of the way of\n * that kind of thing, like someone up in the air when the ground shakes\n */\n/** Whether a flag of a buff holds for its carrier now: as it is declared, or as its function says */\nconst holds = (world: World, carrier: Entity, instance: BuffInstance, flag: boolean | BuffCheck | undefined) =>\n\ttypeof flag === 'function' ? flag(world, carrier, instance) : !!flag\n\n/** Whether an ability gets through a unit's immunity to spells: always, never, or as its function says for the unit */\nexport const pierces = (world: World, ability: AbilityDef, target: Entity): boolean =>\n\ttypeof ability.piercesImmunity === 'function' ? ability.piercesImmunity(world, target) : !!ability.piercesImmunity\n\n/** Whether a buff a unit carries keeps it from attacking now (`BuffDef.disarm`) */\nexport const isDisarmed = (world: World, entity: Entity): boolean =>\n\tdeclares(world, entity, BuffFlag.disarm) &&\n\tentity.buffs.some((instance) => {\n\t\tconst def = world.registry.buff(instance.id)\n\t\treturn holds(world, entity, instance, def.disarm) && !shrugged(world, entity, def)\n\t})\n\n/**\n * Whether a unit takes no damage and no enemy's ability may be cast on it: by its type (`UnitTypeDef.invulnerable`) or\n * a buff it carries (`BuffDef.invulnerable`), as declared or as code decides\n *\n * @beta\n */\nexport function isInvulnerable(world: World, entity: Entity): boolean {\n\tif (entity.def.invulnerable) return true\n\tif (!declares(world, entity, BuffFlag.invulnerable)) return false\n\treturn entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).invulnerable))\n}\n\n/**\n * Whether a unit is out of everyone else's reach: a buff it carries says so (`BuffDef.untargetable`), as declared or as\n * code decides\n *\n * @beta\n */\nexport function isUntargetable(world: World, entity: Entity): boolean {\n\tif (!declares(world, entity, BuffFlag.untargetable)) return false\n\treturn entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).untargetable))\n}\n\n/**\n * The least health damage leaves a unit with, by the buffs it carries (`BuffDef.minHealth`): the highest of them, 0\n * where none says\n *\n * @beta\n */\nexport function healthFloor(world: World, entity: Entity): number {\n\tlet floor = 0\n\tfor (const instance of entity.buffs) {\n\t\tconst least = world.registry.buff(instance.id).minHealth\n\t\tif (least === undefined) continue\n\t\tfloor = Math.max(floor, typeof least === 'function' ? least(world, entity, instance) : at(least, instance.level))\n\t}\n\treturn floor\n}\n\n/**\n * Whether a unit is immune to spells: by its type, or a buff it carries (an avatar), as declared or as code decides\n *\n * @beta\n */\nexport function isSpellImmune(world: World, entity: Entity): boolean {\n\tconst own = entity.def.spellImmune\n\tif (typeof own === 'function' ? own(world, entity) : own) return true\n\tif (!declares(world, entity, BuffFlag.spellImmune)) return false\n\treturn entity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).spellImmune))\n}\n\n/**\n * Whether `ability` does nothing to `entity`: it is spell immune and the ability does not pierce that, or a buff on it avoids one of the ability's tags\n *\n * @beta\n */\nexport function avoids(world: World, entity: Entity, ability: AbilityDef): boolean {\n\t// immune to spells: nothing of one happens to it, unless it gets through\n\tif (!pierces(world, ability, entity) && isSpellImmune(world, entity)) return true\n\tconst { tags } = ability\n\tif (!tags?.length || !entity.buffs.length) return false\n\treturn entity.buffs.some((instance) => world.registry.buff(instance.id).avoids?.some((tag) => tags.includes(tag)))\n}\n\n/** Whether a buff keeps a unit from doing what it wants: stuns and slows. Tenacity cuts those short, but not a suppression */\nexport function isCrowdControl(def: BuffDef): boolean {\n\tif (!def.harmful || def.suppress) return false\n\tif (def.stun || def.airborne || def.grounds || def.root || def.silence || def.control || def.grounded) return true\n\tconst slower = (value: Scaled | undefined) => value !== undefined && at(value, 1) < 0\n\treturn slower(def.percent?.moveSpeed) || slower(def.percent?.attackSpeed)\n}\n\n/**\n * Whether a buff holds a unit up in any way (`unstoppable` is proof against these): stuns, roots, silences, disarms,\n * controls, suppressions and grounds. Not a slow\n *\n * @beta\n */\nexport const holdsUp = (def: BuffDef): boolean =>\n\t!!(def.stun || def.airborne || def.root || def.silence || def.disarm || def.control || def.suppress || def.grounded)\n\n/**\n * Nothing that holds a unit up does anything to it now: it carries a buff that is `unstoppable`\n *\n * @beta\n */\nexport const isUnstoppable = (world: World, entity: Entity): boolean =>\n\t// declared as it is, never a function: a buff that declares it holds it\n\tdeclares(world, entity, BuffFlag.unstoppable)\n\n/** Whether what a harmful buff does is lost on its carrier now, which is unstoppable */\nconst shrugged = (world: World, entity: Entity, def: BuffDef) => !!def.harmful && isUnstoppable(world, entity)\n\n/**\n * Whether `entity` is stunned now: a buff on it stuns it, or has it airborne\n *\n * @beta\n */\nexport const isStunned = (world: World, entity: Entity) =>\n\tdeclares(world, entity, BuffFlag.stun) &&\n\tentity.buffs.some((instance) => {\n\t\tconst def = world.registry.buff(instance.id)\n\t\treturn (def.airborne || def.suppress || holds(world, entity, instance, def.stun)) && !shrugged(world, entity, def)\n\t})\n\n/**\n * Held to the spot: it can do everything but walk\n *\n * @beta\n */\nexport const isRooted = (world: World, entity: Entity) =>\n\tdeclares(world, entity, BuffFlag.root) &&\n\tentity.buffs.some((instance) => {\n\t\tconst def = world.registry.buff(instance.id)\n\t\treturn holds(world, entity, instance, def.root) && !shrugged(world, entity, def)\n\t})\n\n/**\n * The buff that takes a unit's orders now (`BuffDef.control`): the last it carries of them, unless it is unstoppable\n *\n * @beta\n */\nexport function controlOf(world: World, entity: Entity): BuffInstance | undefined {\n\tif (!declares(world, entity, BuffFlag.control)) return undefined\n\tfor (let i = entity.buffs.length - 1; i >= 0; i--) {\n\t\tconst def = world.registry.buff(entity.buffs[i].id)\n\t\tif (def.control && !shrugged(world, entity, def)) return entity.buffs[i]\n\t}\n\treturn undefined\n}\n\n/**\n * Whether a unit walks through other units now, and they through it: a buff it carries says so (`BuffDef.phasing`), as\n * declared or as code decides\n *\n * @beta\n */\nexport const isPhasing = (world: World, entity: Entity): boolean =>\n\tdeclares(world, entity, BuffFlag.phasing) &&\n\tentity.buffs.some((instance) => holds(world, entity, instance, world.registry.buff(instance.id).phasing))\n\n/**\n * The buffs a unit carries that have a tag (`BuffDef.tags`): a `fire` on it, the `anti-heal` it is under\n *\n * @beta\n */\nexport function buffsTagged(world: World, entity: Entity, tag: string): BuffInstance[] {\n\treturn entity.buffs.filter((instance) => world.registry.buff(instance.id).tags?.includes(tag))\n}\n\n/**\n * What a unit pays its abilities' mana costs with in health, for each point of mana, by the buffs it carries\n * (`BuffDef.paysWithHealth`): the highest of them; 0 where it pays with mana\n *\n * @beta\n */\nexport function healthPerMana(world: World, entity: Entity): number {\n\tlet rate = 0\n\tfor (const instance of entity.buffs) {\n\t\tconst pays = world.registry.buff(instance.id).paysWithHealth\n\t\tif (pays) rate = Math.max(rate, pays === true ? 1 : pays)\n\t}\n\treturn rate\n}\n\n/**\n * Whether a buff takes a unit's orders now (`BuffDef.control`): it refuses any new\n *\n * @beta\n */\nexport const isControlled = (world: World, entity: Entity): boolean => controlOf(world, entity) !== undefined\n\n/**\n * Whether a unit cannot rush or jump of its own now (`BuffDef.grounded`)\n *\n * @beta\n */\nexport const isGrounded = (world: World, entity: Entity): boolean =>\n\tdeclares(world, entity, BuffFlag.grounded) &&\n\tentity.buffs.some((instance) => {\n\t\tconst def = world.registry.buff(instance.id)\n\t\treturn def.grounded && !shrugged(world, entity, def)\n\t})\n\n/**\n * Whether a `cleanse` takes a buff off: harmful, and holding its carrier up (`holdsUp`) or slowing it, but neither a\n * suppression nor being thrown up\n *\n * @beta\n */\nexport const isCleansable = (def: BuffDef): boolean => !!def.harmful && !def.suppress && !def.airborne && (holdsUp(def) || isCrowdControl(def))\n\n/**\n * Kept from using its abilities: from this one, when it says which (a silence of fire spells only). Without an\n * ability, whether anything keeps it from using some\n *\n * @beta\n */\nexport const isSilenced = (world: World, entity: Entity, ability?: AbilityDef) =>\n\tdeclares(world, entity, BuffFlag.silence) &&\n\tentity.buffs.some((instance) => {\n\t\tconst def = world.registry.buff(instance.id)\n\t\treturn silences(def.silence, ability) && !shrugged(world, entity, def)\n\t})\n\n/**\n * Whether a buff's `silence` keeps its carrier from an ability, or from any when none is said. For both ends\n *\n * @beta\n */\nexport const silences = (silence: BuffDef['silence'], ability?: AbilityDef): boolean =>\n\ttypeof silence === 'function' ? (ability ? silence(ability) : true) : !!silence\n\n/**\n * Where an entity is right now. What flies is in the air, unless something holds it down\n *\n * @beta\n */\nexport function layerOf(world: World, entity: Entity): Layer {\n\tif (!entity.flying) return 'ground'\n\t// `grounds` is declared as it is, never a function: a buff that declares it holds it\n\treturn declares(world, entity, BuffFlag.grounds) ? 'ground' : 'air'\n}\n\n/** The part of the healed one's max health an overheal's shield holds at the most, where its buff does not say */\nconst OVERHEAL_MOST = 1 / 3\n\n/**\n * Healing past full health, `over` of it, becomes a shield on whoever was healed, where the healer carries a buff that\n * says so of what it gives (`BuffDef.overheal`, `of: 'given'`) or the healed one of what it gets (`of: 'taken'`): its\n * buff put on the healed one, its shield what spilled over (by `part`), up to `most` of its max health. What\n * `World.heal` does with what it could not give\n *\n * @beta\n */\nexport function overheal(world: World, target: Entity, source: Entity | undefined, over: number): void {\n\tif (over <= 0 || !target.alive) return\n\tconst shields = (carrier: Entity, of: 'given' | 'taken') => {\n\t\tfor (const instance of carrier.buffs.slice()) {\n\t\t\tconst rule = world.registry.buff(instance.id).overheal\n\t\t\tif (!rule || (rule.of ?? 'given') !== of) continue\n\t\t\tconst amount = over * at(rule.part ?? 1, instance.level)\n\t\t\tif (amount <= 0) continue\n\t\t\tapplyBuff(world, target, rule.buff, undefined, source ?? carrier, instance.level)\n\t\t\t// the one it put on, or renewed: the last of it there is\n\t\t\tlet shield: BuffInstance | undefined\n\t\t\tfor (const each of target.buffs) if (each.id === rule.buff) shield = each\n\t\t\tif (shield)\n\t\t\t\tshield.shield = Math.min((shield.shield ?? 0) + amount, Math.max((rule.most ?? OVERHEAL_MOST) * target.maxHealth, shield.shield ?? 0))\n\t\t}\n\t}\n\tif (source?.buffs.length) shields(source, 'given')\n\tif (target.buffs.length) shields(target, 'taken')\n}\n\n/**\n * What is left of the shields on an entity\n *\n * @beta\n */\nexport function shieldOf(entity: Entity): number {\n\tlet total = 0\n\tfor (const instance of entity.buffs) total += instance.shield ?? 0\n\treturn total\n}\n\n/** Lets the shields of an entity take damage. Returns what they could not hold */\nexport function absorb(entity: Entity, amount: number): number {\n\tlet left = amount\n\tfor (const instance of entity.buffs) {\n\t\tif (!instance.shield || left <= 0) continue\n\t\tconst taken = Math.min(instance.shield, left)\n\t\tinstance.shield -= taken\n\t\tleft -= taken\n\t}\n\treturn left\n}\n\n/**\n * A buff put on, to those who see who has it. Put on again, only where its level changed: an aura renews its buff\n * every round, and what is left of it is the snapshot's (`EntityState.buffTimes`)\n */\nexport const toldBuffOn = replicateEvent(buffApplied, 'buff', ({ target, buff, level, source, renewed, previousLevel }, view) =>\n\tview.knows(target) && !(renewed && previousLevel === level)\n\t\t? { type: 'buff', id: target.id, buff, on: true, level, renewed, source: source && view.knows(source) ? source.id : undefined }\n\t\t: undefined\n)\n\n/** A buff gone, to those who see who had it */\nexport const toldBuffOff = replicateEvent(buffRemoved, 'buff', ({ entity, buff }, view) =>\n\tview.knows(entity) ? { type: 'buff', id: entity.id, buff, on: false } : undefined\n)\n"],"mappings":"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"}
@@ -4,6 +4,8 @@
4
4
  */
5
5
  /** A spell being wound up, to those who see the caster: where it aims, and for how long */
6
6
  export declare const toldWindup: import("..").ReplicatedEvent;
7
+ /** A wind-up called off, to those who see the caster: its shape on the ground goes (B46) */
8
+ export declare const toldCastCancelled: import("..").ReplicatedEvent;
7
9
  /** A channel begun, to those who see the caster */
8
10
  export declare const toldChannelStarted: import("..").ReplicatedEvent;
9
11
  /** A channel over, to those who see the caster */
@@ -0,0 +1,66 @@
1
+ import { aimOf } from "../defs.js";
2
+ import { abilityCast, castCancelled, castStarted, channelEnded, channelStarted } from "../engineEvents.js";
3
+ import { replicateEvent } from "../replication.js";
4
+ //#region src/abilities/castTold.ts
5
+ /**
6
+ * What players are told of casting (the cast order's events): the wind-up, a channel's start and end, the cast. Beside
7
+ * the abilities, whose order emits them
8
+ */
9
+ /** A spell being wound up, to those who see the caster: where it aims, and for how long */
10
+ var toldWindup = replicateEvent(castStarted, "windup", ({ caster, ability, point, duration }, view) => {
11
+ if (!duration || !view.knows(caster)) return void 0;
12
+ const aim = point ?? caster.pos;
13
+ const level = caster.abilities.find((state) => state.id === ability.id)?.level || 1;
14
+ return {
15
+ type: "windup",
16
+ id: caster.id,
17
+ ability: ability.id,
18
+ level,
19
+ x: aim.x,
20
+ z: aim.z,
21
+ duration
22
+ };
23
+ });
24
+ /** A wind-up called off, to those who see the caster: its shape on the ground goes (B46) */
25
+ var toldCastCancelled = replicateEvent(castCancelled, "castCancelled", ({ caster, ability }, view) => view.knows(caster) ? {
26
+ type: "castCancelled",
27
+ id: caster.id,
28
+ ability: ability?.id
29
+ } : void 0);
30
+ /** A channel begun, to those who see the caster */
31
+ var toldChannelStarted = replicateEvent(channelStarted, "channel", ({ caster, ability, duration }, view) => view.knows(caster) ? {
32
+ type: "channel",
33
+ id: caster.id,
34
+ ability: ability.id,
35
+ on: true,
36
+ duration
37
+ } : void 0);
38
+ /** A channel over, to those who see the caster */
39
+ var toldChannelEnded = replicateEvent(channelEnded, "channel", ({ caster, ability, interrupted }, view) => view.knows(caster) ? {
40
+ type: "channel",
41
+ id: caster.id,
42
+ ability: ability.id,
43
+ on: false,
44
+ interrupted
45
+ } : void 0);
46
+ /** A cast, to those who see the caster or where it lands */
47
+ var toldCast = replicateEvent(abilityCast, "cast", ({ caster, ability, level, target, point, charged }, view) => {
48
+ if (!view.knows(caster) && !view.sees(point.x, point.z)) return void 0;
49
+ const aim = aimOf(ability, level);
50
+ const radius = aim?.shape === "circle" ? aim.radius : 0;
51
+ return {
52
+ type: "cast",
53
+ id: view.knows(caster) ? caster.id : void 0,
54
+ ability: ability.id,
55
+ level,
56
+ x: point.x,
57
+ z: point.z,
58
+ target: target && view.knows(target) ? target.id : void 0,
59
+ radius: radius || void 0,
60
+ charged
61
+ };
62
+ });
63
+ //#endregion
64
+ export { toldCast, toldCastCancelled, toldChannelEnded, toldChannelStarted, toldWindup };
65
+
66
+ //# sourceMappingURL=castTold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"castTold.js","names":[],"sources":["../../src/abilities/castTold.ts"],"sourcesContent":["import { abilityCast, castCancelled, castStarted, channelEnded, channelStarted } from '#engine/engineEvents'\nimport { replicateEvent } from '../replication'\nimport { aimOf } from '../defs'\n\n/**\n * What players are told of casting (the cast order's events): the wind-up, a channel's start and end, the cast. Beside\n * the abilities, whose order emits them\n */\n\n/** A spell being wound up, to those who see the caster: where it aims, and for how long */\nexport const toldWindup = replicateEvent(castStarted, 'windup', ({ caster, ability, point, duration }, view) => {\n\tif (!duration || !view.knows(caster)) return undefined\n\tconst aim = point ?? caster.pos\n\t// what an item gives is at its first level\n\tconst level = caster.abilities.find((state) => state.id === ability.id)?.level || 1\n\treturn { type: 'windup', id: caster.id, ability: ability.id, level, x: aim.x, z: aim.z, duration }\n})\n\n/** A wind-up called off, to those who see the caster: its shape on the ground goes (B46) */\nexport const toldCastCancelled = replicateEvent(castCancelled, 'castCancelled', ({ caster, ability }, view) =>\n\tview.knows(caster) ? { type: 'castCancelled', id: caster.id, ability: ability?.id } : undefined\n)\n\n/** A channel begun, to those who see the caster */\nexport const toldChannelStarted = replicateEvent(channelStarted, 'channel', ({ caster, ability, duration }, view) =>\n\tview.knows(caster) ? { type: 'channel', id: caster.id, ability: ability.id, on: true, duration } : undefined\n)\n\n/** A channel over, to those who see the caster */\nexport const toldChannelEnded = replicateEvent(channelEnded, 'channel', ({ caster, ability, interrupted }, view) =>\n\tview.knows(caster) ? { type: 'channel', id: caster.id, ability: ability.id, on: false, interrupted } : undefined\n)\n\n/** A cast, to those who see the caster or where it lands */\nexport const toldCast = replicateEvent(abilityCast, 'cast', ({ caster, ability, level, target, point, charged }, view) => {\n\tif (!view.knows(caster) && !view.sees(point.x, point.z)) return undefined\n\tconst aim = aimOf(ability, level)\n\tconst radius = aim?.shape === 'circle' ? aim.radius : 0\n\treturn {\n\t\ttype: 'cast',\n\t\tid: view.knows(caster) ? caster.id : undefined,\n\t\tability: ability.id,\n\t\tlevel,\n\t\tx: point.x,\n\t\tz: point.z,\n\t\ttarget: target && view.knows(target) ? target.id : undefined,\n\t\tradius: radius || undefined,\n\t\tcharged\n\t}\n})\n"],"mappings":";;;;;;;;;AAUA,IAAa,aAAa,eAAe,aAAa,WAAW,EAAE,QAAQ,SAAS,OAAO,YAAY,SAAS;CAC/G,IAAI,CAAC,YAAY,CAAC,KAAK,MAAM,MAAM,GAAG,OAAO,KAAA;CAC7C,MAAM,MAAM,SAAS,OAAO;CAE5B,MAAM,QAAQ,OAAO,UAAU,MAAM,UAAU,MAAM,OAAO,QAAQ,EAAE,CAAC,EAAE,SAAS;CAClF,OAAO;EAAE,MAAM;EAAU,IAAI,OAAO;EAAI,SAAS,QAAQ;EAAI;EAAO,GAAG,IAAI;EAAG,GAAG,IAAI;EAAG;CAAS;AAClG,CAAC;;AAGD,IAAa,oBAAoB,eAAe,eAAe,kBAAkB,EAAE,QAAQ,WAAW,SACrG,KAAK,MAAM,MAAM,IAAI;CAAE,MAAM;CAAiB,IAAI,OAAO;CAAI,SAAS,SAAS;AAAG,IAAI,KAAA,CACvF;;AAGA,IAAa,qBAAqB,eAAe,gBAAgB,YAAY,EAAE,QAAQ,SAAS,YAAY,SAC3G,KAAK,MAAM,MAAM,IAAI;CAAE,MAAM;CAAW,IAAI,OAAO;CAAI,SAAS,QAAQ;CAAI,IAAI;CAAM;AAAS,IAAI,KAAA,CACpG;;AAGA,IAAa,mBAAmB,eAAe,cAAc,YAAY,EAAE,QAAQ,SAAS,eAAe,SAC1G,KAAK,MAAM,MAAM,IAAI;CAAE,MAAM;CAAW,IAAI,OAAO;CAAI,SAAS,QAAQ;CAAI,IAAI;CAAO;AAAY,IAAI,KAAA,CACxG;;AAGA,IAAa,WAAW,eAAe,aAAa,SAAS,EAAE,QAAQ,SAAS,OAAO,QAAQ,OAAO,WAAW,SAAS;CACzH,IAAI,CAAC,KAAK,MAAM,MAAM,KAAK,CAAC,KAAK,KAAK,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,KAAA;CAChE,MAAM,MAAM,MAAM,SAAS,KAAK;CAChC,MAAM,SAAS,KAAK,UAAU,WAAW,IAAI,SAAS;CACtD,OAAO;EACN,MAAM;EACN,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,KAAK,KAAA;EACrC,SAAS,QAAQ;EACjB;EACA,GAAG,MAAM;EACT,GAAG,MAAM;EACT,QAAQ,UAAU,KAAK,MAAM,MAAM,IAAI,OAAO,KAAK,KAAA;EACnD,QAAQ,UAAU,KAAA;EAClB;CACD;AACD,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Chance and conditions of effects (E2E-PLAN AB6): an effect that happens by `chance`, drawn from the world's numbers so
3
+ * that every run comes out the same, and what an `if` asks of a unit (`UnitCondition`): a buff, health below a share, a
4
+ * hero, the tags of its type, enemy or ally; or code
5
+ */
6
+ import { type EffectValue, type UnitCondition, type UnitConditionCheck } from '#engine/defs';
7
+ import type { Entity, PlayerId } from '#engine/entity';
8
+ import type { World } from '#engine/world';
9
+ import type { EffectContext } from './effects';
10
+ /**
11
+ * Whether an effect that happens by chance (`EffectCommon.chance`) does this time: a draw from the world's numbers
12
+ * (`world.rng`) under its share at the context's level, or what its code says for the target. True with no chance, and
13
+ * then nothing is drawn (the world's numbers go on as they were); nothing is drawn for a share of 0 or of 1 either
14
+ *
15
+ * @beta
16
+ */
17
+ export declare function byChance(context: EffectContext, chance: EffectValue | undefined, target?: Entity): boolean;
18
+ /**
19
+ * Whether the type of a unit has one of the tags (`UnitTypeDef.tags`)
20
+ *
21
+ * @beta
22
+ */
23
+ export declare function hasTag(entity: Entity, tags: readonly string[]): boolean;
24
+ /**
25
+ * Whether what an `if` asks of a unit holds (`UnitCondition`, or code), as the effect of the context lands: every part
26
+ * it says. Nothing said holds; of no unit, nothing said does not
27
+ *
28
+ * @beta
29
+ */
30
+ export declare function conditionHolds(context: EffectContext, condition: UnitCondition | UnitConditionCheck | undefined, unit: Entity | undefined): boolean;
31
+ /**
32
+ * Whether what a `UnitCondition` says holds of a unit, out of an effect: every part it says. `is` (enemy or ally) is
33
+ * asked of the player `of`: it never holds with none. What an `if` asks (`conditionHolds`), what an effect's `where`
34
+ * asks and what a query of the world asks (`world.query`)
35
+ *
36
+ * @beta
37
+ */
38
+ export declare function unitMatches(world: World, condition: UnitCondition, unit: Entity, of?: PlayerId): boolean;