@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,332 @@
1
+ import { defineComponent } from "./components.js";
2
+ //#region src/foliageRegrowth.ts
3
+ /** The most cells of a layer grown back (or set growing) a tick: the rest the next ticks, in their order */
4
+ var REGROW_A_TICK = 1024;
5
+ /** What a list is cut back to its waiting part at: once this much of it is done, and half */
6
+ var COMPACT_AT = 1024;
7
+ /** Seconds a cell takes to grow back once it starts by itself, where its style does not say (`FoliageStyleDef.grows`) */
8
+ var GROWS = 10;
9
+ /** What names a cell's entry now (`FoliageRegrowth.index`): when it is due, and whether it is to stand whole then or start growing */
10
+ var keyOf = (due, grow) => due * 2 + (grow < 0 ? 1 : 0);
11
+ /**
12
+ * Where a foliage pack keeps its regrowth (`FoliageRegrowth`), on the pack: for its world state's save to find
13
+ *
14
+ * @internal
15
+ */
16
+ var REGROWTH = Symbol("foliage regrowth");
17
+ /** The regrowth of a world's game: none where it has no foliage pack */
18
+ var regrowthOf = (world) => (world.registry.assembly?.rules.packs?.find((pack) => REGROWTH in pack))?.[REGROWTH];
19
+ /**
20
+ * What waits to grow back in a world (`RegrowState`): plain data, kept by a save as what is still to come, each list
21
+ * from its waiting part
22
+ *
23
+ * @internal
24
+ */
25
+ var regrowState = /* @__PURE__ */ defineComponent({
26
+ id: "foliage.regrow",
27
+ default: () => ({}),
28
+ save: (state, world) => saved(state, regrowthOf(world))
29
+ });
30
+ /** A save's copy of what waits: each list from its waiting part, without what was passed over (given a new time since) */
31
+ function saved(state, regrowth) {
32
+ const copy = {};
33
+ for (const layer of Object.keys(state).sort()) {
34
+ const queue = state[layer];
35
+ const at = regrowth?.indexOf(queue);
36
+ const kept = {
37
+ cells: [],
38
+ due: [],
39
+ grow: [],
40
+ by: [],
41
+ head: 0
42
+ };
43
+ for (let i = queue.head; i < queue.cells.length; i++) {
44
+ if (at && at[queue.cells[i]] !== keyOf(queue.due[i], queue.grow[i])) continue;
45
+ kept.cells.push(queue.cells[i]);
46
+ kept.due.push(queue.due[i]);
47
+ kept.grow.push(queue.grow[i]);
48
+ kept.by.push(queue.by[i]);
49
+ }
50
+ if (kept.cells.length) copy[layer] = kept;
51
+ }
52
+ return copy;
53
+ }
54
+ /**
55
+ * Grass growing back, the pack's: what each of its styles says of it, and what a tick and the calls do with a world's
56
+ * `regrowState`. One a pack, for every world of its game: the cells' times now (`at`) are kept by the list they are of
57
+ *
58
+ * @internal
59
+ */
60
+ var FoliageRegrowth = class {
61
+ host;
62
+ /** The system that runs it */
63
+ system;
64
+ /** Each list's cells' entries now, by cell: the one still to come (`keyOf`), -1 for none */
65
+ index = /* @__PURE__ */ new WeakMap();
66
+ styles;
67
+ /** Scratch of a tick: what grows whole, starts growing, and for how long, of a layer */
68
+ whole = [];
69
+ wholeBy = [];
70
+ starting = [];
71
+ startingFor = [];
72
+ constructor(host) {
73
+ this.host = host;
74
+ this.system = {
75
+ name: "foliage.regrow",
76
+ phase: "resolve",
77
+ update: (world) => {
78
+ if (!world.states.has(regrowState)) return;
79
+ this.tick(world, world.state(regrowState));
80
+ }
81
+ };
82
+ }
83
+ /** Each cell's time now of a list (`index`): none where it was never asked for in this process (a save's, loaded) */
84
+ indexOf(queue) {
85
+ return this.index.get(queue);
86
+ }
87
+ /** How each style grows back, worked out once for a game's layers of cells and its tick */
88
+ stylesOf(world) {
89
+ const { cellLayers } = world.registry;
90
+ if (this.styles?.of === cellLayers && this.styles.dt === world.dt) return this.styles;
91
+ const game = {
92
+ cellLayers,
93
+ packs: world.registry.assembly?.rules.packs
94
+ };
95
+ const styles = {
96
+ of: cellLayers,
97
+ dt: world.dt,
98
+ after: [],
99
+ grows: []
100
+ };
101
+ for (const layer of this.host.layers) {
102
+ const after = (/* @__PURE__ */ new Int32Array(256)).fill(-1);
103
+ const grows = /* @__PURE__ */ new Int32Array(256);
104
+ for (let value = 1; value < 256; value++) {
105
+ const style = this.host.style(game, layer, value);
106
+ const regrows = style?.regrows;
107
+ if (typeof regrows === "number" && Number.isFinite(regrows)) after[value] = Math.max(1, Math.round(Math.max(0, regrows) / world.dt));
108
+ grows[value] = Math.max(0, Math.round(Math.max(0, style?.grows ?? GROWS) / world.dt));
109
+ }
110
+ styles.after.push(after);
111
+ styles.grows.push(grows);
112
+ }
113
+ return this.styles = styles;
114
+ }
115
+ /** A layer's list of a world, made where it has none; and its cells' times now, worked out of it where they were not kept */
116
+ queueOf(world, l) {
117
+ const state = world.state(regrowState);
118
+ const layer = this.host.layers[l];
119
+ const queue = state[layer] ??= {
120
+ cells: [],
121
+ due: [],
122
+ grow: [],
123
+ by: [],
124
+ head: 0
125
+ };
126
+ let at = this.index.get(queue);
127
+ if (!at) {
128
+ at = new Float64Array(world.terrain.width * world.terrain.depth).fill(-1);
129
+ for (let i = queue.head; i < queue.cells.length; i++) at[queue.cells[i]] = keyOf(queue.due[i], queue.grow[i]);
130
+ this.index.set(queue, at);
131
+ }
132
+ return {
133
+ queue,
134
+ at
135
+ };
136
+ }
137
+ /**
138
+ * Cells of a layer were ruined or burnt (in order of their indices): each to grow back by itself where its style
139
+ * says (`regrows`), and nothing it waited for before; never where its style does not
140
+ */
141
+ ruined(world, l, cells) {
142
+ if (!cells.length) return;
143
+ const { after, grows } = this.stylesOf(world);
144
+ const values = world.terrain.cells[this.host.layers[l]];
145
+ const waits = after[l];
146
+ let any = false;
147
+ for (let i = 0; i < cells.length && !any; i++) any = waits[values?.[cells[i]] ?? 0] >= 0;
148
+ if (!any) {
149
+ if (!world.states.has(regrowState) || !world.state(regrowState)[this.host.layers[l]]) return;
150
+ const { at } = this.queueOf(world, l);
151
+ for (const cell of cells) at[cell] = -1;
152
+ return;
153
+ }
154
+ const { queue, at } = this.queueOf(world, l);
155
+ const add = [];
156
+ for (const cell of cells) {
157
+ const value = values?.[cell] ?? 0;
158
+ const wait = waits[value];
159
+ if (wait < 0) {
160
+ at[cell] = -1;
161
+ continue;
162
+ }
163
+ add.push({
164
+ cell,
165
+ due: world.tick + wait,
166
+ grow: grows[l][value]
167
+ });
168
+ }
169
+ this.add(queue, at, add.map((each) => each.cell), add.map((each) => each.due), add.map((each) => each.grow), void 0);
170
+ }
171
+ /**
172
+ * Has cells of a layer grow back (`regrow`): those ruined or burnt, and those growing where it is at once. Over
173
+ * `over` ticks (growing, whole at its end), or at once (0). The cells that started to, in order
174
+ */
175
+ regrow(world, l, cells, over, by) {
176
+ const { state } = this.host;
177
+ const terrain = world.terrain;
178
+ const values = terrain.cells[this.host.layers[l]];
179
+ const states = terrain.cells[this.host.states[l]];
180
+ const now = over <= 0;
181
+ const which = cells.filter((cell) => {
182
+ if (!values?.[cell]) return false;
183
+ const was = states?.[cell] ?? state.whole;
184
+ return was === state.flattened || was === state.cut || was === state.burnt || now && was === state.growing;
185
+ });
186
+ if (!which.length) return which;
187
+ const layer = this.host.layers[l];
188
+ if (now) {
189
+ world.setCells(this.host.states[l], which, state.whole);
190
+ if (world.states.has(regrowState) && world.state(regrowState)[layer]) {
191
+ const { at } = this.queueOf(world, l);
192
+ for (const cell of which) at[cell] = -1;
193
+ }
194
+ this.host.regrown(world, layer, which, by);
195
+ return which;
196
+ }
197
+ world.setCells(this.host.states[l], which, state.growing, { over: over * world.dt });
198
+ const { queue, at } = this.queueOf(world, l);
199
+ this.add(queue, at, which, which.map(() => world.tick + over), which.map(() => -1), by);
200
+ return which;
201
+ }
202
+ /**
203
+ * Entries into a list, in its order (by when due, then by cell): merged in from the end, so that what comes after
204
+ * all that waits (as most does) costs only its own room. Each cell's time now is the one given; one given twice is
205
+ * there once (as a cell given the same entry again)
206
+ */
207
+ add(queue, at, cells, due, grow, by) {
208
+ if (!cells.length) return;
209
+ const order = cells.map((_, k) => k);
210
+ order.sort((a, b) => due[a] - due[b] || cells[a] - cells[b]);
211
+ const fresh = [];
212
+ for (const k of order) {
213
+ const key = keyOf(due[k], grow[k]);
214
+ if (at[cells[k]] === key) continue;
215
+ at[cells[k]] = key;
216
+ fresh.push(k);
217
+ }
218
+ if (!fresh.length) return;
219
+ this.compact(queue);
220
+ let i = queue.cells.length - 1;
221
+ let j = fresh.length - 1;
222
+ for (let k = 0; k < fresh.length; k++) {
223
+ queue.cells.push(0);
224
+ queue.due.push(0);
225
+ queue.grow.push(0);
226
+ queue.by.push(0);
227
+ }
228
+ for (let w = queue.cells.length - 1; j >= 0; w--) {
229
+ const k = fresh[j];
230
+ if (i >= queue.head && (queue.due[i] > due[k] || queue.due[i] === due[k] && queue.cells[i] > cells[k])) {
231
+ queue.cells[w] = queue.cells[i];
232
+ queue.due[w] = queue.due[i];
233
+ queue.grow[w] = queue.grow[i];
234
+ queue.by[w] = queue.by[i];
235
+ i--;
236
+ } else {
237
+ queue.cells[w] = cells[k];
238
+ queue.due[w] = due[k];
239
+ queue.grow[w] = grow[k];
240
+ queue.by[w] = by ?? 0;
241
+ j--;
242
+ }
243
+ }
244
+ }
245
+ /** A list cut back to its waiting part, where much of it is done */
246
+ compact(queue) {
247
+ const { head } = queue;
248
+ if (head < COMPACT_AT || head * 2 < queue.cells.length) return;
249
+ queue.cells.splice(0, head);
250
+ queue.due.splice(0, head);
251
+ queue.grow.splice(0, head);
252
+ queue.by.splice(0, head);
253
+ queue.head = 0;
254
+ }
255
+ /**
256
+ * A tick: of each layer's list, the cells due by now, at most `REGROW_A_TICK`, in their order: those whose time it
257
+ * still is (not given another since, still ruined or growing, still grass) start growing (one `setCells` for each
258
+ * length of growing) or stand whole (one `setCells`, told by whom)
259
+ */
260
+ tick(world, state) {
261
+ const { tick } = world;
262
+ const { layers } = this.host;
263
+ for (let l = 0; l < layers.length; l++) {
264
+ const queue = state[layers[l]];
265
+ if (!queue || queue.head >= queue.cells.length || queue.due[queue.head] > tick) continue;
266
+ this.layerTick(world, l, queue);
267
+ }
268
+ }
269
+ /** A tick of a layer's list that has cells due (`tick`) */
270
+ layerTick(world, l, queue) {
271
+ const { state, layers, states } = this.host;
272
+ const { tick, terrain } = world;
273
+ const { at } = this.queueOf(world, l);
274
+ const values = terrain.cells[layers[l]];
275
+ const kept = terrain.cells[states[l]];
276
+ const { whole, wholeBy, starting, startingFor } = this;
277
+ whole.length = wholeBy.length = starting.length = startingFor.length = 0;
278
+ let done = 0;
279
+ let i = queue.head;
280
+ for (; i < queue.cells.length && queue.due[i] <= tick && done < REGROW_A_TICK; i++) {
281
+ const cell = queue.cells[i];
282
+ if (at[cell] !== keyOf(queue.due[i], queue.grow[i])) continue;
283
+ at[cell] = -1;
284
+ const was = kept?.[cell] ?? state.whole;
285
+ if (!values?.[cell]) continue;
286
+ const grow = queue.grow[i];
287
+ if (grow < 0) {
288
+ if (was !== state.growing) continue;
289
+ whole.push(cell);
290
+ wholeBy.push(queue.by[i]);
291
+ } else {
292
+ if (was !== state.flattened && was !== state.cut && was !== state.burnt) continue;
293
+ if (grow === 0) {
294
+ whole.push(cell);
295
+ wholeBy.push(0);
296
+ } else {
297
+ starting.push(cell);
298
+ startingFor.push(grow);
299
+ }
300
+ }
301
+ done++;
302
+ }
303
+ queue.head = i;
304
+ if (queue.head >= queue.cells.length) {
305
+ queue.cells.length = queue.due.length = queue.grow.length = queue.by.length = 0;
306
+ queue.head = 0;
307
+ } else this.compact(queue);
308
+ const layer = layers[l];
309
+ if (whole.length) {
310
+ world.setCells(states[l], whole, state.whole);
311
+ const first = wholeBy[0];
312
+ if (wholeBy.every((by) => by === first)) this.host.regrown(world, layer, [...whole], first);
313
+ else for (const by of [...new Set(wholeBy)]) {
314
+ const cells = whole.filter((_, k) => wholeBy[k] === by);
315
+ this.host.regrown(world, layer, cells, by);
316
+ }
317
+ }
318
+ if (starting.length) {
319
+ const lengths = [...new Set(startingFor)];
320
+ for (const length of lengths) {
321
+ const cells = lengths.length === 1 ? starting : starting.filter((_, k) => startingFor[k] === length);
322
+ world.setCells(states[l], cells, state.growing, { over: length * world.dt });
323
+ const { queue: now, at: times } = this.queueOf(world, l);
324
+ this.add(now, times, cells, cells.map(() => tick + length), cells.map(() => -1), void 0);
325
+ }
326
+ }
327
+ }
328
+ };
329
+ //#endregion
330
+ export { FoliageRegrowth, REGROWTH, regrowState };
331
+
332
+ //# sourceMappingURL=foliageRegrowth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foliageRegrowth.js","names":[],"sources":["../src/foliageRegrowth.ts"],"sourcesContent":["import { defineComponent } from './components'\nimport type { CellLayerDef } from './cellLayers'\nimport type { FOLIAGE_STATE, FoliageStyleDef } from './foliage'\nimport type { GamePack } from './packs/pack'\nimport type { System } from './registry'\nimport type { World } from './world'\n\n/*\n * Grass growing back. A cell cut, crushed, scorched or burnt comes back by itself where its style says (`regrows`: so\n * many seconds after, then `grows` seconds growing), or when the game says (`regrow`). What the rules keep for it is\n * the world's (`regrowState`, saved): each layer's cells waiting, in the order they are due (then by cell), each with\n * what it does then: start growing (for so many ticks), or stand whole. A tick looks at the front of each layer's list\n * alone, and does at most `REGROW_A_TICK` cells of it; nothing is done while nothing waits, and a list waiting on its\n * first cell costs a comparison. A cell given a new time (ruined again, regrown by the game) keeps its old place in the\n * list, which is passed over when it comes up: each cell's entry now is kept beside the list (`at`: when it is due and\n * what it does then, `keyOf`; not saved), and a save keeps only what is still to come\n */\n\n/** The most cells of a layer grown back (or set growing) a tick: the rest the next ticks, in their order */\nconst REGROW_A_TICK = 1024\n\n/** What a list is cut back to its waiting part at: once this much of it is done, and half */\nconst COMPACT_AT = 1024\n\n/** Seconds a cell takes to grow back once it starts by itself, where its style does not say (`FoliageStyleDef.grows`) */\nconst GROWS = 10\n\n/** A layer's cells waiting to grow back, in the order they are due, then by cell, from `head` */\ninterface RegrowQueue {\n\t/** The cells, by index */\n\tcells: number[]\n\t/** The tick each is due at */\n\tdue: number[]\n\t/** What each does then: starts growing for so many ticks (0: whole at once), or stands whole (-1: it grew) */\n\tgrow: number[]\n\t/** Who had it grow back, by id: 0 for nobody (by itself) */\n\tby: number[]\n\t/** Where the waiting part starts: what is before it is done */\n\thead: number\n}\n\n/** What names a cell's entry now (`FoliageRegrowth.index`): when it is due, and whether it is to stand whole then or start growing */\nconst keyOf = (due: number, grow: number): number => due * 2 + (grow < 0 ? 1 : 0)\n\n/** The cells of the pack's layers that wait to grow back, by layer (`RegrowQueue`) */\ntype RegrowState = Record<string, RegrowQueue>\n\n/**\n * Where a foliage pack keeps its regrowth (`FoliageRegrowth`), on the pack: for its world state's save to find\n *\n * @internal\n */\nexport const REGROWTH = Symbol('foliage regrowth')\n\n/** The regrowth of a world's game: none where it has no foliage pack */\nconst regrowthOf = (world: World): FoliageRegrowth | undefined =>\n\t(world.registry.assembly?.rules.packs?.find((pack) => REGROWTH in pack) as (GamePack & { [REGROWTH]: FoliageRegrowth }) | undefined)?.[REGROWTH]\n\n/**\n * What waits to grow back in a world (`RegrowState`): plain data, kept by a save as what is still to come, each list\n * from its waiting part\n *\n * @internal\n */\nexport const regrowState = /* @__PURE__ */ defineComponent<RegrowState>({\n\tid: 'foliage.regrow',\n\tdefault: () => ({}),\n\tsave: (state, world) => saved(state, regrowthOf(world))\n})\n\n/** A save's copy of what waits: each list from its waiting part, without what was passed over (given a new time since) */\nfunction saved(state: RegrowState, regrowth: FoliageRegrowth | undefined): RegrowState {\n\tconst copy: RegrowState = {}\n\tfor (const layer of Object.keys(state).sort()) {\n\t\tconst queue = state[layer]\n\t\tconst at = regrowth?.indexOf(queue)\n\t\tconst kept: RegrowQueue = { cells: [], due: [], grow: [], by: [], head: 0 }\n\t\tfor (let i = queue.head; i < queue.cells.length; i++) {\n\t\t\tif (at && at[queue.cells[i]] !== keyOf(queue.due[i], queue.grow[i])) continue\n\t\t\tkept.cells.push(queue.cells[i])\n\t\t\tkept.due.push(queue.due[i])\n\t\t\tkept.grow.push(queue.grow[i])\n\t\t\tkept.by.push(queue.by[i])\n\t\t}\n\t\tif (kept.cells.length) copy[layer] = kept\n\t}\n\treturn copy\n}\n\n/** What the pack tells its regrowth of itself: its layers, their state layers, its styles, and how to tell of what grew */\nexport interface RegrowthHost {\n\t/** The pack's layers, in order */\n\treadonly layers: readonly string[]\n\t/** Each layer's state layer */\n\treadonly states: readonly string[]\n\t/** The values of the state layer (`FOLIAGE_STATE`) */\n\treadonly state: typeof FOLIAGE_STATE\n\t/** What a style is to the rules (`foliageStyle`) */\n\tstyle(game: { cellLayers: readonly CellLayerDef[]; packs?: readonly GamePack[] }, layer: string, value: number): FoliageStyleDef | undefined\n\t/** Cells stood whole again (`foliageRegrown`), by whom where someone had them */\n\tregrown(world: World, layer: string, cells: number[], by: number): void\n}\n\n/** How each style of the pack's layers grows back, by layer and value, in ticks of a game */\ninterface RegrowStyles {\n\t/** The layers of cells it was worked out of */\n\tof: readonly CellLayerDef[]\n\t/** The length of a tick it was worked out for */\n\tdt: number\n\t/** By layer, by value: ticks after it is ruined that it starts to grow back by itself; -1 for never */\n\tafter: Int32Array[]\n\t/** By layer, by value: ticks it grows over once it starts by itself */\n\tgrows: Int32Array[]\n}\n\n/**\n * Grass growing back, the pack's: what each of its styles says of it, and what a tick and the calls do with a world's\n * `regrowState`. One a pack, for every world of its game: the cells' times now (`at`) are kept by the list they are of\n *\n * @internal\n */\nexport class FoliageRegrowth {\n\t/** The system that runs it */\n\treadonly system: System\n\t/** Each list's cells' entries now, by cell: the one still to come (`keyOf`), -1 for none */\n\tprivate readonly index = new WeakMap<RegrowQueue, Float64Array>()\n\tprivate styles: RegrowStyles | undefined\n\t/** Scratch of a tick: what grows whole, starts growing, and for how long, of a layer */\n\tprivate readonly whole: number[] = []\n\tprivate readonly wholeBy: number[] = []\n\tprivate readonly starting: number[] = []\n\tprivate readonly startingFor: number[] = []\n\n\tconstructor(private readonly host: RegrowthHost) {\n\t\tthis.system = {\n\t\t\tname: 'foliage.regrow',\n\t\t\tphase: 'resolve',\n\t\t\tupdate: (world) => {\n\t\t\t\t// nothing ever waited to grow back: nothing to look at\n\t\t\t\tif (!world.states.has(regrowState)) return\n\t\t\t\tthis.tick(world, world.state(regrowState))\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Each cell's time now of a list (`index`): none where it was never asked for in this process (a save's, loaded) */\n\tindexOf(queue: RegrowQueue): Float64Array | undefined {\n\t\treturn this.index.get(queue)\n\t}\n\n\t/** How each style grows back, worked out once for a game's layers of cells and its tick */\n\tprivate stylesOf(world: World): RegrowStyles {\n\t\tconst { cellLayers } = world.registry\n\t\tif (this.styles?.of === cellLayers && this.styles.dt === world.dt) return this.styles\n\t\tconst game = { cellLayers, packs: world.registry.assembly?.rules.packs }\n\t\tconst styles: RegrowStyles = { of: cellLayers, dt: world.dt, after: [], grows: [] }\n\t\tfor (const layer of this.host.layers) {\n\t\t\tconst after = new Int32Array(256).fill(-1)\n\t\t\tconst grows = new Int32Array(256)\n\t\t\tfor (let value = 1; value < 256; value++) {\n\t\t\t\tconst style = this.host.style(game, layer, value)\n\t\t\t\tconst regrows = style?.regrows\n\t\t\t\tif (typeof regrows === 'number' && Number.isFinite(regrows)) after[value] = Math.max(1, Math.round(Math.max(0, regrows) / world.dt))\n\t\t\t\tgrows[value] = Math.max(0, Math.round(Math.max(0, style?.grows ?? GROWS) / world.dt))\n\t\t\t}\n\t\t\tstyles.after.push(after)\n\t\t\tstyles.grows.push(grows)\n\t\t}\n\t\treturn (this.styles = styles)\n\t}\n\n\t/** A layer's list of a world, made where it has none; and its cells' times now, worked out of it where they were not kept */\n\tprivate queueOf(world: World, l: number): { queue: RegrowQueue; at: Float64Array } {\n\t\tconst state = world.state(regrowState)\n\t\tconst layer = this.host.layers[l]\n\t\tconst queue = (state[layer] ??= { cells: [], due: [], grow: [], by: [], head: 0 })\n\t\tlet at = this.index.get(queue)\n\t\tif (!at) {\n\t\t\t// (a list of a save holds only what is still to come: one entry a cell)\n\t\t\tat = new Float64Array(world.terrain.width * world.terrain.depth).fill(-1)\n\t\t\tfor (let i = queue.head; i < queue.cells.length; i++) at[queue.cells[i]] = keyOf(queue.due[i], queue.grow[i])\n\t\t\tthis.index.set(queue, at)\n\t\t}\n\t\treturn { queue, at }\n\t}\n\n\t/**\n\t * Cells of a layer were ruined or burnt (in order of their indices): each to grow back by itself where its style\n\t * says (`regrows`), and nothing it waited for before; never where its style does not\n\t */\n\truined(world: World, l: number, cells: readonly number[]): void {\n\t\tif (!cells.length) return\n\t\tconst { after, grows } = this.stylesOf(world)\n\t\tconst values = world.terrain.cells[this.host.layers[l]]\n\t\tconst waits = after[l]\n\t\t// nothing to wait for: no list made, and what waited in one waits no more\n\t\tlet any = false\n\t\tfor (let i = 0; i < cells.length && !any; i++) any = waits[values?.[cells[i]] ?? 0] >= 0\n\t\tif (!any) {\n\t\t\tif (!world.states.has(regrowState) || !world.state(regrowState)[this.host.layers[l]]) return\n\t\t\tconst { at } = this.queueOf(world, l)\n\t\t\tfor (const cell of cells) at[cell] = -1\n\t\t\treturn\n\t\t}\n\t\tconst { queue, at } = this.queueOf(world, l)\n\t\tconst add: { cell: number; due: number; grow: number }[] = []\n\t\tfor (const cell of cells) {\n\t\t\tconst value = values?.[cell] ?? 0\n\t\t\tconst wait = waits[value]\n\t\t\tif (wait < 0) {\n\t\t\t\tat[cell] = -1\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tadd.push({ cell, due: world.tick + wait, grow: grows[l][value] })\n\t\t}\n\t\tthis.add(\n\t\t\tqueue,\n\t\t\tat,\n\t\t\tadd.map((each) => each.cell),\n\t\t\tadd.map((each) => each.due),\n\t\t\tadd.map((each) => each.grow),\n\t\t\tundefined\n\t\t)\n\t}\n\n\t/**\n\t * Has cells of a layer grow back (`regrow`): those ruined or burnt, and those growing where it is at once. Over\n\t * `over` ticks (growing, whole at its end), or at once (0). The cells that started to, in order\n\t */\n\tregrow(world: World, l: number, cells: readonly number[], over: number, by: number): number[] {\n\t\tconst { state } = this.host\n\t\tconst terrain = world.terrain\n\t\tconst values = terrain.cells[this.host.layers[l]]\n\t\tconst states = terrain.cells[this.host.states[l]]\n\t\tconst now = over <= 0\n\t\tconst which = cells.filter((cell) => {\n\t\t\tif (!values?.[cell]) return false\n\t\t\tconst was = states?.[cell] ?? state.whole\n\t\t\treturn was === state.flattened || was === state.cut || was === state.burnt || (now && was === state.growing)\n\t\t})\n\t\tif (!which.length) return which\n\t\tconst layer = this.host.layers[l]\n\t\tif (now) {\n\t\t\tworld.setCells(this.host.states[l], which, state.whole)\n\t\t\t// nothing waits for them any more\n\t\t\tif (world.states.has(regrowState) && world.state(regrowState)[layer]) {\n\t\t\t\tconst { at } = this.queueOf(world, l)\n\t\t\t\tfor (const cell of which) at[cell] = -1\n\t\t\t}\n\t\t\tthis.host.regrown(world, layer, which, by)\n\t\t\treturn which\n\t\t}\n\t\tworld.setCells(this.host.states[l], which, state.growing, { over: over * world.dt })\n\t\tconst { queue, at } = this.queueOf(world, l)\n\t\tthis.add(\n\t\t\tqueue,\n\t\t\tat,\n\t\t\twhich,\n\t\t\twhich.map(() => world.tick + over),\n\t\t\twhich.map(() => -1),\n\t\t\tby\n\t\t)\n\t\treturn which\n\t}\n\n\t/**\n\t * Entries into a list, in its order (by when due, then by cell): merged in from the end, so that what comes after\n\t * all that waits (as most does) costs only its own room. Each cell's time now is the one given; one given twice is\n\t * there once (as a cell given the same entry again)\n\t */\n\tprivate add(\n\t\tqueue: RegrowQueue,\n\t\tat: Float64Array,\n\t\tcells: readonly number[],\n\t\tdue: readonly number[],\n\t\tgrow: readonly number[],\n\t\tby: number | undefined\n\t): void {\n\t\tif (!cells.length) return\n\t\tconst order = cells.map((_, k) => k)\n\t\torder.sort((a, b) => due[a] - due[b] || cells[a] - cells[b])\n\t\tconst fresh: number[] = []\n\t\tfor (const k of order) {\n\t\t\tconst key = keyOf(due[k], grow[k])\n\t\t\tif (at[cells[k]] === key) continue\n\t\t\tat[cells[k]] = key\n\t\t\tfresh.push(k)\n\t\t}\n\t\tif (!fresh.length) return\n\t\tthis.compact(queue)\n\t\tlet i = queue.cells.length - 1\n\t\tlet j = fresh.length - 1\n\t\tfor (let k = 0; k < fresh.length; k++) {\n\t\t\tqueue.cells.push(0)\n\t\t\tqueue.due.push(0)\n\t\t\tqueue.grow.push(0)\n\t\t\tqueue.by.push(0)\n\t\t}\n\t\tfor (let w = queue.cells.length - 1; j >= 0; w--) {\n\t\t\tconst k = fresh[j]\n\t\t\tif (i >= queue.head && (queue.due[i] > due[k] || (queue.due[i] === due[k] && queue.cells[i] > cells[k]))) {\n\t\t\t\tqueue.cells[w] = queue.cells[i]\n\t\t\t\tqueue.due[w] = queue.due[i]\n\t\t\t\tqueue.grow[w] = queue.grow[i]\n\t\t\t\tqueue.by[w] = queue.by[i]\n\t\t\t\ti--\n\t\t\t} else {\n\t\t\t\tqueue.cells[w] = cells[k]\n\t\t\t\tqueue.due[w] = due[k]\n\t\t\t\tqueue.grow[w] = grow[k]\n\t\t\t\tqueue.by[w] = by ?? 0\n\t\t\t\tj--\n\t\t\t}\n\t\t}\n\t}\n\n\t/** A list cut back to its waiting part, where much of it is done */\n\tprivate compact(queue: RegrowQueue): void {\n\t\tconst { head } = queue\n\t\tif (head < COMPACT_AT || head * 2 < queue.cells.length) return\n\t\tqueue.cells.splice(0, head)\n\t\tqueue.due.splice(0, head)\n\t\tqueue.grow.splice(0, head)\n\t\tqueue.by.splice(0, head)\n\t\tqueue.head = 0\n\t}\n\n\t/**\n\t * A tick: of each layer's list, the cells due by now, at most `REGROW_A_TICK`, in their order: those whose time it\n\t * still is (not given another since, still ruined or growing, still grass) start growing (one `setCells` for each\n\t * length of growing) or stand whole (one `setCells`, told by whom)\n\t */\n\tprivate tick(world: World, state: RegrowState): void {\n\t\tconst { tick } = world\n\t\tconst { layers } = this.host\n\t\tfor (let l = 0; l < layers.length; l++) {\n\t\t\tconst queue = state[layers[l]]\n\t\t\tif (!queue || queue.head >= queue.cells.length || queue.due[queue.head] > tick) continue\n\t\t\tthis.layerTick(world, l, queue)\n\t\t}\n\t}\n\n\t/** A tick of a layer's list that has cells due (`tick`) */\n\tprivate layerTick(world: World, l: number, queue: RegrowQueue): void {\n\t\tconst { state, layers, states } = this.host\n\t\tconst { tick, terrain } = world\n\t\tconst { at } = this.queueOf(world, l)\n\t\tconst values = terrain.cells[layers[l]]\n\t\tconst kept = terrain.cells[states[l]]\n\t\tconst { whole, wholeBy, starting, startingFor } = this\n\t\twhole.length = wholeBy.length = starting.length = startingFor.length = 0\n\t\tlet done = 0\n\t\tlet i = queue.head\n\t\tfor (; i < queue.cells.length && queue.due[i] <= tick && done < REGROW_A_TICK; i++) {\n\t\t\tconst cell = queue.cells[i]\n\t\t\tif (at[cell] !== keyOf(queue.due[i], queue.grow[i])) continue\n\t\t\tat[cell] = -1\n\t\t\tconst was = kept?.[cell] ?? state.whole\n\t\t\tif (!values?.[cell]) continue\n\t\t\tconst grow = queue.grow[i]\n\t\t\tif (grow < 0) {\n\t\t\t\tif (was !== state.growing) continue\n\t\t\t\twhole.push(cell)\n\t\t\t\twholeBy.push(queue.by[i])\n\t\t\t} else {\n\t\t\t\tif (was !== state.flattened && was !== state.cut && was !== state.burnt) continue\n\t\t\t\tif (grow === 0) {\n\t\t\t\t\twhole.push(cell)\n\t\t\t\t\twholeBy.push(0)\n\t\t\t\t} else {\n\t\t\t\t\tstarting.push(cell)\n\t\t\t\t\tstartingFor.push(grow)\n\t\t\t\t}\n\t\t\t}\n\t\t\tdone++\n\t\t}\n\t\tqueue.head = i\n\t\tif (queue.head >= queue.cells.length) {\n\t\t\tqueue.cells.length = queue.due.length = queue.grow.length = queue.by.length = 0\n\t\t\tqueue.head = 0\n\t\t} else this.compact(queue)\n\t\tconst layer = layers[l]\n\t\tif (whole.length) {\n\t\t\tworld.setCells(states[l], whole, state.whole)\n\t\t\t// told by whom: one event for each who had them, in the order they come first\n\t\t\tconst first = wholeBy[0]\n\t\t\tif (wholeBy.every((by) => by === first)) this.host.regrown(world, layer, [...whole], first)\n\t\t\telse\n\t\t\t\tfor (const by of [...new Set(wholeBy)]) {\n\t\t\t\t\tconst cells = whole.filter((_, k) => wholeBy[k] === by)\n\t\t\t\t\tthis.host.regrown(world, layer, cells, by)\n\t\t\t\t}\n\t\t}\n\t\tif (starting.length) {\n\t\t\t// growing, each length of it apart: the screens are told how long each takes\n\t\t\tconst lengths = [...new Set(startingFor)]\n\t\t\tfor (const length of lengths) {\n\t\t\t\tconst cells = lengths.length === 1 ? starting : starting.filter((_, k) => startingFor[k] === length)\n\t\t\t\tworld.setCells(states[l], cells, state.growing, { over: length * world.dt })\n\t\t\t\tconst { queue: now, at: times } = this.queueOf(world, l)\n\t\t\t\tthis.add(\n\t\t\t\t\tnow,\n\t\t\t\t\ttimes,\n\t\t\t\t\tcells,\n\t\t\t\t\tcells.map(() => tick + length),\n\t\t\t\t\tcells.map(() => -1),\n\t\t\t\t\tundefined\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { FormCooldowns, MorphBack } from './defs';
2
+ import type { AbilityState, Entity } from './entity';
3
+ /**
4
+ * A hero in one of its forms (`form`, `takeForm`): what it was, what turns it back, what it learns in the form and
5
+ * what of its own it put away meanwhile
6
+ *
7
+ * @beta
8
+ */
9
+ export interface Form {
10
+ /** The unit type it was, and turns back into */
11
+ from: string;
12
+ /** The ability that made it, whose cast in the form turns it back (with `ability` in `back`) */
13
+ by?: string;
14
+ /** The game's time, in seconds, it took the form */
15
+ at: number;
16
+ /** The game's time it turns back at, for a form that lasts a while (`back` has `time`) */
17
+ until?: number;
18
+ /** What turns it back */
19
+ back: MorphBack[];
20
+ /** What it learns in the form, in order: what the HUD's card and hero panel show, and what its points go into */
21
+ learns: string[];
22
+ /**
23
+ * Of what it learns in the form, those whose level is that of one of its own (`HeroForm.levels`), by id: a point put
24
+ * into one in the form goes to its own too
25
+ */
26
+ linked?: Record<string, string>;
27
+ /** What becomes of the cooldowns of what is put away and what is brought (`HeroForm.cooldowns`): run down by the time away when left out */
28
+ cooldowns?: FormCooldowns;
29
+ /** What it could cast as itself and cannot in the form, as it was: given back as it turns back, their cooldowns run down meanwhile */
30
+ kept: AbilityState[];
31
+ /** What it could cast as itself, by id, in its order */
32
+ own: string[];
33
+ }
34
+ /**
35
+ * What every player who sees a hero in a form is told of it (`form`)
36
+ *
37
+ * @beta
38
+ */
39
+ export interface FormSent {
40
+ /** The unit type it is as itself */
41
+ from: string;
42
+ /** The ability that made it */
43
+ by?: string;
44
+ /** The game's time it turns back at, for a form that lasts a while */
45
+ until?: number;
46
+ /** What it learns in the form, in order */
47
+ learns: string[];
48
+ }
49
+ /**
50
+ * On a hero in one of its forms: see `Form`. Saved with it, told to everyone who sees it, and filed in the world's index
51
+ *
52
+ * @beta
53
+ */
54
+ export declare const form: import("./components").Component<Form, FormSent>;
55
+ /**
56
+ * The form a hero is in, none when it is itself (`form`)
57
+ *
58
+ * @beta
59
+ */
60
+ export declare const formOf: (entity: Entity) => Form | undefined;
61
+ /**
62
+ * What a hero learns, in order: what its form says while it is in one (`takeForm`), its type's (`HeroDef.learns`)
63
+ * otherwise. Nothing for what is no hero
64
+ *
65
+ * @beta
66
+ */
67
+ export declare function learnsOf(entity: Entity): readonly string[];
@@ -0,0 +1,65 @@
1
+ import { defineComponent } from "./components.js";
2
+ //#region src/formState.ts
3
+ /**
4
+ * What a hero in one of its forms carries (E2E-PLAN LB2): the `form` component, and what it learns there. Apart from
5
+ * `forms.ts`, which turns it into the form and back, so that what reads it (the heroes' learning) loads nothing of morphing
6
+ */
7
+ /**
8
+ * On a hero in one of its forms: see `Form`. Saved with it, told to everyone who sees it, and filed in the world's index
9
+ *
10
+ * @beta
11
+ */
12
+ var form = defineComponent({
13
+ id: "core.form",
14
+ replicate: "everyone",
15
+ index: true,
16
+ snapshot: ({ from, by, until, learns }) => ({
17
+ from,
18
+ by,
19
+ until,
20
+ learns
21
+ }),
22
+ same: (a, b) => a.from === b.from && a.by === b.by && a.until === b.until && a.learns.join() === b.learns.join(),
23
+ refs: (saved) => {
24
+ const value = saved;
25
+ return {
26
+ units: [value.from],
27
+ abilities: [
28
+ ...value.learns,
29
+ ...value.own,
30
+ ...Object.values(value.linked ?? {})
31
+ ]
32
+ };
33
+ }
34
+ });
35
+ /**
36
+ * The form a hero is in, none when it is itself (`form`)
37
+ *
38
+ * @beta
39
+ */
40
+ var formOf = (entity) => entity.get(form);
41
+ /**
42
+ * What a hero learns, in order: what its form says while it is in one (`takeForm`), its type's (`HeroDef.learns`)
43
+ * otherwise. Nothing for what is no hero
44
+ *
45
+ * @beta
46
+ */
47
+ function learnsOf(entity) {
48
+ return entity.get(form)?.learns ?? entity.def.hero?.learns ?? [];
49
+ }
50
+ /**
51
+ * A point put into an ability in a form goes to the hero's own whose level it has too (`Form.linked`), so that it has
52
+ * it as itself. Called by `learn`
53
+ *
54
+ * @internal
55
+ */
56
+ function learnedInForm(entity, ability) {
57
+ const own = entity.get(form)?.linked?.[ability];
58
+ if (!own || own === ability) return;
59
+ const kept = entity.get(form).kept.find((kept) => kept.id === own);
60
+ if (kept) kept.level++;
61
+ }
62
+ //#endregion
63
+ export { form, formOf, learnedInForm, learnsOf };
64
+
65
+ //# sourceMappingURL=formState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formState.js","names":[],"sources":["../src/formState.ts"],"sourcesContent":["/**\n * What a hero in one of its forms carries (E2E-PLAN LB2): the `form` component, and what it learns there. Apart from\n * `forms.ts`, which turns it into the form and back, so that what reads it (the heroes' learning) loads nothing of morphing\n */\nimport { defineComponent } from './components'\nimport type { FormCooldowns, MorphBack } from './defs'\nimport type { AbilityState, Entity } from './entity'\n\n/**\n * A hero in one of its forms (`form`, `takeForm`): what it was, what turns it back, what it learns in the form and\n * what of its own it put away meanwhile\n *\n * @beta\n */\nexport interface Form {\n\t/** The unit type it was, and turns back into */\n\tfrom: string\n\t/** The ability that made it, whose cast in the form turns it back (with `ability` in `back`) */\n\tby?: string\n\t/** The game's time, in seconds, it took the form */\n\tat: number\n\t/** The game's time it turns back at, for a form that lasts a while (`back` has `time`) */\n\tuntil?: number\n\t/** What turns it back */\n\tback: MorphBack[]\n\t/** What it learns in the form, in order: what the HUD's card and hero panel show, and what its points go into */\n\tlearns: string[]\n\t/**\n\t * Of what it learns in the form, those whose level is that of one of its own (`HeroForm.levels`), by id: a point put\n\t * into one in the form goes to its own too\n\t */\n\tlinked?: Record<string, string>\n\t/** What becomes of the cooldowns of what is put away and what is brought (`HeroForm.cooldowns`): run down by the time away when left out */\n\tcooldowns?: FormCooldowns\n\t/** What it could cast as itself and cannot in the form, as it was: given back as it turns back, their cooldowns run down meanwhile */\n\tkept: AbilityState[]\n\t/** What it could cast as itself, by id, in its order */\n\town: string[]\n}\n\n/**\n * What every player who sees a hero in a form is told of it (`form`)\n *\n * @beta\n */\nexport interface FormSent {\n\t/** The unit type it is as itself */\n\tfrom: string\n\t/** The ability that made it */\n\tby?: string\n\t/** The game's time it turns back at, for a form that lasts a while */\n\tuntil?: number\n\t/** What it learns in the form, in order */\n\tlearns: string[]\n}\n\n/**\n * On a hero in one of its forms: see `Form`. Saved with it, told to everyone who sees it, and filed in the world's index\n *\n * @beta\n */\nexport const form = defineComponent<Form, FormSent>({ id: 'core.form', replicate: 'everyone',\n\tindex: true,\n\tsnapshot: ({ from, by, until, learns }) => ({ from, by, until, learns }),\n\tsame: (a, b) => a.from === b.from && a.by === b.by && a.until === b.until && a.learns.join() === b.learns.join(),\n\trefs: (saved) => {\n\t\tconst value = saved as Form\n\t\treturn { units: [value.from], abilities: [...value.learns, ...value.own, ...Object.values(value.linked ?? {})] }\n\t} })\n\n/**\n * The form a hero is in, none when it is itself (`form`)\n *\n * @beta\n */\nexport const formOf = (entity: Entity): Form | undefined => entity.get(form)\n\n/**\n * What a hero learns, in order: what its form says while it is in one (`takeForm`), its type's (`HeroDef.learns`)\n * otherwise. Nothing for what is no hero\n *\n * @beta\n */\nexport function learnsOf(entity: Entity): readonly string[] {\n\treturn entity.get(form)?.learns ?? entity.def.hero?.learns ?? []\n}\n\n/**\n * A point put into an ability in a form goes to the hero's own whose level it has too (`Form.linked`), so that it has\n * it as itself. Called by `learn`\n *\n * @internal\n */\nexport function learnedInForm(entity: Entity, ability: string): void {\n\tconst own = entity.get(form)?.linked?.[ability]\n\tif (!own || own === ability) return\n\tconst kept = entity.get(form)!.kept.find((kept) => kept.id === own)\n\tif (kept) kept.level++\n}\n"],"mappings":";;;;;;;;;;;AA6DA,IAAa,OAAO,gBAAgC;CAAE,IAAI;CAAa,WAAW;CACjF,OAAO;CACP,WAAW,EAAE,MAAM,IAAI,OAAO,cAAc;EAAE;EAAM;EAAI;EAAO;CAAO;CACtE,OAAO,GAAG,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK;CAC/G,OAAO,UAAU;EAChB,MAAM,QAAQ;EACd,OAAO;GAAE,OAAO,CAAC,MAAM,IAAI;GAAG,WAAW;IAAC,GAAG,MAAM;IAAQ,GAAG,MAAM;IAAK,GAAG,OAAO,OAAO,MAAM,UAAU,CAAC,CAAC;GAAC;EAAE;CAChH;AAAE,CAAC;;;;;;AAOJ,IAAa,UAAU,WAAqC,OAAO,IAAI,IAAI;;;;;;;AAQ3E,SAAgB,SAAS,QAAmC;CAC3D,OAAO,OAAO,IAAI,IAAI,CAAC,EAAE,UAAU,OAAO,IAAI,MAAM,UAAU,CAAC;AAChE;;;;;;;AAQA,SAAgB,cAAc,QAAgB,SAAuB;CACpE,MAAM,MAAM,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS;CACvC,IAAI,CAAC,OAAO,QAAQ,SAAS;CAC7B,MAAM,OAAO,OAAO,IAAI,IAAI,CAAC,CAAE,KAAK,MAAM,SAAS,KAAK,OAAO,GAAG;CAClE,IAAI,MAAM,KAAK;AAChB"}
@@ -1,6 +1,7 @@
1
1
  import type { Entity, EntityId } from './entity';
