@v12-engine/engine 0.1.1 → 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,95 @@
1
+ import type { Entity } from '#engine/entity';
2
+ import { type Message } from '#engine/messages';
3
+ import type { World } from '#engine/world';
4
+ /**
5
+ * Who of the heroes did a hero harm or good a moment ago, by id, and when (the game's time): `hurt` by its enemies,
6
+ * `helped` by its allies (a heal, a shield, a buff). What its assists are found from (`heroAssists`). Saved with it
7
+ *
8
+ * @beta
9
+ */
10
+ export interface AssistLog {
11
+ /** The enemy heroes that hurt it, by id, and the last time each did */
12
+ hurt: Record<string, number>;
13
+ /** The allied heroes that healed, shielded or buffed it, by id, and the last time each did */
14
+ helped: Record<string, number>;
15
+ }
16
+ /**
17
+ * What a hero's harm and help a moment ago was (`AssistLog`), on the hero, while assists count (`HeroSettings.assistTime`)
18
+ *
19
+ * @beta
20
+ */
21
+ export declare const assistLog: import("#engine/components").Component<AssistLog, AssistLog>;
22
+ /**
23
+ * A hero's kills, deaths and assists, and its kills since it last died (`streak`): its tally, sent to everyone who
24
+ * sees it, for a scoreboard
25
+ *
26
+ * @beta
27
+ */
28
+ export interface HeroTally {
29
+ /** Heroes it killed */
30
+ kills: number;
31
+ /** Times it fell */
32
+ deaths: number;
33
+ /** Heroes' kills it assisted (`heroAssists`) */
34
+ assists: number;
35
+ /** Heroes it killed since it last died */
36
+ streak: number;
37
+ /** The game's time it may buy itself back again (`buyBack`): none until it has */
38
+ buybackAt?: number;
39
+ }
40
+ /**
41
+ * A hero's tally (`HeroTally`): kills, deaths, assists, its streak and when it may buy itself back
42
+ *
43
+ * @beta
44
+ */
45
+ export declare const heroTally: import("#engine/components").Component<HeroTally, HeroTally>;
46
+ /**
47
+ * The hero behind what did something: itself, or the hero whose summon it is (`summoned.by`). None for what no hero
48
+ * is behind (a tower, a creep)
49
+ *
50
+ * @beta
51
+ */
52
+ export declare function heroBehind(world: World, entity: Entity | undefined): Entity | undefined;
53
+ /**
54
+ * The heroes who assisted the kill of `victim` by `killer` as the engine counts them: the enemies of the victim that
55
+ * hurt it within the last `HeroSettings.assistTime` seconds, and the allies of the killer's hero that healed, shielded
56
+ * or buffed it within as long; neither the killer nor its hero, nor what is no hero (an illusion). By id, the same on
57
+ * every machine. What `HeroSettings.assists` is given to keep or change
58
+ *
59
+ * @beta
60
+ */
61
+ export declare function foundAssists(world: World, victim: Entity, killer: Entity | undefined): Entity[];
62
+ /**
63
+ * The heroes who assist the kill of `victim` by `killer`: those the engine found (`foundAssists`), as the game's rule
64
+ * keeps them (`HeroSettings.assists`). None for a victim that is no hero, nor in a game without the heroes pack
65
+ *
66
+ * @beta
67
+ */
68
+ export declare function heroAssists(world: World, victim: Entity, killer: Entity | undefined): Entity[];
69
+ /**
70
+ * A hero fell to `killer`, with these assisting: their records, the streaks (the killer's hero one more, the victim's
71
+ * ended, its killer paid the shutdown for it), and the assists' gold. The pack's `death` hook, after the experience
72
+ *
73
+ * @beta
74
+ */
75
+ export declare function settleHeroKill(world: World, victim: Entity, killer: Entity | undefined, assists: readonly Entity[]): void;
76
+ /**
77
+ * What a hero's harm and help is noted from, while assists count: a hero hurt by an enemy hero (or its summon), healed
78
+ * by an ally's, given a buff (a shield among them) by an ally's that is no harm
79
+ */
80
+ export declare const assistListeners: import("#engine/events").ListenerDef[];
81
+ /**
82
+ * Why a fallen hero cannot be bought back now, or undefined when it can: a living one, one being revived at an altar,
83
+ * one the game has no buyback for, one waiting out its last, one whose player is short of its price
84
+ *
85
+ * @beta
86
+ */
87
+ export declare function buybackRefusal(world: World, hero: Entity): Message | undefined;
88
+ /**
89
+ * Buys a fallen hero back (`HeroSettings.buybackCost`): its player pays, it is back at once at its side's home (where it
90
+ * fell when there is none), its wait to come back by itself over, and it may not again for `buybackCooldown`
91
+ * seconds. False, and the player told why, where it cannot (`buybackRefusal`)
92
+ *
93
+ * @beta
94
+ */
95
+ export declare function buyBack(world: World, hero: Entity): boolean;
@@ -0,0 +1,250 @@
1
+ import { defineComponent } from "../../components.js";
2
+ import { defineListener } from "../../events.js";
3
+ import { bounty, buffApplied, damaged, healed } from "../../engineEvents.js";
4
+ import { earn, shortOf, spend } from "../../player.js";
5
+ import { engineMessage } from "../../messages.js";
6
+ import { boughtBack, heroAssisted, heroShutdown, heroState, killStreak, respawning, reviveHero } from "../../hero.js";
7
+ import { summoned } from "../../summoned.js";
8
+ import { worthless } from "../../summons.js";
9
+ import { homeOf } from "../../home.js";
10
+ //#region src/packs/heroes/loop.ts
11
+ /**
12
+ * The hero loop of the heroes pack (items-and-spells plan, phase 4): assists, kill streaks and the shutdown that ends
13
+ * one, and buyback. Who hurt a hero, or helped the hero that killed it (a heal, a shield, a buff), within the last
14
+ * `HeroSettings.assistTime` seconds shares its kill's experience and is paid for it; a hero's kills in a row without
15
+ * dying make its death worth more to whoever ends it; a fallen hero comes back at once, for gold that grows with its
16
+ * level, then waits a while to do it again. Each a setting of the pack with the game's own rule in its place
17
+ */
18
+ /**
19
+ * What a hero's harm and help a moment ago was (`AssistLog`), on the hero, while assists count (`HeroSettings.assistTime`)
20
+ *
21
+ * @beta
22
+ */
23
+ var assistLog = defineComponent({ id: "heroes.assists" });
24
+ /**
25
+ * A hero's tally (`HeroTally`): kills, deaths, assists, its streak and when it may buy itself back
26
+ *
27
+ * @beta
28
+ */
29
+ var heroTally = defineComponent({
30
+ id: "heroes.tally",
31
+ replicate: "everyone",
32
+ same: (a, b) => a.kills === b.kills && a.deaths === b.deaths && a.assists === b.assists && a.streak === b.streak && a.buybackAt === b.buybackAt
33
+ });
34
+ /** The tally of a hero, made as it is first asked for */
35
+ function tallyOf(hero) {
36
+ let record = hero.get(heroTally);
37
+ if (!record) hero.set(heroTally, record = {
38
+ kills: 0,
39
+ deaths: 0,
40
+ assists: 0,
41
+ streak: 0
42
+ });
43
+ return record;
44
+ }
45
+ /**
46
+ * The hero behind what did something: itself, or the hero whose summon it is (`summoned.by`). None for what no hero
47
+ * is behind (a tower, a creep)
48
+ *
49
+ * @beta
50
+ */
51
+ function heroBehind(world, entity) {
52
+ if (!entity) return void 0;
53
+ if (entity.has(heroState)) return worthless(entity) ? void 0 : entity;
54
+ const master = world.get(entity.get(summoned)?.by);
55
+ return master?.has(heroState) && !worthless(master) ? master : void 0;
56
+ }
57
+ /** Writes down that `by` did `hero` harm or good now, and forgets what is past counting */
58
+ function note(world, hero, kind, by) {
59
+ const window = world.settings.heroes.assistTime;
60
+ if (!(window > 0) || by === hero) return;
61
+ let log = hero.get(assistLog);
62
+ if (!log) hero.set(assistLog, log = {
63
+ hurt: {},
64
+ helped: {}
65
+ });
66
+ const list = log[kind];
67
+ for (const id in list) if (list[id] < world.time - window) delete list[id];
68
+ list[by.id] = world.time;
69
+ }
70
+ /**
71
+ * The heroes who assisted the kill of `victim` by `killer` as the engine counts them: the enemies of the victim that
72
+ * hurt it within the last `HeroSettings.assistTime` seconds, and the allies of the killer's hero that healed, shielded
73
+ * or buffed it within as long; neither the killer nor its hero, nor what is no hero (an illusion). By id, the same on
74
+ * every machine. What `HeroSettings.assists` is given to keep or change
75
+ *
76
+ * @beta
77
+ */
78
+ function foundAssists(world, victim, killer) {
79
+ const window = world.settings.heroes.assistTime;
80
+ if (!(window > 0)) return [];
81
+ const since = world.time - window;
82
+ const killerHero = heroBehind(world, killer);
83
+ const ids = /* @__PURE__ */ new Set();
84
+ const hurt = victim.get(assistLog)?.hurt;
85
+ for (const id in hurt) if (hurt[id] >= since) ids.add(Number(id));
86
+ const helped = killerHero?.get(assistLog)?.helped;
87
+ for (const id in helped) if (helped[id] >= since) ids.add(Number(id));
88
+ const found = [];
89
+ for (const id of [...ids].sort((a, b) => a - b)) {
90
+ const hero = world.entities.get(id);
91
+ if (!hero || hero === killer || hero === killerHero || hero === victim || !hero.has(heroState) || worthless(hero)) continue;
92
+ if (!world.areEnemies(hero.owner, victim.owner)) continue;
93
+ found.push(hero);
94
+ }
95
+ return found;
96
+ }
97
+ /**
98
+ * The heroes who assist the kill of `victim` by `killer`: those the engine found (`foundAssists`), as the game's rule
99
+ * keeps them (`HeroSettings.assists`). None for a victim that is no hero, nor in a game without the heroes pack
100
+ *
101
+ * @beta
102
+ */
103
+ function heroAssists(world, victim, killer) {
104
+ if (!victim.has(heroState) || worthless(victim) || !(world.settings.heroes.assistTime > 0)) return [];
105
+ return [...world.settings.heroes.assists(world, victim, killer, foundAssists(world, victim, killer))];
106
+ }
107
+ /** Pays a player gold for a kill, told as a bounty is (the score counts it as one) */
108
+ function pay(world, player, victim, amount) {
109
+ const { currency } = world.registry;
110
+ const gold = Math.round(amount);
111
+ if (!currency || !(gold > 0)) return 0;
112
+ earn(world.player(player).resources, currency, gold);
113
+ world.events.emit(bounty, {
114
+ entity: victim,
115
+ player,
116
+ amount: gold
117
+ });
118
+ return gold;
119
+ }
120
+ /**
121
+ * A hero fell to `killer`, with these assisting: their records, the streaks (the killer's hero one more, the victim's
122
+ * ended, its killer paid the shutdown for it), and the assists' gold. The pack's `death` hook, after the experience
123
+ *
124
+ * @beta
125
+ */
126
+ function settleHeroKill(world, victim, killer, assists) {
127
+ const settings = world.settings.heroes;
128
+ const own = tallyOf(victim);
129
+ const streak = own.streak;
130
+ own.deaths++;
131
+ own.streak = 0;
132
+ victim.remove(assistLog);
133
+ const enemy = killer && world.areEnemies(killer.owner, victim.owner) ? killer : void 0;
134
+ const killerHero = heroBehind(world, enemy);
135
+ if (killerHero) {
136
+ const record = tallyOf(killerHero);
137
+ record.kills++;
138
+ record.streak++;
139
+ world.events.emit(killStreak, {
140
+ hero: killerHero.id,
141
+ type: killerHero.def.id,
142
+ player: killerHero.owner,
143
+ streak: record.streak
144
+ });
145
+ }
146
+ const worth = streak > 0 ? settings.shutdownGold(world, victim, streak) : 0;
147
+ if (worth > 0) {
148
+ const gold = enemy ? pay(world, enemy.owner, victim, worth) : 0;
149
+ world.events.emit(heroShutdown, {
150
+ hero: victim.id,
151
+ streak,
152
+ ...enemy && {
153
+ killer: enemy.id,
154
+ player: enemy.owner
155
+ },
156
+ gold
157
+ });
158
+ }
159
+ const each = assists.length ? settings.assistGold(world, victim, killer, assists) : 0;
160
+ for (const hero of assists) {
161
+ tallyOf(hero).assists++;
162
+ const gold = pay(world, hero.owner, victim, each);
163
+ world.events.emit(heroAssisted, {
164
+ hero: hero.id,
165
+ type: hero.def.id,
166
+ player: hero.owner,
167
+ victim: victim.id,
168
+ ...killer && { killer: killer.id },
169
+ gold
170
+ });
171
+ }
172
+ }
173
+ /**
174
+ * What a hero's harm and help is noted from, while assists count: a hero hurt by an enemy hero (or its summon), healed
175
+ * by an ally's, given a buff (a shield among them) by an ally's that is no harm
176
+ */
177
+ var assistListeners = [
178
+ defineListener({
179
+ id: "heroes.assists.hurt",
180
+ event: damaged,
181
+ run(world, { target, source, amount }) {
182
+ if (amount <= 0 || !target.has(heroState) || !source) return;
183
+ const by = heroBehind(world, source);
184
+ if (by && world.areEnemies(by.owner, target.owner)) note(world, target, "hurt", by);
185
+ }
186
+ }),
187
+ defineListener({
188
+ id: "heroes.assists.healed",
189
+ event: healed,
190
+ run(world, { target, source, amount }) {
191
+ if (amount <= 0 || !target.has(heroState) || !source) return;
192
+ const by = heroBehind(world, source);
193
+ if (by && world.areAllies(by.owner, target.owner)) note(world, target, "helped", by);
194
+ }
195
+ }),
196
+ defineListener({
197
+ id: "heroes.assists.buffed",
198
+ event: buffApplied,
199
+ run(world, { target, source, buff }) {
200
+ if (!target.has(heroState) || !source || world.registry.buff(buff).harmful) return;
201
+ const by = heroBehind(world, source);
202
+ if (by && world.areAllies(by.owner, target.owner)) note(world, target, "helped", by);
203
+ }
204
+ })
205
+ ];
206
+ /**
207
+ * Why a fallen hero cannot be bought back now, or undefined when it can: a living one, one being revived at an altar,
208
+ * one the game has no buyback for, one waiting out its last, one whose player is short of its price
209
+ *
210
+ * @beta
211
+ */
212
+ function buybackRefusal(world, hero) {
213
+ if (hero.alive || !hero.has(heroState) || hero.reviving) return engineMessage("cannotDoThat");
214
+ const cost = world.settings.heroes.buybackCost(world, hero);
215
+ if (!cost) return engineMessage("noBuyback");
216
+ const at = hero.get(heroTally)?.buybackAt;
217
+ if (at !== void 0 && at > world.time) return engineMessage("buybackNotReady", { seconds: Math.ceil(at - world.time) });
218
+ const short = shortOf(world.player(hero.owner).resources, cost);
219
+ if (short) return engineMessage("notEnough", { resource: short });
220
+ }
221
+ /**
222
+ * Buys a fallen hero back (`HeroSettings.buybackCost`): its player pays, it is back at once at its side's home (where it
223
+ * fell when there is none), its wait to come back by itself over, and it may not again for `buybackCooldown`
224
+ * seconds. False, and the player told why, where it cannot (`buybackRefusal`)
225
+ *
226
+ * @beta
227
+ */
228
+ function buyBack(world, hero) {
229
+ const refusal = buybackRefusal(world, hero);
230
+ if (refusal) {
231
+ world.message(hero.owner, refusal);
232
+ return false;
233
+ }
234
+ const cost = world.settings.heroes.buybackCost(world, hero);
235
+ spend(world, hero.owner, cost, "buyback", hero.def.id);
236
+ tallyOf(hero).buybackAt = world.time + world.settings.heroes.buybackCooldown;
237
+ hero.remove(respawning);
238
+ reviveHero(world, hero, homeOf(world, hero.owner, hero.pos) ?? hero.pos);
239
+ world.events.emit(boughtBack, {
240
+ hero: hero.id,
241
+ type: hero.def.id,
242
+ player: hero.owner,
243
+ cost
244
+ });
245
+ return true;
246
+ }
247
+ //#endregion
248
+ export { assistListeners, assistLog, buyBack, buybackRefusal, foundAssists, heroAssists, heroBehind, heroTally, settleHeroKill };
249
+
250
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","names":["bountyEvent"],"sources":["../../../src/packs/heroes/loop.ts"],"sourcesContent":["/**\n * The hero loop of the heroes pack (items-and-spells plan, phase 4): assists, kill streaks and the shutdown that ends\n * one, and buyback. Who hurt a hero, or helped the hero that killed it (a heal, a shield, a buff), within the last\n * `HeroSettings.assistTime` seconds shares its kill's experience and is paid for it; a hero's kills in a row without\n * dying make its death worth more to whoever ends it; a fallen hero comes back at once, for gold that grows with its\n * level, then waits a while to do it again. Each a setting of the pack with the game's own rule in its place\n */\nimport { bounty as bountyEvent, buffApplied, damaged, healed } from '#engine/engineEvents'\nimport { defineComponent } from '#engine/components'\nimport type { Entity, PlayerId } from '#engine/entity'\nimport { defineListener } from '#engine/events'\nimport { boughtBack, heroAssisted, heroShutdown, heroState, killStreak, respawning, reviveHero } from '#engine/hero'\nimport { homeOf } from '#engine/home'\nimport { engineMessage, type Message } from '#engine/messages'\nimport { earn, shortOf, spend } from '#engine/player'\nimport { summoned } from '#engine/summoned'\nimport { worthless } from '#engine/summons'\nimport type { World } from '#engine/world'\n\n/**\n * Who of the heroes did a hero harm or good a moment ago, by id, and when (the game's time): `hurt` by its enemies,\n * `helped` by its allies (a heal, a shield, a buff). What its assists are found from (`heroAssists`). Saved with it\n *\n * @beta\n */\nexport interface AssistLog {\n\t/** The enemy heroes that hurt it, by id, and the last time each did */\n\thurt: Record<string, number>\n\t/** The allied heroes that healed, shielded or buffed it, by id, and the last time each did */\n\thelped: Record<string, number>\n}\n\n/**\n * What a hero's harm and help a moment ago was (`AssistLog`), on the hero, while assists count (`HeroSettings.assistTime`)\n *\n * @beta\n */\nexport const assistLog = defineComponent<AssistLog>({ id: 'heroes.assists' })\n\n/**\n * A hero's kills, deaths and assists, and its kills since it last died (`streak`): its tally, sent to everyone who\n * sees it, for a scoreboard\n *\n * @beta\n */\nexport interface HeroTally {\n\t/** Heroes it killed */\n\tkills: number\n\t/** Times it fell */\n\tdeaths: number\n\t/** Heroes' kills it assisted (`heroAssists`) */\n\tassists: number\n\t/** Heroes it killed since it last died */\n\tstreak: number\n\t/** The game's time it may buy itself back again (`buyBack`): none until it has */\n\tbuybackAt?: number\n}\n\n/**\n * A hero's tally (`HeroTally`): kills, deaths, assists, its streak and when it may buy itself back\n *\n * @beta\n */\nexport const heroTally = defineComponent<HeroTally>({\n\tid: 'heroes.tally',\n\treplicate: 'everyone',\n\tsame: (a, b) => a.kills === b.kills && a.deaths === b.deaths && a.assists === b.assists && a.streak === b.streak && a.buybackAt === b.buybackAt\n})\n\n/** The tally of a hero, made as it is first asked for */\nfunction tallyOf(hero: Entity): HeroTally {\n\tlet record = hero.get(heroTally)\n\tif (!record) hero.set(heroTally, (record = { kills: 0, deaths: 0, assists: 0, streak: 0 }))\n\treturn record\n}\n\n/**\n * The hero behind what did something: itself, or the hero whose summon it is (`summoned.by`). None for what no hero\n * is behind (a tower, a creep)\n *\n * @beta\n */\nexport function heroBehind(world: World, entity: Entity | undefined): Entity | undefined {\n\tif (!entity) return undefined\n\tif (entity.has(heroState)) return worthless(entity) ? undefined : entity\n\tconst master = world.get(entity.get(summoned)?.by)\n\treturn master?.has(heroState) && !worthless(master) ? master : undefined\n}\n\n/** Writes down that `by` did `hero` harm or good now, and forgets what is past counting */\nfunction note(world: World, hero: Entity, kind: keyof AssistLog, by: Entity): void {\n\tconst window = world.settings.heroes.assistTime\n\tif (!(window > 0) || by === hero) return\n\tlet log = hero.get(assistLog)\n\tif (!log) hero.set(assistLog, (log = { hurt: {}, helped: {} }))\n\tconst list = log[kind]\n\tfor (const id in list) if (list[id] < world.time - window) delete list[id]\n\tlist[by.id] = world.time\n}\n\n/**\n * The heroes who assisted the kill of `victim` by `killer` as the engine counts them: the enemies of the victim that\n * hurt it within the last `HeroSettings.assistTime` seconds, and the allies of the killer's hero that healed, shielded\n * or buffed it within as long; neither the killer nor its hero, nor what is no hero (an illusion). By id, the same on\n * every machine. What `HeroSettings.assists` is given to keep or change\n *\n * @beta\n */\nexport function foundAssists(world: World, victim: Entity, killer: Entity | undefined): Entity[] {\n\tconst window = world.settings.heroes.assistTime\n\tif (!(window > 0)) return []\n\tconst since = world.time - window\n\tconst killerHero = heroBehind(world, killer)\n\tconst ids = new Set<number>()\n\tconst hurt = victim.get(assistLog)?.hurt\n\tfor (const id in hurt) if (hurt[id] >= since) ids.add(Number(id))\n\tconst helped = killerHero?.get(assistLog)?.helped\n\tfor (const id in helped) if (helped[id] >= since) ids.add(Number(id))\n\tconst found: Entity[] = []\n\tfor (const id of [...ids].sort((a, b) => a - b)) {\n\t\tconst hero = world.entities.get(id)\n\t\tif (!hero || hero === killer || hero === killerHero || hero === victim || !hero.has(heroState) || worthless(hero)) continue\n\t\tif (!world.areEnemies(hero.owner, victim.owner)) continue\n\t\tfound.push(hero)\n\t}\n\treturn found\n}\n\n/**\n * The heroes who assist the kill of `victim` by `killer`: those the engine found (`foundAssists`), as the game's rule\n * keeps them (`HeroSettings.assists`). None for a victim that is no hero, nor in a game without the heroes pack\n *\n * @beta\n */\nexport function heroAssists(world: World, victim: Entity, killer: Entity | undefined): Entity[] {\n\tif (!victim.has(heroState) || worthless(victim) || !(world.settings.heroes.assistTime > 0)) return []\n\treturn [...world.settings.heroes.assists(world, victim, killer, foundAssists(world, victim, killer))]\n}\n\n/** Pays a player gold for a kill, told as a bounty is (the score counts it as one) */\nfunction pay(world: World, player: PlayerId, victim: Entity, amount: number): number {\n\tconst { currency } = world.registry\n\tconst gold = Math.round(amount)\n\tif (!currency || !(gold > 0)) return 0\n\tearn(world.player(player).resources, currency, gold)\n\tworld.events.emit(bountyEvent, { entity: victim, player, amount: gold })\n\treturn gold\n}\n\n/**\n * A hero fell to `killer`, with these assisting: their records, the streaks (the killer's hero one more, the victim's\n * ended, its killer paid the shutdown for it), and the assists' gold. The pack's `death` hook, after the experience\n *\n * @beta\n */\nexport function settleHeroKill(world: World, victim: Entity, killer: Entity | undefined, assists: readonly Entity[]): void {\n\tconst settings = world.settings.heroes\n\tconst own = tallyOf(victim)\n\tconst streak = own.streak\n\town.deaths++\n\town.streak = 0\n\t// the victim's log is of this life\n\tvictim.remove(assistLog)\n\tconst enemy = killer && world.areEnemies(killer.owner, victim.owner) ? killer : undefined\n\tconst killerHero = heroBehind(world, enemy)\n\tif (killerHero) {\n\t\tconst record = tallyOf(killerHero)\n\t\trecord.kills++\n\t\trecord.streak++\n\t\tworld.events.emit(killStreak, { hero: killerHero.id, type: killerHero.def.id, player: killerHero.owner, streak: record.streak })\n\t}\n\t// what ending its streak is worth, to whoever ended it\n\tconst worth = streak > 0 ? settings.shutdownGold(world, victim, streak) : 0\n\tif (worth > 0) {\n\t\tconst gold = enemy ? pay(world, enemy.owner, victim, worth) : 0\n\t\tworld.events.emit(heroShutdown, { hero: victim.id, streak, ...(enemy && { killer: enemy.id, player: enemy.owner }), gold })\n\t}\n\tconst each = assists.length ? settings.assistGold(world, victim, killer, assists) : 0\n\tfor (const hero of assists) {\n\t\ttallyOf(hero).assists++\n\t\tconst gold = pay(world, hero.owner, victim, each)\n\t\tworld.events.emit(heroAssisted, {\n\t\t\thero: hero.id,\n\t\t\ttype: hero.def.id,\n\t\t\tplayer: hero.owner,\n\t\t\tvictim: victim.id,\n\t\t\t...(killer && { killer: killer.id }),\n\t\t\tgold\n\t\t})\n\t}\n}\n\n/**\n * What a hero's harm and help is noted from, while assists count: a hero hurt by an enemy hero (or its summon), healed\n * by an ally's, given a buff (a shield among them) by an ally's that is no harm\n */\nexport const assistListeners = [\n\tdefineListener({\n\t\tid: 'heroes.assists.hurt',\n\t\tevent: damaged,\n\t\trun(world, { target, source, amount }) {\n\t\t\tif (amount <= 0 || !target.has(heroState) || !source) return\n\t\t\tconst by = heroBehind(world, source)\n\t\t\tif (by && world.areEnemies(by.owner, target.owner)) note(world, target, 'hurt', by)\n\t\t}\n\t}),\n\tdefineListener({\n\t\tid: 'heroes.assists.healed',\n\t\tevent: healed,\n\t\trun(world, { target, source, amount }) {\n\t\t\tif (amount <= 0 || !target.has(heroState) || !source) return\n\t\t\tconst by = heroBehind(world, source)\n\t\t\tif (by && world.areAllies(by.owner, target.owner)) note(world, target, 'helped', by)\n\t\t}\n\t}),\n\tdefineListener({\n\t\tid: 'heroes.assists.buffed',\n\t\tevent: buffApplied,\n\t\trun(world, { target, source, buff }) {\n\t\t\tif (!target.has(heroState) || !source || world.registry.buff(buff).harmful) return\n\t\t\tconst by = heroBehind(world, source)\n\t\t\tif (by && world.areAllies(by.owner, target.owner)) note(world, target, 'helped', by)\n\t\t}\n\t})\n]\n\n/**\n * Why a fallen hero cannot be bought back now, or undefined when it can: a living one, one being revived at an altar,\n * one the game has no buyback for, one waiting out its last, one whose player is short of its price\n *\n * @beta\n */\nexport function buybackRefusal(world: World, hero: Entity): Message | undefined {\n\tif (hero.alive || !hero.has(heroState) || hero.reviving) return engineMessage('cannotDoThat')\n\tconst cost = world.settings.heroes.buybackCost(world, hero)\n\tif (!cost) return engineMessage('noBuyback')\n\tconst at = hero.get(heroTally)?.buybackAt\n\tif (at !== undefined && at > world.time) return engineMessage('buybackNotReady', { seconds: Math.ceil(at - world.time) })\n\tconst short = shortOf(world.player(hero.owner).resources, cost)\n\tif (short) return engineMessage('notEnough', { resource: short })\n\treturn undefined\n}\n\n/**\n * Buys a fallen hero back (`HeroSettings.buybackCost`): its player pays, it is back at once at its side's home (where it\n * fell when there is none), its wait to come back by itself over, and it may not again for `buybackCooldown`\n * seconds. False, and the player told why, where it cannot (`buybackRefusal`)\n *\n * @beta\n */\nexport function buyBack(world: World, hero: Entity): boolean {\n\tconst refusal = buybackRefusal(world, hero)\n\tif (refusal) {\n\t\tworld.message(hero.owner, refusal)\n\t\treturn false\n\t}\n\tconst cost = world.settings.heroes.buybackCost(world, hero)!\n\tspend(world, hero.owner, cost, 'buyback', hero.def.id)\n\ttallyOf(hero).buybackAt = world.time + world.settings.heroes.buybackCooldown\n\t// the timer of its coming back by itself comes to nothing (`respawnPack`)\n\thero.remove(respawning)\n\treviveHero(world, hero, homeOf(world, hero.owner, hero.pos) ?? hero.pos)\n\tworld.events.emit(boughtBack, { hero: hero.id, type: hero.def.id, player: hero.owner, cost })\n\treturn true\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAa,YAAY,gBAA2B,EAAE,IAAI,iBAAiB,CAAC;;;;;;AA0B5E,IAAa,YAAY,gBAA2B;CACnD,IAAI;CACJ,WAAW;CACX,OAAO,GAAG,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE;AACvI,CAAC;;AAGD,SAAS,QAAQ,MAAyB;CACzC,IAAI,SAAS,KAAK,IAAI,SAAS;CAC/B,IAAI,CAAC,QAAQ,KAAK,IAAI,WAAY,SAAS;EAAE,OAAO;EAAG,QAAQ;EAAG,SAAS;EAAG,QAAQ;CAAE,CAAE;CAC1F,OAAO;AACR;;;;;;;AAQA,SAAgB,WAAW,OAAc,QAAgD;CACxF,IAAI,CAAC,QAAQ,OAAO,KAAA;CACpB,IAAI,OAAO,IAAI,SAAS,GAAG,OAAO,UAAU,MAAM,IAAI,KAAA,IAAY;CAClE,MAAM,SAAS,MAAM,IAAI,OAAO,IAAI,QAAQ,CAAC,EAAE,EAAE;CACjD,OAAO,QAAQ,IAAI,SAAS,KAAK,CAAC,UAAU,MAAM,IAAI,SAAS,KAAA;AAChE;;AAGA,SAAS,KAAK,OAAc,MAAc,MAAuB,IAAkB;CAClF,MAAM,SAAS,MAAM,SAAS,OAAO;CACrC,IAAI,EAAE,SAAS,MAAM,OAAO,MAAM;CAClC,IAAI,MAAM,KAAK,IAAI,SAAS;CAC5B,IAAI,CAAC,KAAK,KAAK,IAAI,WAAY,MAAM;EAAE,MAAM,CAAC;EAAG,QAAQ,CAAC;CAAE,CAAE;CAC9D,MAAM,OAAO,IAAI;CACjB,KAAK,MAAM,MAAM,MAAM,IAAI,KAAK,MAAM,MAAM,OAAO,QAAQ,OAAO,KAAK;CACvE,KAAK,GAAG,MAAM,MAAM;AACrB;;;;;;;;;AAUA,SAAgB,aAAa,OAAc,QAAgB,QAAsC;CAChG,MAAM,SAAS,MAAM,SAAS,OAAO;CACrC,IAAI,EAAE,SAAS,IAAI,OAAO,CAAC;CAC3B,MAAM,QAAQ,MAAM,OAAO;CAC3B,MAAM,aAAa,WAAW,OAAO,MAAM;CAC3C,MAAM,sBAAM,IAAI,IAAY;CAC5B,MAAM,OAAO,OAAO,IAAI,SAAS,CAAC,EAAE;CACpC,KAAK,MAAM,MAAM,MAAM,IAAI,KAAK,OAAO,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC;CAChE,MAAM,SAAS,YAAY,IAAI,SAAS,CAAC,EAAE;CAC3C,KAAK,MAAM,MAAM,QAAQ,IAAI,OAAO,OAAO,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC;CACpE,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG;EAChD,MAAM,OAAO,MAAM,SAAS,IAAI,EAAE;EAClC,IAAI,CAAC,QAAQ,SAAS,UAAU,SAAS,cAAc,SAAS,UAAU,CAAC,KAAK,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;EACnH,IAAI,CAAC,MAAM,WAAW,KAAK,OAAO,OAAO,KAAK,GAAG;EACjD,MAAM,KAAK,IAAI;CAChB;CACA,OAAO;AACR;;;;;;;AAQA,SAAgB,YAAY,OAAc,QAAgB,QAAsC;CAC/F,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,UAAU,MAAM,KAAK,EAAE,MAAM,SAAS,OAAO,aAAa,IAAI,OAAO,CAAC;CACpG,OAAO,CAAC,GAAG,MAAM,SAAS,OAAO,QAAQ,OAAO,QAAQ,QAAQ,aAAa,OAAO,QAAQ,MAAM,CAAC,CAAC;AACrG;;AAGA,SAAS,IAAI,OAAc,QAAkB,QAAgB,QAAwB;CACpF,MAAM,EAAE,aAAa,MAAM;CAC3B,MAAM,OAAO,KAAK,MAAM,MAAM;CAC9B,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,OAAO;CACrC,KAAK,MAAM,OAAO,MAAM,CAAC,CAAC,WAAW,UAAU,IAAI;CACnD,MAAM,OAAO,KAAKA,QAAa;EAAE,QAAQ;EAAQ;EAAQ,QAAQ;CAAK,CAAC;CACvE,OAAO;AACR;;;;;;;AAQA,SAAgB,eAAe,OAAc,QAAgB,QAA4B,SAAkC;CAC1H,MAAM,WAAW,MAAM,SAAS;CAChC,MAAM,MAAM,QAAQ,MAAM;CAC1B,MAAM,SAAS,IAAI;CACnB,IAAI;CACJ,IAAI,SAAS;CAEb,OAAO,OAAO,SAAS;CACvB,MAAM,QAAQ,UAAU,MAAM,WAAW,OAAO,OAAO,OAAO,KAAK,IAAI,SAAS,KAAA;CAChF,MAAM,aAAa,WAAW,OAAO,KAAK;CAC1C,IAAI,YAAY;EACf,MAAM,SAAS,QAAQ,UAAU;EACjC,OAAO;EACP,OAAO;EACP,MAAM,OAAO,KAAK,YAAY;GAAE,MAAM,WAAW;GAAI,MAAM,WAAW,IAAI;GAAI,QAAQ,WAAW;GAAO,QAAQ,OAAO;EAAO,CAAC;CAChI;CAEA,MAAM,QAAQ,SAAS,IAAI,SAAS,aAAa,OAAO,QAAQ,MAAM,IAAI;CAC1E,IAAI,QAAQ,GAAG;EACd,MAAM,OAAO,QAAQ,IAAI,OAAO,MAAM,OAAO,QAAQ,KAAK,IAAI;EAC9D,MAAM,OAAO,KAAK,cAAc;GAAE,MAAM,OAAO;GAAI;GAAQ,GAAI,SAAS;IAAE,QAAQ,MAAM;IAAI,QAAQ,MAAM;GAAM;GAAI;EAAK,CAAC;CAC3H;CACA,MAAM,OAAO,QAAQ,SAAS,SAAS,WAAW,OAAO,QAAQ,QAAQ,OAAO,IAAI;CACpF,KAAK,MAAM,QAAQ,SAAS;EAC3B,QAAQ,IAAI,CAAC,CAAC;EACd,MAAM,OAAO,IAAI,OAAO,KAAK,OAAO,QAAQ,IAAI;EAChD,MAAM,OAAO,KAAK,cAAc;GAC/B,MAAM,KAAK;GACX,MAAM,KAAK,IAAI;GACf,QAAQ,KAAK;GACb,QAAQ,OAAO;GACf,GAAI,UAAU,EAAE,QAAQ,OAAO,GAAG;GAClC;EACD,CAAC;CACF;AACD;;;;;AAMA,IAAa,kBAAkB;CAC9B,eAAe;EACd,IAAI;EACJ,OAAO;EACP,IAAI,OAAO,EAAE,QAAQ,QAAQ,UAAU;GACtC,IAAI,UAAU,KAAK,CAAC,OAAO,IAAI,SAAS,KAAK,CAAC,QAAQ;GACtD,MAAM,KAAK,WAAW,OAAO,MAAM;GACnC,IAAI,MAAM,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,GAAG,KAAK,OAAO,QAAQ,QAAQ,EAAE;EACnF;CACD,CAAC;CACD,eAAe;EACd,IAAI;EACJ,OAAO;EACP,IAAI,OAAO,EAAE,QAAQ,QAAQ,UAAU;GACtC,IAAI,UAAU,KAAK,CAAC,OAAO,IAAI,SAAS,KAAK,CAAC,QAAQ;GACtD,MAAM,KAAK,WAAW,OAAO,MAAM;GACnC,IAAI,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,GAAG,KAAK,OAAO,QAAQ,UAAU,EAAE;EACpF;CACD,CAAC;CACD,eAAe;EACd,IAAI;EACJ,OAAO;EACP,IAAI,OAAO,EAAE,QAAQ,QAAQ,QAAQ;GACpC,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,CAAC,UAAU,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC,SAAS;GAC5E,MAAM,KAAK,WAAW,OAAO,MAAM;GACnC,IAAI,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,GAAG,KAAK,OAAO,QAAQ,UAAU,EAAE;EACpF;CACD,CAAC;AACF;;;;;;;AAQA,SAAgB,eAAe,OAAc,MAAmC;CAC/E,IAAI,KAAK,SAAS,CAAC,KAAK,IAAI,SAAS,KAAK,KAAK,UAAU,OAAO,cAAc,cAAc;CAC5F,MAAM,OAAO,MAAM,SAAS,OAAO,YAAY,OAAO,IAAI;CAC1D,IAAI,CAAC,MAAM,OAAO,cAAc,WAAW;CAC3C,MAAM,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE;CAChC,IAAI,OAAO,KAAA,KAAa,KAAK,MAAM,MAAM,OAAO,cAAc,mBAAmB,EAAE,SAAS,KAAK,KAAK,KAAK,MAAM,IAAI,EAAE,CAAC;CACxH,MAAM,QAAQ,QAAQ,MAAM,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,IAAI;CAC9D,IAAI,OAAO,OAAO,cAAc,aAAa,EAAE,UAAU,MAAM,CAAC;AAEjE;;;;;;;;AASA,SAAgB,QAAQ,OAAc,MAAuB;CAC5D,MAAM,UAAU,eAAe,OAAO,IAAI;CAC1C,IAAI,SAAS;EACZ,MAAM,QAAQ,KAAK,OAAO,OAAO;EACjC,OAAO;CACR;CACA,MAAM,OAAO,MAAM,SAAS,OAAO,YAAY,OAAO,IAAI;CAC1D,MAAM,OAAO,KAAK,OAAO,MAAM,WAAW,KAAK,IAAI,EAAE;CACrD,QAAQ,IAAI,CAAC,CAAC,YAAY,MAAM,OAAO,MAAM,SAAS,OAAO;CAE7D,KAAK,OAAO,UAAU;CACtB,WAAW,OAAO,MAAM,OAAO,OAAO,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,GAAG;CACvE,MAAM,OAAO,KAAK,YAAY;EAAE,MAAM,KAAK;EAAI,MAAM,KAAK,IAAI;EAAI,QAAQ,KAAK;EAAO;CAAK,CAAC;CAC5F,OAAO;AACR"}
@@ -6,11 +6,14 @@ import type { Entity } from '#engine/entity';
6
6
  import type { World } from '#engine/world';
7
7
  /**
8
8
  * Makes a unit just made a hero, as its type says (`UnitTypeDef.hero`): level 1, a point to spend, the abilities it can
9
- * learn (none learned) and the spells it starts with, those it has not got already. What `World.spawn` does for a
9
+ * learn (none learned), the spells it starts with and its innate (`HeroDef.innate`), those it has not got already. What `World.spawn` does for a
10
10
  * hero's type, and `morph` for what becomes one
11
11
  *
12
12
  * @beta
13
13
  */
14
14
  export declare function makeHero(world: World, entity: Entity): void;
15
- /** Shares the experience for a kill between the heroes of the killer's side that were around */
16
- export declare function awardKill(world: World, dead: Entity, killer: Entity | undefined): void;
15
+ /**
16
+ * Shares the experience for a kill between the heroes of the killer's side that were around, and those that assisted it
17
+ * wherever they are (`heroAssists`), alive and short of their last level
18
+ */
19
+ export declare function awardKill(world: World, dead: Entity, killer: Entity | undefined, assists?: readonly Entity[]): void;
@@ -0,0 +1,55 @@
1
+ import { distSq } from "../../math.js";
2
+ import { grantXp, heroOf, heroState, keepInnate, maxLevelOf, xpWorth } from "../../hero.js";
3
+ //#region src/packs/heroes/making.ts
4
+ /**
5
+ * Makes a unit just made a hero, as its type says (`UnitTypeDef.hero`): level 1, a point to spend, the abilities it can
6
+ * learn (none learned), the spells it starts with and its innate (`HeroDef.innate`), those it has not got already. What `World.spawn` does for a
7
+ * hero's type, and `morph` for what becomes one
8
+ *
9
+ * @beta
10
+ */
11
+ function makeHero(world, entity) {
12
+ const def = entity.def.hero;
13
+ if (!def) return;
14
+ entity.set(heroState, {
15
+ level: 1,
16
+ xp: 0,
17
+ points: 1
18
+ });
19
+ const add = (id, level) => {
20
+ if (!entity.abilities.some((state) => state.id === id)) entity.addAbility({
21
+ id: world.registry.ability(id).id,
22
+ level,
23
+ cooldown: 0,
24
+ autocast: false
25
+ });
26
+ };
27
+ for (const id of def.learns) add(id, 0);
28
+ for (const id of def.spells ?? []) add(id, 1);
29
+ keepInnate(world, entity);
30
+ }
31
+ /**
32
+ * Shares the experience for a kill between the heroes of the killer's side that were around, and those that assisted it
33
+ * wherever they are (`heroAssists`), alive and short of their last level
34
+ */
35
+ function awardKill(world, dead, killer, assists = []) {
36
+ if (!killer || !world.areEnemies(killer.owner, dead.owner)) return;
37
+ const worth = xpWorth(world, dead);
38
+ if (worth <= 0) return;
39
+ const heroes = [];
40
+ const { xpRange } = world.settings.heroes;
41
+ const growing = (entity) => entity.alive && heroOf(entity).level < maxLevelOf(world, entity);
42
+ for (const player of world.players.values()) {
43
+ if (!world.areAllies(player.id, killer.owner)) continue;
44
+ for (const entity of world.index.with(heroState, player.id)) {
45
+ if (!growing(entity)) continue;
46
+ if (distSq(entity.pos, dead.pos) <= xpRange * xpRange) heroes.push(entity);
47
+ }
48
+ }
49
+ for (const hero of assists) if (growing(hero) && !heroes.includes(hero)) heroes.push(hero);
50
+ for (const hero of heroes) grantXp(world, hero, worth / heroes.length, dead);
51
+ }
52
+ //#endregion
53
+ export { awardKill, makeHero };
54
+
55
+ //# sourceMappingURL=making.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"making.js","names":[],"sources":["../../../src/packs/heroes/making.ts"],"sourcesContent":["/**\n * What the heroes pack does as heroes are made and as things die: a hero of a hero's type made one, and the\n * experience of a kill shared out (the pack's `made` and `death` handlers)\n */\nimport type { Entity } from '#engine/entity'\nimport { grantXp, heroOf, heroState, keepInnate, maxLevelOf, xpWorth } from '#engine/hero'\nimport { distSq } from '#engine/math'\nimport type { World } from '#engine/world'\n\n/**\n * Makes a unit just made a hero, as its type says (`UnitTypeDef.hero`): level 1, a point to spend, the abilities it can\n * learn (none learned), the spells it starts with and its innate (`HeroDef.innate`), those it has not got already. What `World.spawn` does for a\n * hero's type, and `morph` for what becomes one\n *\n * @beta\n */\nexport function makeHero(world: World, entity: Entity): void {\n\tconst def = entity.def.hero\n\tif (!def) return\n\tentity.set(heroState, { level: 1, xp: 0, points: 1 })\n\t// what it has already (a unit turned into a hero, `morph`) as it was\n\tconst add = (id: string, level: number) => {\n\t\tif (!entity.abilities.some((state) => state.id === id))\n\t\t\tentity.addAbility({ id: world.registry.ability(id).id, level, cooldown: 0, autocast: false })\n\t}\n\tfor (const id of def.learns) add(id, 0)\n\tfor (const id of def.spells ?? []) add(id, 1)\n\t// its innate, from level 1, for no point\n\tkeepInnate(world, entity)\n}\n\n/**\n * Shares the experience for a kill between the heroes of the killer's side that were around, and those that assisted it\n * wherever they are (`heroAssists`), alive and short of their last level\n */\nexport function awardKill(world: World, dead: Entity, killer: Entity | undefined, assists: readonly Entity[] = []): void {\n\tif (!killer || !world.areEnemies(killer.owner, dead.owner)) return\n\tconst worth = xpWorth(world, dead)\n\tif (worth <= 0) return\n\tconst heroes: Entity[] = []\n\tconst { xpRange } = world.settings.heroes\n\tconst growing = (entity: Entity) => entity.alive && heroOf(entity)!.level < maxLevelOf(world, entity)\n\tfor (const player of world.players.values()) {\n\t\tif (!world.areAllies(player.id, killer.owner)) continue\n\t\tfor (const entity of world.index.with(heroState, player.id)) {\n\t\t\tif (!growing(entity)) continue\n\t\t\tif (distSq(entity.pos, dead.pos) <= xpRange * xpRange) heroes.push(entity)\n\t\t}\n\t}\n\tfor (const hero of assists) if (growing(hero) && !heroes.includes(hero)) heroes.push(hero)\n\tfor (const hero of heroes) grantXp(world, hero, worth / heroes.length, dead)\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,SAAS,OAAc,QAAsB;CAC5D,MAAM,MAAM,OAAO,IAAI;CACvB,IAAI,CAAC,KAAK;CACV,OAAO,IAAI,WAAW;EAAE,OAAO;EAAG,IAAI;EAAG,QAAQ;CAAE,CAAC;CAEpD,MAAM,OAAO,IAAY,UAAkB;EAC1C,IAAI,CAAC,OAAO,UAAU,MAAM,UAAU,MAAM,OAAO,EAAE,GACpD,OAAO,WAAW;GAAE,IAAI,MAAM,SAAS,QAAQ,EAAE,CAAC,CAAC;GAAI;GAAO,UAAU;GAAG,UAAU;EAAM,CAAC;CAC9F;CACA,KAAK,MAAM,MAAM,IAAI,QAAQ,IAAI,IAAI,CAAC;CACtC,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC;CAE5C,WAAW,OAAO,MAAM;AACzB;;;;;AAMA,SAAgB,UAAU,OAAc,MAAc,QAA4B,UAA6B,CAAC,GAAS;CACxH,IAAI,CAAC,UAAU,CAAC,MAAM,WAAW,OAAO,OAAO,KAAK,KAAK,GAAG;CAC5D,MAAM,QAAQ,QAAQ,OAAO,IAAI;CACjC,IAAI,SAAS,GAAG;CAChB,MAAM,SAAmB,CAAC;CAC1B,MAAM,EAAE,YAAY,MAAM,SAAS;CACnC,MAAM,WAAW,WAAmB,OAAO,SAAS,OAAO,MAAM,CAAC,CAAE,QAAQ,WAAW,OAAO,MAAM;CACpG,KAAK,MAAM,UAAU,MAAM,QAAQ,OAAO,GAAG;EAC5C,IAAI,CAAC,MAAM,UAAU,OAAO,IAAI,OAAO,KAAK,GAAG;EAC/C,KAAK,MAAM,UAAU,MAAM,MAAM,KAAK,WAAW,OAAO,EAAE,GAAG;GAC5D,IAAI,CAAC,QAAQ,MAAM,GAAG;GACtB,IAAI,OAAO,OAAO,KAAK,KAAK,GAAG,KAAK,UAAU,SAAS,OAAO,KAAK,MAAM;EAC1E;CACD;CACA,KAAK,MAAM,QAAQ,SAAS,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,SAAS,IAAI,GAAG,OAAO,KAAK,IAAI;CACzF,KAAK,MAAM,QAAQ,QAAQ,QAAQ,OAAO,MAAM,QAAQ,OAAO,QAAQ,IAAI;AAC5E"}
@@ -4,7 +4,7 @@ import type { Entity } from '#engine/entity';
4
4
  import type { Vec2 } from '#engine/math';
5
5
  import type { World } from '#engine/world';
6
6
  /**
7
- * What a game's heroes do once fallen (`withRespawn`)
7
+ * What a game's heroes do once fallen (`respawnPack`)
8
8
  *
9
9
  * @beta
10
10
  */
@@ -20,11 +20,11 @@ export interface RespawnOptions {
20
20
  * A game whose heroes come back by themselves after a while, at their side's home (see `RespawnOptions`): a saved timer
21
21
  * each, shown on the HUD as a revive is, and waited for by the computer player in place of reviving at an altar.
22
22
  * Revived at an altar in the meantime, it is back then, and the timer comes to nothing. For a game with the heroes pack
23
- * on (`withHeroes()`): one without it is refused
23
+ * on (`heroesPack()`): one without it is refused
24
24
  *
25
25
  * @beta
26
26
  */
27
- export declare function withRespawn(options?: RespawnOptions): GamePack;
27
+ export declare function respawnPack(options?: RespawnOptions): GamePack;
28
28
  /**
29
29
  * Recall (features-plan F2): a hero stands and channels for a few seconds, then is at its side's home (`homeOf`),
30
30
  * however far; hurt in the meantime, or told to do something else, and it stays where it is. An ability to give heroes
@@ -0,0 +1,87 @@
1
+ import { defineListener } from "../../events.js";
2
+ import { entityDied } from "../../engineEvents.js";
3
+ import { HEROES, heroOf, heroState, respawning, reviveHero } from "../../hero.js";
4
+ import { defineTimer } from "../../timers.js";
5
+ import { homeOf } from "../../home.js";
6
+ //#region src/packs/heroes/respawn.ts
7
+ /**
8
+ * A game whose heroes come back by themselves after a while, at their side's home (see `RespawnOptions`): a saved timer
9
+ * each, shown on the HUD as a revive is, and waited for by the computer player in place of reviving at an altar.
10
+ * Revived at an altar in the meantime, it is back then, and the timer comes to nothing. For a game with the heroes pack
11
+ * on (`heroesPack()`): one without it is refused
12
+ *
13
+ * @beta
14
+ */
15
+ function respawnPack(options = {}) {
16
+ const time = options.time ?? ((_world, hero) => 4 + 2 * (heroOf(hero)?.level ?? 1));
17
+ const comeBack = defineTimer({
18
+ id: "respawn",
19
+ run: (world, data) => {
20
+ const hero = world.get(data.hero) ?? [...world.index.with(heroState, data.player)].find((each) => each.id === data.hero);
21
+ const waiting = hero?.get(respawning);
22
+ if (!hero || !waiting || data.since !== void 0 && waiting.since !== data.since) return;
23
+ hero.remove(respawning);
24
+ if (hero.alive || !hero.has(heroState)) return;
25
+ const at = options.at?.(world, hero) ?? homeOf(world, hero.owner, hero.pos) ?? hero.pos;
26
+ reviveHero(world, hero, at);
27
+ }
28
+ });
29
+ const fell = defineListener({
30
+ id: "respawn.fell",
31
+ event: entityDied,
32
+ run(world, { entity }) {
33
+ if (!entity.has(heroState) || options.heroes && !options.heroes(world, entity)) return;
34
+ const wait = Math.max(0, time(world, entity));
35
+ entity.set(respawning, {
36
+ since: world.time,
37
+ wait
38
+ });
39
+ world.timers.after(wait, comeBack, {
40
+ hero: entity.id,
41
+ player: entity.owner,
42
+ since: world.time
43
+ });
44
+ }
45
+ });
46
+ return {
47
+ id: "respawn",
48
+ options,
49
+ requires: [HEROES],
50
+ components: [respawning],
51
+ timers: [comeBack],
52
+ listeners: [fell]
53
+ };
54
+ }
55
+ /**
56
+ * Recall (features-plan F2): a hero stands and channels for a few seconds, then is at its side's home (`homeOf`),
57
+ * however far; hurt in the meantime, or told to do something else, and it stays where it is. An ability to give heroes
58
+ * (`UnitTypeDef.abilities`), made of the engine's parts: a channel (`AbilityDef.channel`) that `breaksOnDamage`, and the
59
+ * `teleport` effect when it is `finished`. Its id, name, how long it takes, its cooldown and key are the game's to say
60
+ *
61
+ * @beta
62
+ */
63
+ function recallAbility(options = {}) {
64
+ const duration = options.duration ?? 6;
65
+ return {
66
+ id: options.id ?? "recall",
67
+ name: options.name ?? "Recall",
68
+ description: `After ${duration} seconds standing still, unhurt, the hero is back home.`,
69
+ hotkey: options.hotkey ?? "B",
70
+ target: "none",
71
+ cooldown: options.cooldown ?? 20,
72
+ maxLevel: 1,
73
+ effects: [],
74
+ channel: {
75
+ duration,
76
+ breaksOnDamage: true,
77
+ finished: [{
78
+ type: "teleport",
79
+ to: "home"
80
+ }]
81
+ }
82
+ };
83
+ }
84
+ //#endregion
85
+ export { recallAbility, respawnPack };
86
+
87
+ //# sourceMappingURL=respawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respawn.js","names":[],"sources":["../../../src/packs/heroes/respawn.ts"],"sourcesContent":["import { entityDied } from '#engine/engineEvents'\nimport type { AbilityDef } from '#engine/defs'\nimport type { GamePack } from '#engine/packs/pack'\nimport type { Entity, PlayerId } from '#engine/entity'\nimport { HEROES, heroOf, heroState, respawning, reviveHero } from '#engine/hero'\nimport { defineListener } from '#engine/events'\nimport type { Vec2 } from '#engine/math'\nimport { homeOf } from '#engine/home'\nimport { defineTimer } from '#engine/timers'\nimport type { World } from '#engine/world'\n\n/*\n * Heroes that come back by themselves (features-plan F1), as in a MOBA, and the home they come back to and are\n * recalled to (F2)\n */\n\n/**\n * What a game's heroes do once fallen (`respawnPack`)\n *\n * @beta\n */\nexport interface RespawnOptions {\n\t/** Seconds a fallen hero waits to come back: 4 and 2 more a level when left out (6 at level 1, 24 at level 10) */\n\ttime?: (world: World, hero: Entity) => number\n\t/** Where it comes back: its side's home (`homeOf`) when left out, where it fell when there is none */\n\tat?: (world: World, hero: Entity) => Vec2 | undefined\n\t/** Which heroes come back by themselves: all of them when left out */\n\theroes?: (world: World, hero: Entity) => boolean\n}\n\n/**\n * A game whose heroes come back by themselves after a while, at their side's home (see `RespawnOptions`): a saved timer\n * each, shown on the HUD as a revive is, and waited for by the computer player in place of reviving at an altar.\n * Revived at an altar in the meantime, it is back then, and the timer comes to nothing. For a game with the heroes pack\n * on (`heroesPack()`): one without it is refused\n *\n * @beta\n */\nexport function respawnPack(options: RespawnOptions = {}): GamePack {\n\tconst time = options.time ?? ((_world: World, hero: Entity) => 4 + 2 * (heroOf(hero)?.level ?? 1))\n\tconst comeBack = defineTimer<{ hero: number; player: PlayerId; since?: number }>({ id: 'respawn', run: (world, data) => {\n\t\t// a fallen hero waits out of the world: among its player's heroes\n\t\tconst hero = world.get(data.hero) ?? [...world.index.with(heroState, data.player)].find((each) => each.id === data.hero)\n\t\t// the wait of this death, not of one before it the hero came back from at an altar\n\t\tconst waiting = hero?.get(respawning)\n\t\tif (!hero || !waiting || (data.since !== undefined && waiting.since !== data.since)) return\n\t\thero.remove(respawning)\n\t\t// revived at an altar in the meantime: back already\n\t\tif (hero.alive || !hero.has(heroState)) return\n\t\tconst at = options.at?.(world, hero) ?? homeOf(world, hero.owner, hero.pos) ?? hero.pos\n\t\treviveHero(world, hero, at)\n\t} })\n\tconst fell = defineListener({\n\t\tid: 'respawn.fell',\n\t\tevent: entityDied,\n\t\trun(world, { entity }) {\n\t\t\tif (!entity.has(heroState) || (options.heroes && !options.heroes(world, entity))) return\n\t\t\tconst wait = Math.max(0, time(world, entity))\n\t\t\tentity.set(respawning, { since: world.time, wait })\n\t\t\tworld.timers.after(wait, comeBack, { hero: entity.id, player: entity.owner, since: world.time })\n\t\t}\n\t})\n\treturn {\n\t\tid: 'respawn',\n\t\toptions,\n\t\t// heroes are the heroes pack's: a game with this has that on too, or is refused\n\t\trequires: [HEROES],\n\t\tcomponents: [respawning],\n\t\ttimers: [comeBack],\n\t\tlisteners: [fell]\n\t}\n}\n\n/**\n * Recall (features-plan F2): a hero stands and channels for a few seconds, then is at its side's home (`homeOf`),\n * however far; hurt in the meantime, or told to do something else, and it stays where it is. An ability to give heroes\n * (`UnitTypeDef.abilities`), made of the engine's parts: a channel (`AbilityDef.channel`) that `breaksOnDamage`, and the\n * `teleport` effect when it is `finished`. Its id, name, how long it takes, its cooldown and key are the game's to say\n *\n * @beta\n */\nexport function recallAbility(options: { id?: string; name?: string; duration?: number; cooldown?: number; hotkey?: string } = {}): AbilityDef {\n\tconst duration = options.duration ?? 6\n\treturn {\n\t\tid: options.id ?? 'recall',\n\t\tname: options.name ?? 'Recall',\n\t\tdescription: `After ${duration} seconds standing still, unhurt, the hero is back home.`,\n\t\thotkey: options.hotkey ?? 'B',\n\t\ttarget: 'none',\n\t\tcooldown: options.cooldown ?? 20,\n\t\tmaxLevel: 1,\n\t\teffects: [],\n\t\tchannel: { duration, breaksOnDamage: true, finished: [{ type: 'teleport', to: 'home' }] }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;AAsCA,SAAgB,YAAY,UAA0B,CAAC,GAAa;CACnE,MAAM,OAAO,QAAQ,UAAU,QAAe,SAAiB,IAAI,KAAK,OAAO,IAAI,CAAC,EAAE,SAAS;CAC/F,MAAM,WAAW,YAAgE;EAAE,IAAI;EAAW,MAAM,OAAO,SAAS;GAEvH,MAAM,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,MAAM,MAAM,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,SAAS,KAAK,OAAO,KAAK,IAAI;GAEvH,MAAM,UAAU,MAAM,IAAI,UAAU;GACpC,IAAI,CAAC,QAAQ,CAAC,WAAY,KAAK,UAAU,KAAA,KAAa,QAAQ,UAAU,KAAK,OAAQ;GACrF,KAAK,OAAO,UAAU;GAEtB,IAAI,KAAK,SAAS,CAAC,KAAK,IAAI,SAAS,GAAG;GACxC,MAAM,KAAK,QAAQ,KAAK,OAAO,IAAI,KAAK,OAAO,OAAO,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK;GACpF,WAAW,OAAO,MAAM,EAAE;EAC3B;CAAE,CAAC;CACH,MAAM,OAAO,eAAe;EAC3B,IAAI;EACJ,OAAO;EACP,IAAI,OAAO,EAAE,UAAU;GACtB,IAAI,CAAC,OAAO,IAAI,SAAS,KAAM,QAAQ,UAAU,CAAC,QAAQ,OAAO,OAAO,MAAM,GAAI;GAClF,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,OAAO,MAAM,CAAC;GAC5C,OAAO,IAAI,YAAY;IAAE,OAAO,MAAM;IAAM;GAAK,CAAC;GAClD,MAAM,OAAO,MAAM,MAAM,UAAU;IAAE,MAAM,OAAO;IAAI,QAAQ,OAAO;IAAO,OAAO,MAAM;GAAK,CAAC;EAChG;CACD,CAAC;CACD,OAAO;EACN,IAAI;EACJ;EAEA,UAAU,CAAC,MAAM;EACjB,YAAY,CAAC,UAAU;EACvB,QAAQ,CAAC,QAAQ;EACjB,WAAW,CAAC,IAAI;CACjB;AACD;;;;;;;;;AAUA,SAAgB,cAAc,UAAiG,CAAC,GAAe;CAC9I,MAAM,WAAW,QAAQ,YAAY;CACrC,OAAO;EACN,IAAI,QAAQ,MAAM;EAClB,MAAM,QAAQ,QAAQ;EACtB,aAAa,SAAS,SAAS;EAC/B,QAAQ,QAAQ,UAAU;EAC1B,QAAQ;EACR,UAAU,QAAQ,YAAY;EAC9B,UAAU;EACV,SAAS,CAAC;EACV,SAAS;GAAE;GAAU,gBAAgB;GAAM,UAAU,CAAC;IAAE,MAAM;IAAY,IAAI;GAAO,CAAC;EAAE;CACzF;AACD"}
@@ -0,0 +1,32 @@
1
+ import type { CallingDef } from '#engine/callings';
2
+ import type { AbilityDef, BuffDef } from '#engine/defs';
3
+ import type { Rules } from '#engine/game';
4
+ /**
5
+ * The hero spells as a set to choose from: the abilities (`defaultHeroSpells`), with the buffs they use beside them
6
+ * (`defaultHeroSpellBuffs`). A new one each time it is asked
7
+ *
8
+ * @beta
9
+ */
10
+ export declare function defaultHeroSpellSet(): {
11
+ id: 'heroSpells';
12
+ name: string;
13
+ kind: 'abilities';
14
+ defs: AbilityDef[];
15
+ uses: {
16
+ buffs: BuffDef[];
17
+ };
18
+ };
19
+ /**
20
+ * The callings as a set to choose from (`defaultCallings`): what is chosen is laid on the rules as the heroes pack's
21
+ * (`heroesPack({ callings })`), in place of whatever was laid before; a heroes pack is put in where the game has none.
22
+ * A new one each time it is asked
23
+ *
24
+ * @beta
25
+ */
26
+ export declare function defaultCallingSet(): {
27
+ id: 'callings';
28
+ name: string;
29
+ kind: 'callings';
30
+ defs: CallingDef[];
31
+ lay(rules: Rules, defs: readonly CallingDef[]): Rules;
32
+ };