@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,780 @@
1
+ import { distSq } from "../math.js";
2
+ import { baseStats, constructionOf } from "../defs.js";
3
+ import { snapshotOf } from "../components.js";
4
+ import { builtSoFar } from "../systems/construction.js";
5
+ import { gathers } from "../shared.js";
6
+ import { queueOf } from "../systems/productionQueue.js";
7
+ import { gathering } from "../orders/harvest.js";
8
+ import { defineModule } from "./module.js";
9
+ import "./reach.js";
10
+ import { evaluate } from "./rules.js";
11
+ import { pair, point, where } from "./geometry.js";
12
+ //#region src/ai/economy.ts
13
+ /** A point so far from a place on the way to another */
14
+ function towards(from, to, distance) {
15
+ const length = Math.sqrt(distSq(from, to));
16
+ if (length <= distance) return {
17
+ x: to.x,
18
+ z: to.z
19
+ };
20
+ return {
21
+ x: from.x + (to.x - from.x) / length * distance,
22
+ z: from.z + (to.z - from.z) / length * distance
23
+ };
24
+ }
25
+ /** How far from a mine's middle its side is, a mine being 3 or 4 wide: where a route to it goes */
26
+ var MINE_SIDE = 3.5;
27
+ /** How near a base what is at it is */
28
+ var AT_BASE = 20;
29
+ /** How far round the nearest tree the woods go that home gathers from, where none is near home */
30
+ var WOODS = 12;
31
+ /** The odds of the base's fighters near a worker against the foes on it, under which the worker runs */
32
+ var FLEE_UNDER = .5;
33
+ /** Seconds a base a worker fled from stands clear before it goes back */
34
+ var CLEAR_FOR = 5;
35
+ /** How many workers rebalancing moves in a think: a few at a time, so that a base never empties at once */
36
+ var MOVE_AT_ONCE = 3;
37
+ /** Seconds the other resource runs short, with the money piling up, before one more worker goes to it (AI2) */
38
+ var BLOCKED = 15;
39
+ /** What counts as the other resource running short, and as the money piling up: what little a building or a unit costs of it, and enough for most */
40
+ var SHORT_UNDER = 100;
41
+ var PILED = 300;
42
+ /** How many more workers on the other resource at most, for what waits on it */
43
+ var MORE_AT_MOST = 3;
44
+ /** What the economy holds the workers that fled by (`ai.goals.take`): no goal sends them anywhere until they are back */
45
+ var FLED = "economy:fled";
46
+ /**
47
+ * The id of the want for another hall, on the build plan
48
+ *
49
+ * @internal
50
+ */
51
+ var EXPAND_WANT = "economy.expand";
52
+ /**
53
+ * A brain's economy (`ai.economy`): its workers, base by base, run by the `economy()` module each think (`think`), or
54
+ * by the melee player's turn, and asked by whoever wants to know (`bases`, `freeMine`, `waiting`). Kept in the brain's
55
+ * memory (`BrainMemory.economy`)
56
+ *
57
+ * @internal
58
+ */
59
+ var Economy = class Economy {
60
+ ai;
61
+ /** What finds it on a brain (`ai.area(Economy)`): made the first time a module asks for it */
62
+ static id = "economy";
63
+ /** Makes the economy of a brain; what `ai.area(Economy)` calls the first time a module asks for it */
64
+ static make(ai) {
65
+ return new Economy(ai);
66
+ }
67
+ /** Its id among the brain's areas: what its memory and its report are kept under */
68
+ id = "economy";
69
+ /** What the log says where a save's memory of it is of a shape it does not read */
70
+ afresh = "the save remembers the computer player’s economy in a shape this brain does not read: it starts afresh";
71
+ /** Whether an `economy()` module is in the brain, or the melee player runs it: without one, nothing here runs by itself */
72
+ enabled = false;
73
+ /**
74
+ * Whether everything else waits for what the money is gathered at (`builtOn`, a cursed mine), with none of it
75
+ * standing and none on its way: there is no money without it
76
+ */
77
+ waiting = false;
78
+ memory = {
79
+ v: 1,
80
+ fled: {}
81
+ };
82
+ moduleOptions = {};
83
+ thoughtAt = -1;
84
+ found;
85
+ trained = 0;
86
+ constructor(ai) {
87
+ this.ai = ai;
88
+ }
89
+ /** Puts the `economy()` module's options under the brain's settings: what the module is made with */
90
+ configure(options) {
91
+ this.moduleOptions = options;
92
+ this.enabled = true;
93
+ }
94
+ /** How it runs the economy: the module's options, the brain's settings over them (`ai.settings.economy`) */
95
+ get options() {
96
+ return this.ai.cache("economy.options", () => ({
97
+ ...this.moduleOptions,
98
+ ...this.ai.settings.economy
99
+ }));
100
+ }
101
+ /** How many of a unit type its buildings have queued: on their way, for what is counted as had */
102
+ queued(type) {
103
+ let count = 0;
104
+ for (const entity of this.ai.view.mine) for (const item of queueOf(entity)) if (item.kind === "unit" && item.id === type) count++;
105
+ return count;
106
+ }
107
+ /** What a base wants on a resource where nothing caps it: `workersPer`, then `workers` on the money everywhere, `lumberjacks` on the other at home */
108
+ asked(kind, base, index) {
109
+ const options = this.options;
110
+ const asked = (typeof options.workersPer === "function" ? options.workersPer(this.ai, base, index) : options.workersPer ?? {})[kind] ?? (kind === this.money ? options.workers ?? 8 : index === 0 ? options.lumberjacks ?? 3 : 0);
111
+ return kind === this.material && index === 0 ? asked + (this.memory.material?.more ?? 0) : asked;
112
+ }
113
+ /** The game's money: what most things cost (`Registry.currency`), the first resource where it names none */
114
+ get money() {
115
+ const { registry } = this.ai;
116
+ return registry.currency ?? registry.resources[0]?.id ?? "";
117
+ }
118
+ /** The other resource workers gather, where the game has one (lumber, in melee) */
119
+ get material() {
120
+ return this.ai.registry.resources.find((resource) => resource.id !== this.money)?.id;
121
+ }
122
+ /** What gathers: the first worker type the player can make (`worker` role) */
123
+ get worker() {
124
+ return this.ai.view.typesOf("worker")[0];
125
+ }
126
+ /** What stands on a mine to gather it there (`topper` role: `builtOn` the money), where the game has one */
127
+ get topper() {
128
+ return this.ai.view.typesOf("topper")[0];
129
+ }
130
+ /**
131
+ * What gathers the other resource where the worker does not (a ghoul, who fights too): of the gatherers the player
132
+ * can make, the first that gathers it. The worker where it does
133
+ */
134
+ get lumberjack() {
135
+ const { worker, material } = this;
136
+ if (material === void 0 || !worker || gathers(worker, material)) return worker;
137
+ return this.ai.view.typesOf("gatherer").find((def) => def.kind === "unit" && def !== worker && gathers(def, material));
138
+ }
139
+ /** Whether a building takes deposits of a resource (`dropOff`) */
140
+ takes(def, kind) {
141
+ return def.dropOff === true || Array.isArray(def.dropOff) && def.dropOff.includes(kind);
142
+ }
143
+ /**
144
+ * Its bases as the economy sees them, once a think: each of the view's bases (home first) with the deposits it
145
+ * gathers from, what they serve, the workers it wants and those at work there
146
+ */
147
+ bases() {
148
+ const { ai } = this;
149
+ if (this.found?.tick === ai.tick) return this.found.bases;
150
+ const { view } = ai;
151
+ const { money, material, topper, worker } = this;
152
+ const saturate = this.options.saturate ?? true;
153
+ const halls = view.mine.buildings().finished().where((_, def) => this.takes(def, money));
154
+ const toppers = topper ? view.mine.ofType(topper.id).finished() : void 0;
155
+ const mines = view.resources.ofResource(money).alive();
156
+ const reach = 256;
157
+ const bases = view.bases().map((base, index) => {
158
+ const deposits = {};
159
+ const serves = {};
160
+ const served = mines.filter((each) => toppers ? toppers.some((top) => top.x === each.x && top.z === each.z && base.buildings.has(top.id)) : halls.some((hall) => distSq(hall, each) < reach && base.buildings.has(hall.id)));
161
+ deposits[money] = served;
162
+ serves[money] = served.reduce((sum, each) => sum + this.serving(each, base), 0);
163
+ if (material !== void 0) {
164
+ let trees = view.resourcesNear(base).ofResource(material).alive().items;
165
+ if (!trees.length && index === 0) {
166
+ const nearest = view.resources.ofResource(material).alive().nearest(base.at);
167
+ if (nearest) trees = view.resourcesNear(nearest, WOODS).ofResource(material).alive().items;
168
+ }
169
+ deposits[material] = trees;
170
+ serves[material] = trees.reduce((sum, each) => sum + (view.def(each).resource?.slots ?? 1), 0);
171
+ }
172
+ const wants = {};
173
+ for (const kind of [money, ...material !== void 0 ? [material] : []]) {
174
+ if (!worker || !gathers(worker, kind)) continue;
175
+ const want = this.asked(kind, base, index);
176
+ wants[kind] = saturate ? Math.min(want, serves[kind] ?? 0) : (serves[kind] ?? 0) > 0 ? want : 0;
177
+ }
178
+ return {
179
+ base,
180
+ deposits,
181
+ serves,
182
+ wants,
183
+ working: {}
184
+ };
185
+ });
186
+ if (worker) for (const unit of view.mine.ofType(worker.id)) {
187
+ if (unit.own?.order !== "harvest") continue;
188
+ const kind = snapshotOf(unit, gathering)?.kind ?? this.kindNear(unit.own.goal ?? unit);
189
+ const at = unit.own.goal ?? unit;
190
+ let best;
191
+ let bestDistance = Infinity;
192
+ for (const each of bases) {
193
+ const d = distSq(each.base.at, at);
194
+ if (d < bestDistance) {
195
+ bestDistance = d;
196
+ best = each;
197
+ }
198
+ }
199
+ if (best) (best.working[kind] ??= []).push(unit.id);
200
+ }
201
+ this.found = {
202
+ tick: ai.tick,
203
+ bases
204
+ };
205
+ return bases;
206
+ }
207
+ /** The resource of the deposit nearest a place: what a worker walking there will gather. The money where none is near */
208
+ kindNear(at) {
209
+ const near = this.ai.view.resources.nearest(at);
210
+ return near && distSq(near, at) < 36 ? this.ai.view.def(near).resource?.id ?? this.money : this.money;
211
+ }
212
+ /**
213
+ * How many workers one deposit of the money serves at once, as worked by this base (see the file's comment): what
214
+ * stands on it to gather it says (`gatherers`); one entered serves its slots for every round trip from the hall
215
+ * nearest it; one worked from beside, its slots
216
+ */
217
+ serving(deposit, base) {
218
+ const { view, registry } = this.ai;
219
+ const def = view.def(deposit);
220
+ const resource = def.resource;
221
+ const { topper, worker } = this;
222
+ if (topper?.builtOn === resource?.id && topper) return topper.gatherers ?? 5;
223
+ if (!resource?.entered || !worker) return resource?.slots ?? 1;
224
+ const hall = base.buildings.where((_, each) => this.takes(each, resource.id)).nearest(deposit);
225
+ if (!hall) return resource.slots;
226
+ const size = (each) => (each.stats ? baseStats(each, registry).radius : 0) || 0;
227
+ const speed = baseStats(worker, registry).moveSpeed || 0;
228
+ const gap = Math.max(0, Math.sqrt(distSq(hall, deposit)) - size(view.def(hall)) - size(def));
229
+ const gather = resource.gatherTime ?? worker.harvester?.gatherTime ?? 1;
230
+ const walk = speed > 0 ? 2 * gap / speed : 0;
231
+ return Math.max(1, Math.ceil((resource.slots || 1) * (1 + walk / Math.max(.1, gather))));
232
+ }
233
+ /** Whether a unit is busy for someone else: in a squad (on an errand), held by a rule, or fled */
234
+ busy(unit) {
235
+ const { ai } = this;
236
+ return ai.squads.squadOf(unit) !== void 0 || ai.goals.ruled(unit.id) || this.memory.fled[unit.id] !== void 0;
237
+ }
238
+ /**
239
+ * A gold mine near enough home that nobody has a hall by, and nothing of anyone's stands on, and that a worker can
240
+ * walk to from home: the nearest, for another hall. None where every one is taken, or none is known. A mine on
241
+ * ground cut off from home (a plateau with no ramp, an island) is left out: the walk to it is asked of the ground
242
+ * the player knows each time, nearest first, so the answer is the picture's alone
243
+ */
244
+ freeMine() {
245
+ const { view } = this.ai;
246
+ const home = view.home();
247
+ if (!home) return void 0;
248
+ const money = this.money;
249
+ const halls = view.all.filter((entity) => view.def(entity).kind === "building" && this.takes(view.def(entity), money));
250
+ const reach = 256;
251
+ const most = 4096;
252
+ const free = [...view.mines()].map((mine) => ({
253
+ mine,
254
+ d: distSq(mine, home)
255
+ })).filter(({ mine, d }) => d < most && !halls.some((hall) => distSq(hall, mine) < reach)).sort((a, b) => a.d - b.d || a.mine.id - b.mine.id);
256
+ const out = (view.def(home).radius ?? 2) + 1.5;
257
+ for (const { mine } of free) if (this.walkable(towards(home, mine, out), mine)) return {
258
+ x: mine.x,
259
+ z: mine.z
260
+ };
261
+ }
262
+ /** Whether a worker walks from one place to a mine: the route over the ground known to its side (the mine itself is in the way) ends by it */
263
+ walkable(from, mine) {
264
+ const route = this.ai.view.findPath(from, towards(mine, from, MINE_SIDE));
265
+ const end = route?.[route.length - 1];
266
+ return !!end && distSq(end, mine) <= 36;
267
+ }
268
+ /**
269
+ * The think, once a think: a builder to every building half built that nobody works on, workers off a raid and back,
270
+ * idle workers to where they are missing, the spare moved where short, the other resource's gatherers, what the
271
+ * money is gathered at, workers trained, the next hall wanted. A second call in the same think does nothing
272
+ */
273
+ think() {
274
+ const { ai } = this;
275
+ if (this.thoughtAt === ai.tick) return;
276
+ this.thoughtAt = ai.tick;
277
+ this.trained = 0;
278
+ this.prune();
279
+ const options = this.options;
280
+ this.sites();
281
+ if (options.workersFlee ?? true) this.flee();
282
+ this.back();
283
+ this.blocked();
284
+ this.assign();
285
+ this.rebalance();
286
+ this.toMaterial();
287
+ this.lumberjacks();
288
+ this.toppers();
289
+ if (options.trainWorkers ?? true) this.train();
290
+ this.expand();
291
+ }
292
+ /**
293
+ * Whether the other resource holds it up (lumber, where gold is the money): under `SHORT_UNDER` of it with `PILED` of
294
+ * the money or more, what it has as the snapshot says. One more worker on it at home each `BLOCKED` seconds it is so,
295
+ * at most `MORE_AT_MOST`; one fewer each twice that once it is not
296
+ */
297
+ blocked() {
298
+ const { ai } = this;
299
+ const { material } = this;
300
+ if (material === void 0) return;
301
+ const tick = ai.tick;
302
+ const period = BLOCKED * ai.session.tickRate;
303
+ const kept = this.memory.material;
304
+ const have = ai.view.me.resources;
305
+ if ((have[material] ?? 0) < SHORT_UNDER && (have[this.money] ?? 0) >= PILED) {
306
+ const state = this.memory.material ??= { more: 0 };
307
+ delete state.easy;
308
+ state.since ??= tick;
309
+ if (tick - state.since < period || state.more >= MORE_AT_MOST) return;
310
+ state.more++;
311
+ state.since = tick;
312
+ ai.decide(`puts ${state.more} more on ${material} at home: ${this.money} piles up while ${material} runs short`, { kind: "economy" });
313
+ return;
314
+ }
315
+ if (!kept) return;
316
+ delete kept.since;
317
+ if (kept.more <= 0) {
318
+ delete this.memory.material;
319
+ return;
320
+ }
321
+ kept.easy ??= tick;
322
+ if (tick - kept.easy < period * 2) return;
323
+ kept.more--;
324
+ kept.easy = tick;
325
+ }
326
+ /**
327
+ * Home short on the other resource while more are put on it (`blocked`), and nobody idle to send: a worker of the
328
+ * money at home, carrying nothing, goes to the trees by home. One a think
329
+ */
330
+ toMaterial() {
331
+ const { ai } = this;
332
+ const { view } = ai;
333
+ const { material, money, worker } = this;
334
+ if (material === void 0 || !(this.memory.material?.more ?? 0) || !worker || !gathers(worker, material)) return;
335
+ const home = this.bases()[0];
336
+ if (!home || (home.wants[material] ?? 0) - (home.working[material]?.length ?? 0) <= 0) return;
337
+ const tree = nearestOf(home.deposits[material] ?? [], home.base.at);
338
+ if (!tree) return;
339
+ const state = this.memory.material;
340
+ const moved = state.moved ??= {};
341
+ for (const id in moved) {
342
+ const unit = view.byId(Number(id));
343
+ if (!unit || unit.own?.order !== "harvest" || snapshotOf(unit, gathering)?.kind === material || ai.tick - moved[id] >= 60 * ai.session.tickRate) delete moved[id];
344
+ }
345
+ if ((home.wants[material] ?? 0) - (home.working[material]?.length ?? 0) - Object.keys(moved).length <= 0) return;
346
+ const from = (home.working[money] ?? []).map((id) => view.byId(id)).filter((unit) => unit && moved[unit.id] === void 0 && !unit.own?.hidden && !snapshotOf(unit, gathering)?.carrying && !this.busy(unit)).sort((a, b) => distSq(a, tree) - distSq(b, tree) || a.id - b.id)[0];
347
+ if (!from) return;
348
+ ai.send({
349
+ type: "order",
350
+ entities: [from.id],
351
+ order: {
352
+ type: "harvest",
353
+ target: tree.id
354
+ }
355
+ });
356
+ moved[from.id] = ai.tick;
357
+ ai.decide(`moves a worker from ${money} to ${material} at home`, { kind: "economy" });
358
+ }
359
+ /** Whether it has run at all: by the module, or the melee player's turn */
360
+ get running() {
361
+ return this.enabled || this.thoughtAt >= 0;
362
+ }
363
+ /** Marks the think's economy done another way (a brain's own turn that ran it itself): `think` does nothing more this think */
364
+ done() {
365
+ this.thoughtAt = this.ai.tick;
366
+ }
367
+ /** What is remembered of the dead, or of what is no longer its own, let go of */
368
+ prune() {
369
+ const { view, goals } = this.ai;
370
+ for (const id in this.memory.fled) if (!view.mine.has(Number(id))) delete this.memory.fled[id];
371
+ const held = goals.held(FLED);
372
+ if (held) {
373
+ const away = held.units.filter((id) => this.memory.fled[id] === void 0);
374
+ if (away.length) goals.drop(FLED, away);
375
+ }
376
+ }
377
+ /** Its workers, as of the think */
378
+ workers() {
379
+ const { worker } = this;
380
+ const { view } = this.ai;
381
+ return worker ? view.mine.ofType(worker.id) : view.mine.where(() => false);
382
+ }
383
+ /** A builder to every building of its own going up by builders that nobody works on: the nearest free worker */
384
+ sites() {
385
+ const { ai } = this;
386
+ const { view } = ai;
387
+ const workers = this.workers();
388
+ for (const site of view.mine) {
389
+ if (builtSoFar(site) === void 0 || constructionOf(view.def(site)) !== "builder") continue;
390
+ const busy = workers.some((worker) => (worker.own?.order === "build" || worker.own?.order === "construct") && distSq(worker, site) < 100);
391
+ const sent = `construct:${site.id}:`;
392
+ if (busy || workers.some((worker) => ai.sentTo(worker.id)?.key === sent)) continue;
393
+ const helper = workers.where((worker) => !worker.own?.hidden && worker.own?.order !== "build" && !this.busy(worker)).nearest(site);
394
+ if (helper) ai.send({
395
+ type: "order",
396
+ entities: [helper.id],
397
+ order: {
398
+ type: "construct",
399
+ target: site.id
400
+ }
401
+ });
402
+ }
403
+ }
404
+ /**
405
+ * Workers a raid is on, at a base its fighters do not hold: off to the nearest base no enemy is at. A worker with no
406
+ * such base stays at work: there is nowhere better to be
407
+ */
408
+ flee() {
409
+ const { ai } = this;
410
+ const { view } = ai;
411
+ const foes = view.hostile.alive().units().where((entity, def) => !entity.asleep && !!def.attacks?.length);
412
+ if (!foes.length) return;
413
+ const bases = view.bases();
414
+ const safe = bases.filter((base) => !foes.near(base.at, AT_BASE).length);
415
+ if (!safe.length) return;
416
+ const fled = [];
417
+ for (const unit of this.workers()) {
418
+ if (unit.own?.hidden || this.busy(unit) || unit.own?.order === "build") continue;
419
+ const on = foes.near(unit, 8);
420
+ if (!on.length) continue;
421
+ const guards = view.mine.fighters().near(unit, 16);
422
+ if (guards.length && view.strength.odds(guards, on) >= FLEE_UNDER) continue;
423
+ const from = bases.reduce((best, base) => distSq(base.at, unit) < distSq(best.at, unit) ? base : best, bases[0]);
424
+ const to = safe.filter((base) => base !== from).reduce((best, base) => !best || distSq(base.at, unit) < distSq(best.at, unit) ? base : best, void 0);
425
+ if (!to) continue;
426
+ this.memory.fled[unit.id] = {
427
+ from: point(from.at),
428
+ to: point(to.at),
429
+ since: ai.tick
430
+ };
431
+ fled.push(unit);
432
+ }
433
+ if (!fled.length) return;
434
+ const byDestination = /* @__PURE__ */ new Map();
435
+ for (const unit of fled) {
436
+ const to = this.memory.fled[unit.id].to;
437
+ const key = `${to.x},${to.z}`;
438
+ (byDestination.get(key) ?? byDestination.set(key, {
439
+ to,
440
+ ids: []
441
+ }).get(key)).ids.push(unit.id);
442
+ }
443
+ ai.goals.take(fled.map((unit) => unit.id), "told", {
444
+ id: FLED,
445
+ seconds: Infinity
446
+ });
447
+ for (const { to, ids } of byDestination.values()) {
448
+ ai.send({
449
+ type: "order",
450
+ entities: ids,
451
+ order: {
452
+ type: "move",
453
+ point: to
454
+ }
455
+ });
456
+ ai.decide(`${ids.length === 1 ? "1 worker flees" : `${ids.length} workers flee`} a raid to the base at ${where(to)}`, { kind: "economy" });
457
+ }
458
+ }
459
+ /** Those that fled, back to work at their own base once it has stood clear long enough */
460
+ back() {
461
+ const { ai } = this;
462
+ const { view } = ai;
463
+ const foes = view.hostile.alive().units().where((entity, def) => !entity.asleep && !!def.attacks?.length);
464
+ const back = [];
465
+ for (const id in this.memory.fled) {
466
+ const fled = this.memory.fled[id];
467
+ if (foes.near(fled.from, AT_BASE).length) {
468
+ delete fled.clear;
469
+ continue;
470
+ }
471
+ fled.clear ??= ai.tick;
472
+ if (ai.tick - fled.clear < CLEAR_FOR * ai.session.tickRate) continue;
473
+ back.push(Number(id));
474
+ delete this.memory.fled[id];
475
+ }
476
+ if (!back.length) return;
477
+ ai.goals.drop(FLED, back);
478
+ const bases = this.bases();
479
+ const byDeposit = /* @__PURE__ */ new Map();
480
+ for (const id of back) {
481
+ const unit = view.byId(id);
482
+ const deposit = bases.flatMap((each) => each.deposits[this.money] ?? []).reduce((best, each) => !best || distSq(each, unit) < distSq(best, unit) ? each : best, void 0);
483
+ if (deposit) (byDeposit.get(deposit.id) ?? byDeposit.set(deposit.id, []).get(deposit.id)).push(id);
484
+ }
485
+ for (const [target, entities] of byDeposit) ai.send({
486
+ type: "order",
487
+ entities,
488
+ order: {
489
+ type: "harvest",
490
+ target
491
+ }
492
+ });
493
+ ai.decide(`${back.length === 1 ? "1 worker goes" : `${back.length} workers go`} back to work: the raid is over`, { kind: "economy" });
494
+ }
495
+ /**
496
+ * The idle workers, each to the base and resource where the most are missing (the nearest base among equals); with
497
+ * nothing missing anywhere, to the money at the nearest base that has some, rather than stand about
498
+ */
499
+ assign() {
500
+ const { ai } = this;
501
+ const { view } = ai;
502
+ const home = view.home();
503
+ const idle = this.workers().where((unit) => !!unit.own && !unit.own.order && !unit.own.hidden && !this.busy(unit));
504
+ if (!idle.length || !home) return;
505
+ const bases = this.bases();
506
+ const { money } = this;
507
+ const short = bases.map((each) => {
508
+ const missing = {};
509
+ for (const kind in each.wants) missing[kind] = each.wants[kind] - (each.working[kind]?.length ?? 0);
510
+ return missing;
511
+ });
512
+ const orders = /* @__PURE__ */ new Map();
513
+ for (const unit of idle) {
514
+ let best;
515
+ bases.forEach((each, at) => {
516
+ for (const kind in short[at]) {
517
+ const missing = short[at][kind];
518
+ if (missing <= 0 || !each.deposits[kind]?.length) continue;
519
+ const distance = distSq(each.base.at, unit);
520
+ if (!best || missing > best.missing || missing === best.missing && distance < best.distance) best = {
521
+ at,
522
+ kind,
523
+ missing,
524
+ distance
525
+ };
526
+ }
527
+ });
528
+ let deposit;
529
+ if (best) {
530
+ short[best.at][best.kind] -= 1;
531
+ const base = bases[best.at];
532
+ deposit = best.kind === money ? nearestOf(base.deposits[money], unit) : nearestOf(base.deposits[best.kind], base.base.at);
533
+ } else {
534
+ const served = bases.flatMap((each) => each.deposits[money] ?? []);
535
+ deposit = served.length ? nearestOf(served, unit) : this.topper ? void 0 : view.resources.ofResource(money).alive().nearest(home);
536
+ }
537
+ if (deposit) (orders.get(deposit.id) ?? orders.set(deposit.id, []).get(deposit.id)).push(unit.id);
538
+ }
539
+ for (const [target, entities] of orders) ai.send({
540
+ type: "order",
541
+ entities,
542
+ order: {
543
+ type: "harvest",
544
+ target
545
+ }
546
+ });
547
+ }
548
+ /**
549
+ * A base with more on the money than its deposits serve (or with none left) gives its spare to a base that is short,
550
+ * a few a think: those not carrying anything, so that nothing gathered is lost on the way
551
+ */
552
+ rebalance() {
553
+ const { ai } = this;
554
+ const { view } = ai;
555
+ const { money } = this;
556
+ const bases = this.bases();
557
+ if (bases.length < 2) return;
558
+ let moved = 0;
559
+ for (const from of bases) {
560
+ const working = from.working[money] ?? [];
561
+ const spare = working.length - (from.wants[money] ?? 0);
562
+ if (spare <= 0) continue;
563
+ const to = bases.filter((each) => each !== from && (each.wants[money] ?? 0) - (each.working[money]?.length ?? 0) > 0 && each.deposits[money]?.length).sort((a, b) => distSq(a.base.at, from.base.at) - distSq(b.base.at, from.base.at))[0];
564
+ if (!to) continue;
565
+ const missing = (to.wants[money] ?? 0) - (to.working[money]?.length ?? 0);
566
+ const ids = working.map((id) => view.byId(id)).filter((unit) => !unit.own?.hidden && !snapshotOf(unit, gathering)?.carrying && !this.busy(unit)).slice(0, Math.min(spare, missing, MOVE_AT_ONCE - moved)).map((unit) => unit.id);
567
+ if (!ids.length) continue;
568
+ const deposit = nearestOf(to.deposits[money], from.base.at);
569
+ ai.send({
570
+ type: "order",
571
+ entities: ids,
572
+ order: {
573
+ type: "harvest",
574
+ target: deposit.id
575
+ }
576
+ });
577
+ ai.decide(`moves ${ids.length === 1 ? "1 worker" : `${ids.length} workers`} from the base at ${where(from.base.at)} to the one at ${where(to.base.at)}: ${(from.wants[money] ?? 0) === 0 ? "its mine is gone" : "it has more than it serves"}`, { kind: "economy" });
578
+ moved += ids.length;
579
+ if (moved >= MOVE_AT_ONCE) return;
580
+ }
581
+ }
582
+ /**
583
+ * Where the worker does not gather the other resource: so many of what does (`lumberjack`, a ghoul) sent to the trees
584
+ * by home, those at home first, as many as home wants on it (the seat's `lumberjacks`). They are trained as soldiers are
585
+ */
586
+ lumberjacks() {
587
+ const { ai } = this;
588
+ const { view } = ai;
589
+ const { lumberjack, worker, material } = this;
590
+ const home = view.home();
591
+ if (!lumberjack || lumberjack === worker || material === void 0 || !home) return;
592
+ const homeBase = view.bases()[0];
593
+ const wanted = homeBase ? this.asked(material, homeBase, 0) : 0;
594
+ const all = view.mine.ofType(lumberjack.id).where((unit) => !unit.own?.hidden && !this.busy(unit));
595
+ const chopping = all.filter((unit) => unit.own?.order === "harvest").length;
596
+ if (chopping >= wanted) return;
597
+ const tree = view.resources.ofResource(material).nearest(home);
598
+ if (!tree) return;
599
+ const free = all.filter((unit) => unit.own?.order !== "harvest" && distSq(unit, home) < 1024);
600
+ free.sort((a, b) => distSq(a, home) - distSq(b, home));
601
+ const sent = free.slice(0, wanted - chopping);
602
+ if (sent.length) ai.send({
603
+ type: "order",
604
+ entities: sent.map((unit) => unit.id),
605
+ order: {
606
+ type: "harvest",
607
+ target: tree.id
608
+ }
609
+ });
610
+ }
611
+ /**
612
+ * Where mines are gathered from at what stands on them (`topper`): one put up on each mine by a hall of its own that
613
+ * has none, a mine at a time, through the build plan. With none at all and none on its way, everything else waits
614
+ * (`waiting`)
615
+ */
616
+ toppers() {
617
+ const { ai } = this;
618
+ const { view } = ai;
619
+ const { topper } = this;
620
+ this.waiting = false;
621
+ if (!topper || view.mine.some((entity) => entity.own?.build === topper.id && entity.own.order === "build")) return;
622
+ const hall = view.typesOf("hall")[0];
623
+ const halls = hall ? view.mine.ofType(hall.id).finished() : view.mine.where(() => false);
624
+ for (const at of halls) if (ai.plans.build.build(topper, {
625
+ near: {
626
+ x: at.x,
627
+ z: at.z
628
+ },
629
+ by: "economy"
630
+ })) return;
631
+ this.waiting = view.mine.ofType(topper.id).length === 0;
632
+ }
633
+ /** How many workers the bases want together: what the halls train up to, with `builders` more */
634
+ wanted() {
635
+ let sum = 0;
636
+ for (const each of this.bases()) for (const kind in each.wants) sum += each.wants[kind] ?? 0;
637
+ return sum;
638
+ }
639
+ /** Workers trained at every hall with nothing in its queue, while it has fewer (those queued counted) than its bases want */
640
+ train() {
641
+ const { ai } = this;
642
+ const { view } = ai;
643
+ const { worker } = this;
644
+ if (!worker) return;
645
+ const halls = view.mine.buildings().finished().where((_, def) => (def.trains ?? []).includes(worker.id));
646
+ let have = this.workers().length + this.queued(worker.id);
647
+ const want = this.wanted() + (this.options.builders ?? 1);
648
+ const bases = this.bases();
649
+ const shortAt = (at) => {
650
+ const base = bases.find((each) => each.base.buildings.some((building) => building.x === at.x && building.z === at.z));
651
+ if (!base) return 0;
652
+ let missing = 0;
653
+ for (const kind in base.wants) missing += (base.wants[kind] ?? 0) - (base.working[kind]?.length ?? 0);
654
+ return missing;
655
+ };
656
+ const ready = halls.filter((each) => !queueOf(each).length);
657
+ ready.sort((a, b) => shortAt(b) - shortAt(a));
658
+ for (const at of ready) {
659
+ if (have >= want) return;
660
+ if (!ai.plans.production.train(at, worker)) return;
661
+ have++;
662
+ this.trained++;
663
+ }
664
+ }
665
+ /** Another hall by a free mine, as many as it is to have, once the condition holds: a standing want of the build plan */
666
+ expand() {
667
+ const { ai } = this;
668
+ const hall = ai.view.typesOf("hall")[0];
669
+ const expansions = this.options.expansions ?? 0;
670
+ if (!hall || expansions <= 0) {
671
+ ai.plans.build.drop(EXPAND_WANT);
672
+ return;
673
+ }
674
+ const when = this.options.expandWhen ?? DEFAULT_EXPAND_WHEN;
675
+ ai.plans.build.want({
676
+ id: EXPAND_WANT,
677
+ type: hall.id,
678
+ count: 1 + expansions,
679
+ priority: 40,
680
+ keep: true,
681
+ by: "economy",
682
+ within: 15,
683
+ near: () => this.freeMine(),
684
+ when: (brain) => evaluate(when, brain) && !!this.freeMine()
685
+ });
686
+ }
687
+ /** The economy as the report shows it */
688
+ report() {
689
+ const { ai } = this;
690
+ const { worker } = this;
691
+ const running = this.running;
692
+ return {
693
+ bases: (running ? this.bases() : []).map((each) => {
694
+ const workers = {};
695
+ for (const kind of /* @__PURE__ */ new Set([...Object.keys(each.wants), ...Object.keys(each.working)])) workers[kind] = [
696
+ each.working[kind]?.length ?? 0,
697
+ each.wants[kind] ?? 0,
698
+ each.serves[kind] ?? 0
699
+ ];
700
+ return {
701
+ at: pair(each.base.at),
702
+ hall: each.base.centre.id,
703
+ workers
704
+ };
705
+ }),
706
+ fled: Object.entries(this.memory.fled).map(([unit, fled]) => ({
707
+ unit: Number(unit),
708
+ from: pair(fled.from),
709
+ since: fled.since
710
+ })),
711
+ workers: [worker ? this.workers().length + this.queued(worker.id) : 0, running ? this.wanted() + (this.options.builders ?? 1) : 0],
712
+ ...ai.plans.build.get("economy.expand") && { expansion: ai.plans.build.status("economy.expand") ?? "new" }
713
+ };
714
+ }
715
+ /** What it remembers, for a save: a copy */
716
+ /** Whether it has anything to remember now: one that does not is left out of a save */
717
+ remembers() {
718
+ return Object.keys(this.memory.fled).length > 0 || this.memory.material !== void 0;
719
+ }
720
+ /** Its part of the brain's report */
721
+ reportTo(report) {
722
+ report.economy = {
723
+ ...report.economy,
724
+ ...this.report()
725
+ };
726
+ }
727
+ /** Gives a copy of the economy's memory, for a save of the brain */
728
+ save() {
729
+ return structuredClone(this.memory);
730
+ }
731
+ /** Takes back what `save` gave: whether it was read */
732
+ restore(memory) {
733
+ const given = memory;
734
+ if (!given || typeof given !== "object" || given.v !== 1) return false;
735
+ this.memory = {
736
+ v: 1,
737
+ fled: structuredClone(given.fled ?? {}),
738
+ ...given.material && typeof given.material.more === "number" && { material: { ...given.material } }
739
+ };
740
+ return true;
741
+ }
742
+ };
743
+ /** When it expands, where nothing says: four minutes in, with a building that trains soldiers */
744
+ var DEFAULT_EXPAND_WHEN = { all: [{ time: { after: 240 } }, { units: { role: "barracks" } }] };
745
+ /** Of some entities, the one nearest a place */
746
+ function nearestOf(entities, to) {
747
+ let best;
748
+ let bestDistance = Infinity;
749
+ for (const each of entities) {
750
+ const d = distSq(each, to);
751
+ if (d < bestDistance) {
752
+ bestDistance = d;
753
+ best = each;
754
+ }
755
+ }
756
+ return best;
757
+ }
758
+ /**
759
+ * The economy module: the workers base by base each think (`ai.economy.think`): builders to sites, workers off a raid and
760
+ * back, the idle where they are missing, the spare moved, the other resource's gatherers, what the money is gathered at,
761
+ * workers trained, another hall wanted. With how it runs where the brain's definition and the seat's options say nothing
762
+ * (`EconomyOptions`)
763
+ *
764
+ * @beta
765
+ */
766
+ var economy = (options = {}) => defineModule({
767
+ id: "economy",
768
+ make: (ai) => {
769
+ ai.area(Economy).configure(options);
770
+ return {
771
+ id: "economy",
772
+ phase: "plan",
773
+ think: () => ai.area(Economy).think()
774
+ };
775
+ }
776
+ });
777
+ //#endregion
778
+ export { EXPAND_WANT, Economy, economy };
779
+
780
+ //# sourceMappingURL=economy.js.map