@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,677 @@
1
+ import { atan2 } from "../exactMath.js";
2
+ import { angleDiff, dist } from "../math.js";
3
+ import { at } from "../defs.js";
4
+ import { attackTiming, statsOf } from "../stats.js";
5
+ import { attackStarted, impact, missed, projectileRemoved, projectileSpawned, swingCancelled } from "../engineEvents.js";
6
+ import { distanceToEdge, edgeDistance, fighting, moving } from "../entity.js";
7
+ import { isDisarmed, isInvulnerable, isUntargetable, layerOf } from "../abilities/buffs.js";
8
+ import { cancellable } from "../hooks.js";
9
+ import { attackStat, farthestReach, groundAttack, pickAttack, rangeAgainst, reaches, tooNear } from "../attacks.js";
10
+ import { STRUCTURE_REACH, engageWith, engagedLike, isShunned, release, roomFor } from "../engagement.js";
11
+ import { faceTowards, halt, moveTo, moveToEntity, setAnchored } from "./movement.js";
12
+ import { FOE_BONUS, summoned } from "../summoned.js";
13
+ //#region src/systems/combat.ts
14
+ /** Extra reach allowed once a swing has started, so targets stepping back slightly still get hit */
15
+ /**
16
+ * How far past its range a swing already begun still lands (`engage`, and the stances pack, which lets go where the engine would chase)
17
+ *
18
+ * @internal
19
+ */
20
+ var SWING_SLACK = .75;
21
+ var FACING_TOLERANCE = .4;
22
+ /** The least a swing takes: a hit is never in the tick its swing began */
23
+ var MIN_SWING = 1e-6;
24
+ /** What a swing is aimed at when it is aimed at the ground. No entity has this id */
25
+ var GROUND = -1;
26
+ /**
27
+ * How often an attack up a cliff goes wide
28
+ *
29
+ * @internal
30
+ */
31
+ var UPHILL_MISS = .25;
32
+ /**
33
+ * Handed to the `canAttack` handlers, again and again, so that asking allocates nothing: one for each question under
34
+ * way, as a handler may ask again (could the target hit back?) while its caller's handlers are still being run
35
+ */
36
+ var askings = [];
37
+ /** How many questions are under way, one inside the other */
38
+ var asked = 0;
39
+ /**
40
+ * Whether an attacker may attack a target: its attack reaches it, it is an enemy, and the `canAttack` hook agrees.
41
+ * `ordered`: a player told it to (an attack order), which a game may let it do to its own side (`CanAttack.ordered`)
42
+ *
43
+ * @beta
44
+ */
45
+ function canAttack(world, attacker, target, ordered = false) {
46
+ if (!attacker.def.attacks?.length || !target.alive || target.hidden || target === attacker || target.def.invulnerable || target.def.targetableBy || target.isResource) return false;
47
+ if (target.buffs.length && (isInvulnerable(world, target) || isUntargetable(world, target))) return false;
48
+ if (attacker.buffs.length && isDisarmed(world, attacker)) return false;
49
+ const allowed = world.areEnemies(attacker.owner, target.owner) && world.settings.combat.pickAttack(world, attacker, target) >= 0;
50
+ if (!world.hooks.has("canAttack")) return allowed;
51
+ const asking = askings[asked] ??= cancellable({
52
+ attacker: void 0,
53
+ target: void 0,
54
+ cancelled: true,
55
+ ordered: false
56
+ });
57
+ asking.attacker = attacker;
58
+ asking.target = target;
59
+ asking.cancelled = !allowed;
60
+ asking.ordered = ordered;
61
+ asked++;
62
+ try {
63
+ return !world.hooks.run("canAttack", asking).cancelled;
64
+ } finally {
65
+ asked--;
66
+ }
67
+ }
68
+ /**
69
+ * Whether one of an attacker's attacks can hit a target where it is, whoever's it is: the ground, the air, the kinds it
70
+ * names (`pickAttack`). For a `canAttack` handler that lets a unit attack what is not an enemy
71
+ *
72
+ * @beta
73
+ */
74
+ function attackReaches(world, attacker, target) {
75
+ return pickAttack(world, attacker, target) >= 0;
76
+ }
77
+ function canSee(world, viewer, target) {
78
+ return world.isVisibleTo(target, world.player(viewer.owner).team);
79
+ }
80
+ /**
81
+ * Whether the target stands on higher ground than the attacker. Nothing is uphill from the air
82
+ *
83
+ * @beta
84
+ */
85
+ function shootsUphill(world, attacker, target) {
86
+ if (layerOf(world, attacker) === "air") return false;
87
+ const { terrain } = world;
88
+ return terrain.levelAt(target.pos.x, target.pos.z) > terrain.levelAt(attacker.pos.x, attacker.pos.z);
89
+ }
90
+ var searches = [];
91
+ /** How many searches are under way, one inside the other */
92
+ var searching = 0;
93
+ /** What a target with no room left for an attacker loses in its score: a free one of the same kind comes first, however far */
94
+ var CROWDED = 1e3;
95
+ /**
96
+ * Best enemy within `range` of the entity (its acquisition range by default), as the `targetScore` hook sees it. Those
97
+ * it leaves alone for now (`shun`) are not, unless `shunned` says to count them too: to know whether a fight is still on
98
+ */
99
+ var acquireTarget = (world, entity, range, shunned = false) => searchTarget(world, entity, range, shunned).target;
100
+ /**
101
+ * Best enemy it can hit from where it stands: within the range of the attack it would use against each (`pickAttack`),
102
+ * and `slack` more. For one that holds its ground
103
+ *
104
+ * @beta
105
+ */
106
+ function acquireInRange(world, entity, slack = 0) {
107
+ const attacks = entity.def.attacks;
108
+ if (!attacks?.length) return void 0;
109
+ const stats = statsOf(world, entity);
110
+ if (attacks.length === 1) return searchTarget(world, entity, attackStat(stats, attacks[0], "range") + slack).target;
111
+ return searchTarget(world, entity, farthestReach(entity.def, stats) + slack, false, slack).target;
112
+ }
113
+ /**
114
+ * What the `targetScore` hook makes of a target for an attacker, the engine's own score under it: what a search would
115
+ * weigh it at, or -Infinity for one a game's hook leaves out. For a rule that hands an attacker a target without
116
+ * searching (an ally's help), so that the game weighs it as it weighs any
117
+ */
118
+ function scoreTarget(world, entity, other) {
119
+ const distance = edgeDistance(entity, other);
120
+ const threat = other.def.threat ?? (other.def.attacks?.length ? 2 : other.isBuilding ? 0 : 1);
121
+ const engaged = other.id === entity.get(fighting)?.engaged ? 0 : engagedLike(world, other, entity);
122
+ const room = roomFor(world, other, entity);
123
+ const score = threat * 1e3 - distance - (engaged >= room ? CROWDED : 0);
124
+ if (!world.hooks.has("targetScore")) return score;
125
+ return world.hooks.run("targetScore", {
126
+ attacker: entity,
127
+ target: other,
128
+ distance,
129
+ engaged,
130
+ room,
131
+ score
132
+ }).score;
133
+ }
134
+ /** Nothing found, by an entity that does not attack */
135
+ var NOTHING = Object.freeze({
136
+ target: void 0,
137
+ passedOver: false
138
+ });
139
+ /**
140
+ * `acquireTarget`, and whether it passed over a target it leaves alone for now (`TargetFound`). What it gives back is
141
+ * the search's own, used again by the next search: read it at once
142
+ */
143
+ function searchTarget(world, entity, range, shunned = false, inRange) {
144
+ if (!entity.def.attacks?.length) return NOTHING;
145
+ const reach = range ?? world.settings.combat.acquisitionRange(world, entity);
146
+ if (range === void 0 && reach <= 0) return NOTHING;
147
+ const search = searches[searching] ??= {
148
+ candidates: [],
149
+ scoring: {
150
+ attacker: void 0,
151
+ target: void 0,
152
+ distance: 0,
153
+ engaged: 0,
154
+ room: 0,
155
+ score: 0
156
+ },
157
+ found: {
158
+ target: void 0,
159
+ passedOver: false
160
+ }
161
+ };
162
+ searching++;
163
+ try {
164
+ return bestTarget(world, entity, reach, shunned, search, inRange);
165
+ } finally {
166
+ searching--;
167
+ search.candidates.length = 0;
168
+ }
169
+ }
170
+ /** By world, then by owner: whether another owner is on the owner's side, for the grid to leave out cells of theirs alone */
171
+ var sidesOf = /* @__PURE__ */ new WeakMap();
172
+ function sideTest(world, owner) {
173
+ let byOwner = sidesOf.get(world);
174
+ if (!byOwner) sidesOf.set(world, byOwner = /* @__PURE__ */ new Map());
175
+ let side = byOwner.get(owner);
176
+ if (!side) byOwner.set(owner, side = (other) => world.areAllies(owner, other));
177
+ return side;
178
+ }
179
+ var hasDeadZone = (attack) => !!attack.minRange;
180
+ var firesOnTheMove = (attack) => !!attack.onTheMove;
181
+ /** `inRange`: only what the attack it would use reaches, and that much more (`acquireInRange`) */
182
+ function bestTarget(world, entity, reach, shunned, { candidates, scoring, found }, inRange) {
183
+ const hooked = world.hooks.has("targetScore");
184
+ world.spatial.query(entity.pos.x, entity.pos.z, reach + entity.def.radius, candidates, sideTest(world, entity.owner));
185
+ let best;
186
+ let bestScore = -Infinity;
187
+ let passed = false;
188
+ const { owner } = entity;
189
+ let sideOf = owner;
190
+ let ownSide = true;
191
+ const nearest = entity.def.attacks?.some(hasDeadZone) ?? false;
192
+ const brought = entity.get(summoned);
193
+ const foe = brought?.foe && brought.foeUntil > world.time ? brought.foe : 0;
194
+ for (const other of candidates) {
195
+ if (other.def.ignored) continue;
196
+ if (other.owner !== sideOf) {
197
+ sideOf = other.owner;
198
+ ownSide = world.areAllies(owner, sideOf);
199
+ }
200
+ if (ownSide) continue;
201
+ const distance = edgeDistance(entity, other);
202
+ if (distance > reach || !canAttack(world, entity, other) || !canSee(world, entity, other)) continue;
203
+ if (inRange !== void 0 && distance > rangeAgainst(world, entity, other) + inRange) continue;
204
+ if (nearest && tooNear(entity, other, Math.max(pickAttack(world, entity, other), 0))) continue;
205
+ if (!shunned && isShunned(world, entity, other)) {
206
+ passed = true;
207
+ continue;
208
+ }
209
+ const threat = other.def.threat ?? (other.def.attacks?.length ? 2 : other.isBuilding ? 0 : 1);
210
+ const engaged = other.id === entity.get(fighting)?.engaged ? 0 : engagedLike(world, other, entity);
211
+ const room = roomFor(world, other, entity);
212
+ let score = threat * 1e3 - distance - (engaged >= room ? CROWDED : 0);
213
+ if (foe && other.id === foe) score += FOE_BONUS;
214
+ if (hooked) {
215
+ scoring.attacker = entity;
216
+ scoring.target = other;
217
+ scoring.distance = distance;
218
+ scoring.engaged = engaged;
219
+ scoring.room = room;
220
+ scoring.score = score;
221
+ score = world.hooks.run("targetScore", scoring).score;
222
+ }
223
+ if (score > bestScore) {
224
+ bestScore = score;
225
+ best = other;
226
+ }
227
+ }
228
+ found.target = best;
229
+ found.passedOver = passed;
230
+ return found;
231
+ }
232
+ /**
233
+ * Calls off the swing under way, before its blow: said (`swingCancelled`) when there was one, for the screen to cut
234
+ * the attack to the walk. What has been swung already is not given back: the cooldown runs as it did
235
+ */
236
+ function cancelSwing(world, entity) {
237
+ const combat = entity.get(fighting);
238
+ if (!combat) return;
239
+ if (combat.swing > 0) {
240
+ const target = combat.swingTarget > 0 ? world.get(combat.swingTarget) : void 0;
241
+ combat.swing = 0;
242
+ combat.swingTarget = 0;
243
+ world.events.emit(swingCancelled, {
244
+ attacker: entity,
245
+ target,
246
+ weapon: combat.weapon ?? 0
247
+ });
248
+ return;
249
+ }
250
+ combat.swing = 0;
251
+ combat.swingTarget = 0;
252
+ }
253
+ var caught = [];
254
+ /** What an attack that hits an area does where it comes down */
255
+ function explode(world, point, hit, splash, owner, source) {
256
+ const { radius, fells, targets } = splash;
257
+ for (const other of [...world.spatial.query(point.x, point.z, radius, caught)]) {
258
+ if (!other.alive || other.hidden) continue;
259
+ const distance = distanceToEdge(point, other);
260
+ if (distance > radius) continue;
261
+ if (other.def.fellable) {
262
+ if (fells) world.kill(other, source, false, "felled");
263
+ continue;
264
+ }
265
+ if (other.def.invulnerable || other.def.targetableBy) continue;
266
+ if (other.buffs.length && isUntargetable(world, other)) continue;
267
+ if (!reaches(targets, other, other.flying ? layerOf(world, other) : "ground")) continue;
268
+ const share = world.settings.combat.splash(world, source, other, distance, radius);
269
+ if (share <= 0) continue;
270
+ world.damage(other, hit.damage * share, source, {
271
+ damageType: hit.type,
272
+ crit: hit.crit,
273
+ attack: true,
274
+ tags: hit.tags,
275
+ how: hit.how
276
+ });
277
+ }
278
+ world.events.emit(impact, {
279
+ x: point.x,
280
+ z: point.z,
281
+ radius,
282
+ owner
283
+ });
284
+ }
285
+ var splashOf = (attack, radius = attack.splash) => radius ? {
286
+ radius,
287
+ fells: attack.fells ?? false,
288
+ targets: attack.targets
289
+ } : void 0;
290
+ /** The attack of the entity at that place goes off: at the target, or at a spot on the ground */
291
+ function landHit(world, attacker, weapon, target, point = target.pos) {
292
+ const attack = attacker.def.attacks?.[weapon];
293
+ if (!attack) return;
294
+ const stats = statsOf(world, attacker);
295
+ const critical = world.settings.combat.critical(world, attacker, stats);
296
+ let crit = critical !== void 0;
297
+ const chance = target ? world.settings.combat.missChance(world, attacker, target) : 0;
298
+ let miss = chance > 0 && world.rng.next() < chance;
299
+ let damage = attackStat(stats, attack, "damage") * (critical ?? 1);
300
+ let type = attack.damageType ?? "physical";
301
+ let splash = splashOf(attack);
302
+ let speed = attack.projectileSpeed ?? 0;
303
+ let look;
304
+ let tags;
305
+ let how = typeof attack.how === "function" ? attack.how({
306
+ attacker,
307
+ target,
308
+ damage,
309
+ type,
310
+ crit,
311
+ tags
312
+ }) : attack.how;
313
+ if (world.hooks.has("beforeAttack")) {
314
+ const before = world.hooks.run("beforeAttack", {
315
+ attacker,
316
+ target,
317
+ point,
318
+ weapon,
319
+ damage,
320
+ type,
321
+ crit,
322
+ miss,
323
+ splash: splash?.radius,
324
+ projectileSpeed: speed,
325
+ look,
326
+ tags,
327
+ how,
328
+ cancelled: false
329
+ });
330
+ if (before.cancelled) return;
331
+ ({damage, type, crit, miss, look, tags, how} = before);
332
+ speed = before.projectileSpeed;
333
+ splash = splashOf(attack, before.splash);
334
+ }
335
+ if (speed > 0) {
336
+ const projectile = {
337
+ id: world.newId(),
338
+ source: attacker.id,
339
+ owner: attacker.owner,
340
+ target: splash || !target ? 0 : target.id,
341
+ x: attacker.pos.x,
342
+ z: attacker.pos.z,
343
+ prevX: attacker.pos.x,
344
+ prevZ: attacker.pos.z,
345
+ sx: attacker.pos.x,
346
+ sz: attacker.pos.z,
347
+ tx: point.x,
348
+ tz: point.z,
349
+ speed,
350
+ damage,
351
+ type,
352
+ crit,
353
+ miss,
354
+ splash,
355
+ kind: attacker.def.id,
356
+ look,
357
+ tags,
358
+ ...how && { how },
359
+ ...weapon > 0 && { weapon }
360
+ };
361
+ world.projectiles.push(projectile);
362
+ world.events.emit(projectileSpawned, projectile);
363
+ } else if (miss) world.events.emit(missed, {
364
+ x: point.x,
365
+ z: point.z,
366
+ source: attacker,
367
+ target
368
+ });
369
+ else if (splash) explode(world, point, {
370
+ damage,
371
+ type,
372
+ crit,
373
+ tags,
374
+ how,
375
+ weapon
376
+ }, splash, attacker.owner, attacker);
377
+ else if (target && !(target.buffs.length && isUntargetable(world, target))) {
378
+ world.damage(target, damage, attacker, {
379
+ damageType: type,
380
+ crit,
381
+ attack: true,
382
+ tags,
383
+ how
384
+ });
385
+ const cleave = attacker.alive ? world.settings.combat.cleave(world, attacker, target, weapon) : void 0;
386
+ if (cleave) cleaveAround(world, attacker, target, attack, cleave, {
387
+ damage,
388
+ type,
389
+ crit,
390
+ tags,
391
+ how,
392
+ weapon
393
+ });
394
+ }
395
+ }
396
+ /**
397
+ * What a blow from up close of the attacker's weapon at that place cleaves (`AttackDef.cleave`, `BuffDef.cleave`): the
398
+ * attack's own, or a buff's at its level, whichever has the larger part. Nothing for none. The engine's
399
+ * `RuleSettings.combat.cleave`
400
+ *
401
+ * @beta
402
+ */
403
+ function cleaveOf(world, attacker, _target, weapon) {
404
+ const own = attacker.def.attacks?.[weapon]?.cleave;
405
+ let best = own && {
406
+ part: at(own.part, 1),
407
+ radius: own.radius,
408
+ angle: own.angle
409
+ };
410
+ for (const instance of attacker.buffs) {
411
+ const cleave = world.registry.buff(instance.id).cleave;
412
+ if (!cleave) continue;
413
+ const part = at(cleave.part, instance.level);
414
+ if (!best || part > best.part) best = {
415
+ part,
416
+ radius: cleave.radius,
417
+ angle: cleave.angle
418
+ };
419
+ }
420
+ return best && best.part > 0 && best.radius > 0 ? best : void 0;
421
+ }
422
+ var cleft = [];
423
+ /**
424
+ * The enemies of the attacker round a target it struck from up close take their part of the blow: within `radius` of
425
+ * the target's edge, and within the cone of `angle` from the attacker through the target where it says. Not the target,
426
+ * nor what the attack cannot hit. Not an attack of theirs: nothing an attack sets off (`onHit`, life steal) goes off
427
+ * for each, and its tags say `cleave`
428
+ */
429
+ function cleaveAround(world, attacker, target, attack, cleave, hit) {
430
+ const facing = atan2(target.pos.x - attacker.pos.x, target.pos.z - attacker.pos.z);
431
+ const tags = hit.tags ? [...hit.tags, "cleave"] : ["cleave"];
432
+ const reach = cleave.radius + target.def.radius + 2;
433
+ for (const other of [...world.spatial.query(target.pos.x, target.pos.z, reach, cleft)]) {
434
+ if (other === target || other === attacker || !other.alive || other.hidden || other.isResource) continue;
435
+ if (!world.areEnemies(attacker.owner, other.owner) || other.def.invulnerable || other.def.targetableBy) continue;
436
+ if (other.buffs.length && isUntargetable(world, other)) continue;
437
+ if (!reaches(attack.targets, other, other.flying ? layerOf(world, other) : "ground")) continue;
438
+ if (edgeDistance(target, other) > cleave.radius) continue;
439
+ if (cleave.angle !== void 0 && Math.abs(angleDiff(atan2(other.pos.x - attacker.pos.x, other.pos.z - attacker.pos.z), facing)) > cleave.angle / 2) continue;
440
+ world.damage(other, hit.damage * cleave.part, attacker, {
441
+ damageType: hit.type,
442
+ crit: hit.crit,
443
+ attack: false,
444
+ tags,
445
+ how: hit.how
446
+ });
447
+ }
448
+ }
449
+ /**
450
+ * A swing of the attack at that place begun: its time to the hit less how late in the tick the swing was due (the
451
+ * cooldown run past 0), so that the attacks keep to the attack speed instead of each waiting out a part of a tick (bug
452
+ * 17). At least a moment, so that the hit is the next tick's. Which attack swings is kept for a unit with more than one
453
+ */
454
+ function startSwing(world, entity, combat, weapon) {
455
+ combat.swing = Math.max(attackTiming(world, entity, weapon).swing + Math.min(combat.cooldown, 0), MIN_SWING);
456
+ combat.cooldown = 0;
457
+ if (weapon > 0 || combat.weapon !== void 0) combat.weapon = weapon;
458
+ }
459
+ /**
460
+ * A swing landed: the time to the next, of whichever attack, is the period of the one that swung less its swing, less
461
+ * how far past the hit this tick went; and where the attack has a recovery (`AttackDef.recovery`), what it is told is
462
+ * held for so long. Gives the attack that swung, by place
463
+ */
464
+ function endSwing(world, entity, combat) {
465
+ const weapon = combat.weapon ?? 0;
466
+ const { swing, period, recovery } = attackTiming(world, entity, weapon);
467
+ combat.cooldown = Math.max(period - swing + combat.swing, 0);
468
+ if (recovery > 0 && recovery + combat.swing > 0) combat.recovery = recovery + combat.swing;
469
+ combat.swing = 0;
470
+ combat.swingTarget = 0;
471
+ return weapon;
472
+ }
473
+ /** One tick of attacking a spot on the ground, for attacks that can. Getting into range is up to the caller */
474
+ function bombard(world, entity, point, dt) {
475
+ const combat = entity.get(fighting);
476
+ const weapon = groundAttack(entity.def);
477
+ if (!combat || weapon < 0) return "outOfRange";
478
+ const swinging = combat.swing > 0 && combat.swingTarget === GROUND;
479
+ const range = attackStat(statsOf(world, entity), entity.def.attacks[swinging ? combat.weapon ?? 0 : weapon], "range");
480
+ if (dist(entity.pos, point) - entity.def.radius > range + (swinging ? .75 : 0)) {
481
+ cancelSwing(world, entity);
482
+ return "outOfRange";
483
+ }
484
+ const m = entity.get(moving);
485
+ if (m) {
486
+ if (m.status === "moving") halt(world, entity);
487
+ setAnchored(world, entity, true);
488
+ }
489
+ faceTowards(world, entity, point, dt);
490
+ if (swinging) {
491
+ combat.swing -= dt;
492
+ if (combat.swing <= 0) landHit(world, entity, endSwing(world, entity, combat), void 0, point);
493
+ return "attacking";
494
+ }
495
+ const facing = atan2(point.x - entity.pos.x, point.z - entity.pos.z);
496
+ if (combat.cooldown <= 0 && Math.abs(angleDiff(entity.facing, facing)) < FACING_TOLERANCE) {
497
+ startSwing(world, entity, combat, weapon);
498
+ combat.swingTarget = GROUND;
499
+ world.events.emit(attackStarted, {
500
+ attacker: entity,
501
+ weapon
502
+ });
503
+ }
504
+ return "attacking";
505
+ }
506
+ /**
507
+ * Drives one tick of fighting a target: close the distance, turn, swing, hit.
508
+ * Every order that fights (attack, attack-move, hold, idle auto-attack) goes through here.
509
+ */
510
+ function engage(world, entity, target, dt, chase, ordered = false) {
511
+ const combat = entity.get(fighting);
512
+ const attacks = entity.def.attacks;
513
+ if (!combat || !attacks?.length || !target || !canAttack(world, entity, target, ordered) || !canSee(world, entity, target)) {
514
+ cancelSwing(world, entity);
515
+ release(entity, world);
516
+ return "invalid";
517
+ }
518
+ engageWith(world, entity, target);
519
+ const distance = edgeDistance(entity, target);
520
+ const swinging = combat.swing > 0 && combat.swingTarget === target.id;
521
+ const weapon = attacks.length === 1 ? 0 : swinging ? combat.weapon ?? 0 : Math.max(world.settings.combat.pickAttack(world, entity, target), 0);
522
+ const range = attackStat(statsOf(world, entity), attacks[weapon], "range") + (target.isStructure ? STRUCTURE_REACH : 0);
523
+ const near = !swinging ? attacks[weapon].minRange : void 0;
524
+ if (near && distance < near) {
525
+ cancelSwing(world, entity);
526
+ if (!ordered || !chase || !entity.get(moving)) {
527
+ release(entity, world);
528
+ return "outOfRange";
529
+ }
530
+ const away = dist(entity.pos, target.pos) || 1;
531
+ const to = Math.min(near + .5, (near + range) / 2) + entity.def.radius + target.def.radius;
532
+ const step = {
533
+ x: target.pos.x + (entity.pos.x - target.pos.x) / away * to,
534
+ z: target.pos.z + (entity.pos.z - target.pos.z) / away * to
535
+ };
536
+ const m = entity.get(moving);
537
+ if (m.status !== "moving" || m.goalEntity || dist(m.goal, step) > .5) moveTo(world, entity, step);
538
+ return "chasing";
539
+ }
540
+ if (distance > range + (swinging ? .75 : 0)) {
541
+ cancelSwing(world, entity);
542
+ if (!chase || !entity.get(moving)) {
543
+ release(entity, world);
544
+ return "outOfRange";
545
+ }
546
+ moveToEntity(world, entity, target, Math.max(range - .15, .05));
547
+ return "chasing";
548
+ }
549
+ const m = entity.get(moving);
550
+ if (m) {
551
+ if (m.status === "moving") halt(world, entity);
552
+ setAnchored(world, entity, true);
553
+ }
554
+ faceTowards(world, entity, target.pos, dt);
555
+ if (swinging) {
556
+ combat.swing -= dt;
557
+ if (combat.swing <= 0) landHit(world, entity, endSwing(world, entity, combat), target);
558
+ return "attacking";
559
+ }
560
+ const facing = atan2(target.pos.x - entity.pos.x, target.pos.z - entity.pos.z);
561
+ if (combat.cooldown <= 0 && Math.abs(angleDiff(entity.facing, facing)) < FACING_TOLERANCE) {
562
+ startSwing(world, entity, combat, weapon);
563
+ combat.swingTarget = target.id;
564
+ world.events.emit(attackStarted, {
565
+ attacker: entity,
566
+ target,
567
+ weapon
568
+ });
569
+ }
570
+ return "attacking";
571
+ }
572
+ /**
573
+ * One tick of an attack that fires as the unit walks (`AttackDef.onTheMove`): what it shot at last tick while it can
574
+ * still be hit from where the unit is, else the best in range (looked for every fourth tick), swung at without a stop
575
+ * or a turn. Gives back what it is shooting at, none for nothing
576
+ *
577
+ * @beta
578
+ */
579
+ function fireOnTheMove(world, entity, current, dt) {
580
+ const combat = entity.get(fighting);
581
+ const attacks = entity.def.attacks;
582
+ if (!combat || !attacks?.some(firesOnTheMove)) return void 0;
583
+ if (attacks.length && entity.buffs.length && isDisarmed(world, entity)) return void 0;
584
+ const usable = (target) => {
585
+ if (!target || !canAttack(world, entity, target) || !canSee(world, entity, target)) return false;
586
+ const weapon = attacks.length === 1 ? 0 : Math.max(pickAttack(world, entity, target), 0);
587
+ if (!attacks[weapon].onTheMove || tooNear(entity, target, weapon)) return false;
588
+ return edgeDistance(entity, target) <= attackStat(statsOf(world, entity), attacks[weapon], "range");
589
+ };
590
+ let target = current === void 0 ? void 0 : world.get(current);
591
+ if (!usable(target)) {
592
+ if (combat.swing > 0 && combat.swingTarget === current) cancelSwing(world, entity);
593
+ target = (world.tick + entity.id) % 4 === 0 ? acquireInRange(world, entity) : void 0;
594
+ if (!usable(target)) return void 0;
595
+ }
596
+ if (combat.swing > 0 && combat.swingTarget === target.id) {
597
+ combat.swing -= dt;
598
+ if (combat.swing <= 0) landHit(world, entity, endSwing(world, entity, combat), target);
599
+ return target.id;
600
+ }
601
+ if (combat.cooldown <= 0) {
602
+ const weapon = attacks.length === 1 ? 0 : Math.max(pickAttack(world, entity, target), 0);
603
+ startSwing(world, entity, combat, weapon);
604
+ combat.swingTarget = target.id;
605
+ world.events.emit(attackStarted, {
606
+ attacker: entity,
607
+ target,
608
+ weapon
609
+ });
610
+ }
611
+ return target.id;
612
+ }
613
+ /** Stops fighting: aborts the swing and lets the unit be pushed around again. */
614
+ function disengage(world, entity) {
615
+ cancelSwing(world, entity);
616
+ release(entity, world);
617
+ setAnchored(world, entity, false);
618
+ }
619
+ var combatSystem = {
620
+ name: "combat",
621
+ phase: "resolve",
622
+ update(world, dt) {
623
+ for (const entity of world.index.with(fighting)) {
624
+ const combat = entity.get(fighting);
625
+ if (!combat) continue;
626
+ if (combat.cooldown > 0) combat.cooldown -= dt;
627
+ else if (combat.cooldown < 0) combat.cooldown = 0;
628
+ if (combat.recovery !== void 0 && (combat.recovery -= dt) <= 0) delete combat.recovery;
629
+ }
630
+ const { projectiles } = world;
631
+ for (let i = projectiles.length - 1; i >= 0; i--) {
632
+ const p = projectiles[i];
633
+ const target = world.get(p.target);
634
+ if (target && !target.hidden) {
635
+ p.tx = target.pos.x;
636
+ p.tz = target.pos.z;
637
+ }
638
+ p.prevX = p.x;
639
+ p.prevZ = p.z;
640
+ const dx = p.x - p.tx;
641
+ const dz = p.z - p.tz;
642
+ const remaining = Math.sqrt(dx * dx + dz * dz);
643
+ const step = p.speed * dt;
644
+ if (remaining <= step + (target ? target.def.radius * .5 : 0)) {
645
+ if (p.miss) world.events.emit(missed, {
646
+ x: p.tx,
647
+ z: p.tz,
648
+ source: world.get(p.source),
649
+ target
650
+ });
651
+ else if (p.splash) explode(world, {
652
+ x: p.tx,
653
+ z: p.tz
654
+ }, p, p.splash, p.owner, world.get(p.source));
655
+ else if (target && !(target.buffs.length && isUntargetable(world, target))) {
656
+ const source = world.get(p.source);
657
+ world.damage(target, p.damage, source, {
658
+ damageType: p.type,
659
+ crit: p.crit,
660
+ attack: true,
661
+ tags: p.tags,
662
+ how: p.how
663
+ });
664
+ }
665
+ projectiles.splice(i, 1);
666
+ world.events.emit(projectileRemoved, p);
667
+ continue;
668
+ }
669
+ p.x += (p.tx - p.x) / remaining * step;
670
+ p.z += (p.tz - p.z) / remaining * step;
671
+ }
672
+ }
673
+ };
674
+ //#endregion
675
+ export { STRUCTURE_REACH, SWING_SLACK, UPHILL_MISS, acquireInRange, acquireTarget, attackReaches, bombard, canAttack, canSee, cancelSwing, cleaveOf, combatSystem, disengage, engage, fireOnTheMove, scoreTarget, searchTarget, shootsUphill };
676
+
677
+ //# sourceMappingURL=combat.js.map