@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
package/dist/player.d.ts CHANGED
@@ -1,11 +1,17 @@
1
1
  import { type Component, StateStore } from './components';
2
2
  import type { Registry } from './registry';
3
- import type { Cost, ResourceKind } from './defs';
3
+ import type { Cost, ResourceId } from './defs';
4
4
  import type { PlayerId } from './entity';
5
5
  import type { World } from './world';
6
- /** @beta */
6
+ /**
7
+ * What a `Player` is made from: its id, name, team, colour, starting resources and role
8
+ *
9
+ * @beta
10
+ */
7
11
  export interface PlayerInit {
12
+ /** The player's id, by which units, commands and the world's lists name them */
8
13
  id: PlayerId;
14
+ /** The name shown for the player on scores, in the lobby and in messages */
9
15
  name: string;
10
16
  /** Players on the same team are allies and share vision */
11
17
  team: number;
@@ -18,27 +24,38 @@ export interface PlayerInit {
18
24
  /** The player the creeps belong to: hostile to everyone, and not someone who can win or lose */
19
25
  creeps?: boolean;
20
26
  /**
21
- * The race they play (`GameModule.races`), or `random` for one drawn as the game starts. The game's first when left
27
+ * The race they play (`Rules.races`), or `random` for one drawn as the game starts. The game's first when left
22
28
  * out, in a game with races; none for the neutral players and the creeps
23
29
  */
24
30
  race?: string;
25
31
  }
26
- /** @beta */
32
+ /**
33
+ * A player of a world: team, colour, race, resources, supply, researched upgrades and the state of modules, kept by `world.player(id)`
34
+ *
35
+ * @beta
36
+ */
27
37
  export declare class Player {
38
+ /** The player's id, as `PlayerInit.id` */
28
39
  readonly id: PlayerId;
40
+ /** The name shown for the player, as `PlayerInit.name` */
29
41
  readonly name: string;
30
42
  /** Changed by `world.setTeam`, which the fog and everyone's sight follow */
31
43
  team: number;
44
+ /** The player's colour as RGB, each 0..1, used to tint their units */
32
45
  readonly color: [number, number, number];
46
+ /** Whether this is a neutral player (owner of gold mines and the like); nobody is hostile towards it */
33
47
  readonly neutral: boolean;
48
+ /** Whether this is the creeps' player: hostile to everyone, and not someone who can win or lose */
34
49
  readonly creeps: boolean;
35
50
  /** The race they play (`raceOf`): changed by `setRace` only. None in a game without races */
36
51
  race: string | undefined;
37
52
  /** What the player has of each resource, by resource id */
38
53
  readonly resources: Purse;
54
+ /** Supply the player's units and queued units take up now; counted against `supplyCap` */
39
55
  supplyUsed: number;
56
+ /** The most supply the player may use, from their buildings that provide it */
40
57
  supplyCap: number;
41
- /** The game's other pools of supply, by name (`GameRules.supply.pools`): what is used and the cap of each */
58
+ /** The game's other pools of supply, by name (`RuleSettings.supply.pools`): what is used and the cap of each */
42
59
  supplies: Record<string, {
43
60
  used: number;
44
61
  cap: number;
@@ -59,7 +76,9 @@ export declare class Player {
59
76
  get upgrades(): ReadonlyMap<string, number>;
60
77
  /** State of a game module or a mod for this player: made from the component's default when first asked for */
61
78
  state<T>(key: Component<T, unknown>): T;
79
+ /** Sets this player's state for a component, replacing what `state` gives for it */
62
80
  setState<T>(key: Component<T, unknown>, value: T): void;
81
+ /** Records that an upgrade is researched at this level and bumps `upgradesVersion` */
63
82
  setUpgrade(upgrade: string, level: number): void;
64
83
  }
65
84
  /**
@@ -67,14 +86,18 @@ export declare class Player {
67
86
  *
68
87
  * @beta
69
88
  */
70
- export type Purse = Record<ResourceKind, number>;
89
+ export type Purse = Record<ResourceId, number>;
71
90
  /**
72
91
  * The resource a purse is short of for a cost, or undefined when it can afford it
73
92
  *
74
93
  * @beta
75
94
  */
76
- export declare function shortOf(purse: Readonly<Purse>, cost: Cost | undefined): ResourceKind | undefined;
77
- /** @beta */
95
+ export declare function shortOf(purse: Readonly<Purse>, cost: Cost | undefined): ResourceId | undefined;
96
+ /**
97
+ * Takes a cost out of a purse, per resource; a purse may go below zero, so check `shortOf` first
98
+ *
99
+ * @beta
100
+ */
78
101
  export declare function pay(purse: Purse, cost: Cost | undefined): void;
79
102
  /**
80
103
  * Gives back what something cost, or a part of it
@@ -85,9 +108,9 @@ export declare function refund(purse: Purse, cost: Cost | undefined, part?: numb
85
108
  /**
86
109
  * Adds an amount of a resource
87
110
  *
88
- * @beta
111
+ * @public
89
112
  */
90
- export declare function earn(purse: Purse, kind: ResourceKind, amount: number): void;
113
+ export declare function earn(purse: Purse, kind: ResourceId, amount: number): void;
91
114
  /**
92
115
  * What a player pays for, as `resourcesSpent` says it: a unit, an upgrade, a structure, a morph, a revive (production),
93
116
  * an item, a hire, a repair, a trade at a market (`exchange`), or a game's own word
package/dist/player.js ADDED
@@ -0,0 +1,159 @@
1
+ import { StateStore } from "./components.js";
2
+ import { resourcesSpent } from "./engineEvents.js";
3
+ //#region src/player.ts
4
+ /**
5
+ * A player of a world: team, colour, race, resources, supply, researched upgrades and the state of modules, kept by `world.player(id)`
6
+ *
7
+ * @beta
8
+ */
9
+ var Player = class {
10
+ /** The player's id, as `PlayerInit.id` */
11
+ id;
12
+ /** The name shown for the player, as `PlayerInit.name` */
13
+ name;
14
+ /** Changed by `world.setTeam`, which the fog and everyone's sight follow */
15
+ team;
16
+ /** The player's colour as RGB, each 0..1, used to tint their units */
17
+ color;
18
+ /** Whether this is a neutral player (owner of gold mines and the like); nobody is hostile towards it */
19
+ neutral;
20
+ /** Whether this is the creeps' player: hostile to everyone, and not someone who can win or lose */
21
+ creeps;
22
+ /** The race they play (`raceOf`): changed by `setRace` only. None in a game without races */
23
+ race;
24
+ /** What the player has of each resource, by resource id */
25
+ resources;
26
+ /** Supply the player's units and queued units take up now; counted against `supplyCap` */
27
+ supplyUsed = 0;
28
+ /** The most supply the player may use, from their buildings that provide it */
29
+ supplyCap = 0;
30
+ /** The game's other pools of supply, by name (`RuleSettings.supply.pools`): what is used and the cap of each */
31
+ supplies = {};
32
+ /** Has had a building, and with that something to lose */
33
+ established = false;
34
+ /** Out of the game */
35
+ defeated = false;
36
+ finished = /* @__PURE__ */ new Map();
37
+ /** Bumped whenever a research finishes. Whatever is worked out from `upgrades` (like the stats of units) can check this to tell whether it still holds */
38
+ upgradesVersion = 0;
39
+ /** Upgrades in some production queue right now */
40
+ researching = /* @__PURE__ */ new Set();
41
+ /** State of game modules and mods for this player, see `state` */
42
+ states = new StateStore();
43
+ constructor(init) {
44
+ this.id = init.id;
45
+ this.name = init.name;
46
+ this.team = init.team;
47
+ this.color = init.color;
48
+ this.neutral = init.neutral ?? false;
49
+ this.creeps = init.creeps ?? false;
50
+ this.race = init.race;
51
+ this.resources = { ...init.resources };
52
+ }
53
+ /** Finished research: upgrade id to level. Changed through `setUpgrade` only, which keeps `upgradesVersion` honest */
54
+ get upgrades() {
55
+ return this.finished;
56
+ }
57
+ /** State of a game module or a mod for this player: made from the component's default when first asked for */
58
+ state(key) {
59
+ return this.states.get(key);
60
+ }
61
+ /** Sets this player's state for a component, replacing what `state` gives for it */
62
+ setState(key, value) {
63
+ this.states.set(key, value);
64
+ }
65
+ /** Records that an upgrade is researched at this level and bumps `upgradesVersion` */
66
+ setUpgrade(upgrade, level) {
67
+ this.finished.set(upgrade, level);
68
+ this.upgradesVersion++;
69
+ }
70
+ };
71
+ /**
72
+ * The resource a purse is short of for a cost, or undefined when it can afford it
73
+ *
74
+ * @beta
75
+ */
76
+ function shortOf(purse, cost) {
77
+ if (!cost) return void 0;
78
+ for (const kind in cost) if ((purse[kind] ?? 0) < cost[kind]) return kind;
79
+ }
80
+ /**
81
+ * Takes a cost out of a purse, per resource; a purse may go below zero, so check `shortOf` first
82
+ *
83
+ * @beta
84
+ */
85
+ function pay(purse, cost) {
86
+ for (const kind in cost) purse[kind] = (purse[kind] ?? 0) - cost[kind];
87
+ }
88
+ /**
89
+ * Gives back what something cost, or a part of it
90
+ *
91
+ * @beta
92
+ */
93
+ function refund(purse, cost, part = 1) {
94
+ for (const kind in cost) purse[kind] = (purse[kind] ?? 0) + Math.floor(cost[kind] * part);
95
+ }
96
+ /**
97
+ * Adds an amount of a resource
98
+ *
99
+ * @public
100
+ */
101
+ function earn(purse, kind, amount) {
102
+ purse[kind] = (purse[kind] ?? 0) + amount;
103
+ }
104
+ /**
105
+ * Has a player pay a cost, and says so (`resourcesSpent`, what the score counts as spent): `on` what, and its id. For a
106
+ * game's own purchases too, so that they count as the engine's do. The purse is not checked: `shortOf` first
107
+ *
108
+ * @beta
109
+ */
110
+ function spend(world, player, cost, on, id) {
111
+ if (!cost) return;
112
+ pay(world.player(player).resources, cost);
113
+ for (const kind in cost) {
114
+ if (cost[kind] === 0) continue;
115
+ world.events.emit(resourcesSpent, {
116
+ player,
117
+ cost,
118
+ on,
119
+ id,
120
+ refund: false
121
+ });
122
+ return;
123
+ }
124
+ }
125
+ /**
126
+ * Gives a player back what something cost, or a part of it (`refund`), and says so (`resourcesSpent` with `refund`):
127
+ * what the score takes off what was spent
128
+ *
129
+ * @beta
130
+ */
131
+ function giveBack(world, player, cost, part, on, id) {
132
+ if (!cost) return;
133
+ const back = {};
134
+ let any = false;
135
+ for (const kind in cost) {
136
+ back[kind] = Math.floor(cost[kind] * part);
137
+ if (back[kind] !== 0) any = true;
138
+ }
139
+ refund(world.player(player).resources, back);
140
+ if (any) world.events.emit(resourcesSpent, {
141
+ player,
142
+ cost: back,
143
+ on,
144
+ id,
145
+ refund: true
146
+ });
147
+ }
148
+ /**
149
+ * What a cost asks of the game's money, see `Registry.currency`. Shops deal in that alone
150
+ *
151
+ * @beta
152
+ */
153
+ function currencyOf(registry, cost) {
154
+ return registry.currency ? cost?.[registry.currency] ?? 0 : 0;
155
+ }
156
+ //#endregion
157
+ export { Player, currencyOf, earn, giveBack, pay, refund, shortOf, spend };
158
+
159
+ //# sourceMappingURL=player.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player.js","names":["resourcesSpentEvent"],"sources":["../src/player.ts"],"sourcesContent":["import { resourcesSpent as resourcesSpentEvent } from '#engine/engineEvents'\nimport { type Component, StateStore } from './components'\nimport type { Registry } from './registry'\nimport type { Cost, ResourceId } from './defs'\nimport type { PlayerId } from './entity'\nimport type { World } from './world'\n\n/**\n * What a `Player` is made from: its id, name, team, colour, starting resources and role\n *\n * @beta\n */\nexport interface PlayerInit {\n\t/** The player's id, by which units, commands and the world's lists name them */\n\tid: PlayerId\n\t/** The name shown for the player on scores, in the lobby and in messages */\n\tname: string\n\t/** Players on the same team are allies and share vision */\n\tteam: number\n\t/** RGB, 0..1 */\n\tcolor: [number, number, number]\n\t/** What the player starts with, by resource id */\n\tresources?: Purse\n\t/** Neutral players own things like gold mines. Nobody is hostile towards them */\n\tneutral?: boolean\n\t/** The player the creeps belong to: hostile to everyone, and not someone who can win or lose */\n\tcreeps?: boolean\n\t/**\n\t * The race they play (`Rules.races`), or `random` for one drawn as the game starts. The game's first when left\n\t * out, in a game with races; none for the neutral players and the creeps\n\t */\n\trace?: string\n}\n\n/**\n * A player of a world: team, colour, race, resources, supply, researched upgrades and the state of modules, kept by `world.player(id)`\n *\n * @beta\n */\nexport class Player {\n\t/** The player's id, as `PlayerInit.id` */\n\treadonly id: PlayerId\n\t/** The name shown for the player, as `PlayerInit.name` */\n\treadonly name: string\n\t/** Changed by `world.setTeam`, which the fog and everyone's sight follow */\n\tteam: number\n\t/** The player's colour as RGB, each 0..1, used to tint their units */\n\treadonly color: [number, number, number]\n\t/** Whether this is a neutral player (owner of gold mines and the like); nobody is hostile towards it */\n\treadonly neutral: boolean\n\t/** Whether this is the creeps' player: hostile to everyone, and not someone who can win or lose */\n\treadonly creeps: boolean\n\t/** The race they play (`raceOf`): changed by `setRace` only. None in a game without races */\n\trace: string | undefined\n\t/** What the player has of each resource, by resource id */\n\treadonly resources: Purse\n\t/** Supply the player's units and queued units take up now; counted against `supplyCap` */\n\tsupplyUsed = 0\n\t/** The most supply the player may use, from their buildings that provide it */\n\tsupplyCap = 0\n\t/** The game's other pools of supply, by name (`RuleSettings.supply.pools`): what is used and the cap of each */\n\tsupplies: Record<string, { used: number; cap: number }> = {}\n\t/** Has had a building, and with that something to lose */\n\testablished = false\n\t/** Out of the game */\n\tdefeated = false\n\tprivate readonly finished = new Map<string, number>()\n\t/** Bumped whenever a research finishes. Whatever is worked out from `upgrades` (like the stats of units) can check this to tell whether it still holds */\n\tupgradesVersion = 0\n\t/** Upgrades in some production queue right now */\n\treadonly researching = new Set<string>()\n\t/** State of game modules and mods for this player, see `state` */\n\treadonly states = new StateStore()\n\n\tconstructor(init: PlayerInit) {\n\t\tthis.id = init.id\n\t\tthis.name = init.name\n\t\tthis.team = init.team\n\t\tthis.color = init.color\n\t\tthis.neutral = init.neutral ?? false\n\t\tthis.creeps = init.creeps ?? false\n\t\tthis.race = init.race\n\t\tthis.resources = { ...init.resources }\n\t}\n\n\t/** Finished research: upgrade id to level. Changed through `setUpgrade` only, which keeps `upgradesVersion` honest */\n\tget upgrades(): ReadonlyMap<string, number> {\n\t\treturn this.finished\n\t}\n\n\t/** State of a game module or a mod for this player: made from the component's default when first asked for */\n\tstate<T>(key: Component<T, unknown>): T {\n\t\treturn this.states.get(key)\n\t}\n\n\t/** Sets this player's state for a component, replacing what `state` gives for it */\n\tsetState<T>(key: Component<T, unknown>, value: T): void {\n\t\tthis.states.set(key, value)\n\t}\n\n\t/** Records that an upgrade is researched at this level and bumps `upgradesVersion` */\n\tsetUpgrade(upgrade: string, level: number): void {\n\t\tthis.finished.set(upgrade, level)\n\t\tthis.upgradesVersion++\n\t}\n}\n\n/**\n * Amounts of resources, by resource id: what a player has. A resource left out is none of it\n *\n * @beta\n */\nexport type Purse = Record<ResourceId, number>\n\n/**\n * The resource a purse is short of for a cost, or undefined when it can afford it\n *\n * @beta\n */\nexport function shortOf(purse: Readonly<Purse>, cost: Cost | undefined): ResourceId | undefined {\n\tif (!cost) return undefined\n\tfor (const kind in cost) if ((purse[kind] ?? 0) < cost[kind]) return kind\n\treturn undefined\n}\n\n/**\n * Takes a cost out of a purse, per resource; a purse may go below zero, so check `shortOf` first\n *\n * @beta\n */\nexport function pay(purse: Purse, cost: Cost | undefined): void {\n\tfor (const kind in cost) purse[kind] = (purse[kind] ?? 0) - cost[kind]\n}\n\n/**\n * Gives back what something cost, or a part of it\n *\n * @beta\n */\nexport function refund(purse: Purse, cost: Cost | undefined, part = 1): void {\n\tfor (const kind in cost) purse[kind] = (purse[kind] ?? 0) + Math.floor(cost[kind] * part)\n}\n\n/**\n * Adds an amount of a resource\n *\n * @public\n */\nexport function earn(purse: Purse, kind: ResourceId, amount: number): void {\n\tpurse[kind] = (purse[kind] ?? 0) + amount\n}\n\n/**\n * What a player pays for, as `resourcesSpent` says it: a unit, an upgrade, a structure, a morph, a revive (production),\n * an item, a hire, a repair, a trade at a market (`exchange`), or a game's own word\n *\n * @beta\n */\nexport type SpentOn = 'unit' | 'upgrade' | 'structure' | 'morph' | 'revive' | 'item' | 'hire' | 'repair' | 'trade' | (string & {})\n\n/**\n * Has a player pay a cost, and says so (`resourcesSpent`, what the score counts as spent): `on` what, and its id. For a\n * game's own purchases too, so that they count as the engine's do. The purse is not checked: `shortOf` first\n *\n * @beta\n */\nexport function spend(world: World, player: PlayerId, cost: Cost | undefined, on: SpentOn, id?: string): void {\n\tif (!cost) return\n\tpay(world.player(player).resources, cost)\n\tfor (const kind in cost) {\n\t\tif (cost[kind] === 0) continue\n\t\tworld.events.emit(resourcesSpentEvent, { player, cost, on, id, refund: false })\n\t\treturn\n\t}\n}\n\n/**\n * Gives a player back what something cost, or a part of it (`refund`), and says so (`resourcesSpent` with `refund`):\n * what the score takes off what was spent\n *\n * @beta\n */\nexport function giveBack(world: World, player: PlayerId, cost: Cost | undefined, part: number, on: SpentOn, id?: string): void {\n\tif (!cost) return\n\tconst back: Cost = {}\n\tlet any = false\n\tfor (const kind in cost) {\n\t\tback[kind] = Math.floor(cost[kind] * part)\n\t\tif (back[kind] !== 0) any = true\n\t}\n\trefund(world.player(player).resources, back)\n\tif (any) world.events.emit(resourcesSpentEvent, { player, cost: back, on, id, refund: true })\n}\n\n/**\n * What a cost asks of the game's money, see `Registry.currency`. Shops deal in that alone\n *\n * @beta\n */\nexport function currencyOf(registry: Registry, cost: Cost | undefined): number {\n\treturn registry.currency ? (cost?.[registry.currency] ?? 0) : 0\n}\n"],"mappings":";;;;;;;;AAuCA,IAAa,SAAb,MAAoB;;CAEnB;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA,aAAa;;CAEb,YAAY;;CAEZ,WAA0D,CAAC;;CAE3D,cAAc;;CAEd,WAAW;CACX,2BAA4B,IAAI,IAAoB;;CAEpD,kBAAkB;;CAElB,8BAAuB,IAAI,IAAY;;CAEvC,SAAkB,IAAI,WAAW;CAEjC,YAAY,MAAkB;EAC7B,KAAK,KAAK,KAAK;EACf,KAAK,OAAO,KAAK;EACjB,KAAK,OAAO,KAAK;EACjB,KAAK,QAAQ,KAAK;EAClB,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,SAAS,KAAK,UAAU;EAC7B,KAAK,OAAO,KAAK;EACjB,KAAK,YAAY,EAAE,GAAG,KAAK,UAAU;CACtC;;CAGA,IAAI,WAAwC;EAC3C,OAAO,KAAK;CACb;;CAGA,MAAS,KAA+B;EACvC,OAAO,KAAK,OAAO,IAAI,GAAG;CAC3B;;CAGA,SAAY,KAA4B,OAAgB;EACvD,KAAK,OAAO,IAAI,KAAK,KAAK;CAC3B;;CAGA,WAAW,SAAiB,OAAqB;EAChD,KAAK,SAAS,IAAI,SAAS,KAAK;EAChC,KAAK;CACN;AACD;;;;;;AAcA,SAAgB,QAAQ,OAAwB,MAAgD;CAC/F,IAAI,CAAC,MAAM,OAAO,KAAA;CAClB,KAAK,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,KAAK,KAAK,OAAO,OAAO;AAEtE;;;;;;AAOA,SAAgB,IAAI,OAAc,MAA8B;CAC/D,KAAK,MAAM,QAAQ,MAAM,MAAM,SAAS,MAAM,SAAS,KAAK,KAAK;AAClE;;;;;;AAOA,SAAgB,OAAO,OAAc,MAAwB,OAAO,GAAS;CAC5E,KAAK,MAAM,QAAQ,MAAM,MAAM,SAAS,MAAM,SAAS,KAAK,KAAK,MAAM,KAAK,QAAQ,IAAI;AACzF;;;;;;AAOA,SAAgB,KAAK,OAAc,MAAkB,QAAsB;CAC1E,MAAM,SAAS,MAAM,SAAS,KAAK;AACpC;;;;;;;AAgBA,SAAgB,MAAM,OAAc,QAAkB,MAAwB,IAAa,IAAmB;CAC7G,IAAI,CAAC,MAAM;CACX,IAAI,MAAM,OAAO,MAAM,CAAC,CAAC,WAAW,IAAI;CACxC,KAAK,MAAM,QAAQ,MAAM;EACxB,IAAI,KAAK,UAAU,GAAG;EACtB,MAAM,OAAO,KAAKA,gBAAqB;GAAE;GAAQ;GAAM;GAAI;GAAI,QAAQ;EAAM,CAAC;EAC9E;CACD;AACD;;;;;;;AAQA,SAAgB,SAAS,OAAc,QAAkB,MAAwB,MAAc,IAAa,IAAmB;CAC9H,IAAI,CAAC,MAAM;CACX,MAAM,OAAa,CAAC;CACpB,IAAI,MAAM;CACV,KAAK,MAAM,QAAQ,MAAM;EACxB,KAAK,QAAQ,KAAK,MAAM,KAAK,QAAQ,IAAI;EACzC,IAAI,KAAK,UAAU,GAAG,MAAM;CAC7B;CACA,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC,WAAW,IAAI;CAC3C,IAAI,KAAK,MAAM,OAAO,KAAKA,gBAAqB;EAAE;EAAQ,MAAM;EAAM;EAAI;EAAI,QAAQ;CAAK,CAAC;AAC7F;;;;;;AAOA,SAAgB,WAAW,UAAoB,MAAgC;CAC9E,OAAO,SAAS,WAAY,OAAO,SAAS,aAAa,IAAK;AAC/D"}
package/dist/portals.d.ts CHANGED
@@ -63,4 +63,4 @@ export declare function townPortal(world: World, caster: Entity, near: Vec2, rad
63
63
  *
64
64
  * @beta
65
65
  */
66
- export declare function withPortals(): GamePack;
66
+ export declare function portalsPack(): GamePack;
@@ -0,0 +1,194 @@
1
+ import { distSq } from "./math.js";
2
+ import { at } from "./defs.js";
3
+ import { defineComponent } from "./components.js";
4
+ import { defineEngineEvent } from "./events.js";
5
+ import { distanceToEdge, moving } from "./entity.js";
6
+ import { defineHook } from "./hooks.js";
7
+ import { halt, moveToEntity } from "./systems/movement.js";
8
+ import { valueOf } from "./abilities/amounts.js";
9
+ import { defineEffect } from "./abilities/effects.js";
10
+ import { createOrder, giveOrder } from "./orders/queue.js";
11
+ import { homeOf } from "./home.js";
12
+ //#region src/portals.ts
13
+ /**
14
+ * The portals pack's id
15
+ *
16
+ * @beta
17
+ */
18
+ var PORTALS = "core.portals";
19
+ /**
20
+ * Where a waygate leads: a point of the map by its name (as the editor's field keeps it), or a place. A waygate without
21
+ * it, or with `null`, is shut
22
+ *
23
+ * @beta
24
+ */
25
+ var waygate = defineComponent({
26
+ id: "core.waygate",
27
+ field: {
28
+ name: "Leads to",
29
+ hint: "The point of the map a unit that walks in comes out at",
30
+ kind: "point",
31
+ for: (def) => !!def.waygate
32
+ }
33
+ });
34
+ /**
35
+ * A unit went through a waygate, or a town portal: told to everyone who sees either end, for a sound and a flash
36
+ *
37
+ * @beta
38
+ */
39
+ var portalUsed = defineEngineEvent({
40
+ id: "core.portalUsed",
41
+ replicate: "everyone"
42
+ });
43
+ /** How near a waygate's edge a unit is in it */
44
+ var REACH = .6;
45
+ /**
46
+ * Where a waygate leads, or nothing for one that is shut or leads to a point the map does not have
47
+ *
48
+ * @beta
49
+ */
50
+ function waygateTarget(world, gate) {
51
+ const to = gate.get(waygate);
52
+ if (!to || !gate.alive) return void 0;
53
+ if (typeof to !== "string") return to;
54
+ return world.map.points.some((point) => point.name === to) ? world.map.point(to) : void 0;
55
+ }
56
+ /**
57
+ * Says where a waygate leads (a point of the map by its name, or a place), or shuts it (`null`): what the editor's
58
+ * "Leads to" field says of a placed one, in code. Any building can be made a waygate so
59
+ *
60
+ * @beta
61
+ */
62
+ function setWaygate(gate, to) {
63
+ gate.set(waygate, typeof to === "object" && to ? {
64
+ x: to.x,
65
+ z: to.z
66
+ } : to);
67
+ }
68
+ /**
69
+ * Puts a unit somewhere at once, on the nearest ground it can stand on: what a waygate and a town portal do, for a game's
70
+ * own rules. Told to everyone (`portalUsed`)
71
+ *
72
+ * @beta
73
+ */
74
+ function portal(world, entity, to, gate) {
75
+ const from = {
76
+ x: entity.pos.x,
77
+ z: entity.pos.z
78
+ };
79
+ const spot = (entity.flying ? world.air : world.nav).closestPoint(to, 6) ?? to;
80
+ halt(world, entity);
81
+ world.place(entity, spot);
82
+ entity.prevPos.x = spot.x;
83
+ entity.prevPos.z = spot.z;
84
+ world.events.emit(portalUsed, {
85
+ entity: entity.id,
86
+ from,
87
+ to: {
88
+ x: spot.x,
89
+ z: spot.z
90
+ },
91
+ gate: gate?.id
92
+ });
93
+ }
94
+ /** Going through a waygate: walking into it, then out where it leads. Failed when it is shut, or there is no way to it */
95
+ var enterOrder = {
96
+ type: "enterWaygate",
97
+ accepts(world, entity, init) {
98
+ const gate = world.get(init.target);
99
+ return !!entity.get(moving) && !!gate && !!waygateTarget(world, gate);
100
+ },
101
+ update(world, entity, order) {
102
+ const gate = world.get(order.init.target);
103
+ const to = gate && waygateTarget(world, gate);
104
+ if (!gate || !to) return "failed";
105
+ if (distanceToEdge(entity.pos, gate) - entity.def.radius <= REACH) {
106
+ portal(world, entity, to, gate);
107
+ return "done";
108
+ }
109
+ const m = entity.get(moving);
110
+ if (m.status === "moving") return "running";
111
+ if (m.status === "failed" && order.state.tried === world.tick - 1) return "failed";
112
+ order.state.tried = world.tick;
113
+ moveToEntity(world, entity, gate, REACH * .5);
114
+ return "running";
115
+ }
116
+ };
117
+ /** Offsets around a spot, nearest first: where those a town portal brings stand */
118
+ var AROUND = (() => {
119
+ const all = [];
120
+ for (let dz = -3; dz <= 3; dz++) for (let dx = -3; dx <= 3; dx++) all.push({
121
+ x: dx * 1.2,
122
+ z: dz * 1.2
123
+ });
124
+ return all.sort((a, b) => a.x * a.x + a.z * a.z - (b.x * b.x + b.z * b.z));
125
+ })();
126
+ /**
127
+ * Takes a unit and as many as `count` of its owner's units within `radius` of it, nearest first, to its side's home
128
+ * nearest `near` (`homeOf`), spread around it: what the `townPortal` effect does, in code. Gives back who went, none
129
+ * when the side has no home
130
+ *
131
+ * @beta
132
+ */
133
+ function townPortal(world, caster, near, radius = 7, count = 12) {
134
+ const home = homeOf(world, caster.owner, near);
135
+ if (!home) return [];
136
+ const going = [caster, ...world.spatial.query(caster.pos.x, caster.pos.z, radius).filter((entity) => entity !== caster && entity.alive && !entity.hidden && entity.owner === caster.owner && !!entity.get(moving) && distanceToEdge(caster.pos, entity) <= radius).map((entity) => ({
137
+ entity,
138
+ d: distSq(entity.pos, caster.pos)
139
+ })).sort((a, b) => a.d - b.d || a.entity.id - b.entity.id).slice(0, Math.max(0, count)).map(({ entity }) => entity)];
140
+ going.forEach((entity, i) => {
141
+ const offset = AROUND[i % AROUND.length];
142
+ portal(world, entity, {
143
+ x: home.x + offset.x,
144
+ z: home.z + offset.z
145
+ });
146
+ });
147
+ return going;
148
+ }
149
+ var townPortalEffect = defineEffect({
150
+ type: "townPortal",
151
+ run: (context, effect) => {
152
+ const { world, caster, point, level } = context;
153
+ townPortal(world, caster, point, valueOf(context, effect.radius, void 0, 7), Math.round(at(effect.count, level, 12)));
154
+ },
155
+ fields: ["count"]
156
+ });
157
+ /**
158
+ * Portals, as in classic RTS games: waygates (`UnitTypeDef.waygate`), which a unit told to (a right-click, as any building is
159
+ * walked up to) walks into and comes out of where the gate leads (the "Leads to" field of a placed one, a point of the
160
+ * map; `setWaygate` in code), and the `townPortal` effect (`EffectTypes.townPortal`), which takes the caster and its
161
+ * units around it to its side's home nearest where it was aimed (`homeOf`: the map's `home.<team>` point, or the
162
+ * nearest of its buildings). `portal` and `townPortal` do them in code
163
+ *
164
+ * @beta
165
+ */
166
+ function portalsPack() {
167
+ const intoGate = defineHook({
168
+ hook: "beforeOrder",
169
+ id: "portals",
170
+ run(world, event) {
171
+ const { order, entity } = event;
172
+ if (order.type !== "move" || order.init.target === void 0) return;
173
+ const gate = world.get(order.init.target);
174
+ if (!gate?.def.waygate || !waygateTarget(world, gate) || !entity.get(moving)) return;
175
+ event.rejected = true;
176
+ giveOrder(world, entity, createOrder(world, {
177
+ type: "enterWaygate",
178
+ target: gate.id
179
+ }, order.groupId), event.queued);
180
+ }
181
+ });
182
+ return {
183
+ id: PORTALS,
184
+ orders: [enterOrder],
185
+ components: [waygate],
186
+ events: [portalUsed],
187
+ effects: [townPortalEffect],
188
+ hooks: [intoGate]
189
+ };
190
+ }
191
+ //#endregion
192
+ export { PORTALS, portal, portalUsed, portalsPack, setWaygate, townPortal, waygate, waygateTarget };
193
+
194
+ //# sourceMappingURL=portals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portals.js","names":[],"sources":["../src/portals.ts"],"sourcesContent":["import { defineEffect } from './abilities/effects'\nimport { at } from './defs'\nimport { valueOf } from './abilities/amounts'\nimport { defineComponent } from './components'\nimport { defineEngineEvent } from './events'\nimport { distanceToEdge, type Entity, moving } from './entity'\nimport { homeOf } from './home'\nimport { defineHook } from './hooks'\nimport { distSq, type Vec2 } from './math'\nimport { createOrder, giveOrder } from './orders/queue'\nimport type { GamePack } from './packs/pack'\nimport type { OrderBehavior, OrderParams } from './registry'\nimport { halt, moveToEntity } from './systems/movement'\nimport type { World } from './world'\n\n/*\n * Portals, an opt-in pack (review RV95): waygates, buildings a unit walks into to be elsewhere at once (`waygate`), and\n * the town portal, which takes a hero and its army to their side's home (`townPortal`)\n */\n\n/**\n * The portals pack's id\n *\n * @beta\n */\nexport const PORTALS = 'core.portals'\n\n/**\n * Where a waygate leads: a point of the map by its name (as the editor's field keeps it), or a place. A waygate without\n * it, or with `null`, is shut\n *\n * @beta\n */\nexport const waygate = defineComponent<string | Vec2 | null>({ id: 'core.waygate', field: { name: 'Leads to', hint: 'The point of the map a unit that walks in comes out at', kind: 'point', for: (def) => !!def.waygate } })\n\n/**\n * A unit went through a waygate, or a town portal: told to everyone who sees either end, for a sound and a flash\n *\n * @beta\n */\nexport const portalUsed = defineEngineEvent<{ entity: number; from: Vec2; to: Vec2; gate?: number }>({ id: 'core.portalUsed', replicate: 'everyone' })\n\n/** How near a waygate's edge a unit is in it */\nconst REACH = 0.6\n\n/**\n * Where a waygate leads, or nothing for one that is shut or leads to a point the map does not have\n *\n * @beta\n */\nexport function waygateTarget(world: World, gate: Entity): Vec2 | undefined {\n\tconst to = gate.get(waygate)\n\tif (!to || !gate.alive) return undefined\n\tif (typeof to !== 'string') return to\n\treturn world.map.points.some((point) => point.name === to) ? world.map.point(to) : undefined\n}\n\n/**\n * Says where a waygate leads (a point of the map by its name, or a place), or shuts it (`null`): what the editor's\n * \"Leads to\" field says of a placed one, in code. Any building can be made a waygate so\n *\n * @beta\n */\nexport function setWaygate(gate: Entity, to: string | Vec2 | null): void {\n\tgate.set(waygate, typeof to === 'object' && to ? { x: to.x, z: to.z } : to)\n}\n\n/**\n * Puts a unit somewhere at once, on the nearest ground it can stand on: what a waygate and a town portal do, for a game's\n * own rules. Told to everyone (`portalUsed`)\n *\n * @beta\n */\nexport function portal(world: World, entity: Entity, to: Vec2, gate?: Entity): void {\n\tconst from = { x: entity.pos.x, z: entity.pos.z }\n\tconst spot = (entity.flying ? world.air : world.nav).closestPoint(to, 6) ?? to\n\thalt(world, entity)\n\tworld.place(entity, spot)\n\tentity.prevPos.x = spot.x\n\tentity.prevPos.z = spot.z\n\tworld.events.emit(portalUsed, { entity: entity.id, from, to: { x: spot.x, z: spot.z }, gate: gate?.id })\n}\n\n/** Going through a waygate: walking into it, then out where it leads. Failed when it is shut, or there is no way to it */\nconst enterOrder: OrderBehavior<{ tried?: number }, Pick<OrderParams, 'target'>> = {\n\ttype: 'enterWaygate',\n\taccepts(world, entity, init) {\n\t\tconst gate = world.get(init.target)\n\t\treturn !!entity.get(moving) && !!gate && !!waygateTarget(world, gate)\n\t},\n\tupdate(world, entity, order) {\n\t\tconst gate = world.get(order.init.target)\n\t\tconst to = gate && waygateTarget(world, gate)\n\t\tif (!gate || !to) return 'failed'\n\t\tif (distanceToEdge(entity.pos, gate) - entity.def.radius <= REACH) {\n\t\t\tportal(world, entity, to, gate)\n\t\t\treturn 'done'\n\t\t}\n\t\tconst m = entity.get(moving)!\n\t\tif (m.status === 'moving') return 'running'\n\t\tif (m.status === 'failed' && order.state.tried === world.tick - 1) return 'failed'\n\t\torder.state.tried = world.tick\n\t\tmoveToEntity(world, entity, gate, REACH * 0.5)\n\t\treturn 'running'\n\t}\n}\n\n/** Offsets around a spot, nearest first: where those a town portal brings stand */\nconst AROUND: readonly Vec2[] = (() => {\n\tconst all: Vec2[] = []\n\tfor (let dz = -3; dz <= 3; dz++) for (let dx = -3; dx <= 3; dx++) all.push({ x: dx * 1.2, z: dz * 1.2 })\n\treturn all.sort((a, b) => a.x * a.x + a.z * a.z - (b.x * b.x + b.z * b.z))\n})()\n\n/**\n * Takes a unit and as many as `count` of its owner's units within `radius` of it, nearest first, to its side's home\n * nearest `near` (`homeOf`), spread around it: what the `townPortal` effect does, in code. Gives back who went, none\n * when the side has no home\n *\n * @beta\n */\nexport function townPortal(world: World, caster: Entity, near: Vec2, radius = 7, count = 12): Entity[] {\n\tconst home = homeOf(world, caster.owner, near)\n\tif (!home) return []\n\tconst others = world.spatial\n\t\t.query(caster.pos.x, caster.pos.z, radius)\n\t\t.filter(\n\t\t\t(entity) =>\n\t\t\t\tentity !== caster &&\n\t\t\t\tentity.alive &&\n\t\t\t\t!entity.hidden &&\n\t\t\t\tentity.owner === caster.owner &&\n\t\t\t\t!!entity.get(moving) &&\n\t\t\t\tdistanceToEdge(caster.pos, entity) <= radius\n\t\t)\n\t\t.map((entity) => ({ entity, d: distSq(entity.pos, caster.pos) }))\n\t\t.sort((a, b) => a.d - b.d || a.entity.id - b.entity.id)\n\t\t.slice(0, Math.max(0, count))\n\t\t.map(({ entity }) => entity)\n\tconst going = [caster, ...others]\n\tgoing.forEach((entity, i) => {\n\t\tconst offset = AROUND[i % AROUND.length]\n\t\tportal(world, entity, { x: home.x + offset.x, z: home.z + offset.z })\n\t})\n\treturn going\n}\n\nconst townPortalEffect = defineEffect({ type: 'townPortal', run: (context, effect) => {\n\t\tconst { world, caster, point, level } = context\n\t\ttownPortal(world, caster, point, valueOf(context, effect.radius, undefined, 7), Math.round(at(effect.count, level, 12)))\n\t}, fields: ['count'] })\n\n/**\n * Portals, as in classic RTS games: waygates (`UnitTypeDef.waygate`), which a unit told to (a right-click, as any building is\n * walked up to) walks into and comes out of where the gate leads (the \"Leads to\" field of a placed one, a point of the\n * map; `setWaygate` in code), and the `townPortal` effect (`EffectTypes.townPortal`), which takes the caster and its\n * units around it to its side's home nearest where it was aimed (`homeOf`: the map's `home.<team>` point, or the\n * nearest of its buildings). `portal` and `townPortal` do them in code\n *\n * @beta\n */\nexport function portalsPack(): GamePack {\n\t// told to walk up to a waygate that leads somewhere: through it\n\tconst intoGate = defineHook({\n\t\thook: 'beforeOrder',\n\t\tid: 'portals',\n\t\trun(world, event) {\n\t\t\tconst { order, entity } = event\n\t\t\tif (order.type !== 'move' || order.init.target === undefined) return\n\t\t\tconst gate = world.get(order.init.target)\n\t\t\tif (!gate?.def.waygate || !waygateTarget(world, gate) || !entity.get(moving)) return\n\t\t\tevent.rejected = true\n\t\t\tgiveOrder(world, entity, createOrder(world, { type: 'enterWaygate', target: gate.id }, order.groupId), event.queued)\n\t\t}\n\t})\n\treturn {\n\t\tid: PORTALS,\n\t\torders: [enterOrder],\n\t\tcomponents: [waygate],\n\t\tevents: [portalUsed],\n\t\teffects: [townPortalEffect],\n\t\thooks: [intoGate]\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,IAAa,UAAU;;;;;;;AAQvB,IAAa,UAAU,gBAAsC;CAAE,IAAI;CAAgB,OAAO;EAAE,MAAM;EAAY,MAAM;EAA0D,MAAM;EAAS,MAAM,QAAQ,CAAC,CAAC,IAAI;CAAQ;AAAE,CAAC;;;;;;AAO5N,IAAa,aAAa,kBAA2E;CAAE,IAAI;CAAmB,WAAW;AAAW,CAAC;;AAGrJ,IAAM,QAAQ;;;;;;AAOd,SAAgB,cAAc,OAAc,MAAgC;CAC3E,MAAM,KAAK,KAAK,IAAI,OAAO;CAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,OAAO,KAAA;CAC/B,IAAI,OAAO,OAAO,UAAU,OAAO;CACnC,OAAO,MAAM,IAAI,OAAO,MAAM,UAAU,MAAM,SAAS,EAAE,IAAI,MAAM,IAAI,MAAM,EAAE,IAAI,KAAA;AACpF;;;;;;;AAQA,SAAgB,WAAW,MAAc,IAAgC;CACxE,KAAK,IAAI,SAAS,OAAO,OAAO,YAAY,KAAK;EAAE,GAAG,GAAG;EAAG,GAAG,GAAG;CAAE,IAAI,EAAE;AAC3E;;;;;;;AAQA,SAAgB,OAAO,OAAc,QAAgB,IAAU,MAAqB;CACnF,MAAM,OAAO;EAAE,GAAG,OAAO,IAAI;EAAG,GAAG,OAAO,IAAI;CAAE;CAChD,MAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,MAAM,IAAA,CAAK,aAAa,IAAI,CAAC,KAAK;CAC5E,KAAK,OAAO,MAAM;CAClB,MAAM,MAAM,QAAQ,IAAI;CACxB,OAAO,QAAQ,IAAI,KAAK;CACxB,OAAO,QAAQ,IAAI,KAAK;CACxB,MAAM,OAAO,KAAK,YAAY;EAAE,QAAQ,OAAO;EAAI;EAAM,IAAI;GAAE,GAAG,KAAK;GAAG,GAAG,KAAK;EAAE;EAAG,MAAM,MAAM;CAAG,CAAC;AACxG;;AAGA,IAAM,aAA6E;CAClF,MAAM;CACN,QAAQ,OAAO,QAAQ,MAAM;EAC5B,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM;EAClC,OAAO,CAAC,CAAC,OAAO,IAAI,MAAM,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,OAAO,IAAI;CACrE;CACA,OAAO,OAAO,QAAQ,OAAO;EAC5B,MAAM,OAAO,MAAM,IAAI,MAAM,KAAK,MAAM;EACxC,MAAM,KAAK,QAAQ,cAAc,OAAO,IAAI;EAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO;EACzB,IAAI,eAAe,OAAO,KAAK,IAAI,IAAI,OAAO,IAAI,UAAU,OAAO;GAClE,OAAO,OAAO,QAAQ,IAAI,IAAI;GAC9B,OAAO;EACR;EACA,MAAM,IAAI,OAAO,IAAI,MAAM;EAC3B,IAAI,EAAE,WAAW,UAAU,OAAO;EAClC,IAAI,EAAE,WAAW,YAAY,MAAM,MAAM,UAAU,MAAM,OAAO,GAAG,OAAO;EAC1E,MAAM,MAAM,QAAQ,MAAM;EAC1B,aAAa,OAAO,QAAQ,MAAM,QAAQ,EAAG;EAC7C,OAAO;CACR;AACD;;AAGA,IAAM,gBAAiC;CACtC,MAAM,MAAc,CAAC;CACrB,KAAK,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,KAAK,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,IAAI,KAAK;EAAE,GAAG,KAAK;EAAK,GAAG,KAAK;CAAI,CAAC;CACvG,OAAO,IAAI,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;AAC1E,EAAA,CAAG;;;;;;;;AASH,SAAgB,WAAW,OAAc,QAAgB,MAAY,SAAS,GAAG,QAAQ,IAAc;CACtG,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI;CAC7C,IAAI,CAAC,MAAM,OAAO,CAAC;CAgBnB,MAAM,QAAQ,CAAC,QAAQ,GAfR,MAAM,QACnB,MAAM,OAAO,IAAI,GAAG,OAAO,IAAI,GAAG,MAAM,CAAC,CACzC,QACC,WACA,WAAW,UACX,OAAO,SACP,CAAC,OAAO,UACR,OAAO,UAAU,OAAO,SACxB,CAAC,CAAC,OAAO,IAAI,MAAM,KACnB,eAAe,OAAO,KAAK,MAAM,KAAK,MACxC,CAAC,CACA,KAAK,YAAY;EAAE;EAAQ,GAAG,OAAO,OAAO,KAAK,OAAO,GAAG;CAAE,EAAE,CAAC,CAChE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,CACtD,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC,CAC5B,KAAK,EAAE,aAAa,MACI,CAAM;CAChC,MAAM,SAAS,QAAQ,MAAM;EAC5B,MAAM,SAAS,OAAO,IAAI,OAAO;EACjC,OAAO,OAAO,QAAQ;GAAE,GAAG,KAAK,IAAI,OAAO;GAAG,GAAG,KAAK,IAAI,OAAO;EAAE,CAAC;CACrE,CAAC;CACD,OAAO;AACR;AAEA,IAAM,mBAAmB,aAAa;CAAE,MAAM;CAAc,MAAM,SAAS,WAAW;EACpF,MAAM,EAAE,OAAO,QAAQ,OAAO,UAAU;EACxC,WAAW,OAAO,QAAQ,OAAO,QAAQ,SAAS,OAAO,QAAQ,KAAA,GAAW,CAAC,GAAG,KAAK,MAAM,GAAG,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC;CACxH;CAAG,QAAQ,CAAC,OAAO;AAAE,CAAC;;;;;;;;;;AAWvB,SAAgB,cAAwB;CAEvC,MAAM,WAAW,WAAW;EAC3B,MAAM;EACN,IAAI;EACJ,IAAI,OAAO,OAAO;GACjB,MAAM,EAAE,OAAO,WAAW;GAC1B,IAAI,MAAM,SAAS,UAAU,MAAM,KAAK,WAAW,KAAA,GAAW;GAC9D,MAAM,OAAO,MAAM,IAAI,MAAM,KAAK,MAAM;GACxC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,cAAc,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,GAAG;GAC9E,MAAM,WAAW;GACjB,UAAU,OAAO,QAAQ,YAAY,OAAO;IAAE,MAAM;IAAgB,QAAQ,KAAK;GAAG,GAAG,MAAM,OAAO,GAAG,MAAM,MAAM;EACpH;CACD,CAAC;CACD,OAAO;EACN,IAAI;EACJ,QAAQ,CAAC,UAAU;EACnB,YAAY,CAAC,OAAO;EACpB,QAAQ,CAAC,UAAU;EACnB,SAAS,CAAC,gBAAgB;EAC1B,OAAO,CAAC,QAAQ;CACjB;AACD"}
package/dist/prefabs.d.ts CHANGED
@@ -7,17 +7,22 @@ import type { World } from './world';
7
7
  * @beta
8
8
  */
9
9
  export interface PrefabObject {
10
+ /** The unit type id to spawn */
10
11
  type: string;
11
12
  /**
12
13
  * Whose: the player the prefab is spawned for (`'owner'`, the default), neutral, the creeps, or a player of the
13
14
  * map's by id (a file's objects say the id they had; one that is a player's becomes `'owner'` as the file is read)
14
15
  */
15
16
  owner?: 'owner' | 'neutral' | 'creeps' | PlayerId;
17
+ /** Where it stands east-west, in cells from the prefab's middle before the prefab's turn and size */
16
18
  x: number;
19
+ /** Where it stands north-south, in cells from the prefab's middle before the prefab's turn and size */
17
20
  z: number;
18
21
  /** Radians, the way entities face */
19
22
  facing?: number;
23
+ /** Size of the entity as a multiple of its type's own; the prefab's scale is applied on top */
20
24
  scale?: number;
25
+ /** The id of the look the entity is drawn with, in place of its type's own */
21
26
  look?: string;
22
27
  /** A name of its own, for the rules to find it by: made free where it is taken (a number added) */
23
28
  name?: string;
@@ -30,16 +35,22 @@ export interface PrefabObject {
30
35
  * @beta
31
36
  */
32
37
  export interface PrefabCamp {
38
+ /** East-west position of the camp from the prefab's middle, in cells */
33
39
  x: number;
40
+ /** North-south position of the camp from the prefab's middle, in cells */
34
41
  z: number;
42
+ /** Unit type ids of the creeps the camp holds */
35
43
  units: string[];
44
+ /** A name for the camp, for the rules to find it by */
36
45
  name?: string;
37
46
  }
38
47
  /** An area the rules watch, of a prefab: its id gets the spawn's own suffix, so that two of one prefab are two areas *
39
48
  * @beta
40
49
  */
41
50
  export interface PrefabArea {
51
+ /** The area's id before the spawn's own suffix is added, so two spawns of one prefab give two areas */
42
52
  id: string;
53
+ /** The area's shape, placed around the prefab's middle */
43
54
  shape: AreaShape;
44
55
  }
45
56
  /** A prefab inside a prefab: spawned with it, its middle where it says from the outer one's, turned and sized with it *
@@ -48,18 +59,24 @@ export interface PrefabArea {
48
59
  export interface PrefabInside {
49
60
  /** The prefab's id */
50
61
  prefab: string;
62
+ /** East-west position of the inner prefab's middle, from the outer one's middle, in cells */
51
63
  x: number;
64
+ /** North-south position of the inner prefab's middle, from the outer one's middle, in cells */
52
65
  z: number;
53
66
  /** Radians, the way facings turn: on top of the outer prefab's turn */
54
67
  facing?: number;
68
+ /** Size of the inner prefab as a multiple, on top of the outer prefab's scale */
55
69
  scale?: number;
56
70
  }
57
71
  /** What a prefab is made of, around its middle (0, 0) *
58
72
  * @beta
59
73
  */
60
74
  export interface PrefabContents {
75
+ /** The units and buildings it spawns */
61
76
  objects?: PrefabObject[];
77
+ /** The camps of creeps it spawns */
62
78
  camps?: PrefabCamp[];
79
+ /** The areas it adds for the rules to watch */
63
80
  areas?: PrefabArea[];
64
81
  /** Prefabs inside it, spawned with it (a prefab that holds itself, at any depth, is not spawned past the first) */
65
82
  prefabs?: PrefabInside[];
@@ -73,24 +90,28 @@ export interface PrefabContents {
73
90
  export interface PrefabDef {
74
91
  /** Shared by every game: give it a prefix of the game's (`'td.fortress'`) */
75
92
  id: string;
93
+ /** A readable name for the prefab, for tools that list prefabs */
76
94
  name?: string;
95
+ /** What the prefab is made of: plain data, or a function of the spawn point and the world that returns it */
77
96
  contents: PrefabContents | ((at: Vec2, world: World) => PrefabContents);
78
97
  }
79
98
  /**
80
99
  * Typed help for writing a prefab
81
100
  *
82
- * @beta
101
+ * @public
83
102
  */
84
103
  export declare const definePrefab: (def: PrefabDef) => PrefabDef;
85
104
  /** How a prefab is spawned: where its middle goes, for whom, turned and sized *
86
105
  * @beta
87
106
  */
88
107
  export interface SpawnPrefabOptions {
108
+ /** Where the prefab's middle goes, in world coordinates */
89
109
  at: Vec2;
90
110
  /** The player the prefab's `'owner'` objects are spawned for: neutral when left out */
91
111
  owner?: PlayerId;
92
112
  /** Radians, the way facings turn: the prefab turned around its middle */
93
113
  facing?: number;
114
+ /** Size multiplier of the prefab around its middle; whole size when left out */
94
115
  scale?: number;
95
116
  /** Parts left out, by their index in the prefab's lists: a gate without its towers */
96
117
  without?: {
@@ -104,7 +125,9 @@ export interface SpawnPrefabOptions {
104
125
  * @beta
105
126
  */
106
127
  export interface SpawnedPrefab {
128
+ /** The units and buildings spawned */
107
129
  entities: Entity[];
130
+ /** The camps of creeps spawned */
108
131
  camps: Camp[];
109
132
  /** The ids of the areas added */
110
133
  areas: string[];
@@ -132,7 +155,7 @@ export declare function nestedPartId(nested: number, id: number): number;
132
155
  * variant is read through its source and a prefab with prefabs inside through those, as the editor places them, from
133
156
  * the files given
134
157
  *
135
- * @beta
158
+ * @public
136
159
  */
137
160
  export declare function prefabsFrom(files: Record<string, unknown>, options?: {
138
161
  prefix?: string;