@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,134 @@
1
+ import { footprintOf } from "./defs.js";
2
+ //#region src/mapFields.ts
3
+ /**
4
+ * The things of a kind of a game's own on a map (`MapThing`), as the map keeps them: none for a kind it has nothing
5
+ * of. What is kept under that name and is no thing (no id, no place) is left out, so that a file changed by hand breaks
6
+ * no rule that reads it
7
+ *
8
+ * @beta
9
+ */
10
+ function mapThings(map, kind) {
11
+ const kept = map.data[kind];
12
+ if (!Array.isArray(kept)) return [];
13
+ return kept.filter((thing) => typeof thing === "object" && thing !== null && Number.isInteger(thing.id) && Number.isFinite(thing.x) && Number.isFinite(thing.z));
14
+ }
15
+ /**
16
+ * What the starts must reach when a game does not say: what is mined, not what is cut
17
+ *
18
+ * @internal
19
+ */
20
+ var reachedByDefault = (def) => def.kind === "resource" && footprintOf(def).w >= 2;
21
+ /**
22
+ * The heights the ground goes from and to when a game does not say
23
+ *
24
+ * @beta
25
+ */
26
+ var DEFAULT_HEIGHTS = [-4, 16];
27
+ /** The kinds of field that name a thing of the map, by its id */
28
+ var TARGET_FIELDS = [
29
+ "region",
30
+ "point",
31
+ "path"
32
+ ];
33
+ /**
34
+ * Typed help for writing a field
35
+ *
36
+ * @beta
37
+ */
38
+ var defineMapField = (def) => def;
39
+ /** The game's fields: its own (`Rules.editor.fields`) and those of the components it lists (`Component.field`), under the component's id */
40
+ var fieldsOf = (registry) => {
41
+ const own = registry.module?.editor?.fields ?? [];
42
+ let all;
43
+ for (const component of registry.listedComponents()) if (component.field) (all ??= [...own]).push({
44
+ ...component.field,
45
+ id: component.id
46
+ });
47
+ return all ?? own;
48
+ };
49
+ /**
50
+ * The game's fields for a placed object, by the type it is of. None for a type the game does not have
51
+ *
52
+ * @beta
53
+ */
54
+ function objectFields(registry, type) {
55
+ if (!registry.units.has(type)) return [];
56
+ const def = registry.unit(type);
57
+ return fieldsOf(registry).filter((field) => typeof field.for === "function" ? field.for(def) : Array.isArray(field.for) && field.for.includes(type));
58
+ }
59
+ /**
60
+ * The game's fields for a camp
61
+ *
62
+ * @beta
63
+ */
64
+ var campFields = (registry) => fieldsOf(registry).filter((field) => field.for === "camp");
65
+ /**
66
+ * The game's fields for a region
67
+ *
68
+ * @beta
69
+ */
70
+ var regionFields = (registry) => fieldsOf(registry).filter((field) => field.for === "region");
71
+ /**
72
+ * The fields of the map itself, and of its players
73
+ *
74
+ * @beta
75
+ */
76
+ var mapFields = (registry) => fieldsOf(registry).filter((field) => field.for === "map");
77
+ /**
78
+ * The game's fields for players (`for: 'player'`) of a registry, as `MapFieldDef`s
79
+ *
80
+ * @beta
81
+ */
82
+ var playerFields = (registry) => fieldsOf(registry).filter((field) => field.for === "player");
83
+ /**
84
+ * What a choice field can be set to, as values with what each is called
85
+ *
86
+ * @beta
87
+ */
88
+ function fieldOptions(registry, field) {
89
+ return (typeof field.options === "function" ? field.options(registry) : field.options ?? []).map((option) => typeof option === "string" ? {
90
+ value: option,
91
+ label: option
92
+ } : option);
93
+ }
94
+ /** What the fields of something placed are, with what was not set at its default: what the game is handed */
95
+ function fieldValues(fields, data, map) {
96
+ const values = { ...data };
97
+ for (const field of fields) {
98
+ if (values[field.id] === void 0 && field.default !== void 0) values[field.id] = field.default;
99
+ if (map && TARGET_FIELDS.includes(field.kind) && typeof values[field.id] === "number") values[field.id] = targetName(map, field.kind, values[field.id]);
100
+ }
101
+ return values;
102
+ }
103
+ /** The name of a region, a point or a path of a map by its id: undefined for one the map has not (any more) */
104
+ function targetName(map, kind, id) {
105
+ return (kind === "region" ? map.regions : kind === "point" ? map.points : map.paths).find((thing) => thing.id === id)?.name;
106
+ }
107
+ /**
108
+ * The game's fields of an object or a camp of a map, as the game is handed them
109
+ *
110
+ * @internal
111
+ */
112
+ var mapObjectData = (registry, object, map) => fieldValues(objectFields(registry, object.type), object.data, map);
113
+ /**
114
+ * The game's fields of a camp, with the values it kept and the defaults for the rest; what the `mapCamp` hook hands the game
115
+ *
116
+ * @internal
117
+ */
118
+ var mapCampData = (registry, camp, map) => fieldValues(campFields(registry), camp.data, map);
119
+ /**
120
+ * The game's fields of a region, with the values it kept and the defaults for the rest; what the `mapRegion` hook hands the game
121
+ *
122
+ * @internal
123
+ */
124
+ var mapRegionData = (registry, region, map) => fieldValues(regionFields(registry), region.data, map);
125
+ /**
126
+ * The game's fields of a player, with the values it kept and the defaults for the rest; what the game reads as `world.map.player(id).data`
127
+ *
128
+ * @internal
129
+ */
130
+ var mapPlayerData = (registry, player, map) => fieldValues(playerFields(registry), player.data, map);
131
+ //#endregion
132
+ export { DEFAULT_HEIGHTS, TARGET_FIELDS, campFields, defineMapField, fieldOptions, fieldValues, mapCampData, mapFields, mapObjectData, mapPlayerData, mapRegionData, mapThings, objectFields, playerFields, reachedByDefault, regionFields, targetName };
133
+
134
+ //# sourceMappingURL=mapFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapFields.js","names":[],"sources":["../src/mapFields.ts"],"sourcesContent":["import { footprintOf, type UnitTypeDef } from './defs'\nimport type { GameMap, MapCamp, MapObject, MapPlayer, MapRegion } from './map'\nimport type { GameMeasure } from './mapMeasure'\nimport type { Vec2 } from './math'\nimport type { Registry } from './registry'\n\n/**\n * A thing on a map, by its kind and id: what a problem is about, which the editor selects. `thing` is one of a kind of\n * the game's own (`MapThing`), with the kind's name\n *\n * @beta\n */\nexport type MapTarget =\n\t| { object: number }\n\t| { camp: number }\n\t| { region: number }\n\t| { point: number }\n\t| { path: number }\n\t| { doodad: number }\n\t| { light: number }\n\t| { effect: number }\n\t| { decal: number }\n\t| { sound: number }\n\t| { waterfall: number }\n\t| { mistArea: number }\n\t| { weatherArea: number }\n\t| { cloudPatch: number }\n\t| { pictureZone: number }\n\t| { player: number }\n\t| { thing: number; kind: string }\n\n/**\n * A thing of a kind of a game's own on a map: something the game's editor puts down for its rules to read (a spawner,\n * a waypoint, ground kept clear), where the engine's own kinds (objects, camps, regions, points, paths, doodads) do\n * not say it. Kept with the map under the kind's name (`GameMap.data[kind]`, a list of them), which the engine never\n * looks inside: the rules read them (`world.map.things(kind)`, `mapThings`)\n *\n * @beta\n */\nexport interface MapThing {\n\t/** Its own among the things of its kind */\n\tid: number\n\t/** Where the thing stands on the map's x axis, in cells */\n\tx: number\n\t/** Where the thing stands on the map's z axis, in cells */\n\tz: number\n\t/** The way it faces, in radians. 0 when left out */\n\tfacing?: number\n\t/** A name of its own, to find it by: no two things of a map have the same, whatever they are */\n\tname?: string\n\t/** The game's own fields of it, by their ids: what was set, without what is at its default */\n\tdata?: Record<string, unknown>\n}\n\n/**\n * The things of a kind of a game's own on a map (`MapThing`), as the map keeps them: none for a kind it has nothing\n * of. What is kept under that name and is no thing (no id, no place) is left out, so that a file changed by hand breaks\n * no rule that reads it\n *\n * @beta\n */\nexport function mapThings(map: { data: Record<string, unknown> }, kind: string): MapThing[] {\n\tconst kept = map.data[kind]\n\tif (!Array.isArray(kept)) return []\n\treturn kept.filter(\n\t\t(thing): thing is MapThing =>\n\t\t\ttypeof thing === 'object' &&\n\t\t\tthing !== null &&\n\t\t\tNumber.isInteger((thing as MapThing).id) &&\n\t\t\tNumber.isFinite((thing as MapThing).x) &&\n\t\t\tNumber.isFinite((thing as MapThing).z)\n\t)\n}\n\n/**\n * Something wrong with a map, as a game sees it: said before the map is played\n *\n * @beta\n */\nexport interface MapProblem {\n\t/** What is wrong, in words, as the editor and the lobby show it */\n\tmessage: string\n\t/** It cannot be played like this. A warning when left out: it can, but probably should not */\n\terror?: boolean\n\t/** Where on the map it is, for the editor to show */\n\tat?: Vec2\n\t/**\n\t * The rule it breaks, by id (`off-map`, `deep-water`…, or a game's own): what silences it, for a map\n\t * (`GameMap.silence`) or a game (`MapEditorDef.silence`). A game's own check that says none is `game`\n\t */\n\trule?: string\n\t/** What it is about: a click on it in the editor selects it */\n\tabout?: MapTarget\n\t/**\n\t * Where it is shown when it is about something of a panel's rather than the map's (a clip of a cinematic): a click on\n\t * it opens that panel at that entry (`editor.panels.reveal(panel, entry)`, as the search of everything does)\n\t */\n\treveal?: { panel: string; entry: string }\n}\n\n/**\n * What a game brings to the map editor, beyond its units: the fields of its own, what can be scattered, its players,\n * and what it takes for a map to be one of its maps. Each that is decided from something can be given as a function\n *\n * @beta\n */\nexport interface MapEditorDef {\n\t/** Fields of the game's own on what is placed on a map, shown in the inspector (see `defineMapField`) */\n\tfields?: MapFieldDef[]\n\t/**\n\t * Unit types the scatter brush puts down many of at once, like a forest. Resources one cell big when left out:\n\t * trees. What is scattered belongs to nobody\n\t */\n\tscatter?: string[] | ((registry: Registry) => string[])\n\t/** Whether the game has creep camps to place. It does when it has a unit type with a bounty, when left out */\n\tcamps?: boolean\n\t/**\n\t * The players of every map of the game, when the game decides who they are, as a tower defense does: the editor\n\t * shows those and only lets their starts be set. Open slots to add and take away when left out\n\t */\n\tplayers?: MapPlayer[] | ((map: GameMap) => MapPlayer[])\n\t/** A line under the players, saying what the game makes of them: who is the player, who gets a base */\n\tplayersNote?: string\n\t/**\n\t * What is wrong with a map as a map of this game: no start for anyone, no way through. Errors keep it from being\n\t * played from the editor; warnings are said\n\t */\n\tcheck?: (map: GameMap, registry: Registry) => MapProblem[]\n\t/** The editor's checks the game does not want, by their rules' ids (`MapProblem.rule`), for every map of it */\n\tsilence?: string[]\n\t/** What the game measures of a map of its own, for the editor's report (`measureMap`): the length of the road */\n\tmeasure?: (map: GameMap, registry: Registry) => GameMeasure[]\n\t/**\n\t * The palette's groups of unit types, each saying whose what is put down from it is and whether it makes camps.\n\t * Units, heroes, buildings, resources (nobody's) and creeps (the creeps', making camps) when left out\n\t */\n\tpalette?: (registry: Registry) => MapPaletteGroup[]\n\t/**\n\t * What the erase brush can be set to take, besides everything and camps. Units, buildings, resources and trees (a\n\t * resource one cell big) when left out\n\t */\n\terase?: MapEraseKind[]\n\t/**\n\t * What the starts must be able to walk to, which the checks look for (`unreachable`): a resource two cells big or\n\t * more when left out, a gold mine and not a tree\n\t */\n\treach?: (def: UnitTypeDef) => boolean\n\t/** The lowest and the highest the ground is raised to. -4 to 16 when left out */\n\theights?: readonly [number, number]\n\t/**\n\t * Where else the game names a thing of a map (a unit type in its waves, a region in a mission's goals): what the\n\t * editor lists under Used by and selects with Find references, beyond what it finds on the map itself (placed\n\t * objects, camps, random groups, the game's fields, prefabs, cinematics). Given the thing asked about and the map\n\t *\n\t * @beta\n\t */\n\treferences?: (ref: MapRef, map: GameMap, registry: Registry) => MapRefUse[]\n}\n\n/**\n * Something of a game or a map that others name: a unit type, a doodad's model, a prefab, a region, a point or a path\n * (by name), a thing named on the map, a cinematic, a file of the game's\n *\n * @beta\n */\nexport type MapRef =\n\t| { type: string }\n\t| { model: string }\n\t| { prefab: string }\n\t| { region: string }\n\t| { point: string }\n\t| { path: string }\n\t| { name: string }\n\t| { cinematic: string }\n\t| { asset: string }\n\n/**\n * What on the map a use is: what a click on it selects\n *\n * @beta\n */\nexport type MapRefTarget =\n\t| { object: number }\n\t| { camp: number }\n\t| { region: number }\n\t| { point: number }\n\t| { path: number }\n\t| { doodad: number }\n\t| { light: number }\n\t| { effect: number }\n\t| { decal: number }\n\t| { sound: number }\n\t| { waterfall: number }\n\t| { mistArea: number }\n\t| { weatherArea: number }\n\t| { cloudPatch: number }\n\t| { pictureZone: number }\n\t| { thing: number; kind: string }\n\n/**\n * One place a thing is named: what names it, where, and what on the map that is\n *\n * @beta\n */\nexport interface MapRefUse {\n\t/** What names it: `placed`, `camp`, `random group`, `field Spawns`, `prefab`, `cinematic`, or the game's own word */\n\twhat: string\n\t/** Where: the map's name, a group's, a prefab's, a cinematic's id, a wave's */\n\twhere: string\n\t/** What on the map the use points at, for the editor to select */\n\ttarget?: MapRefTarget\n}\n\n/**\n * A group of the palette (`MapEditorDef.palette`)\n *\n * @beta\n */\nexport interface MapPaletteGroup {\n\t/** The group's name in the palette */\n\tname: string\n\t/** The unit types in the group */\n\ttypes: UnitTypeDef[]\n\t/**\n\t * Whose what is put down from it is, by player id (`MAP_CREEPS`, `MAP_NEUTRAL`): the player picked above it when\n\t * left out, and nobody for a resource\n\t */\n\towner?: number\n\t/** Its units are what camps are made of: the camp tool picks from them */\n\tcamps?: boolean\n}\n\n/**\n * A kind of thing the erase brush can be set to take (`MapEditorDef.erase`)\n *\n * @beta\n */\nexport interface MapEraseKind {\n\t/** The id of the kind, which `MapEditorDef.erase` lists it by */\n\tid: string\n\t/** What the brush's choice calls it */\n\tname: string\n\t/** Whether a unit type is of this kind: the erase brush takes the objects it says yes to */\n\ttakes: (def: UnitTypeDef) => boolean\n}\n\n/**\n * What the starts must reach when a game does not say: what is mined, not what is cut\n *\n * @internal\n */\nexport const reachedByDefault = (def: UnitTypeDef): boolean => def.kind === 'resource' && footprintOf(def).w >= 2\n\n/**\n * The heights the ground goes from and to when a game does not say\n *\n * @beta\n */\nexport const DEFAULT_HEIGHTS: readonly [number, number] = [-4, 16]\n\n/** What a field of a game's own holds, and so how the editor lets it be set */\n/**\n * What a field holds: a number, words, yes or no, one of a few, a unit type, a player; a region, a point or a path of\n * the map (kept by id, so that a rename does not lose it; handed to the game by name); a colour (`[r, g, b]`, 0 to 1);\n * a list of words; a vector on the ground (`{ x, z }`)\n *\n * @beta\n */\nexport type MapFieldKind = 'number' | 'text' | 'toggle' | 'choice' | 'unit' | 'player' | 'region' | 'point' | 'path' | 'color' | 'list' | 'vector'\n\n/** The kinds of field that name a thing of the map, by its id */\nexport const TARGET_FIELDS = ['region', 'point', 'path'] as const\n\n/**\n * A field of a game's own on what is placed on a map: the wave a spawner sends, whether a gate starts open, what a\n * guard does. The editor shows it in the inspector for what it is a field of, and keeps what it was set to with the\n * object (`MapObject.data`). The engine does nothing with it: the `mapObject` hook hands it to the game as the world\n * is made, which is where the game says what it means. Given in `Rules.editor.fields`\n *\n * @beta\n */\nexport interface MapFieldDef {\n\t/** The key it is kept under. Shared by the fields of every mod on the game: give a mod's a prefix */\n\tid: string\n\t/** What the inspector calls it */\n\tname: string\n\t/** A line more, shown when the pointer rests on it */\n\thint?: string\n\t/**\n\t * The fields it is laid out beside in the inspector, by a name they share (`'Position'`): the consecutive fields of\n\t * one group two a line, under its name. Alone when left out\n\t */\n\tgroup?: string\n\t/** What sort of value the field holds, which the inspector edits it with (`MapFieldKind`) */\n\tkind: MapFieldKind\n\t/**\n\t * What it is a field of: objects of these unit types, or of the types a function says yes to (every hero, every\n\t * building that trains something); or camps, or regions; or the map itself (kept in `GameMap.data`, read as\n\t * `world.map.data`), or its players (`MapPlayer.data`, read as `world.map.player(id).data`)\n\t */\n\tfor: string[] | ((def: UnitTypeDef) => boolean) | 'camp' | 'region' | 'map' | 'player'\n\t/** What it is when nothing was set. The game is given this then, and the file does not hold it */\n\tdefault?: unknown\n\t/** For a number: the least and the most it can be, and what the arrows step by */\n\tmin?: number\n\t/** For a number field: the most it can be */\n\tmax?: number\n\t/** For a number field: what the arrows step it by */\n\tstep?: number\n\t/** For a choice: what there is to choose from, as data or worked out from the game */\n\toptions?: readonly MapFieldOption[] | ((registry: Registry) => readonly MapFieldOption[])\n}\n\n/**\n * One of the things a choice field can be: the value kept, and what the inspector calls it when that is not the value\n *\n * @beta\n */\nexport type MapFieldOption = string | { value: string; label: string }\n\n/**\n * Typed help for writing a field\n *\n * @beta\n */\nexport const defineMapField = (def: MapFieldDef): MapFieldDef => def\n\n/** The game's fields: its own (`Rules.editor.fields`) and those of the components it lists (`Component.field`), under the component's id */\nconst fieldsOf = (registry: Registry): readonly MapFieldDef[] => {\n\tconst own = registry.module?.editor?.fields ?? []\n\tlet all: MapFieldDef[] | undefined\n\tfor (const component of registry.listedComponents()) {\n\t\tif (component.field) (all ??= [...own]).push({ ...component.field, id: component.id })\n\t}\n\treturn all ?? own\n}\n\n/**\n * The game's fields for a placed object, by the type it is of. None for a type the game does not have\n *\n * @beta\n */\nexport function objectFields(registry: Registry, type: string): MapFieldDef[] {\n\tif (!registry.units.has(type)) return []\n\tconst def = registry.unit(type)\n\treturn fieldsOf(registry).filter((field) =>\n\t\ttypeof field.for === 'function' ? field.for(def) : Array.isArray(field.for) && field.for.includes(type)\n\t)\n}\n\n/**\n * The game's fields for a camp\n *\n * @beta\n */\nexport const campFields = (registry: Registry): MapFieldDef[] => fieldsOf(registry).filter((field) => field.for === 'camp')\n\n/**\n * The game's fields for a region\n *\n * @beta\n */\nexport const regionFields = (registry: Registry): MapFieldDef[] => fieldsOf(registry).filter((field) => field.for === 'region')\n\n/**\n * The fields of the map itself, and of its players\n *\n * @beta\n */\nexport const mapFields = (registry: Registry): MapFieldDef[] => fieldsOf(registry).filter((field) => field.for === 'map')\n/**\n * The game's fields for players (`for: 'player'`) of a registry, as `MapFieldDef`s\n *\n * @beta\n */\nexport const playerFields = (registry: Registry): MapFieldDef[] => fieldsOf(registry).filter((field) => field.for === 'player')\n\n/**\n * What a choice field can be set to, as values with what each is called\n *\n * @beta\n */\nexport function fieldOptions(registry: Registry, field: MapFieldDef): { value: string; label: string }[] {\n\tconst options = typeof field.options === 'function' ? field.options(registry) : (field.options ?? [])\n\treturn options.map((option) => (typeof option === 'string' ? { value: option, label: option } : option))\n}\n\n/** What the fields of something placed are, with what was not set at its default: what the game is handed */\nexport function fieldValues(fields: readonly MapFieldDef[], data: Record<string, unknown> | undefined, map?: GameMap): Record<string, unknown> {\n\t// what is kept with it and is no field (any more) comes along too: a game may read what an older version of it wrote\n\tconst values: Record<string, unknown> = { ...data }\n\tfor (const field of fields) {\n\t\tif (values[field.id] === undefined && field.default !== undefined) values[field.id] = field.default\n\t\t// a region, a point or a path is kept by id, and handed to the game by its name: what the game finds it by\n\t\tif (map && (TARGET_FIELDS as readonly string[]).includes(field.kind) && typeof values[field.id] === 'number')\n\t\t\tvalues[field.id] = targetName(map, field.kind as (typeof TARGET_FIELDS)[number], values[field.id] as number)\n\t}\n\treturn values\n}\n\n/** The name of a region, a point or a path of a map by its id: undefined for one the map has not (any more) */\nexport function targetName(map: GameMap, kind: (typeof TARGET_FIELDS)[number], id: number): string | undefined {\n\tconst list = kind === 'region' ? map.regions : kind === 'point' ? map.points : map.paths\n\treturn list.find((thing) => thing.id === id)?.name\n}\n\n/**\n * The game's fields of an object or a camp of a map, as the game is handed them\n *\n * @internal\n */\nexport const mapObjectData = (registry: Registry, object: MapObject, map?: GameMap): Record<string, unknown> =>\n\tfieldValues(objectFields(registry, object.type), object.data, map)\n/**\n * The game's fields of a camp, with the values it kept and the defaults for the rest; what the `mapCamp` hook hands the game\n *\n * @internal\n */\nexport const mapCampData = (registry: Registry, camp: MapCamp, map?: GameMap): Record<string, unknown> =>\n\tfieldValues(campFields(registry), camp.data, map)\n/**\n * The game's fields of a region, with the values it kept and the defaults for the rest; what the `mapRegion` hook hands the game\n *\n * @internal\n */\nexport const mapRegionData = (registry: Registry, region: MapRegion, map?: GameMap): Record<string, unknown> =>\n\tfieldValues(regionFields(registry), region.data, map)\n/**\n * The game's fields of a player, with the values it kept and the defaults for the rest; what the game reads as `world.map.player(id).data`\n *\n * @internal\n */\nexport const mapPlayerData = (registry: Registry, player: MapPlayer, map?: GameMap): Record<string, unknown> =>\n\tfieldValues(playerFields(registry), player.data, map)\n"],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import { BY_ID, fieldsOf } from "./map/schema.js";
2
+ import { serializeMap } from "./map/file.js";
3
+ //#region src/mapFile.ts
4
+ /** The order the parts of a map come in in its file. What is not listed comes after, by name */
5
+ var PARTS = [
6
+ "format",
7
+ "name",
8
+ "description",
9
+ "author",
10
+ "meantFor",
11
+ "loading",
12
+ "explored",
13
+ "silence",
14
+ "game",
15
+ "width",
16
+ "depth",
17
+ "cliffHeight",
18
+ "data",
19
+ "editor",
20
+ "players",
21
+ "regions",
22
+ "points",
23
+ "paths",
24
+ "doodads",
25
+ "cameras",
26
+ "randomGroups",
27
+ "itemTables",
28
+ "definitions",
29
+ "forces",
30
+ "races",
31
+ "environment",
32
+ "day",
33
+ "camps",
34
+ "objects",
35
+ "tileset",
36
+ "preview"
37
+ ];
38
+ /** The layers come last: lines nobody reads, a row of the ground to each (the map's table says which: `MAP_FIELDS`) */
39
+ var LAYERS = [...fieldsOf("layer", "layers").map((field) => field.key)];
40
+ /** Lists with one entry to a line, in the order of their ids */
41
+ var LISTS = new Set(BY_ID);
42
+ /** The order of what an entry holds. What is not listed comes after, by name */
43
+ var FIELDS = [
44
+ "id",
45
+ "name",
46
+ "type",
47
+ "owner",
48
+ "team",
49
+ "color",
50
+ "race",
51
+ "start",
52
+ "x",
53
+ "z",
54
+ "facing",
55
+ "scale",
56
+ "look",
57
+ "units",
58
+ "shape",
59
+ "points",
60
+ "width",
61
+ "paint",
62
+ "keepClear",
63
+ "profile",
64
+ "health",
65
+ "mana",
66
+ "level",
67
+ "abilities",
68
+ "items",
69
+ "amount",
70
+ "underConstruction",
71
+ "lifetime",
72
+ "orders",
73
+ "data"
74
+ ];
75
+ /** The keys of something in a set order: those listed first, in that order, then the rest by name */
76
+ function inOrder(value, first) {
77
+ const keys = Object.keys(value);
78
+ return [...first.filter((key) => keys.includes(key)), ...keys.filter((key) => !first.includes(key)).sort()];
79
+ }
80
+ var entryText = (entry) => `{ ${inOrder(entry, FIELDS).filter((key) => entry[key] !== void 0).map((key) => `${JSON.stringify(key)}: ${JSON.stringify(entry[key])}`).join(", ")} }`;
81
+ /**
82
+ * A map as the text of its file, written to be read by a person comparing two versions of it: every part on a line
83
+ * of its own in a set order, one object to a line in the order of their ids with what each holds in a set order
84
+ * too, and the layers last. Moving one object changes one line, whatever was done before
85
+ *
86
+ * @beta
87
+ */
88
+ function mapText(map) {
89
+ const file = serializeMap(map);
90
+ return `{\n${inOrder(file, [...PARTS, ...LAYERS]).sort((a, b) => Number(LAYERS.includes(a)) - Number(LAYERS.includes(b))).map((key) => {
91
+ const value = file[key];
92
+ if (key === "cells" && value && typeof value === "object") return `\t"cells": {\n${Object.entries(value).map(([id, rows]) => `\t\t${JSON.stringify(id)}: [\n${rows.map((row) => `\t\t\t${JSON.stringify(row)}`).join(",\n")}\n\t\t]`).join(",\n")}\n\t}`;
93
+ if (LAYERS.includes(key) && Array.isArray(value)) return `\t${JSON.stringify(key)}: [\n${value.map((row) => `\t\t${JSON.stringify(row)}`).join(",\n")}\n\t]`;
94
+ if (!LISTS.has(key) || !Array.isArray(value)) return `\t${JSON.stringify(key)}: ${JSON.stringify(value)}`;
95
+ if (!value.length) return `\t${JSON.stringify(key)}: []`;
96
+ const entries = [...value].sort((a, b) => a.id - b.id);
97
+ return `\t${JSON.stringify(key)}: [\n${entries.map((entry) => `\t\t${entryText(entry)}`).join(",\n")}\n\t]`;
98
+ }).join(",\n")}\n}\n`;
99
+ }
100
+ /**
101
+ * What a map file is called, without what comes after the first dot: the name of the map in small letters, with a
102
+ * dash for whatever is not a letter or a number. `The Pass!` is `the-pass`
103
+ *
104
+ * @beta
105
+ */
106
+ function mapFileStem(name) {
107
+ return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "map";
108
+ }
109
+ /** A stem as the start of the name of a type: `the-pass` is `ThePass` */
110
+ var typeName = (stem) => {
111
+ const name = stem.replace(/(^|-)([a-z0-9])/g, (_, __, letter) => letter.toUpperCase());
112
+ return /^[0-9]/.test(name) ? `Map${name}` : name;
113
+ };
114
+ /** A name as TypeScript writes text, in single quotes as the rest of the code has it. Whatever is in it stays inside */
115
+ var quoted = (name) => `'${JSON.stringify(name).slice(1, -1).replace(/\\"/g, "\"").replace(/'/g, "\\'")}'`;
116
+ /** The names as a type: one to a line, so that naming one more thing changes one line */
117
+ var union = (names) => names.length ? [...names].sort().map((name) => `\n\t| ${quoted(name)}`).join("") : " never";
118
+ /**
119
+ * The names of what is on a map as TypeScript, for a game's code to use: `world.named<RoadNames>('gaet')` does not
120
+ * compile. The editor writes it next to the map (`road.names.ts` for `road.vgmap.json`), anew with every save
121
+ *
122
+ * @beta
123
+ */
124
+ function mapNamesSource(stem, map) {
125
+ const type = typeName(stem);
126
+ const objects = map.objects.flatMap((object) => object.name ? [object.name] : []);
127
+ const camps = map.camps.flatMap((camp) => camp.name ? [camp.name] : []);
128
+ const regions = map.regions.map((region) => region.name);
129
+ const points = map.points.map((point) => point.name);
130
+ const paths = map.paths.map((path) => path.name);
131
+ const lights = namesIn(map.environment, "lights");
132
+ const effects = namesIn(map.environment, "fx");
133
+ return [
134
+ `// Written by the map editor with ${stem}.vgmap.json, anew with every save: not to be changed by hand`,
135
+ "",
136
+ `/** What is named on the map, for \`world.named<${type}Names>(...)\` */`,
137
+ `export type ${type}Names =${union(objects)}`,
138
+ "",
139
+ `/** The camps that are named on the map, for \`campNamed(world, ...)\` */`,
140
+ `export type ${type}Camps =${union(camps)}`,
141
+ "",
142
+ `/** The regions of the map, for \`world.areas\` and \`enteredArea\` */`,
143
+ `export type ${type}Regions =${union(regions)}`,
144
+ "",
145
+ `/** The points of the map, for \`world.map.point(...)\` */`,
146
+ `export type ${type}Points =${union(points)}`,
147
+ "",
148
+ `/** The paths of the map, for \`world.map.path(...)\` */`,
149
+ `export type ${type}Paths =${union(paths)}`,
150
+ "",
151
+ `/** The lights of the map that are named, for \`client.lights.named(...)\` */`,
152
+ `export type ${type}Lights =${union(lights)}`,
153
+ "",
154
+ `/** The effects of the map that are named, for \`client.mapFx.named(...)\` */`,
155
+ `export type ${type}Fx =${union(effects)}`,
156
+ "",
157
+ `/** The ids of the regions, points and paths by name: what a field that names one keeps (it is handed the name) */`,
158
+ `export const ${type}Ids = ${idsOf(map)} as const`,
159
+ ""
160
+ ].join("\n");
161
+ }
162
+ /** The names of the things of a list of a map's environment that have one (`lights`, `fx`), as plain data */
163
+ function namesIn(environment, list) {
164
+ const things = environment?.[list];
165
+ if (!Array.isArray(things)) return [];
166
+ return things.flatMap((thing) => typeof thing?.name === "string" && thing.name ? [thing.name] : []);
167
+ }
168
+ /** The ids of a map's regions, points and paths by name, as the text of an object */
169
+ function idsOf(map) {
170
+ const part = (things) => `{ ${things.map((thing) => `${JSON.stringify(thing.name)}: ${thing.id}`).join(", ")} }`;
171
+ return `{ regions: ${part(map.regions)}, points: ${part(map.points)}, paths: ${part(map.paths)} }`;
172
+ }
173
+ //#endregion
174
+ export { mapFileStem, mapNamesSource, mapText };
175
+
176
+ //# sourceMappingURL=mapFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapFile.js","names":[],"sources":["../src/mapFile.ts"],"sourcesContent":["import { type GameMap, type MapFile, serializeMap } from './map'\nimport { BY_ID, fieldsOf } from './map/schema'\n\n/** The order the parts of a map come in in its file. What is not listed comes after, by name */\nconst PARTS: (keyof MapFile)[] = [\n\t'format',\n\t'name',\n\t'description',\n\t'author',\n\t'meantFor',\n\t'loading',\n\t'explored',\n\t'silence',\n\t'game',\n\t'width',\n\t'depth',\n\t'cliffHeight',\n\t'data',\n\t'editor',\n\t'players',\n\t'regions',\n\t'points',\n\t'paths',\n\t'doodads',\n\t'cameras',\n\t'randomGroups',\n\t'itemTables',\n\t'definitions',\n\t'forces',\n\t'races',\n\t'environment',\n\t'day',\n\t'camps',\n\t'objects',\n\t'tileset',\n\t'preview'\n]\n/** The layers come last: lines nobody reads, a row of the ground to each (the map's table says which: `MAP_FIELDS`) */\nconst LAYERS: (keyof MapFile)[] = [...fieldsOf('layer', 'layers').map((field) => field.key as keyof MapFile)]\n/** Lists with one entry to a line, in the order of their ids */\nconst LISTS = new Set<string>(BY_ID)\n/** The order of what an entry holds. What is not listed comes after, by name */\nconst FIELDS = [\n\t'id',\n\t'name',\n\t'type',\n\t'owner',\n\t'team',\n\t'color',\n\t'race',\n\t'start',\n\t'x',\n\t'z',\n\t'facing',\n\t'scale',\n\t'look',\n\t'units',\n\t'shape',\n\t'points',\n\t'width',\n\t'paint',\n\t'keepClear',\n\t'profile',\n\t'health',\n\t'mana',\n\t'level',\n\t'abilities',\n\t'items',\n\t'amount',\n\t'underConstruction',\n\t'lifetime',\n\t'orders',\n\t'data'\n]\n\n/** The keys of something in a set order: those listed first, in that order, then the rest by name */\nfunction inOrder(value: object, first: readonly string[]): string[] {\n\tconst keys = Object.keys(value)\n\tconst listed = first.filter((key) => keys.includes(key))\n\treturn [...listed, ...keys.filter((key) => !first.includes(key)).sort()]\n}\n\nconst entryText = (entry: Record<string, unknown>): string =>\n\t`{ ${inOrder(entry, FIELDS)\n\t\t.filter((key) => entry[key] !== undefined)\n\t\t.map((key) => `${JSON.stringify(key)}: ${JSON.stringify(entry[key])}`)\n\t\t.join(', ')} }`\n\n/**\n * A map as the text of its file, written to be read by a person comparing two versions of it: every part on a line\n * of its own in a set order, one object to a line in the order of their ids with what each holds in a set order\n * too, and the layers last. Moving one object changes one line, whatever was done before\n *\n * @beta\n */\nexport function mapText(map: GameMap): string {\n\tconst file = serializeMap(map) as unknown as Record<string, unknown>\n\tconst lines = inOrder(file, [...PARTS, ...LAYERS])\n\t\t// the rest, which this version does not know, goes between what it knows and the layers\n\t\t.sort((a, b) => Number(LAYERS.includes(a as keyof MapFile)) - Number(LAYERS.includes(b as keyof MapFile)))\n\t\t.map((key) => {\n\t\t\tconst value = file[key]\n\t\t\t// the game's layers of cells: a row to a line, as the layers of the ground\n\t\t\tif (key === 'cells' && value && typeof value === 'object')\n\t\t\t\treturn `\\t\"cells\": {\\n${Object.entries(value as Record<string, string[]>)\n\t\t\t\t\t.map(([id, rows]) => `\\t\\t${JSON.stringify(id)}: [\\n${rows.map((row) => `\\t\\t\\t${JSON.stringify(row)}`).join(',\\n')}\\n\\t\\t]`)\n\t\t\t\t\t.join(',\\n')}\\n\\t}`\n\t\t\t// a layer of the ground: a row to a line, so that a change to one row changes one line, which git merges\n\t\t\tif (LAYERS.includes(key as keyof MapFile) && Array.isArray(value))\n\t\t\t\treturn `\\t${JSON.stringify(key)}: [\\n${value.map((row) => `\\t\\t${JSON.stringify(row)}`).join(',\\n')}\\n\\t]`\n\t\t\tif (!LISTS.has(key) || !Array.isArray(value)) return `\\t${JSON.stringify(key)}: ${JSON.stringify(value)}`\n\t\t\tif (!value.length) return `\\t${JSON.stringify(key)}: []`\n\t\t\tconst entries = [...(value as { id: number }[])].sort((a, b) => a.id - b.id)\n\t\t\treturn `\\t${JSON.stringify(key)}: [\\n${entries.map((entry) => `\\t\\t${entryText(entry as unknown as Record<string, unknown>)}`).join(',\\n')}\\n\\t]`\n\t\t})\n\treturn `{\\n${lines.join(',\\n')}\\n}\\n`\n}\n\n/**\n * What a map file is called, without what comes after the first dot: the name of the map in small letters, with a\n * dash for whatever is not a letter or a number. `The Pass!` is `the-pass`\n *\n * @beta\n */\nexport function mapFileStem(name: string): string {\n\treturn (\n\t\tname\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9]+/g, '-')\n\t\t\t.replace(/^-|-$/g, '') || 'map'\n\t)\n}\n\n/** A stem as the start of the name of a type: `the-pass` is `ThePass` */\nconst typeName = (stem: string) => {\n\tconst name = stem.replace(/(^|-)([a-z0-9])/g, (_, __, letter: string) => letter.toUpperCase())\n\t// a type does not start with a number\n\treturn /^[0-9]/.test(name) ? `Map${name}` : name\n}\n\n/** A name as TypeScript writes text, in single quotes as the rest of the code has it. Whatever is in it stays inside */\nconst quoted = (name: string) => `'${JSON.stringify(name).slice(1, -1).replace(/\\\\\"/g, '\"').replace(/'/g, \"\\\\'\")}'`\n\n/** The names as a type: one to a line, so that naming one more thing changes one line */\nconst union = (names: string[]) =>\n\tnames.length\n\t\t? [...names]\n\t\t\t\t.sort()\n\t\t\t\t.map((name) => `\\n\\t| ${quoted(name)}`)\n\t\t\t\t.join('')\n\t\t: ' never'\n\n/**\n * The names of what is on a map as TypeScript, for a game's code to use: `world.named<RoadNames>('gaet')` does not\n * compile. The editor writes it next to the map (`road.names.ts` for `road.vgmap.json`), anew with every save\n *\n * @beta\n */\nexport function mapNamesSource(stem: string, map: GameMap): string {\n\tconst type = typeName(stem)\n\tconst objects = map.objects.flatMap((object) => (object.name ? [object.name] : []))\n\tconst camps = map.camps.flatMap((camp) => (camp.name ? [camp.name] : []))\n\tconst regions = map.regions.map((region) => region.name)\n\tconst points = map.points.map((point) => point.name)\n\tconst paths = map.paths.map((path) => path.name)\n\t// what the client draws (its lights and effects) by name, as plain data: the engine knows nothing more of them\n\tconst lights = namesIn(map.environment, 'lights')\n\tconst effects = namesIn(map.environment, 'fx')\n\treturn [\n\t\t`// Written by the map editor with ${stem}.vgmap.json, anew with every save: not to be changed by hand`,\n\t\t'',\n\t\t`/** What is named on the map, for \\`world.named<${type}Names>(...)\\` */`,\n\t\t`export type ${type}Names =${union(objects)}`,\n\t\t'',\n\t\t`/** The camps that are named on the map, for \\`campNamed(world, ...)\\` */`,\n\t\t`export type ${type}Camps =${union(camps)}`,\n\t\t'',\n\t\t`/** The regions of the map, for \\`world.areas\\` and \\`enteredArea\\` */`,\n\t\t`export type ${type}Regions =${union(regions)}`,\n\t\t'',\n\t\t`/** The points of the map, for \\`world.map.point(...)\\` */`,\n\t\t`export type ${type}Points =${union(points)}`,\n\t\t'',\n\t\t`/** The paths of the map, for \\`world.map.path(...)\\` */`,\n\t\t`export type ${type}Paths =${union(paths)}`,\n\t\t'',\n\t\t`/** The lights of the map that are named, for \\`client.lights.named(...)\\` */`,\n\t\t`export type ${type}Lights =${union(lights)}`,\n\t\t'',\n\t\t`/** The effects of the map that are named, for \\`client.mapFx.named(...)\\` */`,\n\t\t`export type ${type}Fx =${union(effects)}`,\n\t\t'',\n\t\t`/** The ids of the regions, points and paths by name: what a field that names one keeps (it is handed the name) */`,\n\t\t`export const ${type}Ids = ${idsOf(map)} as const`,\n\t\t''\n\t].join('\\n')\n}\n\n/** The names of the things of a list of a map's environment that have one (`lights`, `fx`), as plain data */\nfunction namesIn(environment: object | undefined, list: string): string[] {\n\tconst things = (environment as Record<string, unknown> | undefined)?.[list]\n\tif (!Array.isArray(things)) return []\n\treturn things.flatMap((thing) =>\n\t\ttypeof (thing as { name?: unknown })?.name === 'string' && (thing as { name: string }).name ? [(thing as { name: string }).name] : []\n\t)\n}\n\n/** The ids of a map's regions, points and paths by name, as the text of an object */\nfunction idsOf(map: GameMap): string {\n\tconst part = (things: readonly { id: number; name: string }[]) =>\n\t\t`{ ${things.map((thing) => `${JSON.stringify(thing.name)}: ${thing.id}`).join(', ')} }`\n\treturn `{ regions: ${part(map.regions)}, points: ${part(map.points)}, paths: ${part(map.paths)} }`\n}\n"],"mappings":"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"}
@@ -8,7 +8,9 @@ import type { Registry } from './registry';
8
8
  * @beta
