@v12-engine/engine 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tomes.js","names":[],"sources":["../src/tomes.ts"],"sourcesContent":["import { defineEffect, effectTargets } from './abilities/effects'\nimport { defineComponent } from './components'\nimport type { StatChange } from './defs'\nimport type { Entity } from './entity'\nimport { grantXp, heroOf, maxLevelOf } from './hero'\nimport type { GamePack } from './packs/pack'\nimport { invalidateStats, refreshVitals, type StatField } from './stats'\nimport type { World } from './world'\n\n/*\n * Tomes, an opt-in pack (review RV95): what a unit gains for good, a point of strength a book, kept with it and in a\n * save, and the `tome` effect that gives it (an item's ability, used from the inventory or as it is picked up with the\n * runes pack). A hero's experience and levels from a book are the heroes' own (`grantXp`)\n */\n\n/**\n * The tomes pack's id\n *\n * @beta\n */\nexport const TOMES = 'core.tomes'\n\n/**\n * What a unit gained for good (`gainStats`): the stats added and the parts, everything it gained added up, and how many\n * times it gained\n *\n * @beta\n */\nexport interface GainedStats {\n\t/** What was added to each stat */\n\tstats: Record<string, number>\n\t/** The parts each stat was made bigger or smaller by */\n\tpercent: Record<string, number>\n\t/** How many times it gained: what tells the stats to be added up again */\n\ttimes: number\n}\n\n/**\n * What a unit gained for good from tomes or the game's own rules (`gainStats`): saved with it\n *\n * @beta\n */\nexport const gainedStats = defineComponent<GainedStats>({ id: 'core.gainedStats' })\n\n/**\n * Gives a unit stats for good, as a tome does: added to what it gained before, kept with it in a save, its health and\n * mana raised with them. For the tomes pack's `tome` effect and a game's own rules (a shrine that makes a unit\n * stronger); it works in a game with the tomes pack (`tomesPack`), which adds what was gained to the stats\n *\n * @beta\n */\nexport function gainStats(world: World, entity: Entity, change: StatChange): void {\n\tconst had = entity.get(gainedStats)\n\tconst next: GainedStats = { stats: { ...had?.stats }, percent: { ...had?.percent }, times: (had?.times ?? 0) + 1 }\n\tfor (const key in change.stats) next.stats[key] = (next.stats[key] ?? 0) + change.stats[key]!\n\tfor (const key in change.percent) next.percent[key] = (next.percent[key] ?? 0) + change.percent[key]!\n\tentity.set(gainedStats, next)\n\tinvalidateStats(world, entity)\n\trefreshVitals(world, entity)\n}\n\n/** A tome read: what it gives for good, the experience and the levels it gives a hero */\nconst tomeEffect = defineEffect({ type: 'tome', run: (context, effect) => {\n\t\tconst { world } = context\n\t\tfor (const entity of effectTargets(context, effect, 'allies')) {\n\t\t\tif (effect.gain) gainStats(world, entity, effect.gain)\n\t\t\tif (effect.xp) grantXp(world, entity, effect.xp)\n\t\t\tfor (let i = 0; i < (effect.levels ?? 0); i++) {\n\t\t\t\tconst hero = heroOf(entity)\n\t\t\t\tif (!hero || hero.level >= maxLevelOf(world, entity)) break\n\t\t\t\tgrantXp(world, entity, world.settings.heroes.xpForLevel(hero.level + 1) - hero.xp)\n\t\t\t}\n\t\t}\n\t}, fields: [\n\t\t\t{ path: 'xp', kind: 'integer', min: 0, hint: 'Experience a hero gains' },\n\t\t\t{ path: 'levels', kind: 'integer', min: 0, hint: 'Levels a hero gains' }\n\t\t] })\n\n/** What was gained, added to the stats: worked out again each time something is gained */\nconst gained: StatField = {\n\tid: 'tomes',\n\tstamp: (entity) => entity.get(gainedStats)?.times ?? 0,\n\tadd(_world, entity, sum) {\n\t\tconst had = entity.get(gainedStats)\n\t\tif (had) sum.add(had)\n\t}\n}\n\n/**\n * Tomes, as in classic RTS games: the `tome` effect (`EffectTypes.tome`) gives what it reaches stats for good (`gain`: a\n * point of a stat of the game's own), a hero experience (`xp`) and levels (`levels`). A tome is an item whose\n * ability has the effect, with a charge, used from the inventory, or as it is picked up with the runes pack\n * (`runesPack`). What a unit gained is kept with it and in a save (`gainedStats`), and a game gives it from its own\n * rules with `gainStats`\n *\n * @beta\n */\nexport function tomesPack(): GamePack {\n\treturn { id: TOMES, components: [gainedStats], effects: [tomeEffect], statFields: [gained] }\n}\n"],"mappings":";;;;;;;;;;AAoBA,IAAa,QAAQ;;;;;;AAsBrB,IAAa,cAAc,gBAA6B,EAAE,IAAI,mBAAmB,CAAC;;;;;;;;AASlF,SAAgB,UAAU,OAAc,QAAgB,QAA0B;CACjF,MAAM,MAAM,OAAO,IAAI,WAAW;CAClC,MAAM,OAAoB;EAAE,OAAO,EAAE,GAAG,KAAK,MAAM;EAAG,SAAS,EAAE,GAAG,KAAK,QAAQ;EAAG,QAAQ,KAAK,SAAS,KAAK;CAAE;CACjH,KAAK,MAAM,OAAO,OAAO,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,OAAO,MAAM;CACxF,KAAK,MAAM,OAAO,OAAO,SAAS,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,KAAK,OAAO,QAAQ;CAChG,OAAO,IAAI,aAAa,IAAI;CAC5B,gBAAgB,OAAO,MAAM;CAC7B,cAAc,OAAO,MAAM;AAC5B;;AAGA,IAAM,aAAa,aAAa;CAAE,MAAM;CAAQ,MAAM,SAAS,WAAW;EACxE,MAAM,EAAE,UAAU;EAClB,KAAK,MAAM,UAAU,cAAc,SAAS,QAAQ,QAAQ,GAAG;GAC9D,IAAI,OAAO,MAAM,UAAU,OAAO,QAAQ,OAAO,IAAI;GACrD,IAAI,OAAO,IAAI,QAAQ,OAAO,QAAQ,OAAO,EAAE;GAC/C,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,UAAU,IAAI,KAAK;IAC9C,MAAM,OAAO,OAAO,MAAM;IAC1B,IAAI,CAAC,QAAQ,KAAK,SAAS,WAAW,OAAO,MAAM,GAAG;IACtD,QAAQ,OAAO,QAAQ,MAAM,SAAS,OAAO,WAAW,KAAK,QAAQ,CAAC,IAAI,KAAK,EAAE;GAClF;EACD;CACD;CAAG,QAAQ,CACT;EAAE,MAAM;EAAM,MAAM;EAAW,KAAK;EAAG,MAAM;CAA0B,GACvE;EAAE,MAAM;EAAU,MAAM;EAAW,KAAK;EAAG,MAAM;CAAsB,CACxE;AAAE,CAAC;;AAGL,IAAM,SAAoB;CACzB,IAAI;CACJ,QAAQ,WAAW,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS;CACrD,IAAI,QAAQ,QAAQ,KAAK;EACxB,MAAM,MAAM,OAAO,IAAI,WAAW;EAClC,IAAI,KAAK,IAAI,IAAI,GAAG;CACrB;AACD;;;;;;;;;;AAWA,SAAgB,YAAsB;CACrC,OAAO;EAAE,IAAI;EAAO,YAAY,CAAC,WAAW;EAAG,SAAS,CAAC,UAAU;EAAG,YAAY,CAAC,MAAM;CAAE;AAC5F"}
package/dist/trade.js ADDED
@@ -0,0 +1,103 @@
1
+ import { exchanged, traded } from "./engineEvents.js";
2
+ import { earn, spend } from "./player.js";
3
+ import { engineMessage } from "./messages.js";
4
+ //#region src/trade.ts
5
+ /**
6
+ * Gives `amount` of a resource from one player to an ally (`traded`), both told. Nothing to who is not an ally, more
7
+ * than the giver has, or a resource the game does not have; and as the `beforeTrade` hook says: how much arrives, or not
8
+ *
9
+ * @beta
10
+ */
11
+ function give(world, from, to, resource, amount) {
12
+ if (from === to || !world.players.has(to) || !world.registry.resource(resource)) return;
13
+ const receiver = world.player(to);
14
+ if (receiver.neutral || !world.areAllies(from, to)) return world.message(from, engineMessage("notAnAlly"));
15
+ const sent = Math.floor(amount);
16
+ if (sent <= 0) return;
17
+ const purse = world.player(from).resources;
18
+ if ((purse[resource] ?? 0) < sent) return world.message(from, engineMessage("notEnough", { resource }));
19
+ const trade = {
20
+ from,
21
+ to,
22
+ resource,
23
+ sent,
24
+ received: Math.floor(sent * (1 - (world.settings.economy.tradeTax ?? 0))),
25
+ cancelled: false
26
+ };
27
+ if (world.hooks.has("beforeTrade")) world.hooks.run("beforeTrade", trade);
28
+ if (trade.cancelled) return world.message(from, trade.reason ?? engineMessage("cannotDoThat"));
29
+ const received = Math.max(Math.floor(trade.received), 0);
30
+ purse[resource] = (purse[resource] ?? 0) - sent;
31
+ earn(receiver.resources, resource, received);
32
+ world.events.emit(traded, {
33
+ from,
34
+ to,
35
+ resource,
36
+ sent,
37
+ received
38
+ });
39
+ world.message(from, engineMessage("sent", {
40
+ amount: sent,
41
+ resource,
42
+ player: receiver.name
43
+ }), "info");
44
+ world.message(to, engineMessage("received", {
45
+ amount: received,
46
+ resource,
47
+ player: world.player(from).name
48
+ }), "info");
49
+ }
50
+ /**
51
+ * Shares with an ally, or no longer: control of the player's units (`shareControl`), and what the player's team sees
52
+ * (`shareVision`, when the ally is of another team: a team sees as one already). Nothing for who is not an ally
53
+ *
54
+ * @beta
55
+ */
56
+ function shareWith(world, player, ally, what) {
57
+ if (player === ally || !world.players.has(ally)) return;
58
+ if (world.player(ally).neutral || !world.areAllies(player, ally)) return world.message(player, engineMessage("notAnAlly"));
59
+ const sameTeam = world.player(player).team === world.player(ally).team;
60
+ world.sides.share(player, ally, {
61
+ control: what.control,
62
+ vision: sameTeam ? void 0 : what.vision
63
+ });
64
+ }
65
+ /**
66
+ * Trades `amount` of one resource of a player's (`sold`) for another (`bought`) at a rate: `rate` of it for each one
67
+ * sold, rounded down (`exchanged`), the player told. What the `exchange` effect does (a marketplace's ability,
68
+ * `presetMarket`), for a game's own rules. Nothing of a resource the game does not have, of one for itself, or more
69
+ * than the player has. Gives back how much came
70
+ *
71
+ * @beta
72
+ */
73
+ function exchange(world, player, sold, bought, amount, rate) {
74
+ if (sold === bought || !world.players.has(player) || !world.registry.resource(sold) || !world.registry.resource(bought)) return 0;
75
+ const sent = Math.floor(amount);
76
+ if (sent <= 0 || !(rate > 0)) return 0;
77
+ const purse = world.player(player).resources;
78
+ if ((purse[sold] ?? 0) < sent) {
79
+ world.message(player, engineMessage("notEnough", { resource: sold }));
80
+ return 0;
81
+ }
82
+ const received = Math.floor(sent * rate + 1e-9);
83
+ spend(world, player, { [sold]: sent }, "trade", bought);
84
+ earn(purse, bought, received);
85
+ world.events.emit(exchanged, {
86
+ player,
87
+ sold,
88
+ sent,
89
+ bought,
90
+ received
91
+ });
92
+ world.message(player, engineMessage("exchanged", {
93
+ amount: sent,
94
+ resource: sold,
95
+ received,
96
+ for: bought
97
+ }), "info");
98
+ return received;
99
+ }
100
+ //#endregion
101
+ export { exchange, give, shareWith };
102
+
103
+ //# sourceMappingURL=trade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade.js","names":["tradedEvent","exchangedEvent"],"sources":["../src/trade.ts"],"sourcesContent":["import { exchanged as exchangedEvent, traded as tradedEvent } from '#engine/engineEvents'\nimport type { PlayerId } from './entity'\nimport { engineMessage } from './messages'\nimport { earn, spend } from './player'\nimport type { BeforeTrade } from './hooks'\nimport type { World } from './world'\n\n/*\n * Allies helping each other: a player gives some of what they have to an ally, less what the game's rules take\n * (`RuleSettings.economy.tradeTax`), as the classic allies menu does. A command like any other. And a market: a player\n * trades one resource of theirs for another at a rate (`exchange`, the `exchange` effect, `presetMarket`)\n */\n\n/**\n * Gives `amount` of a resource from one player to an ally (`traded`), both told. Nothing to who is not an ally, more\n * than the giver has, or a resource the game does not have; and as the `beforeTrade` hook says: how much arrives, or not\n *\n * @beta\n */\nexport function give(world: World, from: PlayerId, to: PlayerId, resource: string, amount: number): void {\n\tif (from === to || !world.players.has(to) || !world.registry.resource(resource)) return\n\tconst receiver = world.player(to)\n\tif (receiver.neutral || !world.areAllies(from, to)) return world.message(from, engineMessage('notAnAlly'))\n\tconst sent = Math.floor(amount)\n\tif (sent <= 0) return\n\tconst purse = world.player(from).resources\n\tif ((purse[resource] ?? 0) < sent) return world.message(from, engineMessage('notEnough', { resource }))\n\t// the game's say: how much arrives, or none of it\n\tconst trade = { from, to, resource, sent, received: Math.floor(sent * (1 - (world.settings.economy.tradeTax ?? 0))), cancelled: false } as BeforeTrade\n\tif (world.hooks.has('beforeTrade')) world.hooks.run('beforeTrade', trade)\n\tif (trade.cancelled) return world.message(from, trade.reason ?? engineMessage('cannotDoThat'))\n\tconst received = Math.max(Math.floor(trade.received), 0)\n\tpurse[resource] = (purse[resource] ?? 0) - sent\n\tearn(receiver.resources, resource, received)\n\tworld.events.emit(tradedEvent, { from, to, resource, sent, received })\n\tworld.message(from, engineMessage('sent', { amount: sent, resource, player: receiver.name }), 'info')\n\tworld.message(to, engineMessage('received', { amount: received, resource, player: world.player(from).name }), 'info')\n}\n\n/**\n * Shares with an ally, or no longer: control of the player's units (`shareControl`), and what the player's team sees\n * (`shareVision`, when the ally is of another team: a team sees as one already). Nothing for who is not an ally\n *\n * @beta\n */\nexport function shareWith(world: World, player: PlayerId, ally: PlayerId, what: { vision?: boolean; control?: boolean }): void {\n\tif (player === ally || !world.players.has(ally)) return\n\tif (world.player(ally).neutral || !world.areAllies(player, ally)) return world.message(player, engineMessage('notAnAlly'))\n\tconst sameTeam = world.player(player).team === world.player(ally).team\n\tworld.sides.share(player, ally, { control: what.control, vision: sameTeam ? undefined : what.vision })\n}\n\n/**\n * Trades `amount` of one resource of a player's (`sold`) for another (`bought`) at a rate: `rate` of it for each one\n * sold, rounded down (`exchanged`), the player told. What the `exchange` effect does (a marketplace's ability,\n * `presetMarket`), for a game's own rules. Nothing of a resource the game does not have, of one for itself, or more\n * than the player has. Gives back how much came\n *\n * @beta\n */\nexport function exchange(world: World, player: PlayerId, sold: string, bought: string, amount: number, rate: number): number {\n\tif (sold === bought || !world.players.has(player) || !world.registry.resource(sold) || !world.registry.resource(bought)) return 0\n\tconst sent = Math.floor(amount)\n\tif (sent <= 0 || !(rate > 0)) return 0\n\tconst purse = world.player(player).resources\n\tif ((purse[sold] ?? 0) < sent) {\n\t\tworld.message(player, engineMessage('notEnough', { resource: sold }))\n\t\treturn 0\n\t}\n\t// a hair over, so that a rate written as a decimal (100 at 0.29) comes to what it says and not one under\n\tconst received = Math.floor(sent * rate + 1e-9)\n\t// what was sold counts as spent, as the score has it\n\tspend(world, player, { [sold]: sent }, 'trade', bought)\n\tearn(purse, bought, received)\n\tworld.events.emit(exchangedEvent, { player, sold, sent, bought, received })\n\tworld.message(player, engineMessage('exchanged', { amount: sent, resource: sold, received, for: bought }), 'info')\n\treturn received\n}\n"],"mappings":"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"}
@@ -9,11 +9,16 @@ import type { World } from './world';
9
9
  * @beta
