@v12-engine/engine 0.1.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
@@ -0,0 +1,715 @@
1
+ import { exp } from "../exactMath.js";
2
+ import { distSq } from "../math.js";
3
+ import { heroOfState } from "../hero.js";
4
+ import { farthestReach } from "../attacks.js";
5
+ import { defineModule, moduleKey } from "./module.js";
6
+ import "./reach.js";
7
+ import { consider, curve, defineGoal, goals } from "./goals.js";
8
+ import { rules, words } from "./rules.js";
9
+ import { point, where } from "./geometry.js";
10
+ import { defineTask } from "./task.js";
11
+ import { squads } from "./squads.js";
12
+ import { Team, team } from "./team.js";
13
+ import { defineBrain } from "./define.js";
14
+ import { micro } from "./micro.js";
15
+ //#region src/ai/lanes.ts
16
+ /** How far from a lane's line a unit is on it */
17
+ var ON_LANE = 7;
18
+ /** How far from a lane's line a tower is by it */
19
+ var BY_LANE = 9;
20
+ /** How near an ally's hero one of theirs is for the two to be in a fight */
21
+ var FIGHTING = 10;
22
+ /** How far behind where it stands a hero falls back to, where none of its side's towers is nearer */
23
+ var FALL_BACK = 14;
24
+ /** Seconds between two recalls of a hero: one that was hurt in the channel walks */
25
+ var RECALL_AGAIN = 10;
26
+ /**
27
+ * Where a place is along a line of points, and how far off it: `along` in cells from the first point, `off` from the
28
+ * line's nearest point. What every question of a lane comes to
29
+ */
30
+ function measure(points, at) {
31
+ let best = Infinity;
32
+ let along = 0;
33
+ let walked = 0;
34
+ for (let i = 1; i < points.length; i++) {
35
+ const a = points[i - 1];
36
+ const dx = points[i].x - a.x;
37
+ const dz = points[i].z - a.z;
38
+ const lengthSq = dx * dx + dz * dz;
39
+ const length = Math.sqrt(lengthSq);
40
+ const t = lengthSq > 0 ? Math.min(Math.max(((at.x - a.x) * dx + (at.z - a.z) * dz) / lengthSq, 0), 1) : 0;
41
+ const ox = at.x - (a.x + dx * t);
42
+ const oz = at.z - (a.z + dz * t);
43
+ const off = ox * ox + oz * oz;
44
+ if (off < best) {
45
+ best = off;
46
+ along = walked + length * t;
47
+ }
48
+ walked += length;
49
+ }
50
+ return {
51
+ along,
52
+ off: Math.sqrt(best)
53
+ };
54
+ }
55
+ /** The length of a line of points */
56
+ function lengthOf(points) {
57
+ let length = 0;
58
+ for (let i = 1; i < points.length; i++) length += Math.sqrt(distSq(points[i - 1], points[i]));
59
+ return length;
60
+ }
61
+ /** The point so far along a line of points from its first */
62
+ function pointAlong(points, along) {
63
+ let left = Math.max(0, along);
64
+ for (let i = 1; i < points.length; i++) {
65
+ const a = points[i - 1];
66
+ const length = Math.sqrt(distSq(a, points[i]));
67
+ if (left <= length && length > 0) {
68
+ const t = left / length;
69
+ return {
70
+ x: a.x + (points[i].x - a.x) * t,
71
+ z: a.z + (points[i].z - a.z) * t
72
+ };
73
+ }
74
+ left -= length;
75
+ }
76
+ return point(points[points.length - 1]);
77
+ }
78
+ /**
79
+ * Where a place is on a side's lane: how far along from the side's end, how far off the line
80
+ *
81
+ * @beta
82
+ */
83
+ function onLane(lane, at) {
84
+ const measured = measure(lane.points, at);
85
+ return {
86
+ along: lane.from === 0 ? measured.along : lane.length - measured.along,
87
+ off: measured.off
88
+ };
89
+ }
90
+ /**
91
+ * The point so far along a side's lane from its end
92
+ *
93
+ * @beta
94
+ */
95
+ function laneAt(lane, along) {
96
+ const clamped = Math.min(Math.max(along, 0), lane.length);
97
+ return pointAlong(lane.points, lane.from === 0 ? clamped : lane.length - clamped);
98
+ }
99
+ /** A unit's share of its health */
100
+ function health(ai, unit) {
101
+ const max = unit.maxHealth ?? ai.view.strength.statsOf(unit).health;
102
+ return max > 0 ? unit.health / max : 1;
103
+ }
104
+ /** How far a tower reaches: its attack's range and its size, a cell more */
105
+ function reachOf(ai, tower) {
106
+ return farthestReach(ai.view.def(tower), ai.view.strength.statsOf(tower)) + ai.view.def(tower).radius + 1;
107
+ }
108
+ /** Their towers, as remembered: buildings of theirs that attack */
109
+ var theirTowers = (ai) => ai.cache("lanes.theirTowers", () => ai.view.enemies.known().buildings().alive().where((_entity, def) => !!def.attacks?.length));
110
+ /** Whether a place is in reach of one of their towers with no minion of its side in that tower's reach to take the shots */
111
+ function exposed(ai, at, pad = 0) {
112
+ for (const tower of theirTowers(ai)) {
113
+ const reach = reachOf(ai, tower) + pad;
114
+ if (distSq(tower, at) > reach * reach) continue;
115
+ if (!ai.view.all.units().alive().near(tower, reachOf(ai, tower)).where((unit) => ai.view.isFriendly(unit) && !heroOfState(unit) && !ai.view.def(unit).hero).length) return true;
116
+ }
117
+ return false;
118
+ }
119
+ /**
120
+ * Whom a hero of a lanes brain hits (micro's `targets`, the file's comment): the minion its next hit kills, one of their
121
+ * heroes not under their tower, a building (a tower its side's minions take the shots of), the weakest of the rest; never
122
+ * what stands where their tower would turn on it
123
+ *
124
+ * @beta
125
+ */
126
+ var lanesTargets = (options = {}) => (ai, squad, foes) => {
127
+ const { view } = ai;
128
+ const hitters = squad.units();
129
+ const middle = hitters.centre();
130
+ if (!middle) return void 0;
131
+ const safe = foes.where((foe, def) => {
132
+ if (def.kind === "building") return def.attacks?.length ? !exposed(ai, foe, -reachOf(ai, foe)) : !exposed(ai, foe);
133
+ if (def.hero || heroOfState(foe)) return !theirTowers(ai).some((tower) => {
134
+ const reach = reachOf(ai, tower) + 2;
135
+ return distSq(tower, foe) <= reach * reach;
136
+ });
137
+ return !exposed(ai, foe);
138
+ });
139
+ if (!safe.length) return void 0;
140
+ const nearest = (set) => set.reduce((best, each) => !best || distSq(each, middle) < distSq(best, middle) ? each : best, void 0);
141
+ if (options.lastHits !== false) {
142
+ const blow = Math.max(0, ...hitters.map((unit) => view.strength.statsOf(unit).attackDamage));
143
+ const last = nearest(safe.where((foe, def) => def.kind === "unit" && !def.hero && !heroOfState(foe) && foe.health <= blow).items);
144
+ if (last) return last;
145
+ }
146
+ const heroes = safe.where((foe, def) => !!def.hero || !!heroOfState(foe));
147
+ if (heroes.length) return heroes.items.reduce((best, each) => health(ai, each) < health(ai, best) ? each : best);
148
+ const buildings = safe.buildings();
149
+ if (buildings.length) return nearest(buildings.items);
150
+ return safe.items.reduce((best, each) => each.health < best.health || each.health === best.health && distSq(each, middle) < distSq(best, middle) ? each : best);
151
+ };
152
+ /**
153
+ * The lanes of a lanes brain, read as its side sees them, and what its heroes do on them (`ai.module('lanes')`'s
154
+ * `play`): the module's goals read it
155
+ *
156
+ * @beta
157
+ */
158
+ var LanesPlay = class {
159
+ ai;
160
+ options;
161
+ /** What the play keeps between thinks, as `LanesPlayMemory`: the heroes resting and when each was sent home */
162
+ memory = {
163
+ v: 1,
164
+ resting: {},
165
+ recalled: {},
166
+ sent: {}
167
+ };
168
+ sides;
169
+ constructor(ai, options) {
170
+ this.ai = ai;
171
+ this.options = options;
172
+ }
173
+ /** The lanes as its side reads them: each measured from the end its side's spawner stands at. None it has no end of */
174
+ lanes() {
175
+ if (this.sides) return this.sides;
176
+ const { view } = this.ai;
177
+ const only = this.options.lanes;
178
+ const ours = (end) => !!end && (end.player === view.playerId || view.player(end.player)?.relation === "ally");
179
+ const found = [];
180
+ for (const lane of view.lanes()) {
181
+ if (only && !only.includes(lane.path)) continue;
182
+ const from = ours(lane.ends[0]) ? 0 : ours(lane.ends[1]) ? 1 : void 0;
183
+ if (from === void 0) continue;
184
+ found.push({
185
+ path: lane.path,
186
+ points: lane.points,
187
+ from,
188
+ length: lengthOf(lane.points)
189
+ });
190
+ }
191
+ if (view.players.length) this.sides = found;
192
+ return found;
193
+ }
194
+ /** A lane of its side's, by its path's name */
195
+ lane(path) {
196
+ return this.lanes().find((lane) => lane.path === path);
197
+ }
198
+ /** The units it commands: its heroes, or what `units` says. Alive */
199
+ commanded(units = this.ai.view.mine) {
200
+ const { units: commands } = this.options;
201
+ const alive = units.units().alive();
202
+ return commands ? alive.where((unit) => commands(this.ai, unit)) : alive.heroes();
203
+ }
204
+ /**
205
+ * Where its heroes rest: `home`, else its side's building nearest the middle of its side's ends of the lanes (a core),
206
+ * else that middle, else its first building
207
+ */
208
+ home() {
209
+ const { home } = this.options;
210
+ if (home) return typeof home === "function" ? home(this.ai) : point(home);
211
+ const ends = this.lanes().map((lane) => laneAt(lane, 0));
212
+ if (ends.length) {
213
+ const middle = {
214
+ x: ends.reduce((sum, end) => sum + end.x, 0) / ends.length,
215
+ z: ends.reduce((sum, end) => sum + end.z, 0) / ends.length
216
+ };
217
+ const { view } = this.ai;
218
+ const building = view.all.buildings().alive().where((entity) => view.isFriendly(entity)).near(middle, 16).nearest(middle);
219
+ return building ? point(building) : middle;
220
+ }
221
+ const first = this.ai.view.home();
222
+ return first && point(first);
223
+ }
224
+ /** Each lane as it stands this think: fronts, minions, heroes, towers. Once a think */
225
+ states() {
226
+ return this.ai.cache("lanes.states", () => this.lanes().map((lane) => this.stateOf(lane)));
227
+ }
228
+ /** One lane as it stands this think */
229
+ state(path) {
230
+ return this.states().find((state) => state.lane.path === path);
231
+ }
232
+ stateOf(lane) {
233
+ const { ai } = this;
234
+ const { view } = ai;
235
+ const state = {
236
+ lane,
237
+ ours: [],
238
+ theirs: [],
239
+ allies: [],
240
+ enemies: [],
241
+ ourTowers: [],
242
+ theirTowers: []
243
+ };
244
+ for (const unit of view.all.units().alive()) {
245
+ const friendly = view.isFriendly(unit);
246
+ if (!friendly && !(view.isHostile(unit) && !view.isCreep(unit))) continue;
247
+ const { along, off } = onLane(lane, unit);
248
+ if (off > ON_LANE) continue;
249
+ if (!!view.def(unit).hero || !!heroOfState(unit)) {
250
+ if (!friendly) state.enemies.push(unit);
251
+ else if (unit.owner !== view.playerId) state.allies.push(unit);
252
+ continue;
253
+ }
254
+ if (friendly) {
255
+ state.ours.push(unit);
256
+ if (state.front === void 0 || along > state.front) state.front = along;
257
+ } else {
258
+ state.theirs.push(unit);
259
+ if (state.theirFront === void 0 || along < state.theirFront) state.theirFront = along;
260
+ }
261
+ }
262
+ const towers = view.all.known().buildings().alive().where((_entity, def) => !!def.attacks?.length);
263
+ for (const tower of towers) {
264
+ const { along, off } = onLane(lane, tower);
265
+ if (off > BY_LANE) continue;
266
+ if (view.isFriendly(tower)) state.ourTowers.push({
267
+ tower,
268
+ at: along
269
+ });
270
+ else if (view.isHostile(tower) && !view.isCreep(tower)) state.theirTowers.push({
271
+ tower,
272
+ at: along
273
+ });
274
+ }
275
+ return state;
276
+ }
277
+ /**
278
+ * Where a hero walks on a lane now: a little behind its side's front; with no wave there, by its side's furthest tower
279
+ * on it (or a little out of its end); never into reach of a tower of theirs that no minion of its side is in reach of
280
+ */
281
+ spot(path) {
282
+ const state = this.state(path);
283
+ if (!state) return void 0;
284
+ const { lane } = state;
285
+ const behind = this.options.behind ?? 3;
286
+ let along;
287
+ if (state.front !== void 0) along = state.front - behind;
288
+ else along = Math.max(6, ...state.ourTowers.map((each) => each.at - 2));
289
+ for (const { tower, at } of state.theirTowers) {
290
+ const reach = reachOf(this.ai, tower);
291
+ if (!state.ours.some((unit) => distSq(unit, tower) <= reach * reach) && along > at - reach - 1) along = at - reach - 1;
292
+ }
293
+ return laneAt(lane, Math.max(0, along));
294
+ }
295
+ /**
296
+ * What is at stake on a lane, 0..1: how far along its side's wave is (a tower of theirs to take, their core), or how
297
+ * near its side's end theirs is (its own towers under attack), whichever is more
298
+ */
299
+ stake(path) {
300
+ const state = this.state(path);
301
+ if (!state) return 0;
302
+ const { length } = state.lane;
303
+ const ours = state.front === void 0 ? 0 : state.front / length;
304
+ const theirs = state.theirFront === void 0 ? 0 : 1 - state.theirFront / length;
305
+ return Math.min(1, Math.max(ours, theirs));
306
+ }
307
+ /** Where a hero outmatched on a lane falls back to: its side's nearest tower behind it, or so far back along it */
308
+ fallBack(path, from) {
309
+ const state = this.state(path);
310
+ if (!state) return void 0;
311
+ const { along } = onLane(state.lane, from);
312
+ const behind = state.ourTowers.filter((each) => each.at < along - 2).sort((a, b) => b.at - a.at)[0];
313
+ return behind ? laneAt(state.lane, behind.at - 2) : laneAt(state.lane, along - FALL_BACK);
314
+ }
315
+ /** The odds of its side against theirs where a unit stands (`Strength.odds`): their towers that reach there count */
316
+ oddsAt(at, reach = 9) {
317
+ const { view } = this.ai;
318
+ const near = view.all.units().alive().near(at, reach);
319
+ const ours = near.where((unit) => view.isFriendly(unit));
320
+ const theirs = [...near.where((unit) => view.isHostile(unit)).items];
321
+ for (const tower of theirTowers(this.ai)) {
322
+ const towerReach = reachOf(this.ai, tower);
323
+ if (distSq(tower, at) <= towerReach * towerReach) theirs.push(tower);
324
+ }
325
+ return theirs.length ? view.strength.odds(ours, theirs) : 1;
326
+ }
327
+ /** The heroes resting, alive */
328
+ resting() {
329
+ return this.commanded().where((hero) => this.memory.resting[hero.id] !== void 0).items;
330
+ }
331
+ /** Heroes turned for home, those back out: what the `lanes.back` goal reads. Each think, before the goals */
332
+ think() {
333
+ const { ai } = this;
334
+ const { memory } = this;
335
+ const backAt = this.options.backAt ?? .35;
336
+ const returnAt = this.options.returnAt ?? .85;
337
+ const restFor = (this.options.restFor ?? 40) * ai.session.tickRate;
338
+ const heroes = this.commanded();
339
+ for (const id in memory.resting) if (!heroes.has(Number(id))) delete memory.resting[id];
340
+ for (const id in memory.recalled) if (!heroes.has(Number(id))) delete memory.recalled[id];
341
+ for (const id in memory.sent) if (memory.resting[id] === void 0) delete memory.sent[id];
342
+ for (const hero of heroes) {
343
+ const share = health(ai, hero);
344
+ const since = memory.resting[hero.id];
345
+ if (since === void 0) {
346
+ if (share < backAt) {
347
+ memory.resting[hero.id] = ai.tick;
348
+ ai.decide(`${hero.type} ${hero.id} goes home to rest at ${Math.round(share * 100)}%`, { kind: "lanes" });
349
+ }
350
+ } else if (share >= returnAt || ai.tick - since >= restFor) {
351
+ delete memory.resting[hero.id];
352
+ ai.decide(`${hero.type} ${hero.id} rested, back out at ${Math.round(share * 100)}%`, { kind: "lanes" });
353
+ }
354
+ }
355
+ }
356
+ /**
357
+ * Sends a resting hero home: by an ability that takes it there (one whose effects, at its end, teleport home), where
358
+ * it has one ready and nothing hostile is near; else on foot. Nothing while it channels, or once home
359
+ */
360
+ sendHome(hero) {
361
+ const { ai } = this;
362
+ const home = this.home();
363
+ if (!home || !hero.own || hero.own.hidden) return;
364
+ if (distSq(hero, home) <= 64 || hero.own.order === "cast") return;
365
+ const recalled = this.memory.recalled[hero.id];
366
+ const safe = !ai.view.hostile.alive().near(hero, 12).length;
367
+ if (this.options.recall !== false && safe && (recalled === void 0 || ai.tick - recalled >= RECALL_AGAIN * ai.session.tickRate)) {
368
+ const ability = hero.own.abilities?.find((state) => {
369
+ if (state.level < 1 || state.cooldown > 0 || state.charges === 0) return false;
370
+ const def = ai.registry.ability(state.id);
371
+ return [...def.effects, ...def.channel?.finished ?? []].some((effect) => effect.type === "teleport" && effect.to === "home");
372
+ });
373
+ if (ability) {
374
+ this.memory.recalled[hero.id] = ai.tick;
375
+ ai.send({
376
+ type: "cast",
377
+ entities: [hero.id],
378
+ ability: ability.id
379
+ });
380
+ ai.decide(`${hero.type} ${hero.id} recalls home`, { kind: "lanes" });
381
+ return;
382
+ }
383
+ }
384
+ if (hero.own.order === "move") return;
385
+ const sent = this.memory.sent[hero.id];
386
+ if (sent !== void 0 && ai.tick - sent < 3 * ai.session.tickRate) return;
387
+ this.memory.sent[hero.id] = ai.tick;
388
+ ai.send({
389
+ type: "order",
390
+ entities: [hero.id],
391
+ order: {
392
+ type: "move",
393
+ point: home
394
+ }
395
+ });
396
+ }
397
+ /** An ally's hero in a fight one of its heroes could go to: the most hurt, near enough; or a person's call for help */
398
+ call(from) {
399
+ const help = this.options.help;
400
+ if (help === false) return void 0;
401
+ const { ai } = this;
402
+ const { view } = ai;
403
+ const reach = help?.reach ?? 30;
404
+ const theirHeroes = view.enemies.units().alive().where((unit, def) => !!def.hero || !!heroOfState(unit));
405
+ let best;
406
+ for (const ally of view.allies.units().alive().heroes()) {
407
+ if (distSq(ally, from) > reach * reach || !theirHeroes.near(ally, FIGHTING).length) continue;
408
+ if (!best || health(ai, ally) < health(ai, best)) best = ally;
409
+ }
410
+ if (best) return point(best);
411
+ const ping = ai.area(Team).enabled ? ai.area(Team).requests("help").find((request) => request.by === "ping" && distSq(request.at, from) <= reach * reach) : void 0;
412
+ return ping && point(ping.at);
413
+ }
414
+ /** The ally's hero nearest a place: what a hero helping goes with */
415
+ allyAt(at) {
416
+ return this.ai.view.allies.units().alive().heroes().near(at, 2).first();
417
+ }
418
+ /** The nearest camp it may take from a place: not cleared, in reach, its creeps (as seen) beatable */
419
+ camp(hero) {
420
+ const camps = this.options.camps;
421
+ if (camps === false) return void 0;
422
+ const { ai } = this;
423
+ const { view } = ai;
424
+ const reach = camps?.reach ?? 50;
425
+ const odds = camps?.odds ?? .6;
426
+ let best;
427
+ for (const camp of view.camps()) {
428
+ if (camp.cleared) continue;
429
+ const d = distSq(camp, hero);
430
+ if (d > reach * reach || best && d >= best.d) continue;
431
+ const creeps = view.creeps.alive().near(camp, 8);
432
+ if (creeps.length ? view.strength.odds([hero], creeps) >= odds : camp.level <= 2 + 2 * (heroOfState(hero)?.level ?? 1)) best = {
433
+ at: {
434
+ x: camp.x,
435
+ z: camp.z
436
+ },
437
+ d
438
+ };
439
+ }
440
+ return best?.at;
441
+ }
442
+ };
443
+ /** The kit's lane task: a hero walks a lane behind its side's wave (`LanesPlay.spot`), falling back once outmatched */
444
+ var PUSH = defineTask({
445
+ id: "lanes.push",
446
+ start(ai, squad, state) {
447
+ state.phase = "going";
448
+ state.phaseSince = ai.tick;
449
+ pushOn(ai, squad, state, true);
450
+ },
451
+ think(ai, squad, state) {
452
+ pushOn(ai, squad, state, false);
453
+ },
454
+ where: (ai, _squad, state) => playOf(ai)?.spot(state.data.lane),
455
+ handles: [
456
+ "retreat",
457
+ "regroup",
458
+ "reinforce"
459
+ ],
460
+ standing: true
461
+ });
462
+ /** The lanes module's play, where the brain has one */
463
+ var playOf = (ai) => ai.module(LANES)?.play;
464
+ /** A hero on its lane: to its spot, fighting on the way; back along it when outmatched */
465
+ function pushOn(ai, squad, state, first) {
466
+ const play = playOf(ai);
467
+ const path = state.data.lane;
468
+ const lane = play?.state(path);
469
+ const middle = squad.centre();
470
+ if (!play || !lane || !middle) {
471
+ squad.finish("lost");
472
+ return;
473
+ }
474
+ const fighting = ai.view.hostile.alive().near(middle, 9).length > 0;
475
+ if (fighting && play.oddsAt(middle) < (play.options.backOdds ?? .3)) {
476
+ const to = play.fallBack(path, middle);
477
+ if (to) {
478
+ ai.decide(`squad ${squad.name} falls back along ${path} to ${where(to)}: outmatched (odds ${play.oddsAt(middle).toFixed(2)})`, { kind: "lanes" });
479
+ squad.retreat(to, "outmatched on its lane");
480
+ return;
481
+ }
482
+ }
483
+ const spot = play.spot(path);
484
+ const phase = lane.front !== void 0 ? "pushing" : "waiting";
485
+ if (state.phase !== phase) {
486
+ state.phase = phase;
487
+ state.phaseSince = ai.tick;
488
+ }
489
+ const idle = squad.idleUnits();
490
+ if (fighting && !idle.length) return;
491
+ const sentTo = state.memory.at;
492
+ const moved = !sentTo || distSq(sentTo, spot) > 16;
493
+ const away = squad.units().some((unit) => distSq(unit, spot) > 16);
494
+ if (!first && !(away && (moved || idle.length && squad.mayResend()))) return;
495
+ state.memory.at = point(spot);
496
+ squad.fight(spot);
497
+ }
498
+ /**
499
+ * What finds a lanes brain's module with its shape (`ai.module(LANES)`)
500
+ *
501
+ * @beta
502
+ */
503
+ var LANES = moduleKey("lanes");
504
+ /** The goals of a lanes brain over its play (the file's comment) */
505
+ function laneGoals(ai, play) {
506
+ /** Its heroes free to go: alive, not resting */
507
+ const free = (available) => play.commanded(available).where((hero) => play.memory.resting[hero.id] === void 0);
508
+ const nearestTo = (set, at) => at ? set.nearest(at) : set.first();
509
+ const push = (ai.session.can.computer?.lanes() ?? []).map((lane) => lane.path).filter((path) => !play.options.lanes || play.options.lanes.includes(path)).map((path) => {
510
+ const id = `lanes.push:${path}`;
511
+ return defineGoal({
512
+ id,
513
+ weight: 1,
514
+ commitment: 30,
515
+ considerations: [
516
+ consider("a lane of its side", () => play.lane(path) ? 1 : 0, curve.step(1)),
517
+ consider("a hero free", () => free(ai.view.mine).length, curve.step(1)),
518
+ consider("its wave on it", () => ai.view.strength.sum(play.state(path)?.ours ?? []), curve.custom((x) => .3 + .7 * (1 - exp(-x / 60)))),
519
+ consider("what is at stake", () => play.stake(path), curve.custom((x) => .4 + .6 * x)),
520
+ consider("the odds at its front", () => {
521
+ const spot = play.spot(path);
522
+ return spot ? play.oddsAt(spot, 14) : 0;
523
+ }, curve.custom((odds) => .2 + odds)),
524
+ consider("allies already on it", () => play.state(path)?.allies.length ?? 0, curve.inverse(2)),
525
+ consider("how far its hero is", () => {
526
+ const spot = play.spot(path);
527
+ const hero = nearestTo(free(ai.view.mine), spot);
528
+ return hero && spot ? Math.sqrt(distSq(hero, spot)) : 0;
529
+ }, curve.inverse(60))
530
+ ],
531
+ claims: { units: (_ai, available) => {
532
+ const hero = nearestTo(free(available), play.spot(path));
533
+ return hero ? [hero] : [];
534
+ } },
535
+ run: (_ai, claimed) => {
536
+ const squad = claimed.squad(id, claimed.units, { retreatAt: false });
537
+ if (squad.idle) squad.task(PUSH, { lane: path });
538
+ }
539
+ });
540
+ });
541
+ const back = defineGoal({
542
+ id: "lanes.back",
543
+ weight: 10,
544
+ urgent: true,
545
+ commitment: 0,
546
+ considerations: [consider("a hero to rest", () => play.resting().length, curve.step(1))],
547
+ claims: { units: () => play.resting() },
548
+ run: (ai, claimed) => {
549
+ const hold = ai.goals.held("lanes.back");
550
+ const resting = play.resting();
551
+ const fresh = resting.filter((hero) => !hold?.units.includes(hero.id)).map((hero) => hero.id);
552
+ if (fresh.length) {
553
+ ai.goals.take(fresh, "urgent");
554
+ ai.goals.give("lanes.back", fresh);
555
+ }
556
+ const rested = claimed.units.where((hero) => play.memory.resting[hero.id] === void 0).ids();
557
+ if (rested.size) ai.goals.drop("lanes.back", rested);
558
+ for (const hero of resting) play.sendHome(hero);
559
+ }
560
+ });
561
+ const help = defineGoal({
562
+ id: "lanes.help",
563
+ weight: 1.3,
564
+ commitment: 6,
565
+ considerations: [consider("an ally in a fight near", () => {
566
+ const hero = free(ai.view.mine).first();
567
+ return hero && play.call(hero) ? 1 : 0;
568
+ }, curve.step(1)), consider("the odds there with it", () => {
569
+ const hero = free(ai.view.mine).first();
570
+ const at = hero && play.call(hero);
571
+ if (!hero || !at) return 0;
572
+ const near = ai.view.all.units().alive().near(at, 12);
573
+ const theirs = near.where((unit) => ai.view.isHostile(unit));
574
+ return theirs.length ? ai.view.strength.odds([...near.where((unit) => ai.view.isFriendly(unit)).items, hero], theirs) : 1;
575
+ }, curve.custom((odds) => odds >= ((play.options.help || {}).odds ?? .4) ? odds : 0))],
576
+ claims: { units: (_ai, available) => {
577
+ const heroes = free(available);
578
+ const hero = heroes.first();
579
+ const at = hero && play.call(hero);
580
+ const chosen = at && heroes.nearest(at);
581
+ return chosen ? [chosen] : [];
582
+ } },
583
+ run: (ai, claimed) => {
584
+ const hero = claimed.units.first();
585
+ const at = hero && play.call(hero);
586
+ if (!hero || !at) return;
587
+ const ally = play.allyAt(at);
588
+ const squad = claimed.squad("lanes.help", claimed.units, { retreatAt: false });
589
+ if (claimed.first) ai.decide(`${hero.type} ${hero.id} goes to help at ${where(at)}`, { kind: "lanes" });
590
+ if (squad.idle || ally && squad.current?.kind !== "escort") {
591
+ if (ally) squad.escort(ally.id);
592
+ else squad.attack(at);
593
+ }
594
+ }
595
+ });
596
+ const camp = defineGoal({
597
+ id: "lanes.camp",
598
+ weight: .6,
599
+ commitment: 15,
600
+ considerations: [consider("no wave to walk with", () => play.states().filter((state) => state.ours.length > 0).length, curve.inverse(.01)), consider("a camp it can take", () => {
601
+ const hero = free(ai.view.mine).first();
602
+ return hero && play.camp(hero) ? 1 : 0;
603
+ }, curve.step(1))],
604
+ claims: { units: (_ai, available) => {
605
+ const hero = free(available).first();
606
+ return hero && play.camp(hero) ? [hero] : [];
607
+ } },
608
+ run: (_ai, claimed) => {
609
+ const hero = claimed.units.first();
610
+ const at = hero && play.camp(hero);
611
+ const squad = claimed.squad("lanes.camp", claimed.units, { retreatAt: false });
612
+ if (squad.idle && at) squad.creep(at);
613
+ }
614
+ });
615
+ return [
616
+ ...push,
617
+ back,
618
+ ...play.options.help === false ? [] : [help],
619
+ ...play.options.camps === false ? [] : [camp]
620
+ ];
621
+ }
622
+ /**
623
+ * The module of a lanes brain: the lanes read for its side, its heroes' rest, and its goals put on the picker (the
624
+ * file's comment). Its options under the brain's settings (`AiSettings.lanes`)
625
+ *
626
+ * @beta
627
+ */
628
+ var lanesPlay = (options = {}) => defineModule({
629
+ id: "lanes",
630
+ make: (ai) => {
631
+ const play = new LanesPlay(ai, {
632
+ ...options,
633
+ ...ai.settings.lanes
634
+ });
635
+ ai.squads.define(PUSH);
636
+ ai.goals.add(...laneGoals(ai, play));
637
+ return {
638
+ id: "lanes",
639
+ version: 1,
640
+ phase: "decide",
641
+ play,
642
+ think: () => play.think(),
643
+ save: () => structuredClone(play.memory),
644
+ restore: (data) => {
645
+ const kept = data && typeof data === "object" ? data : {};
646
+ play.memory.resting = { ...kept.resting };
647
+ play.memory.recalled = { ...kept.recalled };
648
+ play.memory.sent = { ...kept.sent };
649
+ },
650
+ inspect: () => ({
651
+ lanes: play.states().map((state) => ({
652
+ lane: state.lane.path,
653
+ front: state.front === void 0 ? void 0 : Math.round(state.front),
654
+ theirFront: state.theirFront === void 0 ? void 0 : Math.round(state.theirFront),
655
+ ours: state.ours.length,
656
+ theirs: state.theirs.length
657
+ })),
658
+ resting: Object.keys(play.memory.resting).map(Number)
659
+ })
660
+ };
661
+ }
662
+ });
663
+ /**
664
+ * The engine's computer player for a game of lanes (`lanesPack`): a brain of its rules, the words, `lanesPlay`, the
665
+ * team, the picker, squads and micro (the file's comment). Heroes walk the lanes with their waves, rest at home when
666
+ * hurt, help an ally's hero, take a camp with no wave to walk with. A variant is `lanesBrain.with({ ... })`; a game's
667
+ * own lanes brain is `lanesBrainOf({ id, lanes, ... })`
668
+ *
669
+ * @beta
670
+ */
671
+ function lanesBrainOf(def) {
672
+ const { lanes, modules = [], settings, ...rest } = def;
673
+ return defineBrain({
674
+ ...rest,
675
+ settings: {
676
+ ...settings,
677
+ micro: {
678
+ heroesFlee: false,
679
+ unitsFlee: false,
680
+ focusEvery: 2,
681
+ targets: lanesTargets(lanes),
682
+ ...settings?.micro
683
+ },
684
+ team: {
685
+ defendUsers: false,
686
+ askForHelp: false,
687
+ ...settings?.team
688
+ }
689
+ },
690
+ modules: [
691
+ defineModule({
692
+ id: "rules",
693
+ make: (ai) => rules(ai.def.rules ?? [])(ai)
694
+ }),
695
+ words(),
696
+ team(),
697
+ lanesPlay(lanes),
698
+ ...modules,
699
+ goals(),
700
+ squads(),
701
+ micro()
702
+ ]
703
+ });
704
+ }
705
+ /**
706
+ * The engine's computer player for a game of lanes, as it is: `lanesBrainOf({ id: 'core.lanes' })`. List it in the
707
+ * game's `Rules.brains` and seat it (`world.computers.seat(player, { brain: lanesBrain })`)
708
+ *
709
+ * @beta
710
+ */
711
+ var lanesBrain = lanesBrainOf({ id: "core.lanes" });
712
+ //#endregion
713
+ export { LANES, LanesPlay, laneAt, lanesBrain, lanesBrainOf, lanesPlay, lanesTargets, onLane };
714
+
715
+ //# sourceMappingURL=lanes.js.map