9
9
  */
10
10
  export interface Walk {
11
+ /** The length of the way, in cells */
11
12
  length: number;
13
+ /** The points the way goes through, from its start to its end */
12
14
  points: Vec2[];
13
15
  }
14
16
  /**
@@ -23,7 +25,9 @@ export declare function walkBetween(map: GameMap, registry: Registry, from: Vec2
23
25
  * @beta
24
26
  */
25
27
  export interface StartMeasure {
28
+ /** The player the start is for */
26
29
  player: PlayerId;
30
+ /** The start's name, as the map names its player */
27
31
  name: string;
28
32
  /** The way on foot to the nearest mine, and how much it holds. Nothing without a mine they can walk to */
29
33
  mine?: {
@@ -42,7 +46,9 @@ export interface StartMeasure {
42
46
  * @beta
43
47
  */
44
48
  export interface GameMeasure {
49
+ /** The name of the measure, as the editor shows it */
45
50
  name: string;
51
+ /** The measured number or text */
46
52
  value: number | string;
47
53
  }
48
54
  /**
@@ -63,9 +69,11 @@ export interface MapReport {
63
69
  width: number;
64
70
  at: Vec2;
65
71
  };
72
+ /** The measure of every player's start */
66
73
  starts: StartMeasure[];
67
74
  /** What each start has that another has more than `FAIR_MARGIN` more of: what is not fair */
68
75
  unfair: string[];
76
+ /** The numbers the game measures of its own (`MapEditorDef.measure`) */
69
77
  game: GameMeasure[];
70
78
  }
71
79
  /**