@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,405 @@
1
+ import { defineComponent } from "./components.js";
2
+ import { defineListener } from "./events.js";
3
+ import { defineTimer } from "./timers.js";
4
+ import { defineSequence } from "./sequences.js";
5
+ import { hotRules, onNewGameVersion, replaceIn } from "./hotReload.js";
6
+ //#region src/createGame.ts
7
+ /** What marks a game made by `createGame` */
8
+ var GAME = Symbol.for("@v12-engine/engine/game");
9
+ /**
10
+ * Whether something is a game made by `createGame`, rather than the module underneath (`Rules`)
11
+ *
12
+ * @public
13
+ */
14
+ function isGame(value) {
15
+ return !!value && typeof value === "object" && value[GAME] === true;
16
+ }
17
+ /**
18
+ * The module underneath what a host is given: a game's (`toRules()`), or the module itself
19
+ *
20
+ * @beta
21
+ */
22
+ function rulesOf(game) {
23
+ return isGame(game) ? game.toRules() : game;
24
+ }
25
+ /**
26
+ * The start of what a host is given, where it says none of its own: a game's (`toStart()`); a module has none
27
+ *
28
+ * @beta
29
+ */
30
+ function startOf(game) {
31
+ return isGame(game) ? game.toStart() : void 0;
32
+ }
33
+ /**
34
+ * Runs each in order, each after the one before has settled: at once, as long as none gives a promise (a start that is
35
+ * plain code is over when it returns, as a host that does not wait for it expects)
36
+ */
37
+ function inOrder(runs) {
38
+ let next = 0;
39
+ const go = () => {
40
+ while (next < runs.length) {
41
+ const made = runs[next++]();
42
+ if (made && typeof made.then === "function") return made.then(go);
43
+ }
44
+ };
45
+ return go();
46
+ }
47
+ /** The same name, written otherwise: `Home stead`, `homestead` and `home-stead` are one */
48
+ var sameName = (a, b) => a.toLowerCase().replace(/[^a-z0-9]/g, "") === b.toLowerCase().replace(/[^a-z0-9]/g, "");
49
+ /**
50
+ * Makes a game: one object its units, abilities, systems, hooks and listeners, missions, maps and view are registered
51
+ * on, which every host takes (`Game`). `init` is its id and name, and any field of the module underneath said at once:
52
+ * `createGame(rules)` makes a game of a module written whole
53
+ *
54
+ * @public
55
+ */
56
+ function createGame(init) {
57
+ const { contentPacks = [], checkView = "warn", id, name } = init;
58
+ if (!id) throw new Error("createGame: a game needs an id");
59
+ const added = /* @__PURE__ */ new Map();
60
+ /** The settings given by `settings()`, laid over the module's own as the rules are made */
61
+ let settings = {};
62
+ const starts = [];
63
+ const missions = [];
64
+ let maps = {};
65
+ let viewGiven;
66
+ let hasView = false;
67
+ let viewFetched;
68
+ let built;
69
+ let stale = false;
70
+ /** The name in `maps` of each map read, by its own name (`GameMap.name`) */
71
+ const keyOfName = /* @__PURE__ */ new Map();
72
+ /**
73
+ * The maps given as loaders (`LazyMaps`) that have been fetched: among the game's maps (`Rules.maps`) from then on, so
74
+ * that a save or a server's welcome of a game on one keeps only what changed of its ground, as of a map given whole
75
+ */
76
+ const fetched = [];
77
+ /** How many handlers each id made for one has been given, so that each is its own */
78
+ const counts = /* @__PURE__ */ new Map();
79
+ const add = (field, def) => {
80
+ const list = added.get(field) ?? [];
81
+ list.push(def);
82
+ added.set(field, list);
83
+ stale = true;
84
+ return def;
85
+ };
86
+ /** An id made for a handler that was given none: `<under>.<what>.<name>.<n>` */
87
+ const madeId = (under, what, name) => {
88
+ const key = `${under}.${what}.${name}`;
89
+ const n = (counts.get(key) ?? 0) + 1;
90
+ counts.set(key, n);
91
+ return n === 1 ? key : `${key}.${n}`;
92
+ };
93
+ const hookName = (hook) => typeof hook === "string" ? hook : hook.id;
94
+ const listen = (under, event, run, options) => add("listeners", defineListener({
95
+ id: options?.id ? `${under}.${options.id}` : madeId(under, "on", String(event.id)),
96
+ event,
97
+ run
98
+ }));
99
+ const hook = (under, when, name, run, options) => add("hooks", {
100
+ hook: name,
101
+ id: options?.id ? `${under}.${options.id}` : madeId(under, when, hookName(name)),
102
+ priority: options?.priority ?? (when === "before" ? -1 : 1),
103
+ run
104
+ });
105
+ /**
106
+ * The module, made of what it was given and what was registered since. What it was given is read as it is now: a
107
+ * module given whole and taken anew in place while it runs (`hotRules` on it, hot reload) is in the next one made
108
+ */
109
+ const build = () => {
110
+ const { contentPacks: _packs, checkView: _check, ...given } = init;
111
+ const rules = {
112
+ ...given,
113
+ units: [...given.units ?? []]
114
+ };
115
+ const into = rules;
116
+ for (const [field, list] of added) into[field] = [...into[field] ?? [], ...list];
117
+ if (Object.keys(settings).length) {
118
+ const merged = { ...given.settings };
119
+ for (const [key, value] of Object.entries(settings)) {
120
+ const was = merged[key];
121
+ merged[key] = was && value && typeof was === "object" && typeof value === "object" && !Array.isArray(value) ? {
122
+ ...was,
123
+ ...value
124
+ } : value;
125
+ }
126
+ rules.settings = merged;
127
+ }
128
+ const loaded = [...Object.values(maps).filter((map) => typeof map !== "function"), ...fetched];
129
+ if (!given.maps && loaded.length) rules.maps = loaded;
130
+ return rules;
131
+ };
132
+ const game = {
133
+ [GAME]: true,
134
+ id,
135
+ name,
136
+ contentPacks: [...contentPacks],
137
+ checkView,
138
+ get hasView() {
139
+ return hasView;
140
+ },
141
+ unit: (def) => add("units", def),
142
+ ability: (def) => add("abilities", def),
143
+ buff: (def) => add("buffs", def),
144
+ item: (def) => add("items", def),
145
+ upgrade: (def) => add("upgrades", def),
146
+ race: (def) => add("races", def),
147
+ resource: (def) => add("resources", def),
148
+ stat: (def) => add("stats", def),
149
+ system: (def) => add("systems", def),
150
+ order: (def) => add("orders", def),
151
+ component: (component) => add("components", component),
152
+ command: (def) => add("commands", def),
153
+ event: (key) => add("events", key),
154
+ area: (def) => add("areas", def),
155
+ prefab: (def) => add("prefabs", def),
156
+ timer: (def) => add("timers", def),
157
+ sequence: (def) => add("sequences", def),
158
+ file: (def) => add("files", def),
159
+ brain: (def) => add("brains", def),
160
+ tile: (def) => add("tiles", def),
161
+ effect: (def) => add("effects", def),
162
+ targeting: (def) => add("targetings", def),
163
+ formation: (def) => add("formations", def),
164
+ tunable: (def) => add("tunables", def),
165
+ cellLayer: (def) => add("cellLayers", def),
166
+ pack(pack) {
167
+ add("packs", pack);
168
+ return game;
169
+ },
170
+ settings(more) {
171
+ const next = { ...settings };
172
+ for (const [key, value] of Object.entries(more)) {
173
+ const was = next[key];
174
+ next[key] = was && value && typeof was === "object" && typeof value === "object" && !Array.isArray(value) ? {
175
+ ...was,
176
+ ...value
177
+ } : value;
178
+ }
179
+ settings = next;
180
+ stale = true;
181
+ return game;
182
+ },
183
+ on(event, run, options) {
184
+ listen(id, event, run, options);
185
+ return game;
186
+ },
187
+ before(name, run, options) {
188
+ hook(id, "before", name, run, options);
189
+ return game;
190
+ },
191
+ after(name, run, options) {
192
+ hook(id, "after", name, run, options);
193
+ return game;
194
+ },
195
+ onStart(run) {
196
+ starts.push(run);
197
+ return game;
198
+ },
199
+ mission(missionId, setup) {
200
+ const prefix = `${id}.${missionId}`;
201
+ if (missions.some((each) => each.mission.id === prefix)) throw new Error(`createGame: the mission "${missionId}" is given twice`);
202
+ const idOf = (name) => `${prefix}.${name}`;
203
+ const own = [];
204
+ const plays = [];
205
+ const mission = {
206
+ id: prefix,
207
+ idOf,
208
+ objective: (def) => ({
209
+ ...def,
210
+ id: idOf(def.id)
211
+ }),
212
+ sequence: (def) => add("sequences", defineSequence({
213
+ ...def,
214
+ id: idOf(def.id)
215
+ })),
216
+ timer: (def) => add("timers", defineTimer({
217
+ ...def,
218
+ id: idOf(def.id)
219
+ })),
220
+ component: (def) => add("components", defineComponent({
221
+ ...def,
222
+ id: idOf(def.id)
223
+ })),
224
+ area: (def) => add("areas", {
225
+ ...def,
226
+ id: idOf(def.id)
227
+ }),
228
+ on(event, run, options) {
229
+ listen(prefix, event, run, options);
230
+ return mission;
231
+ },
232
+ before(name, run, options) {
233
+ hook(prefix, "before", name, run, options);
234
+ return mission;
235
+ },
236
+ after(name, run, options) {
237
+ hook(prefix, "after", name, run, options);
238
+ return mission;
239
+ },
240
+ onStart(run) {
241
+ own.push(run);
242
+ return mission;
243
+ },
244
+ plays(...names) {
245
+ plays.push(...names);
246
+ return mission;
247
+ },
248
+ start: (world, context = {}) => inOrder(own.map((run) => () => run(world, {
249
+ fresh: true,
250
+ ...context
251
+ })))
252
+ };
253
+ setup(mission);
254
+ missions.push({
255
+ mission,
256
+ maps: plays
257
+ });
258
+ return mission;
259
+ },
260
+ maps(more) {
261
+ const wrapped = {};
262
+ for (const [key, map] of Object.entries(more)) if (typeof map !== "function") {
263
+ keyOfName.set(map.name, key);
264
+ wrapped[key] = map;
265
+ } else wrapped[key] = () => map().then((read) => {
266
+ keyOfName.set(read.name, key);
267
+ if (!fetched.some((other) => other.name === read.name)) {
268
+ fetched.push(read);
269
+ if (built && !init.maps) built.maps = [...built.maps ?? [], read];
270
+ }
271
+ return read;
272
+ });
273
+ maps = {
274
+ ...maps,
275
+ ...wrapped
276
+ };
277
+ stale = true;
278
+ return game;
279
+ },
280
+ view(view) {
281
+ viewGiven = view;
282
+ hasView = true;
283
+ viewFetched = void 0;
284
+ return game;
285
+ },
286
+ async check() {
287
+ const rules = game.toRules();
288
+ const { checkRules } = await import("./rulesCheck.js");
289
+ const problems = [...checkRules(rules)];
290
+ for (const [field, list] of added) {
291
+ const seen = /* @__PURE__ */ new Set();
292
+ for (const def of list) {
293
+ const id = def.id ?? def.type;
294
+ if (typeof id !== "string") continue;
295
+ if (seen.has(id)) problems.push({
296
+ level: "error",
297
+ where: field,
298
+ id,
299
+ message: `${field} has "${id}" twice: the second takes the first's place`
300
+ });
301
+ seen.add(id);
302
+ }
303
+ }
304
+ const units = new Set(rules.units.map((unit) => unit.id));
305
+ for (const name of Object.keys(maps)) {
306
+ let map;
307
+ try {
308
+ map = await game.loadMap(name);
309
+ } catch (error) {
310
+ problems.push({
311
+ level: "error",
312
+ where: `maps.${name}`,
313
+ id: name,
314
+ message: `The map "${name}" could not be read: ${String(error)}`
315
+ });
316
+ continue;
317
+ }
318
+ if (map.game !== void 0 && map.game !== rules.id) problems.push({
319
+ level: "warning",
320
+ where: `maps.${name}`,
321
+ id: map.game,
322
+ message: `The map "${name}" says it is of the game "${map.game}", not "${rules.id}"`
323
+ });
324
+ const told = /* @__PURE__ */ new Set();
325
+ for (const object of map.objects) {
326
+ if (units.has(object.type) || told.has(object.type)) continue;
327
+ told.add(object.type);
328
+ problems.push({
329
+ level: "error",
330
+ where: `maps.${name}.objects`,
331
+ id: object.type,
332
+ message: `The map "${name}" places a "${object.type}", which no unit type of the game is`
333
+ });
334
+ }
335
+ }
336
+ return problems;
337
+ },
338
+ toRules() {
339
+ if (!built) {
340
+ built = build();
341
+ onNewGameVersion((current) => {
342
+ if (current === init && built) hotRules(void 0, built, build());
343
+ });
344
+ } else if (stale) replaceIn(built, build());
345
+ stale = false;
346
+ return built;
347
+ },
348
+ toView() {
349
+ if (!hasView) return Promise.reject(/* @__PURE__ */ new Error(`The game "${id}" has no view: give it one with game.view(…)`));
350
+ if (!viewFetched) {
351
+ const view = viewGiven;
352
+ const fetched = typeof view === "function" ? view().then((module) => {
353
+ const read = module;
354
+ if (read && typeof read === "object" && read.view && typeof read.view === "object") return read.view;
355
+ if (read && typeof read === "object" && "default" in read) return read.default;
356
+ return module;
357
+ }) : Promise.resolve(view);
358
+ viewFetched = fetched;
359
+ fetched.catch(() => {
360
+ if (viewFetched === fetched) viewFetched = void 0;
361
+ });
362
+ }
363
+ return viewFetched;
364
+ },
365
+ toStart() {
366
+ if (!starts.length && !missions.length) return void 0;
367
+ return (world, context) => {
368
+ const { map } = context;
369
+ const key = map && keyOfName.get(map.name);
370
+ const played = map ? missions.filter(({ maps: plays }) => plays.some((name) => sameName(name, map.name) || key !== void 0 && sameName(name, key))) : [];
371
+ return inOrder([...starts.map((run) => () => run(world, context)), ...played.map(({ mission }) => () => mission.start(world, context))]);
372
+ };
373
+ },
374
+ toMaps: () => maps,
375
+ async loadMap(name) {
376
+ const names = Object.keys(maps);
377
+ const asked = name ?? names[0];
378
+ if (asked === void 0) throw new Error(`The game "${id}" has no maps: give it some with game.maps(…)`);
379
+ const map = maps[asked];
380
+ if (!map) throw new Error(`The game "${id}" has no map "${asked}": its maps are ${names.join(", ")}`);
381
+ return structuredClone(typeof map === "function" ? await map() : map);
382
+ }
383
+ };
384
+ return game;
385
+ }
386
+ /**
387
+ * A game's module's new version, taken while it runs (hot reload), as `hotRules` takes a module's: at the end of the
388
+ * module that makes the game, the call to Vite written out as it is (Vite finds a module that takes its own new
389
+ * versions by it):
390
+ *
391
+ * if (import.meta.hot) import.meta.hot.accept((module) => hotGame(import.meta.hot, game, module?.game))
392
+ *
393
+ * The rules the hosts were given are made the new version's in place (`hotRules`); the view, a module of its own, takes
394
+ * its own (the client's `hotView`). What does not go loads the page again
395
+ *
396
+ * @public
397
+ */
398
+ function hotGame(hot, current, next) {
399
+ if (!isGame(next)) return hot?.invalidate(`${current.id}: its module does not give the game as it did`);
400
+ hotRules(hot, current.toRules(), next.toRules());
401
+ }
402
+ //#endregion
403
+ export { createGame, hotGame, isGame, rulesOf, startOf };
404
+
405
+ //# sourceMappingURL=createGame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createGame.js","names":[],"sources":["../src/createGame.ts"],"sourcesContent":["/*\n * One root object a game is made of (E2E plan AP4): `createGame({ id, name })` gives a `Game` that everything of the\n * game is registered on (its units, abilities, systems, hooks, listeners, missions, maps and its view, fetched as it is\n * needed), and that every host takes (`testWorld`, `startServer`, `mapMode`; the client's `launch`, `startApp`,\n * `appScenes`; the editor's `openEditor`). What it makes is the module underneath (`toRules()`), the full API there as\n * before: a host that is given a `Rules` plays that the same.\n */\nimport type { AbilityDef, BuffDef, ItemDef, ResourceDef, StatDef, UnitTypeDef, UpgradeDef } from './defs'\nimport type { AreaDef } from './areas'\nimport type { BrainDef } from './ai/brain'\nimport type { CellLayerDef } from './cellLayers'\nimport type { CommandDef } from './commands'\nimport { type Component, type ComponentOptions, defineComponent } from './components'\nimport type { EffectType } from './abilities/effects'\nimport { defineListener, type EventKey } from './events'\nimport type { FormationDef } from './formation'\nimport type { Rules } from './game'\nimport type { GameFileDef } from './gameFiles'\nimport type { GamePack } from './packs/pack'\nimport type { HookDef, HookHandler, HookKey, HookName } from './hooks'\nimport type { HotContext } from './hotReload'\nimport { hotRules, onNewGameVersion, replaceIn } from './hotReload'\nimport type { GameMap } from './map'\nimport type { ObjectiveDef } from './objectives'\nimport type { PlayerId } from './entity'\nimport type { PrefabDef } from './prefabs'\nimport type { RaceDef } from './races'\nimport type { OrderBehavior, SystemDef } from './registry'\nimport type { RuleSettingsInit } from './rules'\nimport type { RulesProblem } from './rulesCheck'\nimport { defineSequence, type SequenceDef, type Step } from './sequences'\nimport type { Targeting } from './targeting'\nimport type { TileDef } from './tiles'\nimport { defineTimer, type TimerDef, type TimerInfo } from './timers'\nimport type { TunableDef } from './tunables'\nimport type { World } from './world'\n\n/**\n * What a game's start is told (`Game.onStart`): the map its world was made from, the player at the screen (in a page),\n * the lobby's settings (on a server), and whether the world is new (`fresh`) or loaded from a save, which has\n * everything a start gives already. Each host says what it knows; the rest is left out\n *\n * @public\n */\nexport interface GameStartContext {\n\t/** The map the world was made from; none for a world made in code */\n\tmap?: GameMap\n\t/** The player at the screen, in a page */\n\tplayer?: PlayerId\n\t/** What the lobby set, on a server */\n\tsettings?: Record<string, string>\n\t/** Whether the world is new: false for one loaded from a save. True when left out */\n\tfresh?: boolean\n}\n\n/**\n * What a game does once a world is made, before anyone plays (`Game.onStart`, a mission's `onStart`): computer\n * players seated, a mission given, the first wave sent\n *\n * @public\n */\nexport type GameStart = (world: World, context: GameStartContext) => void | Promise<void>\n\n/**\n * A game's maps by name (`Game.maps`): each the map, or what fetches it as it is first asked for (`mapsFrom` of a lazy\n * glob), so that a page carries none of a map it does not open\n *\n * @public\n */\nexport type GameMaps = Readonly<Record<string, GameMap | (() => Promise<GameMap>)>>\n\n/**\n * What a game is made with (`createGame`): its id and name, and any field of the module underneath (`Rules`) said at\n * once: a whole `Rules` is a game too (`createGame(rules)`). What is registered on the game after comes after what is\n * given here\n *\n * @public\n */\nexport interface GameInit extends Partial<Rules> {\n\t/** The game's id, which a save, a map (`GameMap.game`) and a server know it by */\n\tid: string\n\t/** What the player sees the game called */\n\tname: string\n\t/**\n\t * Packs of content to play it with in a page, by URL (`'/packs/gnomes/pack.json'`): fetched as a game of it is got\n\t * ready, before its world is made, and composed in this order (the client's `mergePacks`). A server plays its own\n\t * (`readPacks`). None when left out\n\t */\n\tcontentPacks?: readonly string[]\n\t/**\n\t * What is done, as its view is fetched in a page, about a view that names what the rules do not have (the client's\n\t * `checkGame`): a warning for each when left out, an error with all of them (`'throw'`), or nothing (`false`)\n\t */\n\tcheckView?: 'warn' | 'throw' | false\n}\n\n/**\n * Where a listener or a hook's handler registered on a game or a mission goes by: an id of its own, in the place of the\n * one made for it (`<game>.on.<event>.<n>`, `<game>.<mission>.before.<hook>.<n>`), and a priority for a hook (lower\n * runs first: `before` is -1 and `after` 1 when left out, the engine's own handlers 0)\n *\n * @public\n */\nexport interface HandlerOptions {\n\t/** Its id, under the game's (or the mission's): `'gate'` is `<game>.gate`. Made for it when left out */\n\tid?: string\n\t/** A hook handler's priority: lower runs first. -1 for `before`, 1 for `after` when left out */\n\tpriority?: number\n}\n\n/**\n * What a mission registers its parts with (`Game.mission`): each part's id is made of the game's, the mission's and its\n * own (`'raze'` in the mission `homecoming` of `my-game` is `my-game.homecoming.raze`), and the parts go into the game's\n * rules, so that a save finds them by those ids. Its `onStart` runs where the world's map is one it `plays`, or as it is\n * `start`ed\n *\n * @public\n */\nexport interface Mission {\n\t/** Its id, the game's and its own: `my-game.homecoming` */\n\treadonly id: string\n\t/** The id of a part of it, by its own name: `my-game.homecoming.raze` for `'raze'` */\n\tidOf(name: string): string\n\t/** An objective of the mission (`defineObjective`), its id made of the mission's */\n\tobjective(def: ObjectiveDef): ObjectiveDef\n\t/** A sequence of steps of the mission (`defineSequence`), its id made of the mission's, listed in the rules */\n\tsequence<D = undefined>(def: { id: string; steps: (Step<D> | readonly Step<D>[])[] }): SequenceDef<D>\n\t/** A timer of the mission (`defineTimer`), its id made of the mission's, listed in the rules */\n\ttimer<T = undefined>(def: { id: string; run: (world: World, data: T, timer: TimerInfo) => void }): TimerDef<T>\n\t/** State the mission keeps (`defineComponent`), its id made of the mission's, listed in the rules */\n\tcomponent<T, S = T>(def: { id: string } & ComponentOptions<T, S>): Component<T, S>\n\t/** A part of the map the mission watches (`AreaDef`), its id made of the mission's, listed in the rules */\n\tarea(def: AreaDef): AreaDef\n\t/** How the mission reacts to an event: a listener of the rules (`defineListener`), its id under the mission's */\n\ton<T>(event: EventKey<T>, run: (world: World, payload: T) => void, options?: HandlerOptions): Mission\n\t/** A handler of a hook that runs before the engine's own (priority -1), its id under the mission's */\n\tbefore<K extends HookName>(hook: K, run: HookHandler<K>, options?: HandlerOptions): Mission\n\t/** A handler of a game's own hook (`HookKey`) that runs before the rest, its id under the mission's */\n\tbefore<T>(hook: HookKey<T>, run: (world: World, event: T) => void, options?: HandlerOptions): Mission\n\t/** A handler of a hook that runs after the engine's own (priority 1), its id under the mission's */\n\tafter<K extends HookName>(hook: K, run: HookHandler<K>, options?: HandlerOptions): Mission\n\t/** A handler of a game's own hook (`HookKey`) that runs after the rest, its id under the mission's */\n\tafter<T>(hook: HookKey<T>, run: (world: World, event: T) => void, options?: HandlerOptions): Mission\n\t/** What the mission does as a world of it starts: its objectives given, its sequences started (`fresh` says whether to) */\n\tonStart(run: GameStart): Mission\n\t/** The maps it is played on, by their name (`GameMap.name`) or their name in `Game.maps`: a world made from one starts it */\n\tplays(...maps: string[]): Mission\n\t/** Starts it on a world: its `onStart` in the order given. What a campaign's scene calls, knowing whether the world is new */\n\tstart(world: World, context?: GameStartContext): void | Promise<void>\n}\n\n/**\n * A game: one object everything of it is registered on, which every host takes (`createGame`). Its rules are made\n * from what it holds (`toRules()`, the module underneath that a server, a test and a worker run); its view is fetched as\n * a page first needs it (`view(() => import('./view'))`, `toView()`), so that the rules are read where nothing draws\n * (a server, a test) without the client. Each method that registers a definition gives it back\n *\n * export const game = createGame({ id: 'td', name: 'Tower defense' })\n * export const archer = game.unit({ id: 'archer', name: 'Archer', kind: 'unit', stats: { health: 200 } })\n * game.on(entityDied, (world, { entity }) => { … })\n * game.onStart((world, { map }) => { … })\n * game.maps(mapsFrom(import.meta.glob('./maps/*.vgmap.json', { import: 'default' })))\n * game.view(() => import('./view'))\n *\n * @public\n */\nexport interface Game<V = unknown> {\n\t/** The game's id (`Rules.id`): what a save, a map, a replay and a server call it by */\n\treadonly id: string\n\t/** What the player sees the game called (`Rules.name`) */\n\treadonly name: string\n\t/** Packs of content to play it with in a page, by URL (`GameInit.contentPacks`) */\n\treadonly contentPacks: readonly string[]\n\t/** What a page does about a view that does not fit the rules as it fetches it (`GameInit.checkView`) */\n\treadonly checkView: 'warn' | 'throw' | false\n\t/** Whether a view was given (`view`): a game without one has rules alone, for a server or a test */\n\treadonly hasView: boolean\n\t/** A unit type (`UnitTypeDef`), building or resource alike */\n\tunit<T extends UnitTypeDef>(def: T): T\n\t/** An ability (`AbilityDef`) */\n\tability<T extends AbilityDef>(def: T): T\n\t/** A buff (`BuffDef`) */\n\tbuff<T extends BuffDef>(def: T): T\n\t/** An item (`ItemDef`) */\n\titem<T extends ItemDef>(def: T): T\n\t/** An upgrade (`UpgradeDef`) */\n\tupgrade<T extends UpgradeDef>(def: T): T\n\t/** A side players can play (`RaceDef`) */\n\trace<T extends RaceDef>(def: T): T\n\t/** What players have amounts of and pay with (`ResourceDef`) */\n\tresource<T extends ResourceDef>(def: T): T\n\t/** A stat of the game's own (`StatDef`) */\n\tstat<T extends StatDef>(def: T): T\n\t/** A system of the game's own (`SystemDef`): after the core ones unless it says a phase; one named as a core one takes its place */\n\tsystem<T extends SystemDef>(def: T): T\n\t/** An order type (`OrderBehavior`), or one in the place of a core one of its type */\n\torder<T extends OrderBehavior>(def: T): T\n\t/** State of its own (`defineComponent`), listed so that a world, a save and a snapshot find it */\n\tcomponent<T extends Component<any, any>>(component: T): T\n\t/** A command of its own (`defineCommand`), or one in the place of a core one */\n\tcommand<T extends CommandDef>(def: T): T\n\t/** An event of its own (`defineEvent`), listed so that a world finds it */\n\tevent<T extends EventKey<any>>(key: T): T\n\t/** A part of the map the rules watch (`AreaDef`) */\n\tarea<T extends AreaDef>(def: T): T\n\t/** A group of things spawned as one (`definePrefab`) */\n\tprefab<T extends PrefabDef>(def: T): T\n\t/** Something set to go off later (`defineTimer`) */\n\ttimer<T extends TimerDef<any>>(def: T): T\n\t/** A script of steps (`defineSequence`) */\n\tsequence<T extends SequenceDef<any>>(def: T): T\n\t/** A file of its own data its rules read (`defineGameFile`) */\n\tfile<T extends GameFileDef<any>>(def: T): T\n\t/** A brain of its computer players (`defineBrain`): the first given is what a seat that names none gets */\n\tbrain<T extends BrainDef>(def: T): T\n\t/** What the ground can be painted with (`TileDef`), in order */\n\ttile<T extends TileDef>(def: T): T\n\t/** A type of effect of its own (`defineEffect`), or one in the place of the engine's of its type */\n\teffect<T extends EffectType>(def: T): T\n\t/** A way of aiming of its own (`defineTargeting`) */\n\ttargeting<T extends Targeting>(def: T): T\n\t/** A formation of its own (`FormationDef`) */\n\tformation<T extends FormationDef>(def: T): T\n\t/** A number of its rules to tune while it plays (`defineTunable`) */\n\ttunable<T extends TunableDef>(def: T): T\n\t/** A layer of cells of its own (`CellLayerDef`) */\n\tcellLayer<T extends CellLayerDef>(def: T): T\n\t/** A part of the rules it opts into (`GamePack`: `heroesPack()`), before its own */\n\tpack(pack: GamePack): Game<V>\n\t/** Its numbers that are not about any one unit (`RuleSettingsInit`), laid over what was said before, group by group */\n\tsettings(settings: RuleSettingsInit): Game<V>\n\t/** How the game reacts to an event, the engine's or its own: a listener (`defineListener`), its id made for it */\n\ton<T>(event: EventKey<T>, run: (world: World, payload: T) => void, options?: HandlerOptions): Game<V>\n\t/** A handler of a hook that runs before the engine's own (priority -1): one that may say no (`event.cancel()`) */\n\tbefore<K extends HookName>(hook: K, run: HookHandler<K>, options?: HandlerOptions): Game<V>\n\t/** A handler of a game's own hook (`HookKey`) that runs before the rest */\n\tbefore<T>(hook: HookKey<T>, run: (world: World, event: T) => void, options?: HandlerOptions): Game<V>\n\t/** A handler of a hook that runs after the engine's own (priority 1): one that reads or changes what they made of it */\n\tafter<K extends HookName>(hook: K, run: HookHandler<K>, options?: HandlerOptions): Game<V>\n\t/** A handler of a game's own hook (`HookKey`) that runs after the rest */\n\tafter<T>(hook: HookKey<T>, run: (world: World, event: T) => void, options?: HandlerOptions): Game<V>\n\t/** What the game does once a world is made, before anyone plays; each given runs, in order, before a mission's */\n\tonStart(run: GameStart): Game<V>\n\t/** A mission: its parts registered through `setup` with ids made of the game's and the mission's (`Mission`) */\n\tmission(id: string, setup: (mission: Mission) => void): Mission\n\t/** Its maps by name, laid over those given before; the first is the one a game is on when nothing says which */\n\tmaps(maps: GameMaps): Game<V>\n\t/**\n\t * Its view (how it looks and sounds: the client's `GameView`), or what fetches it as a page first needs it:\n\t * `() => import('./view')` (a module whose `view` or `default` is the view). Given so, nothing of the client is part\n\t * of what imports the game, which a server and a test do\n\t */\n\tview(view: V | (() => Promise<unknown>)): Game<V>\n\t/**\n\t * What does not fit: the rules against themselves (`checkRules`), ids given twice among what was registered (one\n\t * takes the other's place unseen), and each map (fetched where it is lazy) against the rules: a type it places that\n\t * no unit type is, a map of another game. A save or a map naming an id that nothing registered is what this finds\n\t * before it is played\n\t */\n\tcheck(): Promise<RulesProblem[]>\n\t/**\n\t * The module underneath (`Rules`): what the hosts run. The same object each time; what is registered after it was\n\t * made is put into it in place\n\t */\n\ttoRules(): Rules\n\t/** The view, fetched the first time it is asked for. Throws when none was given */\n\ttoView(): Promise<V>\n\t/** Its start: the `onStart`s given, then the mission whose map the world was made from. None when it has neither */\n\ttoStart(): GameStart | undefined\n\t/** Its maps by name, as given (`maps`) */\n\ttoMaps(): GameMaps\n\t/** A map of it by name (the first when left out), fetched where it is lazy, as a copy: a game changes nothing of the next one's */\n\tloadMap(name?: string): Promise<GameMap>\n}\n\n/** What marks a game made by `createGame` */\nconst GAME = Symbol.for('@v12-engine/engine/game')\n\n/**\n * Whether something is a game made by `createGame`, rather than the module underneath (`Rules`)\n *\n * @public\n */\nexport function isGame(value: unknown): value is Game<unknown> {\n\treturn !!value && typeof value === 'object' && (value as Record<symbol, unknown>)[GAME] === true\n}\n\n/**\n * The module underneath what a host is given: a game's (`toRules()`), or the module itself\n *\n * @beta\n */\nexport function rulesOf(game: Game<unknown> | Rules): Rules {\n\treturn isGame(game) ? game.toRules() : game\n}\n\n/**\n * The start of what a host is given, where it says none of its own: a game's (`toStart()`); a module has none\n *\n * @beta\n */\nexport function startOf(game: Game<unknown> | Rules): GameStart | undefined {\n\treturn isGame(game) ? game.toStart() : undefined\n}\n\n/** The fields of a module that are lists a game registers into, by the method that does */\nconst LISTS = {\n\tunit: 'units',\n\tability: 'abilities',\n\tbuff: 'buffs',\n\titem: 'items',\n\tupgrade: 'upgrades',\n\trace: 'races',\n\tresource: 'resources',\n\tstat: 'stats',\n\tsystem: 'systems',\n\torder: 'orders',\n\tcomponent: 'components',\n\tcommand: 'commands',\n\tevent: 'events',\n\tarea: 'areas',\n\tprefab: 'prefabs',\n\ttimer: 'timers',\n\tsequence: 'sequences',\n\tfile: 'files',\n\tbrain: 'brains',\n\ttile: 'tiles',\n\teffect: 'effects',\n\ttargeting: 'targetings',\n\tformation: 'formations',\n\ttunable: 'tunables',\n\tcellLayer: 'cellLayers',\n\tpack: 'packs',\n\thook: 'hooks',\n\tlistener: 'listeners'\n} as const satisfies Record<string, keyof Rules>\n\ntype ListField = (typeof LISTS)[keyof typeof LISTS]\n\n/**\n * Runs each in order, each after the one before has settled: at once, as long as none gives a promise (a start that is\n * plain code is over when it returns, as a host that does not wait for it expects)\n */\nfunction inOrder(runs: readonly (() => void | Promise<void>)[]): void | Promise<void> {\n\tlet next = 0\n\tconst go = (): void | Promise<void> => {\n\t\twhile (next < runs.length) {\n\t\t\tconst made = runs[next++]()\n\t\t\tif (made && typeof (made as Promise<void>).then === 'function') return (made as Promise<void>).then(go)\n\t\t}\n\t}\n\treturn go()\n}\n\n/** The same name, written otherwise: `Home stead`, `homestead` and `home-stead` are one */\nconst sameName = (a: string, b: string) => a.toLowerCase().replace(/[^a-z0-9]/g, '') === b.toLowerCase().replace(/[^a-z0-9]/g, '')\n\n/**\n * Makes a game: one object its units, abilities, systems, hooks and listeners, missions, maps and view are registered\n * on, which every host takes (`Game`). `init` is its id and name, and any field of the module underneath said at once:\n * `createGame(rules)` makes a game of a module written whole\n *\n * @public\n */\nexport function createGame<V = unknown>(init: GameInit): Game<V> {\n\tconst { contentPacks = [], checkView = 'warn', id, name } = init\n\tif (!id) throw new Error('createGame: a game needs an id')\n\tconst added = new Map<ListField, unknown[]>()\n\t/** The settings given by `settings()`, laid over the module's own as the rules are made */\n\tlet settings: Record<string, unknown> = {}\n\tconst starts: GameStart[] = []\n\tconst missions: Array<{ mission: Mission; maps: string[] }> = []\n\tlet maps: Record<string, GameMap | (() => Promise<GameMap>)> = {}\n\tlet viewGiven: V | (() => Promise<unknown>) | undefined\n\tlet hasView = false\n\tlet viewFetched: Promise<V> | undefined\n\tlet built: Rules | undefined\n\tlet stale = false\n\t/** The name in `maps` of each map read, by its own name (`GameMap.name`) */\n\tconst keyOfName = new Map<string, string>()\n\t/**\n\t * The maps given as loaders (`LazyMaps`) that have been fetched: among the game's maps (`Rules.maps`) from then on, so\n\t * that a save or a server's welcome of a game on one keeps only what changed of its ground, as of a map given whole\n\t */\n\tconst fetched: GameMap[] = []\n\t/** How many handlers each id made for one has been given, so that each is its own */\n\tconst counts = new Map<string, number>()\n\n\tconst add = <T>(field: ListField, def: T): T => {\n\t\tconst list = added.get(field) ?? []\n\t\tlist.push(def)\n\t\tadded.set(field, list)\n\t\tstale = true\n\t\treturn def\n\t}\n\t/** An id made for a handler that was given none: `<under>.<what>.<name>.<n>` */\n\tconst madeId = (under: string, what: string, name: string) => {\n\t\tconst key = `${under}.${what}.${name}`\n\t\tconst n = (counts.get(key) ?? 0) + 1\n\t\tcounts.set(key, n)\n\t\treturn n === 1 ? key : `${key}.${n}`\n\t}\n\tconst hookName = (hook: unknown) => (typeof hook === 'string' ? hook : (hook as { id: string }).id)\n\tconst listen = (under: string, event: EventKey<any>, run: (world: World, payload: any) => void, options?: HandlerOptions) =>\n\t\tadd('listeners', defineListener({ id: options?.id ? `${under}.${options.id}` : madeId(under, 'on', String(event.id)), event, run }))\n\tconst hook = (under: string, when: 'before' | 'after', name: unknown, run: (world: World, event: any) => void, options?: HandlerOptions) =>\n\t\tadd<HookDef>('hooks', {\n\t\t\thook: name as HookDef['hook'],\n\t\t\tid: options?.id ? `${under}.${options.id}` : madeId(under, when, hookName(name)),\n\t\t\tpriority: options?.priority ?? (when === 'before' ? -1 : 1),\n\t\t\trun\n\t\t})\n\n\t/**\n\t * The module, made of what it was given and what was registered since. What it was given is read as it is now: a\n\t * module given whole and taken anew in place while it runs (`hotRules` on it, hot reload) is in the next one made\n\t */\n\tconst build = (): Rules => {\n\t\tconst { contentPacks: _packs, checkView: _check, ...given } = init\n\t\tconst rules: Rules = { ...given, units: [...(given.units ?? [])] } as Rules\n\t\tconst into = rules as unknown as Record<string, unknown[] | undefined>\n\t\tfor (const [field, list] of added) into[field] = [...(into[field] ?? []), ...list]\n\t\tif (Object.keys(settings).length) {\n\t\t\tconst merged: Record<string, unknown> = { ...given.settings }\n\t\t\tfor (const [key, value] of Object.entries(settings)) {\n\t\t\t\tconst was = merged[key]\n\t\t\t\tmerged[key] = was && value && typeof was === 'object' && typeof value === 'object' && !Array.isArray(value) ? { ...was, ...value } : value\n\t\t\t}\n\t\t\trules.settings = merged as RuleSettingsInit\n\t\t}\n\t\tconst loaded = [...Object.values(maps).filter((map): map is GameMap => typeof map !== 'function'), ...fetched]\n\t\tif (!given.maps && loaded.length) rules.maps = loaded\n\t\treturn rules\n\t}\n\n\tconst game: Game<V> & { [GAME]: true } = {\n\t\t[GAME]: true,\n\t\tid,\n\t\tname,\n\t\tcontentPacks: [...contentPacks],\n\t\tcheckView,\n\t\tget hasView() {\n\t\t\treturn hasView\n\t\t},\n\t\tunit: (def) => add('units', def),\n\t\tability: (def) => add('abilities', def),\n\t\tbuff: (def) => add('buffs', def),\n\t\titem: (def) => add('items', def),\n\t\tupgrade: (def) => add('upgrades', def),\n\t\trace: (def) => add('races', def),\n\t\tresource: (def) => add('resources', def),\n\t\tstat: (def) => add('stats', def),\n\t\tsystem: (def) => add('systems', def),\n\t\torder: (def) => add('orders', def),\n\t\tcomponent: (component) => add('components', component),\n\t\tcommand: (def) => add('commands', def),\n\t\tevent: (key) => add('events', key),\n\t\tarea: (def) => add('areas', def),\n\t\tprefab: (def) => add('prefabs', def),\n\t\ttimer: (def) => add('timers', def),\n\t\tsequence: (def) => add('sequences', def),\n\t\tfile: (def) => add('files', def),\n\t\tbrain: (def) => add('brains', def),\n\t\ttile: (def) => add('tiles', def),\n\t\teffect: (def) => add('effects', def),\n\t\ttargeting: (def) => add('targetings', def),\n\t\tformation: (def) => add('formations', def),\n\t\ttunable: (def) => add('tunables', def),\n\t\tcellLayer: (def) => add('cellLayers', def),\n\t\tpack(pack) {\n\t\t\tadd('packs', pack)\n\t\t\treturn game\n\t\t},\n\t\tsettings(more) {\n\t\t\tconst next: Record<string, unknown> = { ...settings }\n\t\t\tfor (const [key, value] of Object.entries(more)) {\n\t\t\t\tconst was = next[key]\n\t\t\t\tnext[key] = was && value && typeof was === 'object' && typeof value === 'object' && !Array.isArray(value) ? { ...was, ...value } : value\n\t\t\t}\n\t\t\tsettings = next\n\t\t\tstale = true\n\t\t\treturn game\n\t\t},\n\t\ton(event, run, options) {\n\t\t\tlisten(id, event, run, options)\n\t\t\treturn game\n\t\t},\n\t\tbefore(name: unknown, run: (world: World, event: any) => void, options?: HandlerOptions) {\n\t\t\thook(id, 'before', name, run, options)\n\t\t\treturn game\n\t\t},\n\t\tafter(name: unknown, run: (world: World, event: any) => void, options?: HandlerOptions) {\n\t\t\thook(id, 'after', name, run, options)\n\t\t\treturn game\n\t\t},\n\t\tonStart(run) {\n\t\t\tstarts.push(run)\n\t\t\treturn game\n\t\t},\n\t\tmission(missionId, setup) {\n\t\t\tconst prefix = `${id}.${missionId}`\n\t\t\tif (missions.some((each) => each.mission.id === prefix)) throw new Error(`createGame: the mission \"${missionId}\" is given twice`)\n\t\t\tconst idOf = (name: string) => `${prefix}.${name}`\n\t\t\tconst own: GameStart[] = []\n\t\t\tconst plays: string[] = []\n\t\t\tconst mission: Mission = {\n\t\t\t\tid: prefix,\n\t\t\t\tidOf,\n\t\t\t\tobjective: (def) => ({ ...def, id: idOf(def.id) }),\n\t\t\t\tsequence: (def) => add('sequences', defineSequence({ ...def, id: idOf(def.id) })),\n\t\t\t\ttimer: (def) => add('timers', defineTimer({ ...def, id: idOf(def.id) })),\n\t\t\t\tcomponent: (def) => add('components', defineComponent({ ...def, id: idOf(def.id) })),\n\t\t\t\tarea: (def) => add('areas', { ...def, id: idOf(def.id) }),\n\t\t\t\ton(event, run, options) {\n\t\t\t\t\tlisten(prefix, event, run, options)\n\t\t\t\t\treturn mission\n\t\t\t\t},\n\t\t\t\tbefore(name: unknown, run: (world: World, event: any) => void, options?: HandlerOptions) {\n\t\t\t\t\thook(prefix, 'before', name, run, options)\n\t\t\t\t\treturn mission\n\t\t\t\t},\n\t\t\t\tafter(name: unknown, run: (world: World, event: any) => void, options?: HandlerOptions) {\n\t\t\t\t\thook(prefix, 'after', name, run, options)\n\t\t\t\t\treturn mission\n\t\t\t\t},\n\t\t\t\tonStart(run) {\n\t\t\t\t\town.push(run)\n\t\t\t\t\treturn mission\n\t\t\t\t},\n\t\t\t\tplays(...names) {\n\t\t\t\t\tplays.push(...names)\n\t\t\t\t\treturn mission\n\t\t\t\t},\n\t\t\t\tstart: (world, context = {}) => inOrder(own.map((run) => () => run(world, { fresh: true, ...context })))\n\t\t\t}\n\t\t\tsetup(mission)\n\t\t\tmissions.push({ mission, maps: plays })\n\t\t\treturn mission\n\t\t},\n\t\tmaps(more) {\n\t\t\tconst wrapped: Record<string, GameMap | (() => Promise<GameMap>)> = {}\n\t\t\tfor (const [key, map] of Object.entries(more)) {\n\t\t\t\tif (typeof map !== 'function') {\n\t\t\t\t\tkeyOfName.set(map.name, key)\n\t\t\t\t\twrapped[key] = map\n\t\t\t\t} else\n\t\t\t\t\t// a map fetched is known by its name from then on, for the start to find its mission by\n\t\t\t\t\twrapped[key] = () =>\n\t\t\t\t\t\tmap().then((read) => {\n\t\t\t\t\t\t\tkeyOfName.set(read.name, key)\n\t\t\t\t\t\t\tif (!fetched.some((other) => other.name === read.name)) {\n\t\t\t\t\t\t\t\tfetched.push(read)\n\t\t\t\t\t\t\t\t// the rules made already (what the hosts hold) know it in place, as the next made will\n\t\t\t\t\t\t\t\tif (built && !init.maps) built.maps = [...(built.maps ?? []), read]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn read\n\t\t\t\t\t\t})\n\t\t\t}\n\t\t\tmaps = { ...maps, ...wrapped }\n\t\t\tstale = true\n\t\t\treturn game\n\t\t},\n\t\tview(view) {\n\t\t\tviewGiven = view\n\t\t\thasView = true\n\t\t\tviewFetched = undefined\n\t\t\treturn game\n\t\t},\n\t\tasync check() {\n\t\t\tconst rules = game.toRules()\n\t\t\t// (the checks fetched as they are asked for: a page that imports the game carries none of them)\n\t\t\tconst { checkRules } = await import('./rulesCheck')\n\t\t\tconst problems: RulesProblem[] = [...checkRules(rules)]\n\t\t\t// what was registered twice: the second takes the first's place, and nothing says so\n\t\t\tfor (const [field, list] of added) {\n\t\t\t\tconst seen = new Set<string>()\n\t\t\t\tfor (const def of list) {\n\t\t\t\t\tconst id = (def as { id?: unknown; type?: unknown }).id ?? (def as { type?: unknown }).type\n\t\t\t\t\tif (typeof id !== 'string') continue\n\t\t\t\t\tif (seen.has(id)) problems.push({ level: 'error', where: field, id, message: `${field} has \"${id}\" twice: the second takes the first's place` })\n\t\t\t\t\tseen.add(id)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst units = new Set(rules.units.map((unit) => unit.id))\n\t\t\tfor (const name of Object.keys(maps)) {\n\t\t\t\tlet map: GameMap\n\t\t\t\ttry {\n\t\t\t\t\tmap = await game.loadMap(name)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tproblems.push({ level: 'error', where: `maps.${name}`, id: name, message: `The map \"${name}\" could not be read: ${String(error)}` })\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (map.game !== undefined && map.game !== rules.id)\n\t\t\t\t\tproblems.push({ level: 'warning', where: `maps.${name}`, id: map.game, message: `The map \"${name}\" says it is of the game \"${map.game}\", not \"${rules.id}\"` })\n\t\t\t\tconst told = new Set<string>()\n\t\t\t\tfor (const object of map.objects) {\n\t\t\t\t\tif (units.has(object.type) || told.has(object.type)) continue\n\t\t\t\t\ttold.add(object.type)\n\t\t\t\t\tproblems.push({\n\t\t\t\t\t\tlevel: 'error',\n\t\t\t\t\t\twhere: `maps.${name}.objects`,\n\t\t\t\t\t\tid: object.type,\n\t\t\t\t\t\tmessage: `The map \"${name}\" places a \"${object.type}\", which no unit type of the game is`\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn problems\n\t\t},\n\t\ttoRules() {\n\t\t\tif (!built) {\n\t\t\t\tbuilt = build()\n\t\t\t\t// the module it was given taken anew in place (hot reload, `hotRules`): the rules the hosts hold take it too\n\t\t\t\tonNewGameVersion((current) => {\n\t\t\t\t\tif (current === init && built) hotRules(undefined, built, build())\n\t\t\t\t})\n\t\t\t} else if (stale) replaceIn(built, build())\n\t\t\tstale = false\n\t\t\treturn built\n\t\t},\n\t\ttoView() {\n\t\t\tif (!hasView) return Promise.reject(new Error(`The game \"${id}\" has no view: give it one with game.view(…)`))\n\t\t\tif (!viewFetched) {\n\t\t\t\tconst view = viewGiven\n\t\t\t\tconst fetched =\n\t\t\t\t\ttypeof view === 'function'\n\t\t\t\t\t\t? (view as () => Promise<unknown>)().then((module) => {\n\t\t\t\t\t\t\t\tconst read = module as { view?: unknown; default?: unknown } | null\n\t\t\t\t\t\t\t\tif (read && typeof read === 'object' && read.view && typeof read.view === 'object') return read.view as V\n\t\t\t\t\t\t\t\tif (read && typeof read === 'object' && 'default' in read) return read.default as V\n\t\t\t\t\t\t\t\treturn module as V\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: Promise.resolve(view as V)\n\t\t\t\tviewFetched = fetched\n\t\t\t\t// a fetch that failed is tried again the next time it is asked for\n\t\t\t\tfetched.catch(() => {\n\t\t\t\t\tif (viewFetched === fetched) viewFetched = undefined\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn viewFetched\n\t\t},\n\t\ttoStart() {\n\t\t\tif (!starts.length && !missions.length) return undefined\n\t\t\treturn (world, context) => {\n\t\t\t\tconst { map } = context\n\t\t\t\tconst key = map && keyOfName.get(map.name)\n\t\t\t\tconst played = map\n\t\t\t\t\t? missions.filter(({ maps: plays }) => plays.some((name) => sameName(name, map.name) || (key !== undefined && sameName(name, key))))\n\t\t\t\t\t: []\n\t\t\t\treturn inOrder([...starts.map((run) => () => run(world, context)), ...played.map(({ mission }) => () => mission.start(world, context))])\n\t\t\t}\n\t\t},\n\t\ttoMaps: () => maps,\n\t\tasync loadMap(name) {\n\t\t\tconst names = Object.keys(maps)\n\t\t\tconst asked = name ?? names[0]\n\t\t\tif (asked === undefined) throw new Error(`The game \"${id}\" has no maps: give it some with game.maps(…)`)\n\t\t\tconst map = maps[asked]\n\t\t\tif (!map) throw new Error(`The game \"${id}\" has no map \"${asked}\": its maps are ${names.join(', ')}`)\n\t\t\treturn structuredClone(typeof map === 'function' ? await map() : map)\n\t\t}\n\t}\n\treturn game\n}\n\n/**\n * A game's module's new version, taken while it runs (hot reload), as `hotRules` takes a module's: at the end of the\n * module that makes the game, the call to Vite written out as it is (Vite finds a module that takes its own new\n * versions by it):\n *\n * if (import.meta.hot) import.meta.hot.accept((module) => hotGame(import.meta.hot, game, module?.game))\n *\n * The rules the hosts were given are made the new version's in place (`hotRules`); the view, a module of its own, takes\n * its own (the client's `hotView`). What does not go loads the page again\n *\n * @public\n */\nexport function hotGame(hot: HotContext | undefined, current: Game<unknown>, next: unknown): void {\n\tif (!isGame(next)) return hot?.invalidate(`${current.id}: its module does not give the game as it did`)\n\thotRules(hot, current.toRules(), next.toRules())\n}\n"],"mappings":"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"}
package/dist/dashing.d.ts CHANGED
@@ -1,8 +1,24 @@
1
1
  import type { Dash } from './entity';