10
10
  */
11
11
  export interface Cargo {
12
+ /** Ids of the units inside the transport */
12
13
  passengers: number[];
13
14
  /** There is land within reach to let them out on */
14
15
  ashore: boolean;
15
16
  }
16
- /** @beta */
17
+ /**
18
+ * The component holding a transport's passengers, replicated to allies; set on spawn for types with `transport`
19
+ *
20
+ * @beta
21
+ */
17
22
  export declare const cargo: import("./components").Component<Cargo, Cargo>;
18
23
  /**
19
24
  * How many more a transport has room for
@@ -0,0 +1,281 @@
1
+ import { cos, hypot, sin } from "./exactMath.js";
2
+ import { defineComponent } from "./components.js";
3
+ import { invalidateStats } from "./stats.js";
4
+ import { defineListener } from "./events.js";
5
+ import { boarded, entityDied, unloaded } from "./engineEvents.js";
6
+ import { edgeDistance, moving } from "./entity.js";
7
+ import { defineHook } from "./hooks.js";
8
+ import { halt, moveTo, moveToEntity } from "./systems/movement.js";
9
+ import { createOrder, giveOrder } from "./orders/queue.js";
10
+ //#region src/transport.ts
11
+ /**
12
+ * The component holding a transport's passengers, replicated to allies; set on spawn for types with `transport`
13
+ *
14
+ * @beta
15
+ */
16
+ var cargo = defineComponent({
17
+ id: "core.cargo",
18
+ replicate: "allies",
19
+ onSpawn: (entity) => {
20
+ if (entity.def.transport) entity.set(cargo, {
21
+ passengers: [],
22
+ ashore: false
23
+ });
24
+ }
25
+ });
26
+ /**
27
+ * How far from its edge a transport reaches to take someone in, and to let them out on the land
28
+ *
29
+ * @internal
30
+ */
31
+ var BOARD_REACH = 1.5;
32
+ /**
33
+ * How far from its edge a transport reaches to let passengers out onto land, in world units
34
+ *
35
+ * @internal
36
+ */
37
+ var UNLOAD_REACH = 3.5;
38
+ /** How much further a boat reaches: the walkable bank stops short of the deep water it floats on */
39
+ var SHORE_GAP = 2.5;
40
+ /** How far from its edge a transport takes someone in */
41
+ var boardReach = (transport) => BOARD_REACH + (transport.def.naval ? SHORE_GAP : 0);
42
+ var passengersOf = (transport) => transport.get(cargo)?.passengers ?? [];
43
+ /**
44
+ * How many more a transport has room for
45
+ *
46
+ * @beta
47
+ */
48
+ function roomIn(transport) {
49
+ const capacity = transport.def.transport?.capacity ?? 0;
50
+ return Math.max(capacity - passengersOf(transport).length, 0);
51
+ }
52
+ /**
53
+ * Whether a unit can get into a transport: one of its side's that has room, and a unit that walks. What flies, what
54
+ * sails and what carries others do not get in
55
+ *
56
+ * @beta
57
+ */
58
+ function canBoard(world, passenger, transport) {
59
+ if (passenger === transport || !transport.def.transport || !transport.alive || passenger.hidden) return false;
60
+ if (passenger.def.kind !== "unit" || !passenger.get(moving) || passenger.flying || passenger.def.naval || passenger.def.transport) return false;
61
+ if (!world.areAllies(passenger.owner, transport.owner)) return false;
62
+ const takes = transport.def.transport.takes;
63
+ if (takes && !takes(passenger.def)) return false;
64
+ return roomIn(transport) > 0;
65
+ }
66
+ /**
67
+ * Puts a unit into a transport at once, wherever the two are. False when it cannot get in
68
+ *
69
+ * @beta
70
+ */
71
+ function board(world, passenger, transport) {
72
+ if (!canBoard(world, passenger, transport)) return false;
73
+ halt(world, passenger);
74
+ world.setHidden(passenger, true);
75
+ transport.set(cargo, {
76
+ passengers: [...passengersOf(transport), passenger.id],
77
+ ashore: transport.get(cargo)?.ashore ?? false
78
+ });
79
+ invalidateStats(world, transport);
80
+ world.events.emit(boarded, {
81
+ passenger,
82
+ transport
83
+ });
84
+ return true;
85
+ }
86
+ /**
87
+ * The land nearest a point, within reach of it: where what is carried gets out. Nothing out on open water
88
+ *
89
+ * @internal
90
+ */
91
+ function shoreNear(world, at, reach = UNLOAD_REACH) {
92
+ return world.nav.closestPoint(at, reach);
93
+ }
94
+ /**
95
+ * Lets out what a transport carries, on the land nearest it (or nearest `near`, within reach of the transport), spread
96
+ * around it. How many got out: none when there is no land in reach
97
+ *
98
+ * @beta
99
+ */
100
+ function unload(world, transport, near) {
101
+ const passengers = passengersOf(transport);
102
+ if (!passengers.length) return 0;
103
+ const reach = UNLOAD_REACH + transport.def.radius;
104
+ const land = (near && hypot(near.x - transport.pos.x, near.z - transport.pos.z) <= reach ? shoreNear(world, near, 2) : null) ?? shoreNear(world, transport.pos, reach);
105
+ if (!land) return 0;
106
+ let out = 0;
107
+ passengers.forEach((id, i) => {
108
+ const passenger = world.entities.get(id);
109
+ if (!passenger) return;
110
+ const turn = i / Math.max(passengers.length, 1) * Math.PI * 2;
111
+ const spread = i === 0 ? 0 : .9 + Math.floor(i / 6) * .8;
112
+ world.setHidden(passenger, false, {
113
+ x: land.x + cos(turn) * spread,
114
+ z: land.z + sin(turn) * spread
115
+ });
116
+ world.events.emit(unloaded, {
117
+ passenger,
118
+ transport
119
+ });
120
+ out++;
121
+ });
122
+ transport.set(cargo, {
123
+ passengers: [],
124
+ ashore: true
125
+ });
126
+ invalidateStats(world, transport);
127
+ return out;
128
+ }
129
+ /**
130
+ * Getting into a transport: the unit walks to it, as near as the land goes when it is on the water, and gets in once
131
+ * it is within reach. Done when it is in; failed when there is no room, or no way to it
132
+ *
133
+ * @internal
134
+ */
135
+ var boardOrder = {
136
+ type: "board",
137
+ accepts(world, entity, init) {
138
+ const transport = world.get(init.target);
139
+ return !!transport && canBoard(world, entity, transport);
140
+ },
141
+ update(world, entity, order) {
142
+ const transport = world.get(order.init.target);
143
+ if (!transport || !canBoard(world, entity, transport)) return "failed";
144
+ if (edgeDistance(entity, transport) <= boardReach(transport)) return board(world, entity, transport) ? "done" : "failed";
145
+ const m = entity.get(moving);
146
+ if (m.status === "moving") return "running";
147
+ if (m.status === "failed" && order.state.tried === world.tick - 1) return "failed";
148
+ order.state.tried = world.tick;
149
+ if (transport.def.naval) {
150
+ const shore = shoreNear(world, transport.pos, transport.def.radius + boardReach(transport) + 4);
151
+ if (!shore) return "failed";
152
+ if (hypot(shore.x - entity.pos.x, shore.z - entity.pos.z) < .5) return "failed";
153
+ moveTo(world, entity, shore);
154
+ } else moveToEntity(world, entity, transport, BOARD_REACH * .5);
155
+ return "running";
156
+ }
157
+ };
158
+ /**
159
+ * Taking a unit in, from the transport's side: it goes to the unit and takes it in once it is within reach. A boat
160
+ * goes as near as the water does; when it can get no nearer, a passenger of its own side is told to come aboard
161
+ * (`board`), and that is done. Failed when there is no room, or the unit cannot get in
162
+ *
163
+ * @internal
164
+ */
165
+ var loadOrder = {
166
+ type: "load",
167
+ accepts(world, entity, init) {
168
+ const passenger = world.get(init.target);
169
+ return !!passenger && canBoard(world, passenger, entity);
170
+ },
171
+ update(world, entity, order) {
172
+ const passenger = world.get(order.init.target);
173
+ if (!passenger || !canBoard(world, passenger, entity)) return "failed";
174
+ if (edgeDistance(entity, passenger) <= boardReach(entity)) return board(world, passenger, entity) ? "done" : "failed";
175
+ const m = entity.get(moving);
176
+ if (!m) return "failed";
177
+ if (m.status === "moving") return "running";
178
+ const from = order.state.from;
179
+ if (order.state.tried !== void 0 && from && hypot(from.x - entity.pos.x, from.z - entity.pos.z) < .5) {
180
+ if (!entity.def.naval || passenger.owner !== entity.owner) return "failed";
181
+ giveOrder(world, passenger, createOrder(world, {
182
+ type: "board",
183
+ target: entity.id
184
+ }));
185
+ return "done";
186
+ }
187
+ order.state.tried = world.tick;
188
+ order.state.from = {
189
+ x: entity.pos.x,
190
+ z: entity.pos.z
191
+ };
192
+ moveToEntity(world, entity, passenger, BOARD_REACH * .5);
193
+ return "running";
194
+ }
195
+ };
196
+ /**
197
+ * Letting out what a transport carries: where it is, when there is land in reach; or at a point, sailing (or driving)
198
+ * as near it as it goes first, and letting them out on the land nearest it. Failed when there is no land to let them
199
+ * out on
200
+ *
201
+ * @internal
202
+ */
203
+ var unloadOrder = {
204
+ type: "unload",
205
+ accepts(_world, entity) {
206
+ return !!entity.def.transport && passengersOf(entity).length > 0;
207
+ },
208
+ update(world, entity, order) {
209
+ if (!passengersOf(entity).length) return "done";
210
+ const point = order.init.point;
211
+ if (!point || !entity.get(moving)) return unload(world, entity) ? "done" : "failed";
212
+ if (hypot(point.x - entity.pos.x, point.z - entity.pos.z) <= 3.5 + entity.def.radius) return unload(world, entity, point) ? "done" : "failed";
213
+ if (entity.get(moving).status === "moving") return "running";
214
+ if (order.state.sent) return unload(world, entity, point) ? "done" : "failed";
215
+ order.state.sent = true;
216
+ moveTo(world, entity, point);
217
+ return "running";
218
+ }
219
+ };
220
+ /** Keeps each transport's word of whether it is near the land, for its card. A few times a second */
221
+ var transportSystem = {
222
+ name: "transports",
223
+ phase: "cleanup",
224
+ every: 6,
225
+ over: cargo,
226
+ each(world, entity) {
227
+ if (!entity.def.transport || !entity.alive || entity.scenery) return;
228
+ const held = entity.get(cargo);
229
+ const ashore = !!shoreNear(world, entity.pos, UNLOAD_REACH + entity.def.radius);
230
+ if (held.ashore !== ashore) entity.set(cargo, {
231
+ passengers: held.passengers,
232
+ ashore
233
+ });
234
+ if (held.passengers.some((id) => !world.entities.get(id)?.hidden)) entity.set(cargo, {
235
+ passengers: held.passengers.filter((id) => world.entities.get(id)?.hidden),
236
+ ashore
237
+ });
238
+ }
239
+ };
240
+ /** A transport that dies takes down what it carries with it: a boat. A building that falls lets them out */
241
+ var transportSank = defineListener({
242
+ id: "core.transportSank",
243
+ event: entityDied,
244
+ run(world, { entity, killer }) {
245
+ if (entity.isStructure) {
246
+ unload(world, entity);
247
+ return;
248
+ }
249
+ for (const id of passengersOf(entity)) {
250
+ const passenger = world.entities.get(id);
251
+ if (passenger?.alive) world.kill(passenger, killer);
252
+ }
253
+ }
254
+ });
255
+ /**
256
+ * An armed garrison (`transport.armed`): it attacks only while someone is inside, and each one inside adds to its attack
257
+ * damage
258
+ *
259
+ * @internal
260
+ */
261
+ var garrisonHooks = [defineHook({
262
+ hook: "canAttack",
263
+ id: "emptyGarrison",
264
+ run(_world, event) {
265
+ if (!event.cancelled && event.attacker.def.transport?.armed !== void 0 && !passengersOf(event.attacker).length) event.cancelled = true;
266
+ }
267
+ }), defineHook({
268
+ hook: "stats",
269
+ id: "garrisonDamage",
270
+ run(world, { entity, add }) {
271
+ const armed = entity.def.transport?.armed;
272
+ const inside = armed === void 0 ? [] : passengersOf(entity);
273
+ if (!inside.length) return;
274
+ if (typeof armed === "function") add({ stats: { attackDamage: armed(world, entity, inside.map((id) => world.entities.get(id)).filter((passenger) => !!passenger)) } });
275
+ else if (armed) add({ stats: { attackDamage: armed } }, inside.length);
276
+ }
277
+ })];
278
+ //#endregion
279
+ export { BOARD_REACH, UNLOAD_REACH, board, boardOrder, canBoard, cargo, garrisonHooks, loadOrder, roomIn, shoreNear, transportSank, transportSystem, unload, unloadOrder };
280
+
281
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","names":[],"sources":["../src/transport.ts"],"sourcesContent":["import { boarded, entityDied, unloaded } from '#engine/engineEvents'\nimport { defineComponent } from './components'\nimport { defineListener } from './events'\nimport { edgeDistance, type Entity, moving } from './entity'\nimport type { Vec2 } from './math'\nimport type { OrderBehavior, OrderInits, System } from './registry'\nimport { defineHook, type HookDef } from './hooks'\nimport { invalidateStats } from './stats'\nimport { halt, moveTo, moveToEntity } from './systems/movement'\nimport type { World } from './world'\nimport { cos, hypot, sin } from './exactMath'\nimport { createOrder, giveOrder } from './orders/queue'\n\n/**\n * What a transport carries, and whether it is near enough the land to let them out: kept for its side to see, the\n * card's unload button reads it (see `UnitTypeDef.transport`)\n *\n * @beta\n */\nexport interface Cargo {\n\t/** Ids of the units inside the transport */\n\tpassengers: number[]\n\t/** There is land within reach to let them out on */\n\tashore: boolean\n}\n\n/**\n * The component holding a transport's passengers, replicated to allies; set on spawn for types with `transport`\n *\n * @beta\n */\nexport const cargo = defineComponent<Cargo>({ id: 'core.cargo', replicate: 'allies',\n\t// a hold, empty, for what carries: what the transports' system goes through (OB5)\n\tonSpawn: (entity) => {\n\t\tif (entity.def.transport) entity.set(cargo, { passengers: [], ashore: false })\n\t} })\n\n/**\n * How far from its edge a transport reaches to take someone in, and to let them out on the land\n *\n * @internal\n */\nexport const BOARD_REACH = 1.5\n/**\n * How far from its edge a transport reaches to let passengers out onto land, in world units\n *\n * @internal\n */\nexport const UNLOAD_REACH = 3.5\n/** How much further a boat reaches: the walkable bank stops short of the deep water it floats on */\nconst SHORE_GAP = 2.5\n\n/** How far from its edge a transport takes someone in */\nconst boardReach = (transport: Entity) => BOARD_REACH + (transport.def.naval ? SHORE_GAP : 0)\n\nconst passengersOf = (transport: Entity): number[] => transport.get(cargo)?.passengers ?? []\n\n/**\n * How many more a transport has room for\n *\n * @beta\n */\nexport function roomIn(transport: Entity): number {\n\tconst capacity = transport.def.transport?.capacity ?? 0\n\treturn Math.max(capacity - passengersOf(transport).length, 0)\n}\n\n/**\n * Whether a unit can get into a transport: one of its side's that has room, and a unit that walks. What flies, what\n * sails and what carries others do not get in\n *\n * @beta\n */\nexport function canBoard(world: World, passenger: Entity, transport: Entity): boolean {\n\tif (passenger === transport || !transport.def.transport || !transport.alive || passenger.hidden) return false\n\tif (passenger.def.kind !== 'unit' || !passenger.get(moving) || passenger.flying || passenger.def.naval || passenger.def.transport) return false\n\tif (!world.areAllies(passenger.owner, transport.owner)) return false\n\tconst takes = transport.def.transport.takes\n\tif (takes && !takes(passenger.def)) return false\n\treturn roomIn(transport) > 0\n}\n\n/**\n * Puts a unit into a transport at once, wherever the two are. False when it cannot get in\n *\n * @beta\n */\nexport function board(world: World, passenger: Entity, transport: Entity): boolean {\n\tif (!canBoard(world, passenger, transport)) return false\n\thalt(world, passenger)\n\tworld.setHidden(passenger, true)\n\ttransport.set(cargo, { passengers: [...passengersOf(transport), passenger.id], ashore: transport.get(cargo)?.ashore ?? false })\n\t// one more inside: an armed garrison hits harder\n\tinvalidateStats(world, transport)\n\tworld.events.emit(boarded, { passenger, transport })\n\treturn true\n}\n\n/**\n * The land nearest a point, within reach of it: where what is carried gets out. Nothing out on open water\n *\n * @internal\n */\nexport function shoreNear(world: World, at: Vec2, reach = UNLOAD_REACH): Vec2 | null {\n\treturn world.nav.closestPoint(at, reach)\n}\n\n/**\n * Lets out what a transport carries, on the land nearest it (or nearest `near`, within reach of the transport), spread\n * around it. How many got out: none when there is no land in reach\n *\n * @beta\n */\nexport function unload(world: World, transport: Entity, near?: Vec2): number {\n\tconst passengers = passengersOf(transport)\n\tif (!passengers.length) return 0\n\tconst reach = UNLOAD_REACH + transport.def.radius\n\tconst land =\n\t\t(near && hypot(near.x - transport.pos.x, near.z - transport.pos.z) <= reach ? shoreNear(world, near, 2) : null) ??\n\t\tshoreNear(world, transport.pos, reach)\n\tif (!land) return 0\n\tlet out = 0\n\tpassengers.forEach((id, i) => {\n\t\tconst passenger = world.entities.get(id)\n\t\tif (!passenger) return\n\t\t// a ring around where they come ashore, so they do not all stand on one spot\n\t\tconst turn = (i / Math.max(passengers.length, 1)) * Math.PI * 2\n\t\tconst spread = i === 0 ? 0 : 0.9 + Math.floor(i / 6) * 0.8\n\t\tworld.setHidden(passenger, false, { x: land.x + cos(turn) * spread, z: land.z + sin(turn) * spread })\n\t\tworld.events.emit(unloaded, { passenger, transport })\n\t\tout++\n\t})\n\ttransport.set(cargo, { passengers: [], ashore: true })\n\tinvalidateStats(world, transport)\n\treturn out\n}\n\n/**\n * What `board` keeps: the tick it last set out for its transport\n *\n * @beta\n */\nexport interface BoardState {\n\t/** The tick it last set out for its transport */\n\ttried?: number\n}\n\n/**\n * What `unload` keeps: whether it set its passengers down already\n *\n * @beta\n */\nexport interface UnloadState {\n\t/** It set them down already */\n\tsent?: boolean\n}\n\n/**\n * Getting into a transport: the unit walks to it, as near as the land goes when it is on the water, and gets in once\n * it is within reach. Done when it is in; failed when there is no room, or no way to it\n *\n * @internal\n */\nexport const boardOrder: OrderBehavior<BoardState, OrderInits['board']> = {\n\ttype: 'board',\n\taccepts(world, entity, init) {\n\t\tconst transport = world.get(init.target)\n\t\treturn !!transport && canBoard(world, entity, transport)\n\t},\n\tupdate(world, entity, order) {\n\t\tconst transport = world.get(order.init.target)\n\t\tif (!transport || !canBoard(world, entity, transport)) return 'failed'\n\t\tif (edgeDistance(entity, transport) <= boardReach(transport)) return board(world, entity, transport) ? 'done' : 'failed'\n\t\tconst m = entity.get(moving)!\n\t\tif (m.status === 'moving') return 'running'\n\t\tif (m.status === 'failed' && order.state.tried === world.tick - 1) return 'failed'\n\t\torder.state.tried = world.tick\n\t\t// a boat out on the water: to the shore nearest it\n\t\tif (transport.def.naval) {\n\t\t\tconst shore = shoreNear(world, transport.pos, transport.def.radius + boardReach(transport) + 4)\n\t\t\tif (!shore) return 'failed'\n\t\t\tif (hypot(shore.x - entity.pos.x, shore.z - entity.pos.z) < 0.5) return 'failed'\n\t\t\tmoveTo(world, entity, shore)\n\t\t} else moveToEntity(world, entity, transport, BOARD_REACH * 0.5)\n\t\treturn 'running'\n\t}\n}\n\n/**\n * What `load` keeps: the tick it last set out for its passenger, and where it was then\n *\n * @beta\n */\nexport interface LoadState {\n\t/** The tick it last set out for its passenger */\n\ttried?: number\n\t/** Where it was when it last set out */\n\tfrom?: Vec2\n}\n\n/**\n * Taking a unit in, from the transport's side: it goes to the unit and takes it in once it is within reach. A boat\n * goes as near as the water does; when it can get no nearer, a passenger of its own side is told to come aboard\n * (`board`), and that is done. Failed when there is no room, or the unit cannot get in\n *\n * @internal\n */\nexport const loadOrder: OrderBehavior<LoadState, OrderInits['load']> = {\n\ttype: 'load',\n\taccepts(world, entity, init) {\n\t\tconst passenger = world.get(init.target)\n\t\treturn !!passenger && canBoard(world, passenger, entity)\n\t},\n\tupdate(world, entity, order) {\n\t\tconst passenger = world.get(order.init.target)\n\t\tif (!passenger || !canBoard(world, passenger, entity)) return 'failed'\n\t\tif (edgeDistance(entity, passenger) <= boardReach(entity)) return board(world, passenger, entity) ? 'done' : 'failed'\n\t\tconst m = entity.get(moving)\n\t\tif (!m) return 'failed'\n\t\tif (m.status === 'moving') return 'running'\n\t\tconst from = order.state.from\n\t\t// stopped where it stopped last time: it gets no nearer\n\t\tif (order.state.tried !== undefined && from && hypot(from.x - entity.pos.x, from.z - entity.pos.z) < 0.5) {\n\t\t\tif (!entity.def.naval || passenger.owner !== entity.owner) return 'failed'\n\t\t\tgiveOrder(world, passenger, createOrder(world, { type: 'board', target: entity.id }))\n\t\t\treturn 'done'\n\t\t}\n\t\torder.state.tried = world.tick\n\t\torder.state.from = { x: entity.pos.x, z: entity.pos.z }\n\t\tmoveToEntity(world, entity, passenger, BOARD_REACH * 0.5)\n\t\treturn 'running'\n\t}\n}\n\n/**\n * Letting out what a transport carries: where it is, when there is land in reach; or at a point, sailing (or driving)\n * as near it as it goes first, and letting them out on the land nearest it. Failed when there is no land to let them\n * out on\n *\n * @internal\n */\nexport const unloadOrder: OrderBehavior<UnloadState, OrderInits['unload']> = {\n\ttype: 'unload',\n\taccepts(_world, entity) {\n\t\treturn !!entity.def.transport && passengersOf(entity).length > 0\n\t},\n\tupdate(world, entity, order) {\n\t\tif (!passengersOf(entity).length) return 'done'\n\t\tconst point = order.init.point\n\t\tif (!point || !entity.get(moving)) return unload(world, entity) ? 'done' : 'failed'\n\t\tif (hypot(point.x - entity.pos.x, point.z - entity.pos.z) <= UNLOAD_REACH + entity.def.radius)\n\t\t\treturn unload(world, entity, point) ? 'done' : 'failed'\n\t\tconst m = entity.get(moving)!\n\t\tif (m.status === 'moving') return 'running'\n\t\tif (order.state.sent) return unload(world, entity, point) ? 'done' : 'failed'\n\t\torder.state.sent = true\n\t\tmoveTo(world, entity, point)\n\t\treturn 'running'\n\t}\n}\n\n/** Keeps each transport's word of whether it is near the land, for its card. A few times a second */\nexport const transportSystem: System = {\n\tname: 'transports',\n\tphase: 'cleanup',\n\tevery: 6,\n\t// only what carries (given its hold as it is made: `World.spawn`, `morph`), not every unit and tree (OB5)\n\tover: cargo,\n\teach(world, entity) {\n\t\tif (!entity.def.transport || !entity.alive || entity.scenery) return\n\t\tconst held = entity.get(cargo)!\n\t\tconst ashore = !!shoreNear(world, entity.pos, UNLOAD_REACH + entity.def.radius)\n\t\tif (held.ashore !== ashore) entity.set(cargo, { passengers: held.passengers, ashore })\n\t\t// what got out some other way, or is gone\n\t\tif (held.passengers.some((id) => !world.entities.get(id)?.hidden)) {\n\t\t\tentity.set(cargo, { passengers: held.passengers.filter((id) => world.entities.get(id)?.hidden), ashore })\n\t\t}\n\t}\n}\n\n/** A transport that dies takes down what it carries with it: a boat. A building that falls lets them out */\nexport const transportSank = defineListener({\n\tid: 'core.transportSank',\n\tevent: entityDied,\n\trun(world, { entity, killer }) {\n\t\tif (entity.isStructure) {\n\t\t\tunload(world, entity)\n\t\t\treturn\n\t\t}\n\t\tfor (const id of passengersOf(entity)) {\n\t\t\tconst passenger = world.entities.get(id)\n\t\t\tif (passenger?.alive) world.kill(passenger, killer)\n\t\t}\n\t}\n})\n\n/**\n * An armed garrison (`transport.armed`): it attacks only while someone is inside, and each one inside adds to its attack\n * damage\n *\n * @internal\n */\nexport const garrisonHooks: HookDef[] = [\n\tdefineHook({\n\t\thook: 'canAttack',\n\t\tid: 'emptyGarrison',\n\t\trun(_world, event) {\n\t\t\tif (!event.cancelled && event.attacker.def.transport?.armed !== undefined && !passengersOf(event.attacker).length) event.cancelled = true\n\t\t}\n\t}),\n\tdefineHook({\n\t\thook: 'stats',\n\t\tid: 'garrisonDamage',\n\t\trun(world, { entity, add }) {\n\t\t\tconst armed = entity.def.transport?.armed\n\t\t\tconst inside = armed === undefined ? [] : passengersOf(entity)\n\t\t\tif (!inside.length) return\n\t\t\t// as declared, so much for each; or as the game works it out, from who is inside\n\t\t\tif (typeof armed === 'function') {\n\t\t\t\tconst passengers = inside.map((id) => world.entities.get(id)).filter((passenger): passenger is Entity => !!passenger)\n\t\t\t\tadd({ stats: { attackDamage: armed(world, entity, passengers) } })\n\t\t\t} else if (armed) add({ stats: { attackDamage: armed } }, inside.length)\n\t\t}\n\t})\n]\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * A number of a game's rules to be tuned while it plays: the seconds between waves, how much a kill pays. Read in the
3
3
  * rules with `world.tunable(id)`, and changed while the game runs from the editor's play mode (`debug.tune`), in the
4
- * world itself, so that a save and a screen over a wire have the same. Given in `GameModule.tunables`
4
+ * world itself, so that a save and a screen over a wire have the same. Given in `Rules.tunables`
5
5
  *
6
6
  * @beta
7
7
  */
@@ -10,13 +10,20 @@ export interface TunableDef {
10
10
  id: string;
11
11
  /** What the tuning panel calls it */
12
12
  name?: string;
13
+ /** The value the tunable starts with */
13
14
  default: number;
15
+ /** The lowest value the tuning panel offers */
14
16
  min: number;
17
+ /** The highest value the tuning panel offers */
15
18
  max: number;
16
19
  /** What the slider steps by. A hundredth of the way from min to max when left out */
17
20
  step?: number;
18
21
  }
19
- /** @beta */
22
+ /**
23
+ * Typed help for writing a tunable: returns the definition as given
24
+ *
25
+ * @beta
26
+ */
20
27
  export declare const defineTunable: (def: TunableDef) => TunableDef;
21
28
  /**
22
29
  * The tunables of a game with what a file says over their defaults: the values kept from the tuning panel, in the
@@ -24,7 +31,7 @@ export declare const defineTunable: (def: TunableDef) => TunableDef;
24
31
  *
25
32
  * @beta
26
33
  */
27
- export declare function withTuning(defs: readonly TunableDef[], file?: Readonly<Record<string, unknown>>): TunableDef[];
34
+ export declare function layTuning(defs: readonly TunableDef[], file?: Readonly<Record<string, unknown>>): TunableDef[];
28
35
  /**
29
36
  * A tunable changed while the game runs: for what has to be worked out again from it
30
37
  *
@@ -0,0 +1,56 @@
1
+ import { defineComponent } from "./components.js";
2
+ import { defineEngineEvent } from "./events.js";
3
+ import { number, string } from "./fields.js";
4
+ import { defineDebugCommand } from "./debugCommands.js";
5
+ //#region src/tunables.ts
6
+ /**
7
+ * Typed help for writing a tunable: returns the definition as given
8
+ *
9
+ * @beta
10
+ */
11
+ var defineTunable = (def) => def;
12
+ /**
13
+ * The tunables of a game with what a file says over their defaults: the values kept from the tuning panel, in the
14
+ * game's `tuning.json` (`{ "td.betweenWaves": 12 }`). Code can still set any of them as it likes
15
+ *
16
+ * @beta
17
+ */
18
+ function layTuning(defs, file = {}) {
19
+ return defs.map((def) => {
20
+ const value = file[def.id];
21
+ return typeof value === "number" && Number.isFinite(value) ? {
22
+ ...def,
23
+ default: Math.min(Math.max(value, def.min), def.max)
24
+ } : def;
25
+ });
26
+ }
27
+ /**
28
+ * The values the tunables of a world were set to, where they are not their defaults: kept with the world and in its save
29
+ *
30
+ * @internal
31
+ */
32
+ var tunings = defineComponent({
33
+ id: "core.tunings",
34
+ default: () => ({})
35
+ });
36
+ /**
37
+ * A tunable changed while the game runs: for what has to be worked out again from it
38
+ *
39
+ * @beta
40
+ */
41
+ var tunableChanged = defineEngineEvent({ id: "core.tunableChanged" });
42
+ /**
43
+ * Sets a tunable while the game runs: for players allowed the debug tools
44
+ *
45
+ * @beta
46
+ */
47
+ var tuneCommand = defineDebugCommand("debug.tune", {
48
+ id: string,
49
+ value: number
50
+ }, (world, _player, command) => {
51
+ world.setTunable(command.id, command.value);
52
+ });
53
+ //#endregion
54
+ export { defineTunable, layTuning, tunableChanged, tuneCommand, tunings };
55
+
56
+ //# sourceMappingURL=tunables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunables.js","names":[],"sources":["../src/tunables.ts"],"sourcesContent":["import { defineComponent } from './components'\nimport { defineDebugCommand } from './debugCommands'\nimport { defineEngineEvent } from './events'\nimport { number, string } from './fields'\n\n/**\n * A number of a game's rules to be tuned while it plays: the seconds between waves, how much a kill pays. Read in the\n * rules with `world.tunable(id)`, and changed while the game runs from the editor's play mode (`debug.tune`), in the\n * world itself, so that a save and a screen over a wire have the same. Given in `Rules.tunables`\n *\n * @beta\n */\nexport interface TunableDef {\n\t/** Shared by every game: give it a prefix of the game's */\n\tid: string\n\t/** What the tuning panel calls it */\n\tname?: string\n\t/** The value the tunable starts with */\n\tdefault: number\n\t/** The lowest value the tuning panel offers */\n\tmin: number\n\t/** The highest value the tuning panel offers */\n\tmax: number\n\t/** What the slider steps by. A hundredth of the way from min to max when left out */\n\tstep?: number\n}\n\n/**\n * Typed help for writing a tunable: returns the definition as given\n *\n * @beta\n */\nexport const defineTunable = (def: TunableDef): TunableDef => def\n\n/**\n * The tunables of a game with what a file says over their defaults: the values kept from the tuning panel, in the\n * game's `tuning.json` (`{ \"td.betweenWaves\": 12 }`). Code can still set any of them as it likes\n *\n * @beta\n */\nexport function layTuning(defs: readonly TunableDef[], file: Readonly<Record<string, unknown>> = {}): TunableDef[] {\n\treturn defs.map((def) => {\n\t\tconst value = file[def.id]\n\t\treturn typeof value === 'number' && Number.isFinite(value) ? { ...def, default: Math.min(Math.max(value, def.min), def.max) } : def\n\t})\n}\n\n/**\n * The values the tunables of a world were set to, where they are not their defaults: kept with the world and in its save\n *\n * @internal\n */\nexport const tunings = defineComponent<Record<string, number>>({ id: 'core.tunings', default: () => ({}) })\n\n/**\n * A tunable changed while the game runs: for what has to be worked out again from it\n *\n * @beta\n */\nexport const tunableChanged = defineEngineEvent<{ id: string; value: number }>({ id: 'core.tunableChanged' })\n\n/**\n * Sets a tunable while the game runs: for players allowed the debug tools\n *\n * @beta\n */\nexport const tuneCommand = defineDebugCommand('debug.tune', { id: string, value: number }, (world, _player, command) => {\n\tworld.setTunable(command.id, command.value)\n})\n"],"mappings":";;;;;;;;;;AAgCA,IAAa,iBAAiB,QAAgC;;;;;;;AAQ9D,SAAgB,UAAU,MAA6B,OAA0C,CAAC,GAAiB;CAClH,OAAO,KAAK,KAAK,QAAQ;EACxB,MAAM,QAAQ,KAAK,IAAI;EACvB,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI;GAAE,GAAG;GAAK,SAAS,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,GAAG,GAAG,IAAI,GAAG;EAAE,IAAI;CACjI,CAAC;AACF;;;;;;AAOA,IAAa,UAAU,gBAAwC;CAAE,IAAI;CAAgB,gBAAgB,CAAC;AAAG,CAAC;;;;;;AAO1G,IAAa,iBAAiB,kBAAiD,EAAE,IAAI,sBAAsB,CAAC;;;;;;AAO5G,IAAa,cAAc,mBAAmB,cAAc;CAAE,IAAI;CAAQ,OAAO;AAAO,IAAI,OAAO,SAAS,YAAY;CACvH,MAAM,WAAW,QAAQ,IAAI,QAAQ,KAAK;AAC3C,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { type AbilityDef } from './defs';
2
+ import type { Entity } from './entity';
3
+ import type { Vec2 } from './math';
4
+ import type { GamePack } from './packs/pack';
5
+ import type { World } from './world';
6
+ /**
7
+ * The resources pack's id
8
+ *
9
+ * @beta
10
+ */
11
+ export declare const RESOURCES = "core.resources";
12
+ /**
13
+ * What a unit holds of its pools (`UnitTypeDef.pools`): how much of each (`values`), the seconds since each was last
14
+ * spent or given (`quiet`, for its `decay`), the seconds each has been empty (`empty`, for its `reload`) and where the
15
+ * unit stood a tick ago (`at`, for what fills by walking)
16
+ *
17
+ * @beta
18
+ */
19
+ export interface UnitPools {
20
+ /** How much it holds of each, by pool */
21
+ values: Record<string, number>;
22
+ /** Seconds since each was last spent or given, by pool */
23
+ quiet?: Record<string, number>;
24
+ /** Seconds each has been empty, for one that reloads */
25
+ empty?: Record<string, number>;
26
+ /** Where it stood a tick ago, for a pool that fills by walking */
27
+ at?: Vec2;
28
+ }
29
+ /**
30
+ * What a unit holds of its pools (`UnitPools`): on every unit whose type has `pools`, from the moment it is made. Its
31
+ * players are told how much of each it holds (`values`, whole numbers), as they are of its mana
32
+ *
33
+ * @beta
34
+ */
35
+ export declare const pools: import("./components").Component<UnitPools, Record<string, number>>;
36
+ /**
37
+ * How much a unit holds of one of its pools (`UnitTypeDef.pools`): 0 where it has none
38
+ *
39
+ * @beta
40
+ */
41
+ export declare const poolOf: (entity: Entity, pool: string) => number;
42
+ /**
43
+ * Fills a pool of a unit by `amount` (empties it, under 0), as far as its bounds go, its thresholds' buffs put on and
44
+ * taken off, the time it decays after started over: what the `gain` effect does, and an ability's `cost` and `gain`.
45
+ * Nothing while a threshold's buff that `empties` it holds it still. How much it changed
46
+ *
47
+ * @beta
48
+ */
49
+ export declare function changePool(world: World, entity: Entity, pool: string, amount: number): number;
50
+ /**
51
+ * What an ability costs a caster of its pools now (`AbilityDef.cost`, grown by `costGrowth`), by pool: none for an ability
52
+ * that costs nothing of them
53
+ *
54
+ * @beta
55
+ */
56
+ export declare function poolCosts(caster: Entity, ability: AbilityDef, level: number): Record<string, number> | undefined;
57
+ /**
58
+ * Unit resources: what a game with it (`Rules.packs`) gets for pools beside mana. A unit type's `pools` (`PoolDef`: energy
59
+ * back each second, fury that decays when unused, heat that overheats at a threshold, flow filled by walking, ammo that
60
+ * reloads), an ability's `cost` of them (not ready with less, paid as it goes off) and `gain` (given as it goes off), costs
61
+ * that grow by a buff's stacks (`costGrowth`, mana too), an attack's cost (`attackCost`: no attack with less), buffs
62
+ * that drain a pool or mana each second while they last (`BuffDef.drain`), and the `gain` effect. `changePool`, `poolOf`
63
+ * and `poolCosts` in code
64
+ *
65
+ * @beta
66
+ */
67
+ export declare function resourcesPack(): GamePack;