2
2
  import type { Vec2 } from './math';
3
3
  import type { Navigation } from './navigation/navigation';
4
+ import type { Registry } from './registry';
4
5
  import type { World } from './world';
5
6
  /**
6
7
  * What a formation lays units out with: the group, where it is sent, the way there, and the room each unit takes.
@@ -10,9 +11,11 @@ import type { World } from './world';
10
11
  * @beta
11
12
  */
12
13
  export interface FormationContext {
14
+ /** The world the formation is laid out in */
13
15
  readonly world: World;
14
16
  /** The units laid out: those that walk, or those that fly, apart */
15
17
  readonly units: readonly Entity[];
18
+ /** Where the units are sent */
16
19
  readonly target: Vec2;
17
20
  /** The navigation they go on, to find where they can stand */
18
21
  readonly nav: Navigation;
@@ -22,6 +25,11 @@ export interface FormationContext {
22
25
  readonly forward: Vec2;
23
26
  /** To the right of `forward`, a unit long */
24
27
  readonly right: Vec2;
28
+ /**
29
+ * Whether the player turned the formation by hand (a right-click dragged: `OrderInit.facing`): `forward` is then
30
+ * the way they dragged, not the way of travel, and a formation that keeps a group's own shape lays it out anew
31
+ */
32
+ readonly turned: boolean;
25
33
  /** Room a unit takes: twice the biggest radius among them, and a gap of `FORMATION_GAP` */
26
34
  readonly spacing: number;
27
35
  /** A point in the world, `x` to the right of the target and `z` forward of it */
@@ -30,14 +38,15 @@ export interface FormationContext {
30
38
  snap(point: Vec2): Vec2;
31
39
  }
32
40
  /**
33
- * How units ordered to a point together are laid out around it (`OrderInit.formation`, `GameRules.movement.formation`): a
41
+ * How units ordered to a point together are laid out around it (`OrderInit.formation`, `RuleSettings.movement.formation`): a
34
42
  * shape, which the engine fits the units to, or the places themselves. The engine's own are `rows`, `circle`,
35
- * `square` and `none` (`coreFormations`); a game adds its own (`GameModule.formations`), and changes any laid out
43
+ * `square` and `none` (`coreFormations`); a game adds its own (`Rules.formations`), and changes any laid out
36
44
  * with the `formation` hook
37
45
  *
38
46
  * @beta
39
47
  */
40
48
  export interface FormationDef {
49
+ /** The formation's id, which an order names it by */
41
50
  id: string;
42
51
  /** What the player sees it called */
43
52
  name: string;
@@ -76,15 +85,15 @@ export declare function fitToPlaces(context: FormationContext, places: readonly
76
85
  export declare const rowsFormation: FormationDef;
77
86
  /**
78
87
  * A circle: a ring around the target, the first place at the front, and rings within it where one is not enough for
79
- * them all. The rings are a `spacing` apart, the first a `spacing` out: as many as it takes, the outer ones full
88
+ * them all, a `spacing` apart, down to the middle. As few rings as hold them, and the units shared out among them as
89
+ * their room goes: a disc as thick everywhere, every ring's places even, the outer ring first
80
90
  *
81
91
  * @beta
82
92
  */
83
93
  export declare const circleFormation: FormationDef;
84
94
  /**
85
- * A square: units along the edges of one around the target, the first place at the front's middle, and squares
86
- * within it where one is not enough for them all. The squares are a `spacing` apart, the first a `spacing` out: as
87
- * many as it takes, the outer ones full
95
+ * A square: a block of rows a `spacing` apart, as many across as deep (one row fewer where that holds them), filled to
96
+ * the middle, the front row first. Where they do not fill the last row, the back one, those in it stand in its middle
88
97
  *
89
98
  * @beta
90
99
  */
@@ -104,8 +113,37 @@ export declare const coreFormations: readonly FormationDef[];
104
113
  /**
105
114
  * Individual destinations for a group ordered to the same point, in a formation (`rowsFormation` when none is
106
115
  * given), and what the `formation` hook makes of them. Units that walk and units that fly are laid out apart, each
107
- * on their own navigation (`world.navFor`)
116
+ * on their own navigation (`world.navFor`). `facing`, where the player turned the formation by hand, is the way it
117
+ * faces (a direction as an entity's `facing` is), over the way of travel
118
+ *
119
+ * @beta
120
+ */
121
+ export declare function formationPoints(world: World, units: readonly Entity[], target: Vec2, formation?: FormationDef, facing?: number): Map<EntityId, Vec2>;
122
+ /**
123
+ * A unit as a preview of a formation knows it: where it stands and how big it is
108
124
  *
109
125
  * @beta
110
126
  */
111
- export declare function formationPoints(world: World, units: readonly Entity[], target: Vec2, formation?: FormationDef): Map<EntityId, Vec2>;
127
+ export interface FormationUnit {
128
+ /** The unit's entity id */
129
+ readonly id: EntityId;
130
+ /** Where it stands, in cells */
131
+ readonly pos: Vec2;
132
+ /** Its collision radius, in cells */
133
+ readonly radius: number;
134
+ }
135
+ /**
136
+ * Where a group would stand if sent to a target in a formation (by id, `rows` when unknown), from what a player's
137
+ * screen knows of the units: what the ghosts of a right-click dragged are drawn from (`GameSession.formationPlaces`).
138
+ * The same shapes as `formationPoints` gives, units that walk and units that fly each on their own navigation; the
139
+ * `formation` hook (the simulation's) and a formation that reads `FormationContext.world` take no part, and the order
140
+ * itself lays the group out as it will
141
+ *
142
+ * @beta
143
+ */
144
+ export declare function formationPreview(registry: Registry, units: readonly (FormationUnit & {
145
+ readonly flying?: boolean;
146
+ })[], target: Vec2, navs: {
147
+ readonly nav: Navigation;
148
+ readonly air: Navigation;
149
+ }, id: string, facing?: number): Map<EntityId, Vec2>;