@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,77 @@
1
+ import { at } from "../defs.js";
2
+ import { heroState } from "../hero.js";
3
+ import { casterFacts } from "./scaled.js";
4
+ //#region src/abilities/chance.ts
5
+ /**
6
+ * Chance and conditions of effects (E2E-PLAN AB6): an effect that happens by `chance`, drawn from the world's numbers so
7
+ * that every run comes out the same, and what an `if` asks of a unit (`UnitCondition`): a buff, health below a share, a
8
+ * hero, the tags of its type, enemy or ally; or code
9
+ */
10
+ /** What code of an effect is asked with, as it lands */
11
+ var asked = (context) => ({
12
+ level: context.level,
13
+ caster: casterFacts(context.world, context.caster),
14
+ effect: context
15
+ });
16
+ /**
17
+ * Whether an effect that happens by chance (`EffectCommon.chance`) does this time: a draw from the world's numbers
18
+ * (`world.rng`) under its share at the context's level, or what its code says for the target. True with no chance, and
19
+ * then nothing is drawn (the world's numbers go on as they were); nothing is drawn for a share of 0 or of 1 either
20
+ *
21
+ * @beta
22
+ */
23
+ function byChance(context, chance, target) {
24
+ if (chance === void 0) return true;
25
+ const share = typeof chance === "function" ? chance(asked(context), target) : at(chance, context.level);
26
+ if (share >= 1) return true;
27
+ if (!(share > 0)) return false;
28
+ return context.world.rng.next() < share;
29
+ }
30
+ /**
31
+ * Whether the type of a unit has one of the tags (`UnitTypeDef.tags`)
32
+ *
33
+ * @beta
34
+ */
35
+ function hasTag(entity, tags) {
36
+ const own = entity.def.tags;
37
+ return !!own && tags.some((tag) => own.includes(tag));
38
+ }
39
+ /**
40
+ * Whether what an `if` asks of a unit holds (`UnitCondition`, or code), as the effect of the context lands: every part
41
+ * it says. Nothing said holds; of no unit, nothing said does not
42
+ *
43
+ * @beta
44
+ */
45
+ function conditionHolds(context, condition, unit) {
46
+ if (!condition) return true;
47
+ if (!unit) return false;
48
+ if (typeof condition === "function") return condition(asked(context), unit);
49
+ return unitMatches(context.world, condition, unit, context.caster.owner);
50
+ }
51
+ /**
52
+ * Whether what a `UnitCondition` says holds of a unit, out of an effect: every part it says. `is` (enemy or ally) is
53
+ * asked of the player `of`: it never holds with none. What an `if` asks (`conditionHolds`), what an effect's `where`
54
+ * asks and what a query of the world asks (`world.query`)
55
+ *
56
+ * @beta
57
+ */
58
+ function unitMatches(world, condition, unit, of) {
59
+ const { buff, noBuff, healthBelow, healthAbove, hero, structure, tags, notTags, is } = condition;
60
+ if (buff !== void 0 && !unit.buffs.some((instance) => instance.id === buff)) return false;
61
+ if (noBuff !== void 0 && unit.buffs.some((instance) => instance.id === noBuff)) return false;
62
+ if (healthBelow !== void 0 && !(unit.health < healthBelow * unit.maxHealth)) return false;
63
+ if (healthAbove !== void 0 && !(unit.health >= healthAbove * unit.maxHealth)) return false;
64
+ if (hero !== void 0 && unit.has(heroState) !== hero) return false;
65
+ if (structure !== void 0 && unit.isStructure !== structure) return false;
66
+ if (tags && !hasTag(unit, tags)) return false;
67
+ if (notTags && hasTag(unit, notTags)) return false;
68
+ if (is !== void 0) {
69
+ if (of === void 0) return false;
70
+ if (is === "enemy" ? !world.areEnemies(of, unit.owner) : !world.areAllies(of, unit.owner)) return false;
71
+ }
72
+ return true;
73
+ }
74
+ //#endregion
75
+ export { byChance, conditionHolds, hasTag, unitMatches };
76
+
77
+ //# sourceMappingURL=chance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chance.js","names":[],"sources":["../../src/abilities/chance.ts"],"sourcesContent":["/**\n * Chance and conditions of effects (E2E-PLAN AB6): an effect that happens by `chance`, drawn from the world's numbers so\n * that every run comes out the same, and what an `if` asks of a unit (`UnitCondition`): a buff, health below a share, a\n * hero, the tags of its type, enemy or ally; or code\n */\nimport { at, type EffectValue, type EffectValueContext, type UnitCondition, type UnitConditionCheck } from '#engine/defs'\nimport type { Entity, PlayerId } from '#engine/entity'\nimport type { World } from '#engine/world'\nimport { heroState } from '#engine/hero'\nimport type { EffectContext } from './effects'\nimport { casterFacts } from './scaled'\n\n/** What code of an effect is asked with, as it lands */\nconst asked = (context: EffectContext): EffectValueContext => ({ level: context.level, caster: casterFacts(context.world, context.caster), effect: context })\n\n/**\n * Whether an effect that happens by chance (`EffectCommon.chance`) does this time: a draw from the world's numbers\n * (`world.rng`) under its share at the context's level, or what its code says for the target. True with no chance, and\n * then nothing is drawn (the world's numbers go on as they were); nothing is drawn for a share of 0 or of 1 either\n *\n * @beta\n */\nexport function byChance(context: EffectContext, chance: EffectValue | undefined, target?: Entity): boolean {\n\tif (chance === undefined) return true\n\tconst share = typeof chance === 'function' ? chance(asked(context), target) : at(chance, context.level)\n\tif (share >= 1) return true\n\tif (!(share > 0)) return false\n\treturn context.world.rng.next() < share\n}\n\n/**\n * Whether the type of a unit has one of the tags (`UnitTypeDef.tags`)\n *\n * @beta\n */\nexport function hasTag(entity: Entity, tags: readonly string[]): boolean {\n\tconst own = entity.def.tags\n\treturn !!own && tags.some((tag) => own.includes(tag))\n}\n\n/**\n * Whether what an `if` asks of a unit holds (`UnitCondition`, or code), as the effect of the context lands: every part\n * it says. Nothing said holds; of no unit, nothing said does not\n *\n * @beta\n */\nexport function conditionHolds(context: EffectContext, condition: UnitCondition | UnitConditionCheck | undefined, unit: Entity | undefined): boolean {\n\tif (!condition) return true\n\tif (!unit) return false\n\tif (typeof condition === 'function') return condition(asked(context), unit)\n\treturn unitMatches(context.world, condition, unit, context.caster.owner)\n}\n\n/**\n * Whether what a `UnitCondition` says holds of a unit, out of an effect: every part it says. `is` (enemy or ally) is\n * asked of the player `of`: it never holds with none. What an `if` asks (`conditionHolds`), what an effect's `where`\n * asks and what a query of the world asks (`world.query`)\n *\n * @beta\n */\nexport function unitMatches(world: World, condition: UnitCondition, unit: Entity, of?: PlayerId): boolean {\n\tconst { buff, noBuff, healthBelow, healthAbove, hero, structure, tags, notTags, is } = condition\n\tif (buff !== undefined && !unit.buffs.some((instance) => instance.id === buff)) return false\n\tif (noBuff !== undefined && unit.buffs.some((instance) => instance.id === noBuff)) return false\n\tif (healthBelow !== undefined && !(unit.health < healthBelow * unit.maxHealth)) return false\n\tif (healthAbove !== undefined && !(unit.health >= healthAbove * unit.maxHealth)) return false\n\tif (hero !== undefined && unit.has(heroState) !== hero) return false\n\tif (structure !== undefined && unit.isStructure !== structure) return false\n\tif (tags && !hasTag(unit, tags)) return false\n\tif (notTags && hasTag(unit, notTags)) return false\n\tif (is !== undefined) {\n\t\tif (of === undefined) return false\n\t\tif (is === 'enemy' ? !world.areEnemies(of, unit.owner) : !world.areAllies(of, unit.owner)) return false\n\t}\n\treturn true\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAM,SAAS,aAAgD;CAAE,OAAO,QAAQ;CAAO,QAAQ,YAAY,QAAQ,OAAO,QAAQ,MAAM;CAAG,QAAQ;AAAQ;;;;;;;;AAS3J,SAAgB,SAAS,SAAwB,QAAiC,QAA0B;CAC3G,IAAI,WAAW,KAAA,GAAW,OAAO;CACjC,MAAM,QAAQ,OAAO,WAAW,aAAa,OAAO,MAAM,OAAO,GAAG,MAAM,IAAI,GAAG,QAAQ,QAAQ,KAAK;CACtG,IAAI,SAAS,GAAG,OAAO;CACvB,IAAI,EAAE,QAAQ,IAAI,OAAO;CACzB,OAAO,QAAQ,MAAM,IAAI,KAAK,IAAI;AACnC;;;;;;AAOA,SAAgB,OAAO,QAAgB,MAAkC;CACxE,MAAM,MAAM,OAAO,IAAI;CACvB,OAAO,CAAC,CAAC,OAAO,KAAK,MAAM,QAAQ,IAAI,SAAS,GAAG,CAAC;AACrD;;;;;;;AAQA,SAAgB,eAAe,SAAwB,WAA2D,MAAmC;CACpJ,IAAI,CAAC,WAAW,OAAO;CACvB,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,OAAO,cAAc,YAAY,OAAO,UAAU,MAAM,OAAO,GAAG,IAAI;CAC1E,OAAO,YAAY,QAAQ,OAAO,WAAW,MAAM,QAAQ,OAAO,KAAK;AACxE;;;;;;;;AASA,SAAgB,YAAY,OAAc,WAA0B,MAAc,IAAwB;CACzG,MAAM,EAAE,MAAM,QAAQ,aAAa,aAAa,MAAM,WAAW,MAAM,SAAS,OAAO;CACvF,IAAI,SAAS,KAAA,KAAa,CAAC,KAAK,MAAM,MAAM,aAAa,SAAS,OAAO,IAAI,GAAG,OAAO;CACvF,IAAI,WAAW,KAAA,KAAa,KAAK,MAAM,MAAM,aAAa,SAAS,OAAO,MAAM,GAAG,OAAO;CAC1F,IAAI,gBAAgB,KAAA,KAAa,EAAE,KAAK,SAAS,cAAc,KAAK,YAAY,OAAO;CACvF,IAAI,gBAAgB,KAAA,KAAa,EAAE,KAAK,UAAU,cAAc,KAAK,YAAY,OAAO;CACxF,IAAI,SAAS,KAAA,KAAa,KAAK,IAAI,SAAS,MAAM,MAAM,OAAO;CAC/D,IAAI,cAAc,KAAA,KAAa,KAAK,gBAAgB,WAAW,OAAO;CACtE,IAAI,QAAQ,CAAC,OAAO,MAAM,IAAI,GAAG,OAAO;CACxC,IAAI,WAAW,OAAO,MAAM,OAAO,GAAG,OAAO;CAC7C,IAAI,OAAO,KAAA,GAAW;EACrB,IAAI,OAAO,KAAA,GAAW,OAAO;EAC7B,IAAI,OAAO,UAAU,CAAC,MAAM,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,UAAU,IAAI,KAAK,KAAK,GAAG,OAAO;CACnG;CACA,OAAO;AACR"}
@@ -26,3 +26,21 @@ export declare function readyAgain(state: AbilityState): void;
26
26
  * @beta
