@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,844 @@
1
+ import { plainParts } from "../plain.js";
2
+ import { debugChecks } from "../debug2.js";
3
+ import { rootLogger } from "../log.js";
4
+ import { Rng } from "../rng.js";
5
+ import { order } from "../scheduler.js";
6
+ import { AI_PHASES } from "./module.js";
7
+ import { ThinkBudget } from "./budget.js";
8
+ import { Decisions, explainGoal } from "./report.js";
9
+ import { AiView } from "./view.js";
10
+ import { Goals } from "./goals.js";
11
+ import { Knowledge } from "./knowledge.js";
12
+ import { Plans } from "./plans/plans.js";
13
+ import { Purse } from "./plans/purse.js";
14
+ import { resolveSettings } from "./settings.js";
15
+ import { resolveProfile } from "./profiles.js";
16
+ import { checkBrain, orderKey } from "./checks.js";
17
+ import { Squads } from "./squads.js";
18
+ //#region src/ai/brain.ts
19
+ /** A module definition's id, where it is known before the module is made: an object's, or a `defineModule`'s */
20
+ var idOf = (def) => typeof def === "function" ? def.id : def.id;
21
+ /**
22
+ * What of what its seat heard since it last thought a save keeps (`BrainMemory.heard`): the facts a brain reads (deaths,
23
+ * damage, healing, pings, chat, the game's own events). What is for the screen is left out: a builder's hammer blow
24
+ * comes of a timer no save keeps, and the answers to its own commands name the seat's numbering of them, which a loaded
25
+ * game's seat starts afresh
26
+ */
27
+ var HEARD = /* @__PURE__ */ new Set([
28
+ "death",
29
+ "damage",
30
+ "heal",
31
+ "ping",
32
+ "chat",
33
+ "game"
34
+ ]);
35
+ /** How much of each new think goes into a module's averaged time. Small: the panel shows a steady number */
36
+ var SMOOTHING = .1;
37
+ /** A timing averaged over thinks, the new one weighed in: the first stands as it is */
38
+ var averaged = (before, took) => before === void 0 ? took : before + (took - before) * SMOOTHING;
39
+ /**
40
+ * A computer player made of modules (`defineBrain`), seated at a world (`world.computers.seat`). What
41
+ * a module is handed as it thinks (`ai`): the picture of the game (`snapshot`), the seat it plays through (`session`),
42
+ * its options, its numbers (`rng`), its log, and `send` for its commands. A brain is a `ComputerPlayer`: `think`, and
43
+ * `save` and `restore` for what it remembers
44
+ *
45
+ * @beta
46
+ */
47
+ var Brain = class {
48
+ def;
49
+ session;
50
+ options;
51
+ /** Its modules, in the order they run */
52
+ modules;
53
+ /**
54
+ * Its own numbers, for whatever it leaves to chance (which base to scout first): seeded from the world's and the
55
+ * player's, kept in its memory, so that the same game plays the same way. Never `Math.random`
56
+ */
57
+ rng;
58
+ /** Where it says what it does: the world's log, with the player it plays and its brain on each line */
59
+ log;
60
+ /** Whether it sits still (`world.computers.pause`). Kept in a save */
61
+ paused = false;
62
+ /**
63
+ * What it sees, as of its last think: the snapshot of its seat, plain data, and the only input a brain has. Taken once
64
+ * a think: every module of the think reads the same picture
65
+ */
66
+ snapshot;
67
+ /**
68
+ * Its reading of the picture (`AiView`): the snapshot indexed once a think and asked as sets (`view.mine.idle()`,
69
+ * `view.enemies.near(home, 20)`), with what unit types are for (`view.roles`) and the map's facts. What a module
70
+ * reads the game through
71
+ */
72
+ view;
73
+ /**
74
+ * What it remembers of the enemy, the map and itself, with when (`Knowledge`): their bases and army as last seen,
75
+ * when each place was last looked at, its own losses and income. Brought up to date as each think begins, after the
76
+ * view; kept in a save
77
+ */
78
+ knowledge;
79
+ /**
80
+ * What it could do (`Goals`): its goals scored each think from their considerations, the best given what they
81
+ * claim of its units and money, each run while it holds its claim. Its definition's goals and the seat's; a module
82
+ * adds its own (`ai.goals.add`). Picked by the `goals()` module, or by one of the brain's own in its place
83
+ */
84
+ goals;
85
+ /**
86
+ * What it has to spend this think (`Purse`): its resources less what builders on their way will pay and what is
87
+ * held (a goal's money claim, a want saving up), rebuilt from the picture as each think begins. The one ledger:
88
+ * everything that spends, spends through it. `view.me.purse` is what is free
89
+ */
90
+ purse;
91
+ /**
92
+ * Its plans (`Plans`): the build plan (`plans.build`: wants, the steps to each through the tech tree, spots,
93
+ * builders, saving up), the production plan (`plans.production`: the composition, counters, supply ahead,
94
+ * research), the game's build order over both, and `plans.want` to add to them. Run by the `build()` and
95
+ * `production()` modules, or by one of the brain's own
96
+ */
97
+ plans;
98
+ /**
99
+ * Its squads (`Squads`): named groups of its units, each with a task (attack there, defend here, gather and go), made
100
+ * by its goals, rules and modules out of what they hold, and watched by the `squads()` module think after think:
101
+ * orders sent once and watched, regroups, retreats on the odds, reinforcements. Kept in a save
102
+ */
103
+ squads;
104
+ /**
105
+ * How it plays (`AiProfile`), resolved (`resolveProfile`): how well it plays (the engine's, the game's, the
106
+ * difficulty's, the personality's, the seat's `every` and `budget`) and its settings, the brain's, the game's, the
107
+ * difficulty's, the personality's, the map's and the seat's each over the one before (a flag's function left out)
108
+ */
109
+ profile;
110
+ /** Its settings' layers, lowest first (`ResolvedProfile.layers`): what `settings` is worked out from */
111
+ layers;
112
+ /** How many times it has thought */
113
+ thinks = 0;
114
+ /**
115
+ * What it decided, the last fifty (`decide`): the goals picked and stopped, with the reason that weighed most, and
116
+ * what its modules write down. Kept in a save
117
+ */
118
+ decisions = new Decisions();
119
+ /** The board of its team, shared by its team's computers: what its seat was given (`BrainContext.team`), for its team play */
120
+ teamBoard;
121
+ /** Its areas, in the order they were made (`area`) */
122
+ areaList = [];
123
+ /** What a save remembered of areas not made yet, by id: taken by each as a module first asks for it */
124
+ waiting = {};
125
+ /** What was worked out for this think, by key (`cache`): thrown away with the picture */
126
+ memo = /* @__PURE__ */ new Map();
127
+ /**
128
+ * How strong things are (`Strength`): a unit, a group, one force against another (`odds`), what answers what
129
+ * (`counterFor`). The view's: the kit's formula unless the brain or the seat was given one
130
+ */
131
+ get strength() {
132
+ return this.view.strength;
133
+ }
134
+ /**
135
+ * Where the strength is (`ThreatMap`): the friendly and the enemy strength that reaches each cell of a coarse grid
136
+ * over the map, by layer. Made from the think's picture when first asked; `threat.at(undefined)` is all zeros
137
+ */
138
+ get threat() {
139
+ return this.view.threat;
140
+ }
141
+ /** Commands it sent this think */
142
+ sent = 0;
143
+ /** Commands it would have sent this think past what its profile lets a think send (`commandsPerThink`): not sent */
144
+ held = 0;
145
+ /**
146
+ * What its play adds up to since it was seated (`AiStats`): commands sent, held and refused, seconds its fighters
147
+ * stood idle, orders sent again for the same thing, seconds its building waited on money. For the report and
148
+ * `simulate`, never for a decision; not kept in a save
149
+ */
150
+ stats = {
151
+ commands: 0,
152
+ held: 0,
153
+ refused: 0,
154
+ idleArmySeconds: 0,
155
+ churn: 0,
156
+ blockedOnMoney: 0,
157
+ thinks: 0
158
+ };
159
+ /** The tick of the think before, for what is counted by the seconds between thinks */
160
+ lastThink;
161
+ /** The last order each unit was sent, with the tick: what an order sent again for the same thing is counted against (`AiStats.churn`) */
162
+ lastOrders = /* @__PURE__ */ new Map();
163
+ /** The tick each unit was last told to cast: an order told again after a cast between is not counted as churn */
164
+ castAt = /* @__PURE__ */ new Map();
165
+ /**
166
+ * How much of a think one tick may do (`ThinkBudget`): so many modules, so many units looked at as the modules say
167
+ * (`budget.spent(n)`), the think going on at the next tick from where it stopped (`budget.later()`). Counted in work,
168
+ * never in milliseconds, so that the game is the same on every machine. What the seat was given (`BrainContext.budget`)
169
+ */
170
+ budget;
171
+ /** Milliseconds each module took, averaged over thinks, by id: while the world profiles (`BrainContext.profiling`) */
172
+ moduleTiming = {};
173
+ /** The most milliseconds each module took in one pass, by id: always, as the warning (`ThinkBudgetOptions.warnAfterMs`) is */
174
+ moduleLongest = {};
175
+ /** Milliseconds taking the picture of the game took (the seat's `snapshot()`), averaged: while the world profiles */
176
+ snapshotTiming;
177
+ /** Milliseconds reading the picture into the view took (`AiView`, the ledger with it), averaged: while the world profiles */
178
+ viewTiming;
179
+ /** Milliseconds bringing the knowledge up to date took, averaged: while the world profiles */
180
+ knowledgeTiming;
181
+ /** Ticks the last think took, all its passes: 1 unless its budget sliced it */
182
+ thinkTicks = 0;
183
+ /** Ticks of the think under way so far */
184
+ ticksSoFar = 0;
185
+ /** The modules the log has warned of taking over `warnAfterMs`, once each */
186
+ warned = /* @__PURE__ */ new Set();
187
+ /**
188
+ * The passes of the think under way: each module run, with the units the tick had looked at before it. What a save in
189
+ * the middle of the think keeps (`BrainMemory.thinking`), kept only where the budget may slice
190
+ */
191
+ passes = [];
192
+ heard = [];
193
+ /** Who follows its play from outside (`watch`): none in a game, so nothing is paid for it there */
194
+ watchers = [];
195
+ /** The module a think under way goes on from, at the next tick: none between thinks (`budget`) */
196
+ slice;
197
+ /**
198
+ * What it remembered as the think under way began, for a think sliced across ticks: what a save taken before the
199
+ * think ends keeps, with how far it got (`BrainMemory.thinking`)
200
+ */
201
+ began;
202
+ /** The words told it since the think under way began: a save taken before it ends keeps them beside what it began with */
203
+ toldDuring = [];
204
+ /** A think a save was taken in the middle of: run again to where it was, then on, at the next tick (`restore`) */
205
+ resume;
206
+ /** While the modules a loaded game had run already are run again: nothing is sent, said or watched */
207
+ replaying = false;
208
+ /** While a pass is run again: how many of the words it was told the pass had heard then, the rest told it after */
209
+ replayHeard;
210
+ profiling;
211
+ constructor(def, session, options, context = {}) {
212
+ this.def = def;
213
+ this.session = session;
214
+ this.options = options;
215
+ this.rng = new Rng(context.seed ?? 1);
216
+ this.log = (session.log ?? rootLogger).child(() => ({ fields: {
217
+ ai: session.playerId,
218
+ brain: def.id
219
+ } }));
220
+ this.snapshot = session.snapshot();
221
+ const race = this.snapshot.players.find((player) => player.id === session.playerId)?.race;
222
+ const { profile, layers, unknown } = resolveProfile(options, session.registry, def.settings, race);
223
+ this.profile = profile;
224
+ this.layers = layers;
225
+ if (unknown.length) this.log.warn("ai", `the computer player is seated with a ${unknown.join(" and a ")} the game does not have: the defaults stand in`);
226
+ this.budget = new ThinkBudget(context.budget);
227
+ this.profiling = context.profiling ?? (() => false);
228
+ this.view = new AiView(this.snapshot, session, {
229
+ roles: options.roles,
230
+ strength: options.strength ?? def.strength
231
+ });
232
+ this.knowledge = new Knowledge(def.knowledge || {}, session.terrain, def.knowledge !== false);
233
+ this.goals = new Goals(this, def.picking);
234
+ this.goals.add(...def.goals ?? []);
235
+ this.purse = new Purse(session.registry);
236
+ this.purse.begin(this.view);
237
+ this.plans = new Plans(this, profile.plans ?? {});
238
+ this.squads = new Squads(this, profile.squads?.tasks);
239
+ this.teamBoard = context.team;
240
+ for (const area of [
241
+ this.knowledge,
242
+ this.goals,
243
+ this.plans,
244
+ this.squads
245
+ ]) this.register(area);
246
+ this.goals.add(...options.goals ?? []);
247
+ const left = new Set(def.without ?? []);
248
+ const kept = def.modules.filter((module) => {
249
+ const id = idOf(module);
250
+ return id === void 0 || !left.has(id);
251
+ });
252
+ for (const id of left) if (!def.modules.some((module) => idOf(module) === id)) this.log.warn("ai", `the brain "${def.id}" leaves out a module "${id}" it does not have`);
253
+ const made = kept.map((module) => typeof module === "function" ? module(this) : module);
254
+ const ids = /* @__PURE__ */ new Set();
255
+ for (const module of made) {
256
+ if (ids.has(module.id)) throw new Error(`The brain "${def.id}" has two modules called "${module.id}"`);
257
+ ids.add(module.id);
258
+ }
259
+ let phase = 0;
260
+ const phased = made.map((module, listed) => {
261
+ if (module.phase) phase = AI_PHASES.indexOf(module.phase);
262
+ return {
263
+ module,
264
+ phase,
265
+ listed
266
+ };
267
+ });
268
+ phased.sort((a, b) => a.phase - b.phase || a.listed - b.listed);
269
+ this.modules = order(phased.map(({ module }) => ({
270
+ name: module.id,
271
+ before: module.before,
272
+ after: module.after,
273
+ module
274
+ }))).map((each) => each.module);
275
+ if (context.checks ?? debugChecks.ai) checkBrain(this);
276
+ }
277
+ /**
278
+ * An area of its (`AiArea`): its economy (`ai.area(Economy)`), its scouting, a game's own (`defineArea`), made the
279
+ * first time it is asked for, with what a save remembered of it. What its modules share beyond what every module
280
+ * does (`knowledge`, `goals`, `plans`, `squads`, `purse`)
281
+ */
282
+ area(key) {
283
+ const known = this.areaList.find((area) => area.id === key.id);
284
+ if (known) return known;
285
+ const made = key.make(this);
286
+ if (made.id !== key.id) throw new Error(`The area "${key.id}" made an area called "${made.id}"`);
287
+ this.register(made);
288
+ return made;
289
+ }
290
+ /**
291
+ * An area made already, by id: none where no module has asked for it. For a part of the kit that reads another's
292
+ * area where there is one and needs nothing of it where there is none (whether a squad's fights are the micro's)
293
+ */
294
+ made(id) {
295
+ return this.areaList.find((area) => area.id === id);
296
+ }
297
+ /** Its areas, in the order they were made: what its memory and its report are made of */
298
+ areas() {
299
+ return this.areaList;
300
+ }
301
+ /** Puts an area among its own, with what a save remembered of it */
302
+ register(area) {
303
+ this.areaList.push(area);
304
+ if (!(area.id in this.waiting)) return;
305
+ const memory = this.waiting[area.id];
306
+ delete this.waiting[area.id];
307
+ if (!area.restore(memory)) this.log.info("ai", area.afresh ?? `the save remembers the computer player's ${area.id} in a shape this brain does not read: it starts afresh`);
308
+ }
309
+ /**
310
+ * Follows its play from outside (`BrainWatcher`): the commands it sends, its thinks as each ends, what it decides.
311
+ * Returns the way to stop. What `watchComputer` and `recordDecisions` of `@v12-engine/engine/testing` stand on
312
+ */
313
+ watch(watcher) {
314
+ this.watchers = [...this.watchers, watcher];
315
+ return () => {
316
+ this.watchers = this.watchers.filter((each) => each !== watcher);
317
+ };
318
+ }
319
+ /** The player it plays */
320
+ get playerId() {
321
+ return this.session.playerId;
322
+ }
323
+ /** The game's definitions, as the seat has them */
324
+ get registry() {
325
+ return this.session.registry;
326
+ }
327
+ /** The tick of its picture of the game */
328
+ get tick() {
329
+ return this.snapshot.tick;
330
+ }
331
+ /** Seconds into the game, as of its picture of it */
332
+ get time() {
333
+ return this.snapshot.tick / this.session.tickRate;
334
+ }
335
+ /** The player it plays, as its picture shows them: resources, supply, tech (`own`). Nothing once out of the game. `view.me` is the same, never nothing */
336
+ get me() {
337
+ return this.view.player(this.session.playerId);
338
+ }
339
+ module(key) {
340
+ const id = typeof key === "string" ? key : key.id;
341
+ return this.modules.find((module) => module.id === id);
342
+ }
343
+ /**
344
+ * What its areas play by this think (`AiSettings`): its settings' layers worked out, a flag that is a function of the
345
+ * brain asked now. Each area reads its own (`ai.settings.economy`), over what its module was made with
346
+ */
347
+ get settings() {
348
+ return this.cache("settings", () => resolveSettings(this.layers, this));
349
+ }
350
+ /**
351
+ * What was worked out once for this think, by key: a consideration asked by several goals, a set a few modules
352
+ * read (`ai.cache('intruders', () => ...)`). Thrown away as the next think takes its picture
353
+ */
354
+ cache(key, compute) {
355
+ if (this.memo.has(key)) return this.memo.get(key);
356
+ const value = compute();
357
+ this.memo.set(key, value);
358
+ return value;
359
+ }
360
+ /** Whether a think is under way across ticks (`budget`): the seat asks it to think on at the next tick */
361
+ get busy() {
362
+ return this.slice !== void 0 || this.resume !== void 0;
363
+ }
364
+ /**
365
+ * One think, or one tick of it. A new picture of the game is taken, and the modules run over it in their order, as
366
+ * many a tick as the budget allows (`budget`): so many modules, so many units looked at as they say. A module's error
367
+ * is the seat's to catch, as a system's is
368
+ */
369
+ think() {
370
+ if (this.paused) return;
371
+ const resume = this.resume;
372
+ this.resume = void 0;
373
+ if (this.slice === void 0) {
374
+ const timed = this.profiling();
375
+ const start = timed ? performance.now() : 0;
376
+ const snapshot = resume?.snapshot ?? this.session.snapshot();
377
+ const taken = timed ? performance.now() : 0;
378
+ if (timed) this.snapshotTiming = averaged(this.snapshotTiming, taken - start);
379
+ if (snapshot.outcome !== "playing") return;
380
+ this.snapshot = snapshot;
381
+ this.memo.clear();
382
+ const before = this.view;
383
+ this.view = new AiView(snapshot, this.session, {
384
+ before,
385
+ roles: this.options.roles,
386
+ strength: this.options.strength ?? this.def.strength
387
+ });
388
+ const read = timed ? performance.now() : 0;
389
+ if (this.def.knowledge !== false) {
390
+ if (resume) this.knowledge.resume(this.view);
391
+ else this.knowledge.update(this.view, before);
392
+ this.view.me.income = this.knowledge.own.incomes();
393
+ }
394
+ const remembered = timed ? performance.now() : 0;
395
+ if (timed && this.def.knowledge !== false) this.knowledgeTiming = averaged(this.knowledgeTiming, remembered - read);
396
+ this.purse.begin(this.view);
397
+ const holds = this.goals.all();
398
+ for (const id in holds) if (holds[id].money) this.purse.reserve(id, holds[id].money);
399
+ this.view.me.purse = this.purse.free;
400
+ if (!resume) {
401
+ this.thinks++;
402
+ this.count();
403
+ }
404
+ this.sent = 0;
405
+ this.held = 0;
406
+ this.slice = 0;
407
+ this.passes = [];
408
+ this.ticksSoFar = 0;
409
+ if (timed) this.viewTiming = averaged(this.viewTiming, read - taken + (performance.now() - remembered));
410
+ if (this.budget.slices) {
411
+ this.began = this.memory();
412
+ this.toldDuring = [];
413
+ }
414
+ if (resume) {
415
+ this.replaying = true;
416
+ try {
417
+ for (const [module, units, heard] of resume.passes) {
418
+ this.slice = module;
419
+ this.budget.begin(units);
420
+ this.replayHeard = heard;
421
+ this.pass(module);
422
+ }
423
+ } finally {
424
+ this.replaying = false;
425
+ this.replayHeard = void 0;
426
+ }
427
+ }
428
+ }
429
+ this.ticksSoFar++;
430
+ this.budget.begin();
431
+ let ran = 0;
432
+ let at = this.slice;
433
+ while (at < this.modules.length && ran < this.budget.modulesPerTick && this.budget.room) {
434
+ const module = this.modules[at];
435
+ const every = module.everyThinks ?? 1;
436
+ if (every !== 1 && (this.thinks - 1) % every !== (module.offset ?? 0) % every) {
437
+ at++;
438
+ continue;
439
+ }
440
+ ran++;
441
+ const more = this.pass(at);
442
+ at = this.slice;
443
+ if (!more) break;
444
+ }
445
+ this.slice = at;
446
+ if (at >= this.modules.length) {
447
+ this.slice = void 0;
448
+ this.began = void 0;
449
+ this.passes = [];
450
+ this.thinkTicks = this.ticksSoFar;
451
+ if (this.plans.build.savingFor !== void 0) this.stats.blockedOnMoney += this.sinceLastThink();
452
+ this.lastThink = this.tick;
453
+ for (const watcher of this.watchers) watcher.thought?.(this);
454
+ }
455
+ }
456
+ /**
457
+ * One pass of a module: run once, timed, and the think moved on past it, unless it stopped for the tick with more to
458
+ * do (`budget.later()`), in which case it is where the think goes on at the next tick. Gives whether the think may go
459
+ * on this tick
460
+ */
461
+ pass(index) {
462
+ const module = this.modules[index];
463
+ const { budget } = this;
464
+ const before = budget.units;
465
+ if (budget.slices) this.passes.push([
466
+ index,
467
+ before,
468
+ this.heard.length
469
+ ]);
470
+ budget.deferred = false;
471
+ const start = performance.now();
472
+ module.think(this);
473
+ const took = performance.now() - start;
474
+ if (!(took <= (this.moduleLongest[module.id] ?? 0))) this.moduleLongest[module.id] = took;
475
+ if (this.profiling()) this.moduleTiming[module.id] = averaged(this.moduleTiming[module.id], took);
476
+ if (budget.warnAfterMs !== void 0 && took > budget.warnAfterMs && !this.warned.has(module.id) && !this.replaying) {
477
+ this.warned.add(module.id);
478
+ this.log.warn("ai", `the module "${module.id}" took ${took.toFixed(1)} ms, over ${budget.warnAfterMs}: said once`, {
479
+ module: module.id,
480
+ ms: Math.round(took * 100) / 100
481
+ });
482
+ }
483
+ if (budget.deferred) {
484
+ if (budget.units > before) return false;
485
+ if (!this.replaying && !this.warned.has(`later:${module.id}`)) {
486
+ this.warned.add(`later:${module.id}`);
487
+ this.log.warn("ai", `the module "${module.id}" asked to go on at the next tick having looked at nothing: taken to be done, said once`, { module: module.id });
488
+ }
489
+ }
490
+ this.slice = index + 1;
491
+ return budget.room;
492
+ }
493
+ /** Seconds between the think before and this one's picture: 0 for the first think */
494
+ sinceLastThink() {
495
+ return this.lastThink === void 0 ? 0 : (this.tick - this.lastThink) / this.session.tickRate;
496
+ }
497
+ /**
498
+ * Counts, as a think begins, what its play adds up to (`stats`): the fighters that stood idle since the last think,
499
+ * the commands the game refused since, and the orders it no longer needs to remember for the churn
500
+ */
501
+ count() {
502
+ const { stats, view } = this;
503
+ stats.thinks++;
504
+ const seconds = this.sinceLastThink();
505
+ if (seconds > 0) stats.idleArmySeconds += view.mine.fighters().idle().length * seconds;
506
+ for (const event of view.events.of("command")) if (event.refusal) stats.refused++;
507
+ const forgotten = this.tick - 5 * this.session.tickRate;
508
+ for (const [id, last] of this.lastOrders) if (last.tick < forgotten || !view.mine.has(id)) this.lastOrders.delete(id);
509
+ for (const [id, tick] of this.castAt) if (tick < forgotten || !view.mine.has(id)) this.castAt.delete(id);
510
+ }
511
+ /**
512
+ * Sends a command, as the player would: counted (`sent`), carried out at the next tick. Returns the command's number;
513
+ * -1 for one past what its profile lets a think send (`commandsPerThink`, a person's hands), which is not sent
514
+ */
515
+ send(command) {
516
+ if (this.replaying) {
517
+ this.sent++;
518
+ this.churn(command);
519
+ return -1;
520
+ }
521
+ const cap = this.profile.commandsPerThink;
522
+ if (cap !== void 0 && this.sent >= cap) {
523
+ this.held++;
524
+ this.stats.held++;
525
+ return -1;
526
+ }
527
+ this.sent++;
528
+ this.stats.commands++;
529
+ this.churn(command);
530
+ for (const watcher of this.watchers) watcher.sent?.(command, this);
531
+ return this.session.send(command);
532
+ }
533
+ /**
534
+ * Counts an order sent to a unit for the same thing as its last within a few seconds (`AiStats.churn`): a unit told
535
+ * to attack-move there every think never arrives, it stops and starts. The squads send an order once and watch it;
536
+ * this is how a test or `simulate` sees that they do
537
+ */
538
+ churn(command) {
539
+ const key = orderKey(command);
540
+ if (command.queue) return;
541
+ if (key === void 0) {
542
+ if (command.type === "cast") for (const id of command.entities) this.castAt.set(id, this.tick);
543
+ return;
544
+ }
545
+ const window = 5 * this.session.tickRate;
546
+ for (const id of command.entities) {
547
+ const last = this.lastOrders.get(id);
548
+ const cast = this.castAt.get(id);
549
+ if (last && last.key === key && this.tick - last.tick <= window && !(cast !== void 0 && cast >= last.tick)) this.stats.churn++;
550
+ this.lastOrders.set(id, {
551
+ key,
552
+ tick: this.tick
553
+ });
554
+ }
555
+ }
556
+ /**
557
+ * The last order it sent a unit lately (within a few seconds), as a key (`orderKey`: its kind, its target, its
558
+ * place to the cell) with the tick: what keeps a module from telling a unit again what it is already doing, when the
559
+ * unit changed hands (a squad of another goal) since. None for a unit told nothing lately
560
+ */
561
+ sentTo(unit) {
562
+ const last = this.lastOrders.get(unit);
563
+ return last && this.tick - last.tick <= 5 * this.session.tickRate ? last : void 0;
564
+ }
565
+ /**
566
+ * The words the game told it and no module has taken yet (`world.computers.tell`), oldest first; those of one word
567
+ * where given. Reading them takes nothing: `takeTold` does, as a told rule (`when.told`) does when it fires
568
+ */
569
+ told(word) {
570
+ const heard = this.replayHeard === void 0 ? this.heard : this.heard.slice(0, this.replayHeard);
571
+ return word === void 0 ? heard : heard.filter((told) => told.word === word);
572
+ }
573
+ /**
574
+ * Writes down a decision (`decisions`), with the reason that weighed most, in words: what the report's log and the
575
+ * debug panel show, and the world's log at its `debug` level. `kind` says what it is about (`army`, `build`)
576
+ */
577
+ decide(line, about = {}) {
578
+ if (this.replaying) return;
579
+ const decision = {
580
+ tick: this.tick,
581
+ kind: about.kind ?? "other",
582
+ line,
583
+ ...about.goal !== void 0 && { goal: about.goal }
584
+ };
585
+ this.decisions.add(decision);
586
+ for (const watcher of this.watchers) watcher.decided?.(decision, this);
587
+ if (this.log.says("debug")) this.log.debug("ai", line, {
588
+ player: this.playerId,
589
+ kind: decision.kind,
590
+ ...about.goal !== void 0 && { goal: about.goal }
591
+ });
592
+ }
593
+ /**
594
+ * What it is thinking, as plain data (`AiReport`): its goals with their considerations, what it knows, its roles,
595
+ * its economy, what it was told, what it decided, and each module's section. Made when asked: nothing in a think
596
+ * waits for it. What `inspect` gives, and the debug panel's AI tab draws
597
+ */
598
+ report() {
599
+ const { view } = this;
600
+ const me = view.me;
601
+ const sections = {};
602
+ const report = {
603
+ v: 1,
604
+ brain: this.def.id,
605
+ player: this.playerId,
606
+ tick: this.tick,
607
+ time: this.time,
608
+ tickRate: this.session.tickRate,
609
+ thinks: this.thinks,
610
+ ...this.paused && { paused: true },
611
+ profile: plainParts(this.options).kept,
612
+ playing: plainParts(this.profile).kept,
613
+ ...this.goals.best !== void 0 && { goal: this.goals.best },
614
+ goals: this.goals.report(),
615
+ ...this.def.knowledge !== false && { knowledge: this.knowledge.inspect() },
616
+ roles: view.inspect().roles,
617
+ economy: {
618
+ resources: { ...me.resources },
619
+ income: { ...me.income ?? {} },
620
+ supply: [me.supplyUsed, me.supplyCap]
621
+ },
622
+ plans: this.plans.report(),
623
+ squads: this.squads.report(),
624
+ threat: threatOf(view.threat),
625
+ told: this.heard.map((told) => ({
626
+ word: told.word,
627
+ tick: told.tick
628
+ })),
629
+ sent: this.sent,
630
+ ...this.held && { held: this.held },
631
+ ...this.budget.slices && { budget: {
632
+ ...this.budget.report(),
633
+ ticks: this.thinkTicks
634
+ } },
635
+ stats: { ...this.stats },
636
+ decisions: this.decisions.save(),
637
+ sections
638
+ };
639
+ for (const area of this.areaList) area.reportTo?.(report);
640
+ for (const module of this.modules) {
641
+ module.report?.(report);
642
+ const what = module.inspect?.();
643
+ if (what !== void 0) sections[module.id] = what;
644
+ }
645
+ return report;
646
+ }
647
+ /**
648
+ * A goal's row of the report as a sentence: what it scored and why, whether it runs and with what, or what kept it
649
+ * from running. Nothing for a goal the brain does not have
650
+ */
651
+ explain(goal) {
652
+ const row = this.goals.report().find((each) => each.id === goal);
653
+ return row && explainGoal(row, (tick) => tick / this.session.tickRate, this.time);
654
+ }
655
+ /** Takes in a word from the game: a module takes it with `takeTold`. What the seat calls for `world.computers.tell` */
656
+ tell(word, data, tick) {
657
+ if (word === "resume" && this.paused) {
658
+ this.paused = false;
659
+ this.decide("resumes: told to", { kind: "word" });
660
+ return;
661
+ }
662
+ this.heard.push({
663
+ word,
664
+ ...data !== void 0 && { data },
665
+ tick
666
+ });
667
+ if (this.slice !== void 0 && this.began) this.toldDuring.push({
668
+ word,
669
+ ...data !== void 0 && { data },
670
+ tick
671
+ });
672
+ }
673
+ /** Takes the words of one kind out of what it was told, oldest first, as many as `count` (all when left out): they are heard no more */
674
+ takeTold(word, count = Infinity) {
675
+ const taken = [];
676
+ const among = this.replayHeard ?? Infinity;
677
+ this.heard = this.heard.filter((told, index) => {
678
+ if (index >= among || told.word !== word || taken.length >= count) return true;
679
+ taken.push(told);
680
+ return false;
681
+ });
682
+ if (this.replayHeard !== void 0) this.replayHeard -= taken.length;
683
+ return taken;
684
+ }
685
+ /**
686
+ * What it remembers, for a save: its numbers, each module's memory with its version, what it was told. A think under
687
+ * way (`budget`) is kept as it began, with how far it got and its picture (`BrainMemory.thinking`): the game loaded
688
+ * from the save runs it on to its end as the saved game does
689
+ */
690
+ save() {
691
+ const heard = this.session.can.computer?.pendingEvents().filter((event) => HEARD.has(event.type));
692
+ if (this.slice !== void 0 && this.began) return {
693
+ ...this.began,
694
+ told: [...this.began.told, ...this.toldDuring.map((told) => ({ ...told }))],
695
+ ...heard?.length && { heard },
696
+ ...this.decisions.list().length > 0 && { decisions: this.decisions.save() },
697
+ thinking: {
698
+ snapshot: this.snapshot,
699
+ passes: this.passes.map((pass) => [...pass])
700
+ }
701
+ };
702
+ return {
703
+ ...this.memory(),
704
+ ...heard?.length && { heard }
705
+ };
706
+ }
707
+ /** What its areas remember, by id: those that remember anything, and what a save had of areas not made since */
708
+ areaMemories() {
709
+ const areas = { ...this.waiting };
710
+ for (const area of this.areaList) if (area.remembers()) areas[area.id] = area.save();
711
+ return areas;
712
+ }
713
+ /** What it remembers, but what its seat heard since it last thought */
714
+ memory() {
715
+ const modules = {};
716
+ for (const module of this.modules) {
717
+ const data = module.save?.();
718
+ if (data !== void 0) modules[module.id] = {
719
+ v: module.version ?? 1,
720
+ data
721
+ };
722
+ }
723
+ return {
724
+ v: 2,
725
+ rng: this.rng.save(),
726
+ thinks: this.thinks,
727
+ ...this.paused && { paused: true },
728
+ told: this.heard.map((told) => ({ ...told })),
729
+ modules,
730
+ areas: this.areaMemories(),
731
+ ...this.decisions.list().length > 0 && { decisions: this.decisions.save() },
732
+ ...this.lastOrders.size > 0 && { orders: [...this.lastOrders].map(([unit, last]) => ({
733
+ unit,
734
+ ...last
735
+ })) }
736
+ };
737
+ }
738
+ /**
739
+ * Takes back what `save` gave. A module's memory of another version goes through its `migrate`; without one, or with
740
+ * nothing in the save for it, the module starts afresh, and the log says so once. Memory of a module the brain no
741
+ * longer has is dropped, said too
742
+ */
743
+ restore(memory) {
744
+ if (!memory || typeof memory !== "object" || memory.v !== 2) {
745
+ this.log.warn("ai", "the save remembers the computer player in a shape this brain does not read: it starts afresh", { brain: this.def.id });
746
+ return;
747
+ }
748
+ this.rng.restore(memory.rng);
749
+ this.thinks = memory.thinks ?? 0;
750
+ this.resume = memory.thinking && {
751
+ snapshot: memory.thinking.snapshot,
752
+ passes: memory.thinking.passes ?? Array.from({ length: memory.thinking.slice ?? 0 }, (_, module) => [
753
+ module,
754
+ 0,
755
+ (memory.told ?? []).length
756
+ ])
757
+ };
758
+ this.paused = !!memory.paused;
759
+ this.heard = (memory.told ?? []).map((told) => ({ ...told }));
760
+ this.decisions.restore(memory.decisions);
761
+ this.lastOrders.clear();
762
+ for (const order of memory.orders ?? []) this.lastOrders.set(order.unit, {
763
+ key: order.key,
764
+ tick: order.tick
765
+ });
766
+ if (memory.heard?.length) this.session.can.computer?.restoreEvents(memory.heard);
767
+ this.waiting = { ...memory.areas };
768
+ for (const area of [...this.areaList]) {
769
+ if (!(area.id in this.waiting)) continue;
770
+ const kept = this.waiting[area.id];
771
+ delete this.waiting[area.id];
772
+ if (!area.restore(kept)) this.log.info("ai", area.afresh ?? `the save remembers the computer player's ${area.id} in a shape this brain does not read: it starts afresh`);
773
+ }
774
+ const read = /* @__PURE__ */ new Set();
775
+ for (const module of this.modules) {
776
+ let kept = memory.modules?.[module.id];
777
+ if (kept) read.add(module.id);
778
+ else for (const was of module.wasCalled ?? []) {
779
+ kept = memory.modules?.[was];
780
+ if (!kept) continue;
781
+ read.add(was);
782
+ this.log.info("ai", `the module "${module.id}" reads what the save kept as "${was}"`, {
783
+ module: module.id,
784
+ was
785
+ });
786
+ break;
787
+ }
788
+ if (!kept) {
789
+ if (module.save) this.log.info("ai", `the save has nothing for the module "${module.id}": it starts afresh`, { module: module.id });
790
+ continue;
791
+ }
792
+ const version = module.version ?? 1;
793
+ let data = kept.data;
794
+ if (kept.v !== version) {
795
+ data = module.migrate?.(kept.data, kept.v);
796
+ if (data === void 0) {
797
+ this.log.info("ai", `the module "${module.id}" saved version ${kept.v} and reads ${version}: it starts afresh`, {
798
+ module: module.id,
799
+ from: kept.v
800
+ });
801
+ continue;
802
+ }
803
+ }
804
+ module.restore?.(data);
805
+ }
806
+ for (const id of Object.keys(memory.modules ?? {})) if (!this.module(id) && !read.has(id)) this.log.info("ai", `the save remembers a module "${id}" this brain does not have: dropped`, { module: id });
807
+ }
808
+ /** What it is thinking, for the debug tools: its report (`report`) */
809
+ inspect() {
810
+ return this.report();
811
+ }
812
+ /** Lets its modules go of what they hold outside the brain */
813
+ dispose() {
814
+ for (const module of this.modules) module.dispose?.();
815
+ }
816
+ };
817
+ /**
818
+ * Makes a brain from its definition for a seat: the session it plays through, the options it is seated with. What
819
+ * a brain's seat does (`createBrainSystem`); for a seat made another way (`createComputerSystem`'s `make`)
820
+ *
821
+ * @beta
822
+ */
823
+ function createBrain(def, session, options, context = {}) {
824
+ return new Brain(def, session, options, context);
825
+ }
826
+ /** The threat map as the report has it: its cells with something in them, on the ground, what it remembers counted */
827
+ function threatOf(map) {
828
+ const round = (x) => Math.round(x * 10) / 10;
829
+ return {
830
+ cell: map.cell,
831
+ cols: map.cols,
832
+ rows: map.rows,
833
+ cells: map.cells({ remembered: true }).map((cell) => [
834
+ cell.col,
835
+ cell.row,
836
+ round(cell.friendly),
837
+ round(cell.enemy)
838
+ ])
839
+ };
840
+ }
841
+ //#endregion
842
+ export { Brain, createBrain };
843
+
844
+ //# sourceMappingURL=brain.js.map