@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
@@ -5,8 +5,11 @@ import type { CampInfo, EntityState, OwnEntityState, SessionEvent, Snapshot } fr
5
5
  * @beta
6
6
  */
7
7
  export interface FogMessage {
8
+ /** Whether the whole map is revealed to the team, so the runs are not needed */
8
9
  revealed: boolean;
10
+ /** Run lengths of the cells the team sees now: 0s first, then 1s, then 0s.. */
9
11
  visible: number[];
12
+ /** Run lengths of the cells the team has explored: 0s first, then 1s, then 0s.. */
10
13
  explored: number[];
11
14
  }
12
15
  /**
@@ -15,9 +18,13 @@ export interface FogMessage {
15
18
  * @beta
16
19
  */
17
20
  export interface Frame {
21
+ /** The snapshot of the tick, without its events */
18
22
  snapshot: Snapshot;
23
+ /** The team's fog as runs */
19
24
  fog: FogMessage;
25
+ /** The creep camps the player knows of */
20
26
  camps: CampInfo[];
27
+ /** The player's team number */
21
28
  team: number;
22
29
  }
23
30
  /** The parts of a frame besides its entities, sent when they differ from the base's */
@@ -61,11 +68,17 @@ export type EntityChange = [
61
68
  * @beta
62
69
  */
63
70
  export interface Delta {
71
+ /** The tick this delta brings the player's view to */
64
72
  tick: number;
73
+ /** The tick of the frame this is the changes since, or null for a delta that holds all of the frame */
65
74
  base: number | null;
75
+ /** Entities that were not in the base frame, whole */
66
76
  added: EntityState[];
77
+ /** Entities of the base frame that changed, one `EntityChange` each */
67
78
  changed: EntityChange[];
79
+ /** Ids of the entities of the base frame that are gone */
68
80
  removed: number[];
81
+ /** The parts of the frame besides its entities that differ from the base's, whole */
69
82
  rest: Partial<Rest>;
70
83
  /** The other parts that changed in part, as what changed in them (`WirePatch`: the gold of one player of four) */
71
84
  restPatch?: Partial<Record<keyof Rest, WirePatch>>;
@@ -90,7 +103,7 @@ export interface Delta {
90
103
  export declare function quantize(state: EntityState): EntityState;
91
104
  /**
92
105
  * Characters of a delta's text by what they carry, added to `into`: each field of an entity, of those added and those
93
- * changed together (`entity.hp`; of what only its owner is told, `entity.own.abilities`), the other parts (`rest.fog`),
106
+ * changed together (`entity.health`; of what only its owner is told, `entity.own.abilities`), the other parts (`rest.fog`),
94
107
  * `events`, `removed`, and what is left (ids, brackets, the tick) as `other`, so that they add up to `text`'s length.
95
108
  * A field is its key, its value and the comma between, as `JSON.stringify` writes them
96
109
  */
@@ -0,0 +1,407 @@
1
+ //#region src/session/delta.ts
2
+ /** Rounded to `step` */
3
+ var round = (value, step) => Math.round(value / step) * step;
4
+ /**
5
+ * Seconds rounded up to whole ones, a hair over one (what floating point leaves over) not counted: what a plate
6
+ * sweeps changes once a second on the wire, not every round (the plate counts down between)
7
+ */
8
+ var secondsUp = (value) => Math.ceil(value - 1e-6);
9
+ /** Positions on the wire, in 256ths of a unit, and the facing in 256ths of a turn: whole numbers, short to write */
10
+ var POSITION = 256;
11
+ var TURN = 256 / (Math.PI * 2);
12
+ /** An entity's numbers as they go over the wire: whole numbers where they can be. `decode` takes them back */
13
+ function encode(state) {
14
+ const out = { ...state };
15
+ if (out.x !== void 0) out.x = Math.round(out.x * POSITION);
16
+ if (out.z !== void 0) out.z = Math.round(out.z * POSITION);
17
+ if (out.facing !== void 0) out.facing = (Math.round(out.facing * TURN) % 256 + 256) % 256;
18
+ return out;
19
+ }
20
+ function decode(state) {
21
+ const out = { ...state };
22
+ if (out.x !== void 0) out.x /= POSITION;
23
+ if (out.z !== void 0) out.z /= POSITION;
24
+ if (out.facing !== void 0) out.facing /= TURN;
25
+ return out;
26
+ }
27
+ /**
28
+ * An entity's state with its numbers rounded for the wire: positions to 1/256 of a unit (16 bits over a map of 256),
29
+ * the facing to a 256th of a turn, health and shield up to whole points (what is alive keeps at least one), mana down
30
+ * (an ability is never shown ready that the simulation would refuse), what is under way to hundredths, the seconds
31
+ * left of buffs and of shared cooldowns up to whole seconds
32
+ *
33
+ * @beta
34
+ */
35
+ function quantize(state) {
36
+ const out = { ...state };
37
+ out.x = Math.round(state.x * POSITION) / POSITION;
38
+ out.z = Math.round(state.z * POSITION) / POSITION;
39
+ out.facing = (Math.round(state.facing * TURN) % 256 + 256) % 256 / TURN;
40
+ out.health = Math.ceil(state.health);
41
+ if (state.shield !== void 0) out.shield = Math.ceil(state.shield);
42
+ if (state.mana !== void 0) out.mana = Math.floor(state.mana);
43
+ if (state.buffTimes) out.buffTimes = state.buffTimes.map((left) => left < 0 ? left : secondsUp(left));
44
+ if (state.abilities?.some((ability) => ability.cooldown)) out.abilities = state.abilities.map((ability) => ability.cooldown ? {
45
+ ...ability,
46
+ cooldown: secondsUp(ability.cooldown)
47
+ } : ability);
48
+ if (state.lifetime) out.lifetime = {
49
+ left: round(state.lifetime.left, .1),
50
+ total: state.lifetime.total
51
+ };
52
+ return out;
53
+ }
54
+ /**
55
+ * Whether two values of a field are the same: the very same, or equal as data, field by field and element by element
56
+ * down the way. What a player is told is compared with what they were (`entityState.ts`) by it too
57
+ *
58
+ * @internal
59
+ */
60
+ function same(a, b) {
61
+ if (a === b) return true;
62
+ if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) return false;
63
+ if (Array.isArray(a) || Array.isArray(b)) {
64
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
65
+ for (let i = 0; i < a.length; i++) if (!same(a[i], b[i])) return false;
66
+ return true;
67
+ }
68
+ const left = a;
69
+ const right = b;
70
+ for (const key in left) {
71
+ if (!(key in right)) return false;
72
+ const x = left[key];
73
+ const y = right[key];
74
+ if (x === y) continue;
75
+ if (typeof x !== "object" || typeof y !== "object" || x === null || y === null) return false;
76
+ if (!same(x, y)) return false;
77
+ }
78
+ for (const key in right) if (!(key in left)) return false;
79
+ return true;
80
+ }
81
+ /** How deep a patch goes into lists and objects: past it, what changed is sent whole */
82
+ var PATCH_DEPTH = 4;
83
+ var isObject = (value) => typeof value === "object" && value !== null;
84
+ /**
85
+ * What to send of a value that changed (`same` said so) to whoever has `before`: the parts of a list or an object
86
+ * that changed (`WirePatch`), or `after` whole where every part did, or where it is not the same kind of thing
87
+ */
88
+ function patchOf(before, after, depth = PATCH_DEPTH) {
89
+ if (depth === 0 || !isObject(before) || !isObject(after) || Array.isArray(before) !== Array.isArray(after)) return after;
90
+ const parts = {};
91
+ let changed = 0;
92
+ if (Array.isArray(before)) {
93
+ const list = after;
94
+ if (list.length !== before.length) return after;
95
+ for (let i = 0; i < list.length; i++) {
96
+ if (same(before[i], list[i])) continue;
97
+ parts[i] = patchOf(before[i], list[i], depth - 1);
98
+ changed++;
99
+ }
100
+ return changed === list.length ? after : { $patch: parts };
101
+ }
102
+ const left = before;
103
+ const right = after;
104
+ let fields = 0;
105
+ let unset;
106
+ for (const key in right) {
107
+ if (right[key] === void 0) continue;
108
+ fields++;
109
+ if (same(left[key], right[key])) continue;
110
+ parts[key] = patchOf(left[key], right[key], depth - 1);
111
+ changed++;
112
+ }
113
+ for (const key in left) if (left[key] !== void 0 && right[key] === void 0) (unset ??= []).push(key);
114
+ if (changed === fields && !unset) return after;
115
+ return unset ? {
116
+ $patch: parts,
117
+ $unset: unset
118
+ } : { $patch: parts };
119
+ }
120
+ var isPatch = (value) => isObject(value) && !Array.isArray(value) && "$patch" in value;
121
+ /** A value a patch was made against, with the patch put in: new lists and objects where it says, the very parts it does not */
122
+ function patched(base, patch) {
123
+ const made = Array.isArray(base) ? [...base] : { ...base };
124
+ for (const [key, part] of Object.entries(patch.$patch)) made[key] = isPatch(part) ? patched(base[key], part) : part;
125
+ for (const key of patch.$unset ?? []) delete made[key];
126
+ return made;
127
+ }
128
+ /** Whether two entities' components say the same: each as it knows how (`Component.same`), or as text */
129
+ function sameComponents(registry, a, b) {
130
+ if (a === b) return true;
131
+ if (!a || !b) return false;
132
+ for (const id in a) if (!(id in b)) return false;
133
+ for (const id in b) {
134
+ if (!(id in a)) return false;
135
+ const compare = registry?.component(id)?.same;
136
+ if (compare ? !compare(a[id], b[id]) : !same(a[id], b[id])) return false;
137
+ }
138
+ return true;
139
+ }
140
+ /**
141
+ * The fields of an object that changed, and those that are gone, or nothing when none did. A field named in `skip` is
142
+ * left to the caller (an entity's `own` part goes field by field on its own)
143
+ */
144
+ function fieldsOf(registry, before, after, skip) {
145
+ let set;
146
+ let unset;
147
+ for (const key in after) {
148
+ if (key === skip || after[key] === void 0) continue;
149
+ if (key === "components" ? !sameComponents(registry, before[key], after[key]) : !same(before[key], after[key])) (set ??= {})[key] = after[key];
150
+ }
151
+ for (const key in before) if (key !== skip && before[key] !== void 0 && after[key] === void 0) (unset ??= []).push(key);
152
+ return set || unset ? {
153
+ set: set ?? {},
154
+ ...unset ? { unset } : {}
155
+ } : void 0;
156
+ }
157
+ /** What changed of an entity, or nothing when nothing did. What only its owner is told goes field by field too */
158
+ function changeOf(registry, before, after) {
159
+ const ownBefore = before.own;
160
+ const ownAfter = after.own;
161
+ const fields = fieldsOf(registry, before, after, "own");
162
+ let own;
163
+ let ownPatch;
164
+ let unsetOwn = false;
165
+ if (ownBefore && ownAfter) {
166
+ own = fieldsOf(registry, ownBefore, ownAfter);
167
+ if (own) for (const key in own.set) {
168
+ const field = key;
169
+ if (!isObject(ownBefore[field])) continue;
170
+ const patch = patchOf(ownBefore[field], own.set[field]);
171
+ if (!isPatch(patch)) continue;
172
+ (ownPatch ??= {})[field] = patch;
173
+ delete own.set[field];
174
+ }
175
+ } else if (ownAfter) own = { set: ownAfter };
176
+ else if (ownBefore) unsetOwn = true;
177
+ if (!fields && !own && !unsetOwn) return void 0;
178
+ const unset = [...fields?.unset ?? [], ...unsetOwn ? ["own"] : []];
179
+ const set = fields?.set ?? {};
180
+ if (set.x !== void 0) set.x = Math.round(set.x * POSITION);
181
+ if (set.z !== void 0) set.z = Math.round(set.z * POSITION);
182
+ if (set.facing !== void 0) set.facing = (Math.round(set.facing * TURN) % 256 + 256) % 256;
183
+ const change = [after.id, set];
184
+ if (unset.length || own) change.push(unset.length ? unset : 0);
185
+ if (own) {
186
+ change.push(Object.keys(own.set).length || !ownPatch ? own.set : 0);
187
+ if (own.unset || ownPatch) change.push(own.unset ?? 0);
188
+ if (ownPatch) change.push(ownPatch);
189
+ }
190
+ return change;
191
+ }
192
+ /**
193
+ * Every part of a frame besides its tick, its entities and its events: the snapshot's parts, the engine's and a pack's
194
+ * (`SnapshotField`), and the fog, the camps and the team
195
+ */
196
+ var restOf = (frame) => {
197
+ const { snapshot, fog, camps, team } = frame;
198
+ const { tick: _tick, entities: _entities, events: _events, ...parts } = snapshot;
199
+ return {
200
+ ...parts,
201
+ fog,
202
+ camps,
203
+ team
204
+ };
205
+ };
206
+ /** A frame's entities by id, worked out once: a base is diffed against round after round while the player's answer is on its way */
207
+ var BY_ID = /* @__PURE__ */ new WeakMap();
208
+ function entitiesById(frame) {
209
+ let byId = BY_ID.get(frame);
210
+ if (!byId) {
211
+ byId = /* @__PURE__ */ new Map();
212
+ for (const entity of frame.snapshot.entities) byId.set(entity.id, entity);
213
+ BY_ID.set(frame, byId);
214
+ }
215
+ return byId;
216
+ }
217
+ /** Places of the base's list looked at past the one expected, for an entity that is not there (`entitiesDiff`) */
218
+ var LOOK_AHEAD = 8;
219
+ var entityDiffs = /* @__PURE__ */ new WeakMap();
220
+ var wholeDiffs = /* @__PURE__ */ new WeakMap();
221
+ function entitiesDiff(then, now, base, registry) {
222
+ let byBase = then && entityDiffs.get(then);
223
+ const known = then ? byBase?.get(now) : wholeDiffs.get(now);
224
+ if (known) return known;
225
+ const made = {
226
+ added: [],
227
+ changed: [],
228
+ removed: []
229
+ };
230
+ const list = then ?? [];
231
+ let byId;
232
+ let at = 0;
233
+ let matched = 0;
234
+ for (const entity of now) {
235
+ let old;
236
+ if (at < list.length && list[at].id === entity.id) old = list[at++];
237
+ else {
238
+ for (let ahead = at + 1; ahead < Math.min(at + LOOK_AHEAD, list.length); ahead++) if (list[ahead].id === entity.id) {
239
+ old = list[ahead];
240
+ at = ahead + 1;
241
+ break;
242
+ }
243
+ if (!old && list.length) old = (byId ??= entitiesById(base)).get(entity.id);
244
+ }
245
+ if (old) matched++;
246
+ if (old === entity) continue;
247
+ if (!old || old.type !== entity.type) {
248
+ if (old) made.removed.push(old.id);
249
+ made.added.push(encode(entity));
250
+ continue;
251
+ }
252
+ const change = changeOf(registry, old, entity);
253
+ if (change) made.changed.push(change);
254
+ }
255
+ if (matched < list.length) {
256
+ const ids = /* @__PURE__ */ new Set();
257
+ for (const entity of now) ids.add(entity.id);
258
+ for (const entity of list) if (!ids.has(entity.id)) made.removed.push(entity.id);
259
+ }
260
+ if (then) {
261
+ if (!byBase) entityDiffs.set(then, byBase = /* @__PURE__ */ new WeakMap());
262
+ byBase.set(now, made);
263
+ } else wholeDiffs.set(now, made);
264
+ return made;
265
+ }
266
+ /**
267
+ * A frame as what changed since `base`, or all of it without one. Events are the caller's to add. `registry`: the game's, whose
268
+ * components say how a change of theirs is found (`Component.same`); without it, as text
269
+ *
270
+ * @internal
271
+ */
272
+ function diff(base, next, registry) {
273
+ const delta = {
274
+ tick: next.snapshot.tick,
275
+ base: base ? base.snapshot.tick : null,
276
+ added: [],
277
+ changed: [],
278
+ removed: [],
279
+ rest: {}
280
+ };
281
+ const { added, changed, removed } = entitiesDiff(base?.snapshot.entities, next.snapshot.entities, base, registry);
282
+ delta.added = added;
283
+ delta.changed = changed;
284
+ delta.removed = removed;
285
+ const now = restOf(next);
286
+ const then = base && restOf(base);
287
+ const keys = then ? /* @__PURE__ */ new Set([...Object.keys(now), ...Object.keys(then)]) : Object.keys(now);
288
+ for (const key of keys) {
289
+ const before = then?.[key];
290
+ const after = now[key];
291
+ if (then && same(before, after)) continue;
292
+ const patch = then && key !== "fog" ? patchOf(before, after) : after;
293
+ if (isPatch(patch)) (delta.restPatch ??= {})[key] = patch;
294
+ else delta.rest[key] = after;
295
+ }
296
+ return delta;
297
+ }
298
+ /**
299
+ * The frame a delta makes of the one at its base (none, for a whole one). Entities that did not change are the very
300
+ * objects they were, so that whoever compares them by identity knows they did not. That is the frame before
301
+ * (`latest`) whose object is the same as what is made, which is not always the base: the base is the last frame the
302
+ * host heard was got, a frame or two behind, and the frames in between have objects of their own
303
+ *
304
+ * @internal
305
+ */
306
+ function apply(base, delta, latest) {
307
+ const removed = new Set(delta.removed);
308
+ const changed = /* @__PURE__ */ new Map();
309
+ for (const change of delta.changed) changed.set(change[0], change);
310
+ const before = /* @__PURE__ */ new Map();
311
+ if (latest && latest !== base) for (const entity of latest.snapshot.entities) before.set(entity.id, entity);
312
+ /** The frame before's object for what is made, where it is the same as it; else what is made */
313
+ const kept = (made) => {
314
+ const was = before.get(made.id);
315
+ return was && (was === made || sameEntity(was, made)) ? was : made;
316
+ };
317
+ const entities = [];
318
+ for (const entity of base?.snapshot.entities ?? []) {
319
+ if (removed.has(entity.id)) continue;
320
+ const change = changed.get(entity.id);
321
+ if (!change) {
322
+ entities.push(kept(entity));
323
+ continue;
324
+ }
325
+ const [, set, unset, ownSet, ownUnset, ownPatch] = change;
326
+ const next = {
327
+ ...entity,
328
+ ...decode(set)
329
+ };
330
+ for (const field of unset || []) delete next[field];
331
+ if (ownSet || ownUnset || ownPatch) {
332
+ const own = {
333
+ ...entity.own,
334
+ ...ownSet || {}
335
+ };
336
+ for (const field of ownUnset || []) delete own[field];
337
+ for (const [field, patch] of Object.entries(ownPatch ?? {})) own[field] = patched(entity.own?.[field], patch);
338
+ next.own = own;
339
+ }
340
+ entities.push(kept(next));
341
+ }
342
+ for (const added of delta.added) entities.push(kept(decode(added)));
343
+ const rest = {
344
+ ...base ? restOf(base) : {},
345
+ ...delta.rest
346
+ };
347
+ for (const [key, patch] of Object.entries(delta.restPatch ?? {})) rest[key] = patched(base && restOf(base)[key], patch);
348
+ const { fog, camps, team, ...parts } = rest;
349
+ return {
350
+ snapshot: {
351
+ tick: delta.tick,
352
+ ...parts,
353
+ entities,
354
+ events: []
355
+ },
356
+ fog,
357
+ camps,
358
+ team
359
+ };
360
+ }
361
+ /**
362
+ * Whether two states of an entity say the same, field by field
363
+ *
364
+ * @internal
365
+ */
366
+ function sameEntity(a, b) {
367
+ if (a.type !== b.type) return false;
368
+ return fieldsOf(void 0, a, b) === void 0;
369
+ }
370
+ /**
371
+ * Characters of a delta's text by what they carry, added to `into`: each field of an entity, of those added and those
372
+ * changed together (`entity.health`; of what only its owner is told, `entity.own.abilities`), the other parts (`rest.fog`),
373
+ * `events`, `removed`, and what is left (ids, brackets, the tick) as `other`, so that they add up to `text`'s length.
374
+ * A field is its key, its value and the comma between, as `JSON.stringify` writes them
375
+ */
376
+ function bytesByKey(delta, text, into) {
377
+ let counted = 0;
378
+ const add = (key, characters) => {
379
+ into[key] = (into[key] ?? 0) + characters;
380
+ counted += characters;
381
+ };
382
+ const fields = (prefix, values) => {
383
+ for (const [key, value] of Object.entries(values)) {
384
+ if (value === void 0) continue;
385
+ if (key === "own" && prefix === "entity." && value && typeof value === "object") {
386
+ add("entity.own", key.length + 5);
387
+ fields("entity.own.", value);
388
+ } else add(prefix + key, key.length + 4 + JSON.stringify(value).length);
389
+ }
390
+ };
391
+ for (const entity of delta.added) fields("entity.", entity);
392
+ for (const [, set, unset, ownSet, ownUnset, ownPatch] of delta.changed) {
393
+ fields("entity.", set);
394
+ if (unset) add("entity.unset", JSON.stringify(unset).length + 1);
395
+ if (ownSet) fields("entity.own.", ownSet);
396
+ if (ownUnset) add("entity.own.unset", JSON.stringify(ownUnset).length + 1);
397
+ if (ownPatch) fields("entity.own.", ownPatch);
398
+ }
399
+ for (const part of [delta.rest, delta.restPatch ?? {}]) for (const [key, value] of Object.entries(part)) if (value !== void 0) add(`rest.${key}`, key.length + 4 + JSON.stringify(value).length);
400
+ if (delta.events.length) add("events", JSON.stringify(delta.events).length);
401
+ if (delta.removed.length) add("removed", JSON.stringify(delta.removed).length);
402
+ add("other", text.length - counted);
403
+ }
404
+ //#endregion
405
+ export { apply, bytesByKey, diff, quantize, same, sameEntity };
406
+
407
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","names":[],"sources":["../../src/session/delta.ts"],"sourcesContent":["import type { Registry } from '#engine/registry'\nimport type { CampInfo, EntityState, OwnEntityState, SessionEvent, Snapshot } from './protocol'\n\n/*\n * Snapshots as changes. The host keeps what it sent a player at each tick, and sends the next one as what changed since\n * the last one the player has said it got (`base`): entities that came, the fields of those that changed, entities\n * that went, and the other parts when they differ. The player rebuilds the whole snapshot from the one at `base`,\n * keeping the very objects of what did not change: the screen tells what changed by them, and goes no further for\n * the rest. Numbers are rounded first (`quantize`), so that what moves by nothing worth drawing is not a change\n */\n\n/**\n * The fog of a team, as runs of the same value: 0s first, then 1s, then 0s... Few runs for a map of open fields\n *\n * @beta\n */\nexport interface FogMessage {\n\t/** Whether the whole map is revealed to the team, so the runs are not needed */\n\trevealed: boolean\n\t/** Run lengths of the cells the team sees now: 0s first, then 1s, then 0s.. */\n\tvisible: number[]\n\t/** Run lengths of the cells the team has explored: 0s first, then 1s, then 0s.. */\n\texplored: number[]\n}\n\n/**\n * What a player knows at a tick: the snapshot (without its events, which go their own way), the fog, the camps, the team\n *\n * @beta\n */\nexport interface Frame {\n\t/** The snapshot of the tick, without its events */\n\tsnapshot: Snapshot\n\t/** The team's fog as runs */\n\tfog: FogMessage\n\t/** The creep camps the player knows of */\n\tcamps: CampInfo[]\n\t/** The player's team number */\n\tteam: number\n}\n\n/** The parts of a frame besides its entities, sent when they differ from the base's */\ntype Rest = Omit<Snapshot, 'tick' | 'entities' | 'events'> & { fog: FogMessage; camps: CampInfo[]; team: number }\n\n/**\n * A list or an object sent as the parts of it that changed (`$patch`): by index for a list as long as the one before,\n * by key for an object, each part whole or a patch of its own, and the keys of an object that are gone (`$unset`).\n * What a cooldown of one ability of four, or the gold of one player, sends in place of all of them\n *\n * @beta\n */\nexport interface WirePatch {\n\t/** The parts that changed, by index or key: each the part whole, or a patch of its own */\n\t$patch: Record<string, unknown>\n\t/** The keys of an object that are gone */\n\t$unset?: string[]\n}\n\n/**\n * An entity that changed, as a list rather than an object (what goes over the wire for each one adds up): its id, the\n * fields that are new, those that are gone, and of what only its owner is told (`own`), the same, and its fields that\n * changed in part, as what changed in them (`WirePatch`: one ability's cooldown). Trailing parts that say nothing are\n * left off, the others `0`\n *\n * @beta\n */\nexport type EntityChange = [\n\tid: number,\n\tset: Partial<EntityState>,\n\tunset?: (keyof EntityState)[] | 0,\n\townSet?: Partial<OwnEntityState> | 0,\n\townUnset?: (keyof OwnEntityState)[] | 0,\n\townPatch?: Partial<Record<keyof OwnEntityState, WirePatch>>\n]\n\n/**\n * A frame as what changed since another (`base`, a tick the player has), or all of it (`base: null`)\n *\n * @beta\n */\nexport interface Delta {\n\t/** The tick this delta brings the player's view to */\n\ttick: number\n\t/** The tick of the frame this is the changes since, or null for a delta that holds all of the frame */\n\tbase: number | null\n\t/** Entities that were not in the base frame, whole */\n\tadded: EntityState[]\n\t/** Entities of the base frame that changed, one `EntityChange` each */\n\tchanged: EntityChange[]\n\t/** Ids of the entities of the base frame that are gone */\n\tremoved: number[]\n\t/** The parts of the frame besides its entities that differ from the base's, whole */\n\trest: Partial<Rest>\n\t/** The other parts that changed in part, as what changed in them (`WirePatch`: the gold of one player of four) */\n\trestPatch?: Partial<Record<keyof Rest, WirePatch>>\n\t/**\n\t * The batches of events the player has not said it got, each by its own number (`n`) and the tick it went out with:\n\t * sent again until it does, applied once. Talk between two ticks is a batch of its own (RV14)\n\t */\n\tevents: { tick: number; n: number; events: SessionEvent[] }[]\n}\n\n/** Rounded to `step` */\nconst round = (value: number, step: number) => Math.round(value / step) * step\n\n/**\n * Seconds rounded up to whole ones, a hair over one (what floating point leaves over) not counted: what a plate\n * sweeps changes once a second on the wire, not every round (the plate counts down between)\n */\nconst secondsUp = (value: number) => Math.ceil(value - 1e-6)\n\n/** Positions on the wire, in 256ths of a unit, and the facing in 256ths of a turn: whole numbers, short to write */\nconst POSITION = 256\nconst TURN = 256 / (Math.PI * 2)\n\n/** An entity's numbers as they go over the wire: whole numbers where they can be. `decode` takes them back */\nfunction encode<T extends Partial<EntityState>>(state: T): T {\n\tconst out = { ...state }\n\tif (out.x !== undefined) out.x = Math.round(out.x * POSITION)\n\tif (out.z !== undefined) out.z = Math.round(out.z * POSITION)\n\tif (out.facing !== undefined) out.facing = ((Math.round(out.facing * TURN) % 256) + 256) % 256\n\treturn out\n}\n\nfunction decode<T extends Partial<EntityState>>(state: T): T {\n\tconst out = { ...state }\n\tif (out.x !== undefined) out.x /= POSITION\n\tif (out.z !== undefined) out.z /= POSITION\n\tif (out.facing !== undefined) out.facing /= TURN\n\treturn out\n}\n\n/**\n * An entity's state with its numbers rounded for the wire: positions to 1/256 of a unit (16 bits over a map of 256),\n * the facing to a 256th of a turn, health and shield up to whole points (what is alive keeps at least one), mana down\n * (an ability is never shown ready that the simulation would refuse), what is under way to hundredths, the seconds\n * left of buffs and of shared cooldowns up to whole seconds\n *\n * @beta\n */\nexport function quantize(state: EntityState): EntityState {\n\t// what the wire's whole numbers come back as (`encode`, then `decode`), in one copy: the host diffs what the player\n\t// will have, for every entity in sight of every seat each round\n\tconst out: EntityState = { ...state }\n\tout.x = Math.round(state.x * POSITION) / POSITION\n\tout.z = Math.round(state.z * POSITION) / POSITION\n\tout.facing = (((Math.round(state.facing * TURN) % 256) + 256) % 256) / TURN\n\tout.health = Math.ceil(state.health)\n\tif (state.shield !== undefined) out.shield = Math.ceil(state.shield)\n\tif (state.mana !== undefined) out.mana = Math.floor(state.mana)\n\t// what the rules share for the plates (indicators-plan U3): whole seconds, rounded up (what is about to end is not\n\t// shown ended). To a tenth, a buff on each of 1,000 footmen doubled what each seat is sent (395 KB/s to 846)\n\tif (state.buffTimes) out.buffTimes = state.buffTimes.map((left) => (left < 0 ? left : secondsUp(left)))\n\tif (state.abilities?.some((ability) => ability.cooldown))\n\t\tout.abilities = state.abilities.map((ability) => (ability.cooldown ? { ...ability, cooldown: secondsUp(ability.cooldown) } : ability))\n\tif (state.lifetime) out.lifetime = { left: round(state.lifetime.left, 0.1), total: state.lifetime.total }\n\treturn out\n}\n\n/**\n * Whether two values of a field are the same: the very same, or equal as data, field by field and element by element\n * down the way. What a player is told is compared with what they were (`entityState.ts`) by it too\n *\n * @internal\n */\nexport function same(a: unknown, b: unknown): boolean {\n\tif (a === b) return true\n\tif (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false\n\t\tfor (let i = 0; i < a.length; i++) if (!same(a[i], b[i])) return false\n\t\treturn true\n\t}\n\tconst left = a as Record<string, unknown>\n\tconst right = b as Record<string, unknown>\n\tfor (const key in left) {\n\t\tif (!(key in right)) return false\n\t\tconst x = left[key]\n\t\tconst y = right[key]\n\t\tif (x === y) continue\n\t\tif (typeof x !== 'object' || typeof y !== 'object' || x === null || y === null) return false\n\t\tif (!same(x, y)) return false\n\t}\n\tfor (const key in right) if (!(key in left)) return false\n\treturn true\n}\n\n/** How deep a patch goes into lists and objects: past it, what changed is sent whole */\nconst PATCH_DEPTH = 4\n\nconst isObject = (value: unknown): value is object => typeof value === 'object' && value !== null\n\n/**\n * What to send of a value that changed (`same` said so) to whoever has `before`: the parts of a list or an object\n * that changed (`WirePatch`), or `after` whole where every part did, or where it is not the same kind of thing\n */\nfunction patchOf(before: unknown, after: unknown, depth = PATCH_DEPTH): unknown {\n\tif (depth === 0 || !isObject(before) || !isObject(after) || Array.isArray(before) !== Array.isArray(after)) return after\n\tconst parts: Record<string, unknown> = {}\n\tlet changed = 0\n\tif (Array.isArray(before)) {\n\t\tconst list = after as unknown[]\n\t\tif (list.length !== before.length) return after\n\t\tfor (let i = 0; i < list.length; i++) {\n\t\t\tif (same(before[i], list[i])) continue\n\t\t\tparts[i] = patchOf(before[i], list[i], depth - 1)\n\t\t\tchanged++\n\t\t}\n\t\treturn changed === list.length ? after : { $patch: parts }\n\t}\n\tconst left = before as Record<string, unknown>\n\tconst right = after as Record<string, unknown>\n\tlet fields = 0\n\tlet unset: string[] | undefined\n\tfor (const key in right) {\n\t\tif (right[key] === undefined) continue\n\t\tfields++\n\t\tif (same(left[key], right[key])) continue\n\t\tparts[key] = patchOf(left[key], right[key], depth - 1)\n\t\tchanged++\n\t}\n\tfor (const key in left) if (left[key] !== undefined && right[key] === undefined) (unset ??= []).push(key)\n\tif (changed === fields && !unset) return after\n\treturn unset ? { $patch: parts, $unset: unset } : { $patch: parts }\n}\n\nconst isPatch = (value: unknown): value is WirePatch => isObject(value) && !Array.isArray(value) && '$patch' in value\n\n/** A value a patch was made against, with the patch put in: new lists and objects where it says, the very parts it does not */\nfunction patched(base: unknown, patch: WirePatch): unknown {\n\tconst made = (Array.isArray(base) ? [...base] : { ...(base as Record<string, unknown>) }) as Record<string, unknown>\n\tfor (const [key, part] of Object.entries(patch.$patch)) made[key] = isPatch(part) ? patched((base as Record<string, unknown>)[key], part) : part\n\tfor (const key of patch.$unset ?? []) delete made[key]\n\treturn made\n}\n\n/** Whether two entities' components say the same: each as it knows how (`Component.same`), or as text */\nfunction sameComponents(registry: Registry | undefined, a: Record<string, unknown> | undefined, b: Record<string, unknown> | undefined): boolean {\n\tif (a === b) return true\n\tif (!a || !b) return false\n\tfor (const id in a) if (!(id in b)) return false\n\tfor (const id in b) {\n\t\tif (!(id in a)) return false\n\t\tconst compare = registry?.component(id)?.same\n\t\tif (compare ? !compare(a[id], b[id]) : !same(a[id], b[id])) return false\n\t}\n\treturn true\n}\n\n/**\n * The fields of an object that changed, and those that are gone, or nothing when none did. A field named in `skip` is\n * left to the caller (an entity's `own` part goes field by field on its own)\n */\nfunction fieldsOf<T extends object>(\n\tregistry: Registry | undefined,\n\tbefore: T,\n\tafter: T,\n\tskip?: keyof T\n): { set: Partial<T>; unset?: (keyof T)[] } | undefined {\n\tlet set: Partial<T> | undefined\n\tlet unset: (keyof T)[] | undefined\n\tfor (const key in after) {\n\t\tif (key === skip || after[key] === undefined) continue\n\t\tconst changed =\n\t\t\t(key as string) === 'components'\n\t\t\t\t? !sameComponents(registry, before[key] as Record<string, unknown> | undefined, after[key] as Record<string, unknown> | undefined)\n\t\t\t\t: !same(before[key], after[key])\n\t\tif (changed) (set ??= {} as Partial<T>)[key] = after[key]\n\t}\n\tfor (const key in before) if (key !== skip && before[key] !== undefined && after[key] === undefined) (unset ??= []).push(key)\n\treturn set || unset ? { set: set ?? {}, ...(unset ? { unset } : {}) } : undefined\n}\n\n/** What changed of an entity, or nothing when nothing did. What only its owner is told goes field by field too */\nfunction changeOf(registry: Registry | undefined, before: EntityState, after: EntityState): EntityChange | undefined {\n\tconst ownBefore = before.own\n\tconst ownAfter = after.own\n\tconst fields = fieldsOf<EntityState>(registry, before, after, 'own')\n\tlet own: { set: Partial<OwnEntityState>; unset?: (keyof OwnEntityState)[] } | undefined\n\tlet ownPatch: Partial<Record<keyof OwnEntityState, WirePatch>> | undefined\n\tlet unsetOwn = false\n\tif (ownBefore && ownAfter) {\n\t\town = fieldsOf(registry, ownBefore, ownAfter)\n\t\t// a list or an object that changed in part (one ability's cooldown of four) goes as what changed in it\n\t\tif (own)\n\t\t\tfor (const key in own.set) {\n\t\t\t\tconst field = key as keyof OwnEntityState\n\t\t\t\tif (!isObject(ownBefore[field])) continue\n\t\t\t\tconst patch = patchOf(ownBefore[field], own.set[field])\n\t\t\t\tif (!isPatch(patch)) continue\n\t\t\t\t;(ownPatch ??= {})[field] = patch\n\t\t\t\tdelete own.set[field]\n\t\t\t}\n\t} else if (ownAfter) own = { set: ownAfter }\n\telse if (ownBefore) unsetOwn = true\n\tif (!fields && !own && !unsetOwn) return undefined\n\tconst unset = [...((fields?.unset ?? []) as (keyof EntityState)[]), ...(unsetOwn ? (['own'] as const) : [])]\n\t// (the set is this call's own object: its numbers are made the wire's in place)\n\tconst set = fields?.set ?? {}\n\tif (set.x !== undefined) set.x = Math.round(set.x * POSITION)\n\tif (set.z !== undefined) set.z = Math.round(set.z * POSITION)\n\tif (set.facing !== undefined) set.facing = ((Math.round(set.facing * TURN) % 256) + 256) % 256\n\tconst change: EntityChange = [after.id, set]\n\tif (unset.length || own) change.push(unset.length ? unset : 0)\n\tif (own) {\n\t\tchange.push(Object.keys(own.set).length || !ownPatch ? own.set : 0)\n\t\tif (own.unset || ownPatch) change.push(own.unset ?? 0)\n\t\tif (ownPatch) change.push(ownPatch)\n\t}\n\treturn change\n}\n\n/**\n * Every part of a frame besides its tick, its entities and its events: the snapshot's parts, the engine's and a pack's\n * (`SnapshotField`), and the fog, the camps and the team\n */\nconst restOf = (frame: Frame): Rest => {\n\tconst { snapshot, fog, camps, team } = frame\n\tconst { tick: _tick, entities: _entities, events: _events, ...parts } = snapshot\n\treturn { ...parts, fog, camps, team }\n}\n\n/** A frame's entities by id, worked out once: a base is diffed against round after round while the player's answer is on its way */\nconst BY_ID = new WeakMap<Frame, Map<number, EntityState>>()\nfunction entitiesById(frame: Frame): Map<number, EntityState> {\n\tlet byId = BY_ID.get(frame)\n\tif (!byId) {\n\t\tbyId = new Map()\n\t\tfor (const entity of frame.snapshot.entities) byId.set(entity.id, entity)\n\t\tBY_ID.set(frame, byId)\n\t}\n\treturn byId\n}\n\n/** Places of the base's list looked at past the one expected, for an entity that is not there (`entitiesDiff`) */\nconst LOOK_AHEAD = 8\n\n/** What changed of the entities between two lists, worked out once for the two (the seats of a side share their lists) */\ntype EntitiesDiff = Pick<Delta, 'added' | 'changed' | 'removed'>\nconst entityDiffs = new WeakMap<EntityState[], WeakMap<EntityState[], EntitiesDiff>>()\nconst wholeDiffs = new WeakMap<EntityState[], EntitiesDiff>()\n\nfunction entitiesDiff(then: EntityState[] | undefined, now: EntityState[], base: Frame | undefined, registry: Registry | undefined): EntitiesDiff {\n\tlet byBase = then && entityDiffs.get(then)\n\tconst known = then ? byBase?.get(now) : wholeDiffs.get(now)\n\tif (known) return known\n\tconst made: EntitiesDiff = { added: [], changed: [], removed: [] }\n\t// the two lists side by side: a world lists its entities in the order they came, so the entity of the base at the\n\t// same place is most often the one; by id only where it is not (what came, what went just before)\n\tconst list = then ?? []\n\tlet byId: Map<number, EntityState> | undefined\n\tlet at = 0\n\tlet matched = 0\n\tfor (const entity of now) {\n\t\tlet old: EntityState | undefined\n\t\tif (at < list.length && list[at].id === entity.id) old = list[at++]\n\t\telse {\n\t\t\t// a few gone just before it: passed over\n\t\t\tfor (let ahead = at + 1; ahead < Math.min(at + LOOK_AHEAD, list.length); ahead++)\n\t\t\t\tif (list[ahead].id === entity.id) {\n\t\t\t\t\told = list[ahead]\n\t\t\t\t\tat = ahead + 1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\tif (!old && list.length) old = (byId ??= entitiesById(base!)).get(entity.id)\n\t\t}\n\t\tif (old) matched++\n\t\t// the very object it was: nothing changed (the host rounds a state told again to the object it rounded it to)\n\t\tif (old === entity) continue\n\t\t// another type under the same id (a building upgraded) is sent whole\n\t\tif (!old || old.type !== entity.type) {\n\t\t\tif (old) made.removed.push(old.id)\n\t\t\tmade.added.push(encode(entity))\n\t\t\tcontinue\n\t\t}\n\t\tconst change = changeOf(registry, old, entity)\n\t\tif (change) made.changed.push(change)\n\t}\n\t// every one of the base's found again: none went\n\tif (matched < list.length) {\n\t\tconst ids = new Set<number>()\n\t\tfor (const entity of now) ids.add(entity.id)\n\t\tfor (const entity of list) if (!ids.has(entity.id)) made.removed.push(entity.id)\n\t}\n\tif (then) {\n\t\tif (!byBase) entityDiffs.set(then, (byBase = new WeakMap()))\n\t\tbyBase.set(now, made)\n\t} else wholeDiffs.set(now, made)\n\treturn made\n}\n\n/**\n * A frame as what changed since `base`, or all of it without one. Events are the caller's to add. `registry`: the game's, whose\n * components say how a change of theirs is found (`Component.same`); without it, as text\n *\n * @internal\n */\nexport function diff(base: Frame | undefined, next: Frame, registry?: Registry): Omit<Delta, 'events'> {\n\tconst delta: Omit<Delta, 'events'> = {\n\t\ttick: next.snapshot.tick,\n\t\tbase: base ? base.snapshot.tick : null,\n\t\tadded: [],\n\t\tchanged: [],\n\t\tremoved: [],\n\t\trest: {}\n\t}\n\tconst { added, changed, removed } = entitiesDiff(base?.snapshot.entities, next.snapshot.entities, base, registry)\n\tdelta.added = added\n\tdelta.changed = changed\n\tdelta.removed = removed\n\tconst now = restOf(next)\n\tconst then = base && restOf(base)\n\tconst keys = then ? new Set([...Object.keys(now), ...Object.keys(then)]) : Object.keys(now)\n\tfor (const key of keys) {\n\t\tconst before = then?.[key as keyof Rest]\n\t\tconst after = now[key as keyof Rest]\n\t\tif (then && same(before, after)) continue\n\t\t// a part that changed in part (the gold of one player) goes as what changed in it; the fog whole, as the player\n\t\t// takes it whole (`RemoteSession`)\n\t\tconst patch = then && key !== 'fog' ? patchOf(before, after) : after\n\t\tif (isPatch(patch)) (delta.restPatch ??= {})[key as keyof Rest] = patch\n\t\telse (delta.rest as Record<string, unknown>)[key] = after\n\t}\n\treturn delta\n}\n\n/**\n * The frame a delta makes of the one at its base (none, for a whole one). Entities that did not change are the very\n * objects they were, so that whoever compares them by identity knows they did not. That is the frame before\n * (`latest`) whose object is the same as what is made, which is not always the base: the base is the last frame the\n * host heard was got, a frame or two behind, and the frames in between have objects of their own\n *\n * @internal\n */\nexport function apply(base: Frame | undefined, delta: Delta, latest?: Frame): Frame {\n\tconst removed = new Set(delta.removed)\n\tconst changed = new Map<number, EntityChange>()\n\tfor (const change of delta.changed) changed.set(change[0], change)\n\tconst before = new Map<number, EntityState>()\n\tif (latest && latest !== base) for (const entity of latest.snapshot.entities) before.set(entity.id, entity)\n\t/** The frame before's object for what is made, where it is the same as it; else what is made */\n\tconst kept = (made: EntityState) => {\n\t\tconst was = before.get(made.id)\n\t\treturn was && (was === made || sameEntity(was, made)) ? was : made\n\t}\n\tconst entities: EntityState[] = []\n\tfor (const entity of base?.snapshot.entities ?? []) {\n\t\tif (removed.has(entity.id)) continue\n\t\tconst change = changed.get(entity.id)\n\t\tif (!change) {\n\t\t\tentities.push(kept(entity))\n\t\t\tcontinue\n\t\t}\n\t\tconst [, set, unset, ownSet, ownUnset, ownPatch] = change\n\t\tconst next = { ...entity, ...decode(set) }\n\t\tfor (const field of unset || []) delete next[field]\n\t\tif (ownSet || ownUnset || ownPatch) {\n\t\t\tconst own = { ...entity.own, ...(ownSet || {}) } as OwnEntityState\n\t\t\tfor (const field of ownUnset || []) delete own[field]\n\t\t\tfor (const [field, patch] of Object.entries(ownPatch ?? {}))\n\t\t\t\t(own as unknown as Record<string, unknown>)[field] = patched(entity.own?.[field as keyof OwnEntityState], patch)\n\t\t\tnext.own = own\n\t\t}\n\t\tentities.push(kept(next))\n\t}\n\tfor (const added of delta.added) entities.push(kept(decode(added)))\n\tconst rest = { ...(base ? restOf(base) : {}), ...delta.rest } as Rest\n\tfor (const [key, patch] of Object.entries(delta.restPatch ?? {}))\n\t\t(rest as unknown as Record<string, unknown>)[key] = patched(base && restOf(base)[key as keyof Rest], patch)\n\tconst { fog, camps, team, ...parts } = rest\n\treturn { snapshot: { tick: delta.tick, ...parts, entities, events: [] }, fog, camps, team }\n}\n\n/**\n * Whether two states of an entity say the same, field by field\n *\n * @internal\n */\nexport function sameEntity(a: EntityState, b: EntityState): boolean {\n\tif (a.type !== b.type) return false\n\treturn fieldsOf(undefined, a, b) === undefined\n}\n\n/**\n * Characters of a delta's text by what they carry, added to `into`: each field of an entity, of those added and those\n * changed together (`entity.health`; of what only its owner is told, `entity.own.abilities`), the other parts (`rest.fog`),\n * `events`, `removed`, and what is left (ids, brackets, the tick) as `other`, so that they add up to `text`'s length.\n * A field is its key, its value and the comma between, as `JSON.stringify` writes them\n */\nexport function bytesByKey(delta: Delta, text: string, into: Record<string, number>): void {\n\tlet counted = 0\n\tconst add = (key: string, characters: number) => {\n\t\tinto[key] = (into[key] ?? 0) + characters\n\t\tcounted += characters\n\t}\n\tconst fields = (prefix: string, values: object) => {\n\t\tfor (const [key, value] of Object.entries(values)) {\n\t\t\tif (value === undefined) continue\n\t\t\tif (key === 'own' && prefix === 'entity.' && value && typeof value === 'object') {\n\t\t\t\tadd('entity.own', key.length + 5)\n\t\t\t\tfields('entity.own.', value)\n\t\t\t} else add(prefix + key, key.length + 4 + JSON.stringify(value).length)\n\t\t}\n\t}\n\tfor (const entity of delta.added) fields('entity.', entity)\n\tfor (const [, set, unset, ownSet, ownUnset, ownPatch] of delta.changed) {\n\t\tfields('entity.', set)\n\t\tif (unset) add('entity.unset', JSON.stringify(unset).length + 1)\n\t\tif (ownSet) fields('entity.own.', ownSet)\n\t\tif (ownUnset) add('entity.own.unset', JSON.stringify(ownUnset).length + 1)\n\t\t// a field sent as what changed in it counts as the field\n\t\tif (ownPatch) fields('entity.own.', ownPatch)\n\t}\n\tfor (const part of [delta.rest, delta.restPatch ?? {}])\n\t\tfor (const [key, value] of Object.entries(part)) if (value !== undefined) add(`rest.${key}`, key.length + 4 + JSON.stringify(value).length)\n\tif (delta.events.length) add('events', JSON.stringify(delta.events).length)\n\tif (delta.removed.length) add('removed', JSON.stringify(delta.removed).length)\n\tadd('other', text.length - counted)\n}\n"],"mappings":"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"}