27
27
  */
28
28
  export declare function restoreCharges(world: World, entity: Entity, ability: string, count?: number): void;
29
+ /**
30
+ * Sets how many seconds an entity's ability waits before it can be used again (`AbilityState.cooldown`), whatever it
31
+ * had left: 0 makes it ready. What a game's effect or hook does where the data's `cooldown` is not the way (a
32
+ * cooldown that depends on what the cast hit, a recast that starts it). False for an ability the entity does not have
33
+ *
34
+ * @beta
35
+ */
36
+ export declare function setCooldown(entity: Entity, ability: string, seconds: number): boolean;
37
+ /**
38
+ * Takes seconds off what is left of an entity's ability's cooldown (`AbilityState.cooldown`): a number of them, or a
39
+ * `share` of what is left (0.5: half). Never below 0. A kill that cuts a cooldown, a hit that refunds a part of it.
40
+ * False for an ability the entity does not have
41
+ *
42
+ * @beta
43
+ */
44
+ export declare function reduceCooldown(entity: Entity, ability: string, by: number | {
45
+ share: number;
46
+ }): boolean;
@@ -0,0 +1,101 @@
1
+ import { at } from "../defs.js";
2
+ import { cooldownOf } from "../stats.js";
3
+ import { chargesLeft } from "../shared.js";
4
+ //#region src/abilities/charges.ts
5
+ /**
6
+ * Charges: an ability used so many times before it waits (`AbilityDef.charges`). A use spends one, and one comes back
7
+ * every `refill` seconds while it holds fewer than it can. What a state says nothing of is full, so an ability learned,
8
+ * a level gone up and a save from before it all start full without anyone filling them in
9
+ */
10
+ /** Seconds a use takes to come back: shortened as the cooldown is, but for what is carried or brought along (`plain`) */
11
+ function refillOf(world, caster, ability, level, plain) {
12
+ const seconds = at(ability.charges?.refill, level);
13
+ return plain ? seconds : cooldownOf(world, caster, seconds);
14
+ }
15
+ /** One of the spells a hero brought along rather than learned: nothing shortens those */
16
+ var brought = (caster, id) => caster.def.hero?.spells?.includes(id) ?? false;
17
+ /** Full again: what it says of its uses goes, so that it holds all it can */
18
+ function fill(state) {
19
+ delete state.charges;
20
+ delete state.refill;
21
+ }
22
+ /**
23
+ * Spends a use of an ability with charges, as it goes off: the refill starts, where it was not running already.
24
+ * `plain` for what nothing shortens (an item's, a spell brought along). Nothing for one without charges, and nothing
25
+ * while the debug switch for no cooldowns is on
26
+ */
27
+ function spendUse(world, caster, ability, state, plain) {
28
+ const left = chargesLeft(ability, state);
29
+ if (left === void 0 || world.cheats.noCooldowns) return;
30
+ state.charges = Math.max(left - 1, 0);
31
+ if (!((state.refill ?? 0) > 0)) state.refill = refillOf(world, caster, ability, state.level, plain);
32
+ }
33
+ /**
34
+ * The seconds of a tick go by for the uses of an ability (`pass`: Infinity fills them at once): one back every
35
+ * `refill`, until it holds all it can. `item` for the ability of something carried
36
+ */
37
+ function refillUses(world, caster, state, pass, item = false) {
38
+ if (state.charges === void 0) return;
39
+ const ability = world.registry.abilities.has(state.id) ? world.registry.ability(state.id) : void 0;
40
+ const max = ability && chargesLeft(ability, { level: state.level });
41
+ if (!ability || max === void 0 || pass === Infinity) return fill(state);
42
+ state.refill = (state.refill ?? 0) - pass;
43
+ while (state.refill <= 0) {
44
+ state.charges++;
45
+ if (state.charges >= max) return fill(state);
46
+ const next = refillOf(world, caster, ability, state.level, item || brought(caster, ability.id));
47
+ if (next <= 0) return fill(state);
48
+ state.refill += next;
49
+ }
50
+ }
51
+ /** Ready again at once, with all the uses it holds: a hero revived, the `refresh` effect */
52
+ function readyAgain(state) {
53
+ state.cooldown = 0;
54
+ fill(state);
55
+ }
56
+ /**
57
+ * Gives an entity's ability with charges uses back, up to all it holds: `count` of them, or all when left out. What a
58
+ * game's effect or hook does where the data's `refill` is not the way (a kill gives one back). Its cooldown stays
59
+ *
60
+ * @beta
61
+ */
62
+ function restoreCharges(world, entity, ability, count = Infinity) {
63
+ const state = entity.abilities.find((known) => known.id === ability);
64
+ if (!state || state.charges === void 0) return;
65
+ const max = world.registry.abilities.has(ability) ? chargesLeft(world.registry.ability(ability), { level: state.level }) : void 0;
66
+ if (max === void 0 || state.charges + count >= max) return fill(state);
67
+ state.charges += Math.max(Math.floor(count), 0);
68
+ }
69
+ /** The state of an entity's ability, by its id */
70
+ var stateOf = (entity, ability) => entity.abilities.find((known) => known.id === ability);
71
+ /**
72
+ * Sets how many seconds an entity's ability waits before it can be used again (`AbilityState.cooldown`), whatever it
73
+ * had left: 0 makes it ready. What a game's effect or hook does where the data's `cooldown` is not the way (a
74
+ * cooldown that depends on what the cast hit, a recast that starts it). False for an ability the entity does not have
75
+ *
76
+ * @beta
77
+ */
78
+ function setCooldown(entity, ability, seconds) {
79
+ const state = stateOf(entity, ability);
80
+ if (!state) return false;
81
+ state.cooldown = Math.max(seconds, 0);
82
+ return true;
83
+ }
84
+ /**
85
+ * Takes seconds off what is left of an entity's ability's cooldown (`AbilityState.cooldown`): a number of them, or a
86
+ * `share` of what is left (0.5: half). Never below 0. A kill that cuts a cooldown, a hit that refunds a part of it.
87
+ * False for an ability the entity does not have
88
+ *
89
+ * @beta
90
+ */
91
+ function reduceCooldown(entity, ability, by) {
92
+ const state = stateOf(entity, ability);
93
+ if (!state) return false;
94
+ const seconds = typeof by === "number" ? by : state.cooldown * by.share;
95
+ state.cooldown = Math.max(state.cooldown - seconds, 0);
96
+ return true;
97
+ }
98
+ //#endregion
99
+ export { readyAgain, reduceCooldown, refillUses, restoreCharges, setCooldown, spendUse };
100
+
101
+ //# sourceMappingURL=charges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charges.js","names":[],"sources":["../../src/abilities/charges.ts"],"sourcesContent":["/**\n * Charges: an ability used so many times before it waits (`AbilityDef.charges`). A use spends one, and one comes back\n * every `refill` seconds while it holds fewer than it can. What a state says nothing of is full, so an ability learned,\n * a level gone up and a save from before it all start full without anyone filling them in\n */\nimport { type AbilityDef, at } from '#engine/defs'\nimport type { AbilityState, Entity } from '#engine/entity'\nimport { chargesLeft } from '#engine/shared'\nimport { cooldownOf } from '#engine/stats'\nimport type { World } from '#engine/world'\n\n/** Seconds a use takes to come back: shortened as the cooldown is, but for what is carried or brought along (`plain`) */\nfunction refillOf(world: World, caster: Entity, ability: AbilityDef, level: number, plain: boolean): number {\n\tconst seconds = at(ability.charges?.refill, level)\n\treturn plain ? seconds : cooldownOf(world, caster, seconds)\n}\n\n/** One of the spells a hero brought along rather than learned: nothing shortens those */\nconst brought = (caster: Entity, id: string) => caster.def.hero?.spells?.includes(id) ?? false\n\n/** Full again: what it says of its uses goes, so that it holds all it can */\nfunction fill(state: AbilityState): void {\n\tdelete state.charges\n\tdelete state.refill\n}\n\n/**\n * Spends a use of an ability with charges, as it goes off: the refill starts, where it was not running already.\n * `plain` for what nothing shortens (an item's, a spell brought along). Nothing for one without charges, and nothing\n * while the debug switch for no cooldowns is on\n */\nexport function spendUse(world: World, caster: Entity, ability: AbilityDef, state: AbilityState, plain: boolean): void {\n\tconst left = chargesLeft(ability, state)\n\tif (left === undefined || world.cheats.noCooldowns) return\n\tstate.charges = Math.max(left - 1, 0)\n\tif (!((state.refill ?? 0) > 0)) state.refill = refillOf(world, caster, ability, state.level, plain)\n}\n\n/**\n * The seconds of a tick go by for the uses of an ability (`pass`: Infinity fills them at once): one back every\n * `refill`, until it holds all it can. `item` for the ability of something carried\n */\nexport function refillUses(world: World, caster: Entity, state: AbilityState, pass: number, item = false): void {\n\tif (state.charges === undefined) return\n\tconst ability = world.registry.abilities.has(state.id) ? world.registry.ability(state.id) : undefined\n\tconst max = ability && chargesLeft(ability, { level: state.level })\n\tif (!ability || max === undefined || pass === Infinity) return fill(state)\n\tstate.refill = (state.refill ?? 0) - pass\n\twhile (state.refill <= 0) {\n\t\tstate.charges++\n\t\tif (state.charges >= max) return fill(state)\n\t\tconst next = refillOf(world, caster, ability, state.level, item || brought(caster, ability.id))\n\t\tif (next <= 0) return fill(state)\n\t\tstate.refill += next\n\t}\n}\n\n/** Ready again at once, with all the uses it holds: a hero revived, the `refresh` effect */\nexport function readyAgain(state: AbilityState): void {\n\tstate.cooldown = 0\n\tfill(state)\n}\n\n/**\n * Gives an entity's ability with charges uses back, up to all it holds: `count` of them, or all when left out. What a\n * game's effect or hook does where the data's `refill` is not the way (a kill gives one back). Its cooldown stays\n *\n * @beta\n */\nexport function restoreCharges(world: World, entity: Entity, ability: string, count = Infinity): void {\n\tconst state = entity.abilities.find((known) => known.id === ability)\n\tif (!state || state.charges === undefined) return\n\tconst max = world.registry.abilities.has(ability) ? chargesLeft(world.registry.ability(ability), { level: state.level }) : undefined\n\tif (max === undefined || state.charges + count >= max) return fill(state)\n\tstate.charges += Math.max(Math.floor(count), 0)\n}\n\n/** The state of an entity's ability, by its id */\nconst stateOf = (entity: Entity, ability: string): AbilityState | undefined => entity.abilities.find((known) => known.id === ability)\n\n/**\n * Sets how many seconds an entity's ability waits before it can be used again (`AbilityState.cooldown`), whatever it\n * had left: 0 makes it ready. What a game's effect or hook does where the data's `cooldown` is not the way (a\n * cooldown that depends on what the cast hit, a recast that starts it). False for an ability the entity does not have\n *\n * @beta\n */\nexport function setCooldown(entity: Entity, ability: string, seconds: number): boolean {\n\tconst state = stateOf(entity, ability)\n\tif (!state) return false\n\tstate.cooldown = Math.max(seconds, 0)\n\treturn true\n}\n\n/**\n * Takes seconds off what is left of an entity's ability's cooldown (`AbilityState.cooldown`): a number of them, or a\n * `share` of what is left (0.5: half). Never below 0. A kill that cuts a cooldown, a hit that refunds a part of it.\n * False for an ability the entity does not have\n *\n * @beta\n */\nexport function reduceCooldown(entity: Entity, ability: string, by: number | { share: number }): boolean {\n\tconst state = stateOf(entity, ability)\n\tif (!state) return false\n\tconst seconds = typeof by === 'number' ? by : state.cooldown * by.share\n\tstate.cooldown = Math.max(state.cooldown - seconds, 0)\n\treturn true\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAS,SAAS,OAAc,QAAgB,SAAqB,OAAe,OAAwB;CAC3G,MAAM,UAAU,GAAG,QAAQ,SAAS,QAAQ,KAAK;CACjD,OAAO,QAAQ,UAAU,WAAW,OAAO,QAAQ,OAAO;AAC3D;;AAGA,IAAM,WAAW,QAAgB,OAAe,OAAO,IAAI,MAAM,QAAQ,SAAS,EAAE,KAAK;;AAGzF,SAAS,KAAK,OAA2B;CACxC,OAAO,MAAM;CACb,OAAO,MAAM;AACd;;;;;;AAOA,SAAgB,SAAS,OAAc,QAAgB,SAAqB,OAAqB,OAAsB;CACtH,MAAM,OAAO,YAAY,SAAS,KAAK;CACvC,IAAI,SAAS,KAAA,KAAa,MAAM,OAAO,aAAa;CACpD,MAAM,UAAU,KAAK,IAAI,OAAO,GAAG,CAAC;CACpC,IAAI,GAAG,MAAM,UAAU,KAAK,IAAI,MAAM,SAAS,SAAS,OAAO,QAAQ,SAAS,MAAM,OAAO,KAAK;AACnG;;;;;AAMA,SAAgB,WAAW,OAAc,QAAgB,OAAqB,MAAc,OAAO,OAAa;CAC/G,IAAI,MAAM,YAAY,KAAA,GAAW;CACjC,MAAM,UAAU,MAAM,SAAS,UAAU,IAAI,MAAM,EAAE,IAAI,MAAM,SAAS,QAAQ,MAAM,EAAE,IAAI,KAAA;CAC5F,MAAM,MAAM,WAAW,YAAY,SAAS,EAAE,OAAO,MAAM,MAAM,CAAC;CAClE,IAAI,CAAC,WAAW,QAAQ,KAAA,KAAa,SAAS,UAAU,OAAO,KAAK,KAAK;CACzE,MAAM,UAAU,MAAM,UAAU,KAAK;CACrC,OAAO,MAAM,UAAU,GAAG;EACzB,MAAM;EACN,IAAI,MAAM,WAAW,KAAK,OAAO,KAAK,KAAK;EAC3C,MAAM,OAAO,SAAS,OAAO,QAAQ,SAAS,MAAM,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,EAAE,CAAC;EAC9F,IAAI,QAAQ,GAAG,OAAO,KAAK,KAAK;EAChC,MAAM,UAAU;CACjB;AACD;;AAGA,SAAgB,WAAW,OAA2B;CACrD,MAAM,WAAW;CACjB,KAAK,KAAK;AACX;;;;;;;AAQA,SAAgB,eAAe,OAAc,QAAgB,SAAiB,QAAQ,UAAgB;CACrG,MAAM,QAAQ,OAAO,UAAU,MAAM,UAAU,MAAM,OAAO,OAAO;CACnE,IAAI,CAAC,SAAS,MAAM,YAAY,KAAA,GAAW;CAC3C,MAAM,MAAM,MAAM,SAAS,UAAU,IAAI,OAAO,IAAI,YAAY,MAAM,SAAS,QAAQ,OAAO,GAAG,EAAE,OAAO,MAAM,MAAM,CAAC,IAAI,KAAA;CAC3H,IAAI,QAAQ,KAAA,KAAa,MAAM,UAAU,SAAS,KAAK,OAAO,KAAK,KAAK;CACxE,MAAM,WAAW,KAAK,IAAI,KAAK,MAAM,KAAK,GAAG,CAAC;AAC/C;;AAGA,IAAM,WAAW,QAAgB,YAA8C,OAAO,UAAU,MAAM,UAAU,MAAM,OAAO,OAAO;;;;;;;;AASpI,SAAgB,YAAY,QAAgB,SAAiB,SAA0B;CACtF,MAAM,QAAQ,QAAQ,QAAQ,OAAO;CACrC,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,WAAW,KAAK,IAAI,SAAS,CAAC;CACpC,OAAO;AACR;;;;;;;;AASA,SAAgB,eAAe,QAAgB,SAAiB,IAAyC;CACxG,MAAM,QAAQ,QAAQ,QAAQ,OAAO;CACrC,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,UAAU,OAAO,OAAO,WAAW,KAAK,MAAM,WAAW,GAAG;CAClE,MAAM,WAAW,KAAK,IAAI,MAAM,WAAW,SAAS,CAAC;CACrD,OAAO;AACR"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Crowd control that takes a unit's orders (E2E-PLAN AB5): a buff's `control` (`fear`, `charm`, `taunt`, or code) steers
3
+ * its carrier every tick in place of its orders, which wait as they do through a stun and go on after; new orders are
4
+ * refused while it lasts (`giveOrder`). Run by the order system (`systems/orders.ts`)
5
+ */
6
+ import type { ControlKind } from '#engine/defs';
7
+ import { type Entity } from '#engine/entity';
8
+ import type { World } from '#engine/world';
9
+ /**
10
+ * A unit a buff's control holds (`BuffDef.control`): the buff, and who put it on. Set the first tick it holds it, and
11
+ * taken off the first tick after, as what it was told goes on. Saved with the unit, told to everyone who sees it
12
+ *
13
+ * @beta
14
+ */
15
+ export declare const controlled: import("#engine/components").Component<{
16
+ buff: string;
17
+ source: number;
18
+ }, {
19
+ buff: string;
20
+ source: number;
21
+ }>;
22
+ /**
23
+ * One tick of a unit under a control: the first, what it was doing is put off (a channel broken off, the rest to start
24
+ * over after); then it does what the control says. False when nothing controls it, after it let go of one
25
+ */
26
+ export declare function steerControlled(world: World, entity: Entity, dt: number): boolean;
27
+ /** Whether a control buff (`BuffDef.control`) holds its carrier as its id says: the words there are */
28
+ export declare const CONTROL_KINDS: readonly ControlKind[];
@@ -0,0 +1,113 @@
1
+ import { cos, hypot, sin } from "../exactMath.js";
2
+ import { orderSays } from "../orders/facts.js";
3
+ import { defineComponent } from "../components.js";
4
+ import { edgeDistance, fighting, moving } from "../entity.js";
5
+ import { controlOf } from "./buffs.js";
6
+ import { halt, moveTo, moveToEntity } from "../systems/movement.js";
7
+ import { canAttack, engage } from "../systems/combat.js";
8
+ import { clearOrders, resetStance } from "../orders/queue.js";
9
+ //#region src/abilities/control.ts
10
+ /**
11
+ * A unit a buff's control holds (`BuffDef.control`): the buff, and who put it on. Set the first tick it holds it, and
12
+ * taken off the first tick after, as what it was told goes on. Saved with the unit, told to everyone who sees it
13
+ *
14
+ * @beta
15
+ */
16
+ var controlled = defineComponent({
17
+ id: "core.controlled",
18
+ replicate: "everyone"
19
+ });
20
+ /** How far ahead of itself a frightened unit runs, each time it looks where to */
21
+ var FLEE_STEP = 4;
22
+ /** Ticks between two looks where to run, or to walk after whom it is charmed by */
23
+ var RETHINK = 8;
24
+ /** How close a charmed unit comes to who charmed it */
25
+ var CHARMED_RANGE = .5;
26
+ /**
27
+ * One tick of a unit under a control: the first, what it was doing is put off (a channel broken off, the rest to start
28
+ * over after); then it does what the control says. False when nothing controls it, after it let go of one
29
+ */
30
+ function steerControlled(world, entity, dt) {
31
+ const instance = entity.buffs.length ? controlOf(world, entity) : void 0;
32
+ const held = entity.get(controlled);
33
+ if (!instance) {
34
+ if (held) release(world, entity);
35
+ return false;
36
+ }
37
+ if (!held || held.buff !== instance.id || held.source !== instance.source) {
38
+ if (!held) putOff(world, entity);
39
+ entity.set(controlled, {
40
+ buff: instance.id,
41
+ source: instance.source
42
+ });
43
+ }
44
+ const source = world.get(instance.source);
45
+ const control = world.registry.buff(instance.id).control;
46
+ if (typeof control === "function") control(world, entity, instance, dt, source?.alive ? source : void 0);
47
+ else steer(world, entity, control, source?.alive ? source : void 0, dt);
48
+ return true;
49
+ }
50
+ /** What it was doing waits: a channel is broken off, the rest starts over once the control lets go */
51
+ function putOff(world, entity) {
52
+ if (orderSays(world, entity, "channelling")) {
53
+ clearOrders(world, entity);
54
+ return;
55
+ }
56
+ const order = entity.orders[0];
57
+ if (order?.started) {
58
+ world.registry.order(order.type).end?.(world, entity, order);
59
+ order.started = false;
60
+ }
61
+ resetStance(world, entity);
62
+ }
63
+ /** The control let go: it stands, and what it was told starts over */
64
+ function release(world, entity) {
65
+ entity.remove(controlled);
66
+ resetStance(world, entity);
67
+ }
68
+ function steer(world, entity, kind, source, dt) {
69
+ const m = entity.get(moving);
70
+ if (kind === "taunt") {
71
+ if (!source) return halt(world, entity);
72
+ if (entity.get(fighting) && canAttack(world, entity, source, true)) {
73
+ engage(world, entity, source, dt, !!m, true);
74
+ return;
75
+ }
76
+ if (m) moveToEntity(world, entity, source, CHARMED_RANGE);
77
+ return;
78
+ }
79
+ if (!m) return;
80
+ const rethink = m.status !== "moving" || (world.tick + entity.id) % RETHINK === 0;
81
+ if (kind === "charm") {
82
+ if (!source) return halt(world, entity);
83
+ if (edgeDistance(entity, source) > CHARMED_RANGE && rethink) moveToEntity(world, entity, source, CHARMED_RANGE);
84
+ return;
85
+ }
86
+ if (!rethink) return;
87
+ let dx = source ? entity.pos.x - source.pos.x : sin(entity.facing);
88
+ let dz = source ? entity.pos.z - source.pos.z : cos(entity.facing);
89
+ const length = hypot(dx, dz);
90
+ if (length < 1e-6) {
91
+ dx = sin(entity.facing);
92
+ dz = cos(entity.facing);
93
+ } else {
94
+ dx /= length;
95
+ dz /= length;
96
+ }
97
+ const aim = {
98
+ x: entity.pos.x + dx * FLEE_STEP,
99
+ z: entity.pos.z + dz * FLEE_STEP
100
+ };
101
+ const spot = (entity.flying ? world.air : world.nav).closestPoint(aim, FLEE_STEP) ?? aim;
102
+ moveTo(world, entity, spot);
103
+ }
104
+ /** Whether a control buff (`BuffDef.control`) holds its carrier as its id says: the words there are */
105
+ var CONTROL_KINDS = [
106
+ "fear",
107
+ "charm",
108
+ "taunt"
109
+ ];
110
+ //#endregion
111
+ export { CONTROL_KINDS, controlled, steerControlled };
112
+
113
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","names":[],"sources":["../../src/abilities/control.ts"],"sourcesContent":["/**\n * Crowd control that takes a unit's orders (E2E-PLAN AB5): a buff's `control` (`fear`, `charm`, `taunt`, or code) steers\n * its carrier every tick in place of its orders, which wait as they do through a stun and go on after; new orders are\n * refused while it lasts (`giveOrder`). Run by the order system (`systems/orders.ts`)\n */\nimport type { BuffControl, ControlKind } from '#engine/defs'\nimport { defineComponent } from '#engine/components'\nimport { type Entity, edgeDistance, fighting, moving } from '#engine/entity'\nimport { cos, hypot, sin } from '#engine/exactMath'\nimport { orderSays } from '#engine/orders/facts'\nimport { clearOrders, resetStance } from '#engine/orders/queue'\nimport { canAttack, engage } from '#engine/systems/combat'\nimport { halt, moveTo, moveToEntity } from '#engine/systems/movement'\nimport type { World } from '#engine/world'\nimport { controlOf } from './buffs'\n\n/**\n * A unit a buff's control holds (`BuffDef.control`): the buff, and who put it on. Set the first tick it holds it, and\n * taken off the first tick after, as what it was told goes on. Saved with the unit, told to everyone who sees it\n *\n * @beta\n */\nexport const controlled = defineComponent<{ buff: string; source: number }>({ id: 'core.controlled', replicate: 'everyone' })\n\n/** How far ahead of itself a frightened unit runs, each time it looks where to */\nconst FLEE_STEP = 4\n/** Ticks between two looks where to run, or to walk after whom it is charmed by */\nconst RETHINK = 8\n/** How close a charmed unit comes to who charmed it */\nconst CHARMED_RANGE = 0.5\n\n/**\n * One tick of a unit under a control: the first, what it was doing is put off (a channel broken off, the rest to start\n * over after); then it does what the control says. False when nothing controls it, after it let go of one\n */\nexport function steerControlled(world: World, entity: Entity, dt: number): boolean {\n\tconst instance = entity.buffs.length ? controlOf(world, entity) : undefined\n\tconst held = entity.get(controlled)\n\tif (!instance) {\n\t\tif (held) release(world, entity)\n\t\treturn false\n\t}\n\tif (!held || held.buff !== instance.id || held.source !== instance.source) {\n\t\tif (!held) putOff(world, entity)\n\t\tentity.set(controlled, { buff: instance.id, source: instance.source })\n\t}\n\tconst source = world.get(instance.source)\n\tconst control = world.registry.buff(instance.id).control!\n\tif (typeof control === 'function') (control as BuffControl)(world, entity, instance, dt, source?.alive ? source : undefined)\n\telse steer(world, entity, control, source?.alive ? source : undefined, dt)\n\treturn true\n}\n\n/** What it was doing waits: a channel is broken off, the rest starts over once the control lets go */\nfunction putOff(world: World, entity: Entity): void {\n\tif (orderSays(world, entity, 'channelling')) {\n\t\tclearOrders(world, entity)\n\t\treturn\n\t}\n\tconst order = entity.orders[0]\n\tif (order?.started) {\n\t\tworld.registry.order(order.type).end?.(world, entity, order)\n\t\torder.started = false\n\t}\n\tresetStance(world, entity)\n}\n\n/** The control let go: it stands, and what it was told starts over */\nfunction release(world: World, entity: Entity): void {\n\tentity.remove(controlled)\n\tresetStance(world, entity)\n}\n\nfunction steer(world: World, entity: Entity, kind: ControlKind, source: Entity | undefined, dt: number): void {\n\tconst m = entity.get(moving)\n\tif (kind === 'taunt') {\n\t\tif (!source) return halt(world, entity)\n\t\t// at who taunted it, with what it has; walking up to them where it cannot strike them\n\t\tif (entity.get(fighting) && canAttack(world, entity, source, true)) {\n\t\t\tengage(world, entity, source, dt, !!m, true)\n\t\t\treturn\n\t\t}\n\t\tif (m) moveToEntity(world, entity, source, CHARMED_RANGE)\n\t\treturn\n\t}\n\tif (!m) return\n\tconst rethink = m.status !== 'moving' || (world.tick + entity.id) % RETHINK === 0\n\tif (kind === 'charm') {\n\t\tif (!source) return halt(world, entity)\n\t\tif (edgeDistance(entity, source) > CHARMED_RANGE && rethink) moveToEntity(world, entity, source, CHARMED_RANGE)\n\t\treturn\n\t}\n\t// fear: away from who frightened it, the way it faces when there is nobody to run from\n\tif (!rethink) return\n\tlet dx = source ? entity.pos.x - source.pos.x : sin(entity.facing)\n\tlet dz = source ? entity.pos.z - source.pos.z : cos(entity.facing)\n\tconst length = hypot(dx, dz)\n\tif (length < 1e-6) {\n\t\tdx = sin(entity.facing)\n\t\tdz = cos(entity.facing)\n\t} else {\n\t\tdx /= length\n\t\tdz /= length\n\t}\n\tconst aim = { x: entity.pos.x + dx * FLEE_STEP, z: entity.pos.z + dz * FLEE_STEP }\n\tconst spot = (entity.flying ? world.air : world.nav).closestPoint(aim, FLEE_STEP) ?? aim\n\tmoveTo(world, entity, spot)\n}\n\n/** Whether a control buff (`BuffDef.control`) holds its carrier as its id says: the words there are */\nexport const CONTROL_KINDS: readonly ControlKind[] = ['fear', 'charm', 'taunt']\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,IAAa,aAAa,gBAAkD;CAAE,IAAI;CAAmB,WAAW;AAAW,CAAC;;AAG5H,IAAM,YAAY;;AAElB,IAAM,UAAU;;AAEhB,IAAM,gBAAgB;;;;;AAMtB,SAAgB,gBAAgB,OAAc,QAAgB,IAAqB;CAClF,MAAM,WAAW,OAAO,MAAM,SAAS,UAAU,OAAO,MAAM,IAAI,KAAA;CAClE,MAAM,OAAO,OAAO,IAAI,UAAU;CAClC,IAAI,CAAC,UAAU;EACd,IAAI,MAAM,QAAQ,OAAO,MAAM;EAC/B,OAAO;CACR;CACA,IAAI,CAAC,QAAQ,KAAK,SAAS,SAAS,MAAM,KAAK,WAAW,SAAS,QAAQ;EAC1E,IAAI,CAAC,MAAM,OAAO,OAAO,MAAM;EAC/B,OAAO,IAAI,YAAY;GAAE,MAAM,SAAS;GAAI,QAAQ,SAAS;EAAO,CAAC;CACtE;CACA,MAAM,SAAS,MAAM,IAAI,SAAS,MAAM;CACxC,MAAM,UAAU,MAAM,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC;CACjD,IAAI,OAAO,YAAY,YAAY,QAAyB,OAAO,QAAQ,UAAU,IAAI,QAAQ,QAAQ,SAAS,KAAA,CAAS;MACtH,MAAM,OAAO,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAA,GAAW,EAAE;CACzE,OAAO;AACR;;AAGA,SAAS,OAAO,OAAc,QAAsB;CACnD,IAAI,UAAU,OAAO,QAAQ,aAAa,GAAG;EAC5C,YAAY,OAAO,MAAM;EACzB;CACD;CACA,MAAM,QAAQ,OAAO,OAAO;CAC5B,IAAI,OAAO,SAAS;EACnB,MAAM,SAAS,MAAM,MAAM,IAAI,CAAC,CAAC,MAAM,OAAO,QAAQ,KAAK;EAC3D,MAAM,UAAU;CACjB;CACA,YAAY,OAAO,MAAM;AAC1B;;AAGA,SAAS,QAAQ,OAAc,QAAsB;CACpD,OAAO,OAAO,UAAU;CACxB,YAAY,OAAO,MAAM;AAC1B;AAEA,SAAS,MAAM,OAAc,QAAgB,MAAmB,QAA4B,IAAkB;CAC7G,MAAM,IAAI,OAAO,IAAI,MAAM;CAC3B,IAAI,SAAS,SAAS;EACrB,IAAI,CAAC,QAAQ,OAAO,KAAK,OAAO,MAAM;EAEtC,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,OAAO,QAAQ,QAAQ,IAAI,GAAG;GACnE,OAAO,OAAO,QAAQ,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI;GAC3C;EACD;EACA,IAAI,GAAG,aAAa,OAAO,QAAQ,QAAQ,aAAa;EACxD;CACD;CACA,IAAI,CAAC,GAAG;CACR,MAAM,UAAU,EAAE,WAAW,aAAa,MAAM,OAAO,OAAO,MAAM,YAAY;CAChF,IAAI,SAAS,SAAS;EACrB,IAAI,CAAC,QAAQ,OAAO,KAAK,OAAO,MAAM;EACtC,IAAI,aAAa,QAAQ,MAAM,IAAI,iBAAiB,SAAS,aAAa,OAAO,QAAQ,QAAQ,aAAa;EAC9G;CACD;CAEA,IAAI,CAAC,SAAS;CACd,IAAI,KAAK,SAAS,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,MAAM;CACjE,IAAI,KAAK,SAAS,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,MAAM;CACjE,MAAM,SAAS,MAAM,IAAI,EAAE;CAC3B,IAAI,SAAS,MAAM;EAClB,KAAK,IAAI,OAAO,MAAM;EACtB,KAAK,IAAI,OAAO,MAAM;CACvB,OAAO;EACN,MAAM;EACN,MAAM;CACP;CACA,MAAM,MAAM;EAAE,GAAG,OAAO,IAAI,IAAI,KAAK;EAAW,GAAG,OAAO,IAAI,IAAI,KAAK;CAAU;CACjF,MAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,MAAM,IAAA,CAAK,aAAa,KAAK,SAAS,KAAK;CACrF,OAAO,OAAO,QAAQ,IAAI;AAC3B;;AAGA,IAAa,gBAAwC;CAAC;CAAQ;CAAS;AAAO"}
@@ -0,0 +1,51 @@
1
+ import { removeBuff } from "./buffs.js";
2
+ import { summoned } from "../summoned.js";
3
+ import { valueOf } from "./amounts.js";
4
+ import { defineEffect, effectTargets } from "./effects.js";
5
+ //#region src/abilities/dispel.ts
6
+ /**
7
+ * Takes buffs off a unit, as a dispel does: the good ones of an enemy of `by`, the bad ones of a friend. Those that say
8
+ * they cannot be (`BuffDef.dispellable: false`) stay. How many it took
9
+ *
10
+ * @beta
11
+ */
12
+ function dispelBuffs(world, entity, by) {
13
+ const enemy = world.areEnemies(by.owner, entity.owner);
14
+ let taken = 0;
15
+ for (const instance of [...entity.buffs]) {
16
+ const def = world.registry.buff(instance.id);
17
+ if (!!def.harmful === enemy) continue;
18
+ if (!(typeof def.dispellable === "function" ? def.dispellable(world, entity, instance, by) : def.dispellable !== false)) continue;
19
+ removeBuff(world, entity, instance.id);
20
+ taken++;
21
+ }
22
+ return taken;
23
+ }
24
+ /**
25
+ * The effect types of the dispel family, among them `dispel`, which the engine adds to its effect types
26
+ *
27
+ * @internal
28
+ */
29
+ var dispelEffects = [defineEffect({
30
+ type: "dispel",
31
+ run: (context, effect) => {
32
+ const { world, caster } = context;
33
+ const hurt = valueOf(context, effect.amount);
34
+ for (const entity of effectTargets(context, {
35
+ ...effect,
36
+ affects: effect.affects ?? "all"
37
+ }, "enemies")) {
38
+ if (!entity.isUnit) continue;
39
+ dispelBuffs(world, entity, caster);
40
+ if (hurt > 0 && entity.has(summoned) && world.areEnemies(caster.owner, entity.owner)) world.damage(entity, hurt, caster, {
41
+ damageType: "magic",
42
+ ability: context.ability.id
43
+ });
44
+ }
45
+ },
46
+ fields: ["amount"]
47
+ })];
48
+ //#endregion
49
+ export { dispelBuffs, dispelEffects };
50
+
51
+ //# sourceMappingURL=dispel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispel.js","names":[],"sources":["../../src/abilities/dispel.ts"],"sourcesContent":["import type { Entity } from '#engine/entity'\nimport { summoned } from '#engine/summons'\nimport type { World } from '#engine/world'\nimport { removeBuff } from './buffs'\nimport { defineEffect, type EffectType, effectTargets } from './effects'\nimport { valueOf } from './amounts'\n\n/*\n * Dispelling and spell immunity. A dispel takes what is good off enemies and what is bad off friends, and hurts what a\n * spell brought into the world; a unit immune to spells is not touched by abilities, those of its friends too, unless\n * an ability says it gets through (`AbilityDef.piercesImmunity`)\n */\n\n/**\n * Takes buffs off a unit, as a dispel does: the good ones of an enemy of `by`, the bad ones of a friend. Those that say\n * they cannot be (`BuffDef.dispellable: false`) stay. How many it took\n *\n * @beta\n */\nexport function dispelBuffs(world: World, entity: Entity, by: Entity): number {\n\tconst enemy = world.areEnemies(by.owner, entity.owner)\n\tlet taken = 0\n\tfor (const instance of [...entity.buffs]) {\n\t\tconst def = world.registry.buff(instance.id)\n\t\tif (!!def.harmful === enemy) continue\n\t\tconst dispellable = typeof def.dispellable === 'function' ? def.dispellable(world, entity, instance, by) : def.dispellable !== false\n\t\tif (!dispellable) continue\n\t\tremoveBuff(world, entity, instance.id)\n\t\ttaken++\n\t}\n\treturn taken\n}\n\n/**\n * The effect types of the dispel family, among them `dispel`, which the engine adds to its effect types\n *\n * @internal\n */\nexport const dispelEffects: EffectType[] = [\n\t/**\n\t * Takes the good buffs off enemies and the bad ones off friends, where it lands (`radius`, or the target alone), and\n\t * deals `amount` to every unit there a spell brought (`summoned`), which is magic\n\t */\n\tdefineEffect({ type: 'dispel', run: (context, effect) => {\n\t\t\tconst { world, caster } = context\n\t\t\tconst hurt = valueOf(context, effect.amount)\n\t\t\tfor (const entity of effectTargets(context, { ...effect, affects: effect.affects ?? 'all' }, 'enemies')) {\n\t\t\t\tif (!entity.isUnit) continue\n\t\t\t\tdispelBuffs(world, entity, caster)\n\t\t\t\tif (hurt > 0 && entity.has(summoned) && world.areEnemies(caster.owner, entity.owner))\n\t\t\t\t\tworld.damage(entity, hurt, caster, { damageType: 'magic', ability: context.ability.id })\n\t\t\t}\n\t\t}, fields: ['amount'] })\n]\n"],"mappings":";;;;;;;;;;;AAmBA,SAAgB,YAAY,OAAc,QAAgB,IAAoB;CAC7E,MAAM,QAAQ,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK;CACrD,IAAI,QAAQ;CACZ,KAAK,MAAM,YAAY,CAAC,GAAG,OAAO,KAAK,GAAG;EACzC,MAAM,MAAM,MAAM,SAAS,KAAK,SAAS,EAAE;EAC3C,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO;EAE7B,IAAI,EADgB,OAAO,IAAI,gBAAgB,aAAa,IAAI,YAAY,OAAO,QAAQ,UAAU,EAAE,IAAI,IAAI,gBAAgB,QAC7G;EAClB,WAAW,OAAO,QAAQ,SAAS,EAAE;EACrC;CACD;CACA,OAAO;AACR;;;;;;AAOA,IAAa,gBAA8B,CAK1C,aAAa;CAAE,MAAM;CAAU,MAAM,SAAS,WAAW;EACvD,MAAM,EAAE,OAAO,WAAW;EAC1B,MAAM,OAAO,QAAQ,SAAS,OAAO,MAAM;EAC3C,KAAK,MAAM,UAAU,cAAc,SAAS;GAAE,GAAG;GAAQ,SAAS,OAAO,WAAW;EAAM,GAAG,SAAS,GAAG;GACxG,IAAI,CAAC,OAAO,QAAQ;GACpB,YAAY,OAAO,QAAQ,MAAM;GACjC,IAAI,OAAO,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,WAAW,OAAO,OAAO,OAAO,KAAK,GAClF,MAAM,OAAO,QAAQ,MAAM,QAAQ;IAAE,YAAY;IAAS,SAAS,QAAQ,QAAQ;GAAG,CAAC;EACzF;CACD;CAAG,QAAQ,CAAC,QAAQ;AAAE,CAAC,CACzB"}
@@ -1,7 +1,7 @@
1
1
  import type { EffectCommon, EffectFields } from '#engine/defs';
2
2
  import type { EditableField } from '#engine/gameData';
3
3
  /** The fields every effect may have, whatever its type (`EffectCommon`): offered on every row of effects */
4
- export declare const COMMON_EFFECT_FIELDS: Readonly<Record<keyof EffectCommon, EditableField>>;
4
+ export declare const COMMON_EFFECT_FIELDS: Readonly<Record<keyof EffectCommon, EditableField | readonly EditableField[]>>;
5
5
  /**
6
6
  * The engine's fields of an effect by name (`EffectFields`), as the Data panel shows them; `effects`, `onEnd` and
7
7
  * `otherwise` are lists of effects. Those of a few values (a missile's `arc`) are a field for each, null for one that