2
+ /**
3
+ * What everyone who sees a unit on a rush is told of it (`EntityState.components['core.dashing']`), for the screen to
4
+ * draw it by (a trail, the look of the effect that sent it: `AbilityLook.effects`)
5
+ *
6
+ * @beta
7
+ */
8
+ export interface DashSight {
9
+ /** The ability that sent it */
10
+ ability: string;
11
+ /** Which effect of it, by its place in the ability (`effectIndex`), where it is one written there */
12
+ effect?: number;
13
+ /** Dragged by someone (a pull), rather than rushing by itself */
14
+ pulled?: boolean;
15
+ /** Rising on the way: a leap */
16
+ leap?: boolean;
17
+ }
2
18
  /**
3
19
  * An entity on a rush (`Dash`): where it goes, how fast, what it does as it lands. Filed (`index`), for what moves
4
- * those on one
20
+ * those on one; told to everyone who sees it as a `DashSight`
5
21
  *
6
22
  * @beta
7
23
  */
8
- export declare const dashing: import("./components").Component<Dash, Dash>;
24
+ export declare const dashing: import("./components").Component<Dash, DashSight>;
@@ -0,0 +1,41 @@
1
+ import { defineComponent } from "./components.js";
2
+ import { effectRef, resolveEffect } from "./effectRefs.js";
3
+ //#region src/dashing.ts
4
+ /**
5
+ * An entity on a rush (`Dash`): a charge, a leap, a blink that travels. Made by the effect that starts it, taken off
6
+ * as it lands; kept in a save with its effects as where they are in its ability
7
+ */
8
+ /**
9
+ * An entity on a rush (`Dash`): where it goes, how fast, what it does as it lands. Filed (`index`), for what moves
10
+ * those on one; told to everyone who sees it as a `DashSight`
11
+ *
12
+ * @beta
13
+ */
14
+ var dashing = defineComponent({
15
+ id: "core.dashing",
16
+ index: true,
17
+ replicate: "everyone",
18
+ snapshot: (dash) => ({
19
+ ability: dash.ability,
20
+ ...dash.effect !== void 0 && { effect: dash.effect },
21
+ ...dash.pulled && { pulled: true },
22
+ ...dash.height && { leap: true }
23
+ }),
24
+ same: (a, b) => a.ability === b.ability && a.effect === b.effect && a.pulled === b.pulled && a.leap === b.leap,
25
+ refs: (saved) => saved.effects && "path" in saved.effects ? { abilities: [saved.ability] } : {},
26
+ save: (dash, world) => ({
27
+ ...dash,
28
+ effects: effectRef(world.registry, dash.ability, dash.effects)
29
+ }),
30
+ load: (saved, registry) => {
31
+ const dash = saved;
32
+ return {
33
+ ...dash,
34
+ effects: resolveEffect(registry, dash.ability, dash.effects)
35
+ };
36
+ }
37
+ });
38
+ //#endregion
39
+ export { dashing };
40
+
41
+ //# sourceMappingURL=dashing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashing.js","names":[],"sources":["../src/dashing.ts"],"sourcesContent":["/**\n * An entity on a rush (`Dash`): a charge, a leap, a blink that travels. Made by the effect that starts it, taken off\n * as it lands; kept in a save with its effects as where they are in its ability\n */\nimport { defineComponent } from './components'\nimport { effectRef, type EffectRef, resolveEffect } from './effectRefs'\nimport type { Dash } from './entity'\n\n/**\n * What everyone who sees a unit on a rush is told of it (`EntityState.components['core.dashing']`), for the screen to\n * draw it by (a trail, the look of the effect that sent it: `AbilityLook.effects`)\n *\n * @beta\n */\nexport interface DashSight {\n\t/** The ability that sent it */\n\tability: string\n\t/** Which effect of it, by its place in the ability (`effectIndex`), where it is one written there */\n\teffect?: number\n\t/** Dragged by someone (a pull), rather than rushing by itself */\n\tpulled?: boolean\n\t/** Rising on the way: a leap */\n\tleap?: boolean\n}\n\n/**\n * An entity on a rush (`Dash`): where it goes, how fast, what it does as it lands. Filed (`index`), for what moves\n * those on one; told to everyone who sees it as a `DashSight`\n *\n * @beta\n */\nexport const dashing = defineComponent<Dash, DashSight>({\n\tid: 'core.dashing',\n\tindex: true,\n\treplicate: 'everyone',\n\tsnapshot: (dash) => ({\n\t\tability: dash.ability,\n\t\t...(dash.effect !== undefined && { effect: dash.effect }),\n\t\t...(dash.pulled && { pulled: true }),\n\t\t...(dash.height && { leap: true })\n\t}),\n\tsame: (a, b) => a.ability === b.ability && a.effect === b.effect && a.pulled === b.pulled && a.leap === b.leap,\n\t// an effect kept as where it is in its ability: the ability has to be there\n\trefs: (saved) =>\n\t\t(saved as { effects: EffectRef }).effects && 'path' in (saved as { effects: EffectRef }).effects ? { abilities: [(saved as Dash).ability] } : {},\n\tsave: (dash, world) => ({ ...dash, effects: effectRef(world.registry, dash.ability, dash.effects) }),\n\tload: (saved, registry) => {\n\t\tconst dash = saved as Dash & { effects: EffectRef }\n\t\treturn { ...dash, effects: resolveEffect(registry, dash.ability, dash.effects) }\n\t}\n})\n"],"mappings":";;;;;;;;;;;;;AA+BA,IAAa,UAAU,gBAAiC;CACvD,IAAI;CACJ,OAAO;CACP,WAAW;CACX,WAAW,UAAU;EACpB,SAAS,KAAK;EACd,GAAI,KAAK,WAAW,KAAA,KAAa,EAAE,QAAQ,KAAK,OAAO;EACvD,GAAI,KAAK,UAAU,EAAE,QAAQ,KAAK;EAClC,GAAI,KAAK,UAAU,EAAE,MAAM,KAAK;CACjC;CACA,OAAO,GAAG,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE;CAE1G,OAAO,UACL,MAAiC,WAAW,UAAW,MAAiC,UAAU,EAAE,WAAW,CAAE,MAAe,OAAO,EAAE,IAAI,CAAC;CAChJ,OAAO,MAAM,WAAW;EAAE,GAAG;EAAM,SAAS,UAAU,MAAM,UAAU,KAAK,SAAS,KAAK,OAAO;CAAE;CAClG,OAAO,OAAO,aAAa;EAC1B,MAAM,OAAO;EACb,OAAO;GAAE,GAAG;GAAM,SAAS,cAAc,UAAU,KAAK,SAAS,KAAK,OAAO;EAAE;CAChF;AACD,CAAC"}
package/dist/debug.d.ts CHANGED
@@ -8,11 +8,19 @@
8
8
  * @beta
9
9
  */
10
10
  export interface DebugChecks {
11
+ /** Whether `statsOf` is checked against adding the stats up from scratch */
11
12
  stats: boolean;
13
+ /** Whether scenery is checked every tick for having nothing the per-tick systems should see to */
12
14
  scenery: boolean;
15
+ /** Whether `World.index` is checked every tick against the entities */
13
16
  index: boolean;
17
+ /** Whether each snapshot's sight is checked against testing every entity of the world */
14
18
  sight: boolean;
19
+ /** Whether what a snapshot tells of an entity again from last time is checked against describing it anew */
20
+ snapshots: boolean;
21
+ /** Whether replicated events are checked to be plain data that could cross a network */
15
22
  events: boolean;
23
+ /** Whether every think of every computer player's brain is checked against the invariants of `ai/checks.ts` */
16
24
  ai: boolean;
17
25
  }
18
26
  /** The process's: what a world that says nothing starts with */
package/dist/debug.js CHANGED
@@ -1,3 +1,5 @@
1
- import { C as speedCommand, D as winCommand, E as unplaceCommand, No as setDebugChecks, S as spawnPrefabCommand, _ as researchCommand, a as experienceCommand, b as setOwnerCommand, c as giveItemCommand, d as killCommand, f as loseCommand, g as redefineCommand, h as placeCommand, i as defineDebugCommand, l as groundCommand, m as paintCommand, n as debugCommands, o as exploreCommand, p as mapObjectCommand, s as giveCommand, t as cheatCommand, u as hourCommand, v as revealCommand, w as teleportCommand, x as spawnCommand, y as setLevelCommand } from "./debugCommands-CzjrSm66.js";
2
- import { a as summarize, i as setInspected, n as inspect, r as listWorld, t as EventLog } from "./inspect-D9dWHmZ0.js";
3
- export { EventLog, cheatCommand, debugCommands, defineDebugCommand, experienceCommand, exploreCommand, giveCommand, giveItemCommand, groundCommand, hourCommand, inspect, killCommand, listWorld, loseCommand, mapObjectCommand, paintCommand, placeCommand, redefineCommand, researchCommand, revealCommand, setDebugChecks, setInspected, setLevelCommand, setOwnerCommand, spawnCommand, spawnPrefabCommand, speedCommand, summarize, teleportCommand, unplaceCommand, winCommand };
1
+ import { setDebugChecks } from "./debug2.js";
2
+ import { cheatCommand, debugCommands, defineDebugCommand, experienceCommand, exploreCommand, giveCommand, giveItemCommand, groundCommand, hourCommand, killCommand, loseCommand, mapObjectCommand, paintCommand, placeCommand, redefineCommand, researchCommand, revealCommand, setLevelCommand, setOwnerCommand, spawnCommand, spawnPrefabCommand, speedCommand, teleportCommand, unplaceCommand, winCommand } from "./debugCommands.js";
3
+ import { cellStylesCommand, foliageCommand, foliageDebugCommands, windCommand } from "./foliageDebug.js";
4
+ import { EventLog, inspect, listWorld, setInspected, summarize } from "./inspect.js";
5
+ export { EventLog, cellStylesCommand, cheatCommand, debugCommands, defineDebugCommand, experienceCommand, exploreCommand, foliageCommand, foliageDebugCommands, giveCommand, giveItemCommand, groundCommand, hourCommand, inspect, killCommand, listWorld, loseCommand, mapObjectCommand, paintCommand, placeCommand, redefineCommand, researchCommand, revealCommand, setDebugChecks, setInspected, setLevelCommand, setOwnerCommand, spawnCommand, spawnPrefabCommand, speedCommand, summarize, teleportCommand, unplaceCommand, winCommand, windCommand };