@jgengine/core 0.10.0 → 0.12.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 (727) hide show
  1. package/CHANGELOG.md +39 -2
  2. package/LICENSE +203 -661
  3. package/README.md +1 -1
  4. package/dist/ai/crowd.d.ts +55 -0
  5. package/dist/ai/crowd.js +114 -0
  6. package/dist/ai/flock.d.ts +5 -2
  7. package/dist/ai/flock.js +5 -2
  8. package/dist/ai/groupAssist.d.ts +1 -0
  9. package/dist/ai/groupAssist.js +1 -0
  10. package/dist/ai/heatSystem.d.ts +76 -0
  11. package/dist/ai/heatSystem.js +97 -0
  12. package/dist/ai/interestScheduler.d.ts +107 -0
  13. package/dist/ai/interestScheduler.js +118 -0
  14. package/dist/ai/jobBoard.d.ts +1 -0
  15. package/dist/ai/jobBoard.js +1 -0
  16. package/dist/ai/laneSelect.d.ts +5 -2
  17. package/dist/ai/laneSelect.js +5 -2
  18. package/dist/ai/mobBrain.d.ts +1 -0
  19. package/dist/ai/mobBrain.js +1 -0
  20. package/dist/ai/populationDirector.d.ts +103 -0
  21. package/dist/ai/populationDirector.js +190 -0
  22. package/dist/ai/pursuit.d.ts +56 -0
  23. package/dist/ai/pursuit.js +53 -0
  24. package/dist/ai/spawnDirector.d.ts +7 -2
  25. package/dist/ai/spawnDirector.js +18 -15
  26. package/dist/ai/spawnPoint.d.ts +3 -1
  27. package/dist/ai/spawnPoint.js +3 -1
  28. package/dist/ai/targetAcquisition.d.ts +84 -0
  29. package/dist/ai/targetAcquisition.js +92 -0
  30. package/dist/anim/easing.d.ts +19 -0
  31. package/dist/anim/easing.js +19 -0
  32. package/dist/anim/oscillator.d.ts +12 -0
  33. package/dist/anim/oscillator.js +25 -0
  34. package/dist/area/areaEffectField.d.ts +127 -0
  35. package/dist/area/areaEffectField.js +175 -0
  36. package/dist/area/stackPolicy.d.ts +47 -0
  37. package/dist/area/stackPolicy.js +99 -0
  38. package/dist/authoring.d.ts +2 -1
  39. package/dist/authoring.js +2 -1
  40. package/dist/board/laneBoard.d.ts +13 -0
  41. package/dist/board/laneBoard.js +13 -0
  42. package/dist/board/timelineBoard.d.ts +10 -0
  43. package/dist/board/timelineBoard.js +10 -0
  44. package/dist/combat/abilityKit.d.ts +18 -0
  45. package/dist/combat/abilityKit.js +24 -9
  46. package/dist/combat/animationState.d.ts +5 -0
  47. package/dist/combat/animationState.js +5 -0
  48. package/dist/combat/breakMeters.d.ts +10 -0
  49. package/dist/combat/breakMeters.js +10 -0
  50. package/dist/combat/castRunner.d.ts +5 -0
  51. package/dist/combat/castRunner.js +5 -0
  52. package/dist/combat/comboPoints.d.ts +5 -0
  53. package/dist/combat/comboPoints.js +5 -0
  54. package/dist/combat/comboString.d.ts +5 -0
  55. package/dist/combat/comboString.js +5 -0
  56. package/dist/combat/damageInterceptors.d.ts +192 -0
  57. package/dist/combat/damageInterceptors.js +251 -0
  58. package/dist/combat/damageMatchup.d.ts +68 -0
  59. package/dist/combat/damageMatchup.js +42 -0
  60. package/dist/combat/damageResolution.d.ts +63 -0
  61. package/dist/combat/damageResolution.js +50 -0
  62. package/dist/combat/death.d.ts +7 -1
  63. package/dist/combat/death.js +5 -0
  64. package/dist/combat/deathReason.d.ts +14 -0
  65. package/dist/combat/deathReason.js +1 -0
  66. package/dist/combat/defensiveWindow.d.ts +5 -0
  67. package/dist/combat/defensiveWindow.js +5 -0
  68. package/dist/combat/dotField.d.ts +5 -1
  69. package/dist/combat/dotField.js +5 -1
  70. package/dist/combat/downed.d.ts +5 -0
  71. package/dist/combat/downed.js +5 -0
  72. package/dist/combat/effects.d.ts +5 -0
  73. package/dist/combat/effects.js +5 -0
  74. package/dist/combat/encounterSequence.d.ts +258 -0
  75. package/dist/combat/encounterSequence.js +426 -0
  76. package/dist/combat/hitReaction.d.ts +57 -1
  77. package/dist/combat/hitReaction.js +45 -5
  78. package/dist/combat/magazine.d.ts +54 -0
  79. package/dist/combat/magazine.js +96 -0
  80. package/dist/combat/projectiles.d.ts +5 -0
  81. package/dist/combat/projectiles.js +32 -14
  82. package/dist/combat/receivedDamage.d.ts +117 -0
  83. package/dist/combat/receivedDamage.js +92 -0
  84. package/dist/combat/regenShield.d.ts +5 -1
  85. package/dist/combat/regenShield.js +5 -1
  86. package/dist/combat/renderCues.d.ts +51 -0
  87. package/dist/combat/renderCues.js +44 -0
  88. package/dist/combat/resourcePool.d.ts +5 -0
  89. package/dist/combat/resourcePool.js +5 -0
  90. package/dist/combat/rewardAllocation.d.ts +121 -0
  91. package/dist/combat/rewardAllocation.js +251 -0
  92. package/dist/combat/shotOrigin.d.ts +18 -1
  93. package/dist/combat/shotOrigin.js +39 -0
  94. package/dist/combat/statusApplication.d.ts +96 -0
  95. package/dist/combat/statusApplication.js +81 -0
  96. package/dist/combat/telegraph.d.ts +11 -2
  97. package/dist/combat/telegraph.js +11 -2
  98. package/dist/combat/thresholdCrossings.d.ts +85 -0
  99. package/dist/combat/thresholdCrossings.js +116 -0
  100. package/dist/combat.d.ts +35 -0
  101. package/dist/combat.js +35 -0
  102. package/dist/commands/commandRegistry.d.ts +11 -0
  103. package/dist/commands/commandRegistry.js +9 -2
  104. package/dist/crafting/crop.d.ts +18 -0
  105. package/dist/crafting/crop.js +18 -0
  106. package/dist/crafting/production.d.ts +5 -0
  107. package/dist/crafting/production.js +5 -0
  108. package/dist/devtools/controls.d.ts +38 -0
  109. package/dist/devtools/controls.js +181 -0
  110. package/dist/devtools/devtools.d.ts +5 -197
  111. package/dist/devtools/devtools.js +38 -774
  112. package/dist/devtools/discover.d.ts +32 -0
  113. package/dist/devtools/discover.js +240 -0
  114. package/dist/devtools/fallbackSeams.d.ts +50 -0
  115. package/dist/devtools/fallbackSeams.js +111 -0
  116. package/dist/devtools/frame.d.ts +15 -0
  117. package/dist/devtools/frame.js +247 -0
  118. package/dist/devtools/logs.d.ts +15 -0
  119. package/dist/devtools/logs.js +86 -0
  120. package/dist/devtools/overrides.d.ts +16 -0
  121. package/dist/devtools/overrides.js +66 -0
  122. package/dist/devtools/rewriteTunables.d.ts +17 -0
  123. package/dist/devtools/rewriteTunables.js +276 -0
  124. package/dist/devtools/saveEndpoint.d.ts +46 -0
  125. package/dist/devtools/saveEndpoint.js +48 -0
  126. package/dist/devtools/transformTunables.d.ts +3 -0
  127. package/dist/devtools/transformTunables.js +3 -0
  128. package/dist/devtools/tunableSchema.d.ts +31 -0
  129. package/dist/devtools/tunableSchema.js +31 -0
  130. package/dist/devtools/types.d.ts +212 -0
  131. package/dist/devtools/types.js +1 -0
  132. package/dist/economy/auctionBook.d.ts +122 -0
  133. package/dist/economy/auctionBook.js +213 -0
  134. package/dist/economy/currency.d.ts +12 -1
  135. package/dist/economy/currency.js +12 -1
  136. package/dist/economy/listingBook.d.ts +91 -0
  137. package/dist/economy/listingBook.js +144 -0
  138. package/dist/economy/priceHistory.d.ts +44 -0
  139. package/dist/economy/priceHistory.js +89 -0
  140. package/dist/economy/resourceLedger.d.ts +222 -0
  141. package/dist/economy/resourceLedger.js +353 -0
  142. package/dist/economy/sharedWallet.d.ts +14 -0
  143. package/dist/economy/sharedWallet.js +14 -0
  144. package/dist/economy/techTree.d.ts +12 -0
  145. package/dist/economy/techTree.js +12 -0
  146. package/dist/economy/unlockPoints.d.ts +92 -0
  147. package/dist/economy/unlockPoints.js +103 -0
  148. package/dist/economy/wallet.d.ts +26 -2
  149. package/dist/economy/wallet.js +35 -6
  150. package/dist/editor/commandApply.d.ts +5 -0
  151. package/dist/editor/commandApply.js +755 -0
  152. package/dist/editor/commands.d.ts +235 -7
  153. package/dist/editor/commands.js +82 -124
  154. package/dist/editor/directives.d.ts +94 -0
  155. package/dist/editor/directives.js +206 -0
  156. package/dist/editor/document.d.ts +194 -13
  157. package/dist/editor/document.js +1166 -19
  158. package/dist/editor/entityCatalog.d.ts +42 -0
  159. package/dist/editor/entityCatalog.js +101 -0
  160. package/dist/editor/environment.d.ts +74 -0
  161. package/dist/editor/environment.js +169 -0
  162. package/dist/editor/grid.d.ts +229 -0
  163. package/dist/editor/grid.js +366 -0
  164. package/dist/editor/gridAdapters.d.ts +80 -0
  165. package/dist/editor/gridAdapters.js +134 -0
  166. package/dist/editor/index.d.ts +98 -6
  167. package/dist/editor/index.js +13 -2
  168. package/dist/editor/liveSync.d.ts +127 -0
  169. package/dist/editor/liveSync.js +249 -0
  170. package/dist/editor/minimap.d.ts +31 -0
  171. package/dist/editor/minimap.js +73 -0
  172. package/dist/editor/runtimeInspector.d.ts +88 -0
  173. package/dist/editor/runtimeInspector.js +239 -0
  174. package/dist/editor/streamer.d.ts +66 -0
  175. package/dist/editor/streamer.js +68 -0
  176. package/dist/editor/types.d.ts +250 -1
  177. package/dist/editor/world.d.ts +136 -0
  178. package/dist/editor/world.js +303 -0
  179. package/dist/faction/reputation.d.ts +5 -0
  180. package/dist/faction/reputation.js +5 -0
  181. package/dist/format/distance.d.ts +17 -0
  182. package/dist/format/distance.js +18 -0
  183. package/dist/format/duration.d.ts +27 -0
  184. package/dist/format/duration.js +45 -0
  185. package/dist/format/speed.d.ts +17 -0
  186. package/dist/format/speed.js +25 -0
  187. package/dist/game/breeding.d.ts +161 -0
  188. package/dist/game/breeding.js +181 -0
  189. package/dist/game/cameraConfig.d.ts +451 -0
  190. package/dist/game/cameraConfig.js +1 -0
  191. package/dist/game/connectedPlayers.d.ts +6 -4
  192. package/dist/game/connectedPlayers.js +2 -2
  193. package/dist/game/cosmetics.d.ts +9 -0
  194. package/dist/game/cosmetics.js +16 -0
  195. package/dist/game/defineGame.d.ts +110 -5
  196. package/dist/game/defineGame.js +49 -4
  197. package/dist/game/defineSystem.d.ts +90 -0
  198. package/dist/game/defineSystem.js +47 -0
  199. package/dist/game/dialogue.d.ts +33 -0
  200. package/dist/game/dialogue.js +21 -0
  201. package/dist/game/events.d.ts +63 -13
  202. package/dist/game/events.js +5 -0
  203. package/dist/game/feed.d.ts +33 -0
  204. package/dist/game/feed.js +35 -2
  205. package/dist/game/gamePhase.d.ts +11 -0
  206. package/dist/game/gamePhase.js +16 -0
  207. package/dist/game/leaderboard.d.ts +5 -0
  208. package/dist/game/leaderboard.js +5 -0
  209. package/dist/game/loadout.d.ts +5 -0
  210. package/dist/game/loadout.js +5 -0
  211. package/dist/game/lootFilter.d.ts +2 -0
  212. package/dist/game/lootFilter.js +2 -0
  213. package/dist/game/lootPipeline.d.ts +164 -0
  214. package/dist/game/lootPipeline.js +216 -0
  215. package/dist/game/lootTable.d.ts +19 -2
  216. package/dist/game/lootTable.js +15 -5
  217. package/dist/game/objectives.d.ts +43 -0
  218. package/dist/game/objectives.js +36 -0
  219. package/dist/game/paramLayers.d.ts +148 -0
  220. package/dist/game/paramLayers.js +185 -0
  221. package/dist/game/ping.d.ts +5 -0
  222. package/dist/game/ping.js +5 -0
  223. package/dist/game/playableGame.d.ts +116 -432
  224. package/dist/game/playableGame.js +1 -1
  225. package/dist/game/progression.d.ts +35 -0
  226. package/dist/game/progression.js +19 -0
  227. package/dist/game/quest.d.ts +8 -0
  228. package/dist/game/quest.js +30 -3
  229. package/dist/game/race.d.ts +141 -0
  230. package/dist/game/race.js +169 -0
  231. package/dist/game/recordBook.d.ts +3 -1
  232. package/dist/game/recordBook.js +4 -1
  233. package/dist/game/ruleSelection.d.ts +75 -0
  234. package/dist/game/ruleSelection.js +127 -0
  235. package/dist/game/runDraft.d.ts +5 -0
  236. package/dist/game/runDraft.js +5 -0
  237. package/dist/game/saveStore.d.ts +111 -0
  238. package/dist/game/saveStore.js +312 -0
  239. package/dist/game/snapshotHistory.d.ts +67 -0
  240. package/dist/game/snapshotHistory.js +95 -0
  241. package/dist/game/social.d.ts +38 -1
  242. package/dist/game/social.js +71 -0
  243. package/dist/game/spawnPoints.d.ts +5 -0
  244. package/dist/game/spawnPoints.js +5 -0
  245. package/dist/game/systemRuntime.d.ts +50 -0
  246. package/dist/game/systemRuntime.js +157 -0
  247. package/dist/game/systemSchedule.d.ts +72 -0
  248. package/dist/game/systemSchedule.js +242 -0
  249. package/dist/game/toasts.d.ts +43 -0
  250. package/dist/game/toasts.js +44 -0
  251. package/dist/game/trade.d.ts +10 -0
  252. package/dist/game/trade.js +10 -0
  253. package/dist/game/tribe.d.ts +184 -0
  254. package/dist/game/tribe.js +432 -0
  255. package/dist/game/unlocks.d.ts +8 -0
  256. package/dist/game/unlocks.js +16 -0
  257. package/dist/game/vfxInstance.d.ts +138 -0
  258. package/dist/game/vfxInstance.js +96 -0
  259. package/dist/game/worldItem.d.ts +17 -4
  260. package/dist/game/worldItem.js +17 -4
  261. package/dist/gameplay.d.ts +93 -0
  262. package/dist/gameplay.js +93 -0
  263. package/dist/index.d.ts +5 -14
  264. package/dist/index.js +5 -14
  265. package/dist/input/actionBindings.d.ts +23 -6
  266. package/dist/input/actionBindings.js +23 -6
  267. package/dist/input/axisInput.d.ts +7 -2
  268. package/dist/input/axisInput.js +7 -2
  269. package/dist/input/controlGroups.d.ts +67 -0
  270. package/dist/input/controlGroups.js +41 -0
  271. package/dist/input/touchScheme.d.ts +82 -6
  272. package/dist/input/touchScheme.js +123 -10
  273. package/dist/interaction/lockpick.d.ts +61 -0
  274. package/dist/interaction/lockpick.js +168 -0
  275. package/dist/interaction/proximityPrompt.d.ts +2 -0
  276. package/dist/interaction/proximityPrompt.js +2 -0
  277. package/dist/interaction/qte.d.ts +5 -0
  278. package/dist/interaction/qte.js +5 -0
  279. package/dist/interaction/skillCheck.d.ts +5 -0
  280. package/dist/interaction/skillCheck.js +5 -0
  281. package/dist/inventory/encumbrance.d.ts +69 -0
  282. package/dist/inventory/encumbrance.js +68 -0
  283. package/dist/inventory/inventoryModel.d.ts +12 -0
  284. package/dist/inventory/inventoryModel.js +12 -0
  285. package/dist/inventory/shapedGrid.d.ts +16 -0
  286. package/dist/inventory/shapedGrid.js +16 -0
  287. package/dist/inventory/slotModel.d.ts +10 -0
  288. package/dist/inventory/slotModel.js +10 -0
  289. package/dist/item/durability.d.ts +5 -0
  290. package/dist/item/durability.js +6 -3
  291. package/dist/item/itemIdentity.d.ts +171 -0
  292. package/dist/item/itemIdentity.js +138 -0
  293. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  294. package/dist/item/itemInstanceRegistry.js +34 -0
  295. package/dist/item/itemgen.d.ts +163 -0
  296. package/dist/item/itemgen.js +151 -0
  297. package/dist/item/modularItem.d.ts +5 -0
  298. package/dist/item/modularItem.js +5 -0
  299. package/dist/item/use.d.ts +5 -0
  300. package/dist/item/use.js +5 -0
  301. package/dist/item/useBehavior.d.ts +142 -0
  302. package/dist/item/useBehavior.js +105 -0
  303. package/dist/item/weapon.d.ts +5 -0
  304. package/dist/item/weapon.js +5 -0
  305. package/dist/math/scalar.d.ts +25 -0
  306. package/dist/math/scalar.js +47 -0
  307. package/dist/meta/changelog.d.ts +4 -1
  308. package/dist/meta/changelog.js +39 -2
  309. package/dist/movement/avoidance.d.ts +45 -0
  310. package/dist/movement/avoidance.js +123 -0
  311. package/dist/movement/cameraRig.d.ts +8 -0
  312. package/dist/movement/cameraRig.js +8 -0
  313. package/dist/movement/dash.d.ts +11 -0
  314. package/dist/movement/dash.js +11 -0
  315. package/dist/movement/formation.d.ts +135 -0
  316. package/dist/movement/formation.js +194 -0
  317. package/dist/movement/glideModel.d.ts +5 -0
  318. package/dist/movement/glideModel.js +5 -0
  319. package/dist/movement/grappleSwing.d.ts +5 -0
  320. package/dist/movement/grappleSwing.js +5 -0
  321. package/dist/movement/leaderTrail.d.ts +5 -0
  322. package/dist/movement/leaderTrail.js +5 -0
  323. package/dist/movement/movementModel.d.ts +50 -9
  324. package/dist/movement/movementModel.js +75 -29
  325. package/dist/movement/playerMovement.js +167 -12
  326. package/dist/movement/poseState.d.ts +13 -0
  327. package/dist/movement/poseState.js +16 -0
  328. package/dist/movement/steering.d.ts +8 -0
  329. package/dist/movement/steering.js +18 -0
  330. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  331. package/dist/multiplayer/combatSnapshot.js +16 -8
  332. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  333. package/dist/multiplayer/lagCompensation.js +5 -0
  334. package/dist/multiplayer/presenceModel.d.ts +11 -1
  335. package/dist/multiplayer/presenceModel.js +17 -1
  336. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  337. package/dist/multiplayer/simultaneousCommit.js +3 -0
  338. package/dist/multiplayer.d.ts +11 -0
  339. package/dist/multiplayer.js +11 -0
  340. package/dist/nav/pathFollow.d.ts +57 -0
  341. package/dist/nav/pathFollow.js +109 -0
  342. package/dist/orders/orderKinds.d.ts +156 -0
  343. package/dist/orders/orderKinds.js +197 -0
  344. package/dist/orders/orderQueue.d.ts +208 -0
  345. package/dist/orders/orderQueue.js +211 -0
  346. package/dist/physics/drivableVehicle.d.ts +31 -0
  347. package/dist/physics/drivableVehicle.js +16 -0
  348. package/dist/physics/flightDynamics.d.ts +82 -0
  349. package/dist/physics/flightDynamics.js +165 -0
  350. package/dist/physics/gravityField.d.ts +25 -0
  351. package/dist/physics/gravityField.js +41 -0
  352. package/dist/physics/kinematicVehicle.d.ts +108 -1
  353. package/dist/physics/kinematicVehicle.js +212 -15
  354. package/dist/physics/physicsWorld.d.ts +50 -12
  355. package/dist/physics/physicsWorld.js +120 -122
  356. package/dist/physics/radialImpulse.d.ts +25 -0
  357. package/dist/physics/radialImpulse.js +27 -0
  358. package/dist/physics/vehicleObstacles.d.ts +44 -0
  359. package/dist/physics/vehicleObstacles.js +115 -0
  360. package/dist/procedural.d.ts +3 -0
  361. package/dist/procedural.js +3 -0
  362. package/dist/progression/statGraph.d.ts +116 -0
  363. package/dist/progression/statGraph.js +318 -0
  364. package/dist/puzzle/cellGrid.d.ts +9 -0
  365. package/dist/puzzle/cellGrid.js +9 -0
  366. package/dist/puzzle/fallingPiece.d.ts +9 -0
  367. package/dist/puzzle/fallingPiece.js +9 -0
  368. package/dist/puzzle/nonogram.d.ts +39 -0
  369. package/dist/puzzle/nonogram.js +136 -0
  370. package/dist/random/nameGen.d.ts +5 -0
  371. package/dist/random/nameGen.js +5 -0
  372. package/dist/random/pick.d.ts +8 -0
  373. package/dist/random/pick.js +31 -0
  374. package/dist/random/rng.d.ts +26 -1
  375. package/dist/random/rng.js +32 -9
  376. package/dist/random/seedLink.d.ts +4 -0
  377. package/dist/random/seedLink.js +4 -0
  378. package/dist/relation/keyedValues.d.ts +54 -0
  379. package/dist/relation/keyedValues.js +115 -0
  380. package/dist/relation/thresholds.d.ts +62 -0
  381. package/dist/relation/thresholds.js +62 -0
  382. package/dist/render/color.d.ts +12 -0
  383. package/dist/render/color.js +26 -0
  384. package/dist/render/lookPreset.d.ts +41 -0
  385. package/dist/render/lookPreset.js +29 -0
  386. package/dist/render/postProcessing.d.ts +20 -0
  387. package/dist/render/postProcessing.js +21 -1
  388. package/dist/rules/predicate.d.ts +53 -0
  389. package/dist/rules/predicate.js +64 -0
  390. package/dist/rules/ruleEffects.d.ts +38 -0
  391. package/dist/rules/ruleEffects.js +37 -0
  392. package/dist/rules/triggeredRules.d.ts +160 -0
  393. package/dist/rules/triggeredRules.js +241 -0
  394. package/dist/runtime/adapter.d.ts +55 -3
  395. package/dist/runtime/adapter.js +57 -1
  396. package/dist/runtime/cameraDirector.d.ts +1 -0
  397. package/dist/runtime/cameraDirector.js +1 -0
  398. package/dist/runtime/commandRunner.d.ts +1 -0
  399. package/dist/runtime/commandRunner.js +1 -0
  400. package/dist/runtime/context/combat.d.ts +51 -0
  401. package/dist/runtime/context/combat.js +130 -0
  402. package/dist/runtime/context/combatFx.d.ts +23 -0
  403. package/dist/runtime/context/combatFx.js +161 -0
  404. package/dist/runtime/context/deathLoot.d.ts +30 -0
  405. package/dist/runtime/context/deathLoot.js +39 -0
  406. package/dist/runtime/context/player.d.ts +48 -0
  407. package/dist/runtime/context/player.js +125 -0
  408. package/dist/runtime/context/registries.d.ts +13 -0
  409. package/dist/runtime/context/registries.js +84 -0
  410. package/dist/runtime/context/scene.d.ts +59 -0
  411. package/dist/runtime/context/scene.js +291 -0
  412. package/dist/runtime/context/snapshotCodecs.d.ts +12 -0
  413. package/dist/runtime/context/snapshotCodecs.js +26 -0
  414. package/dist/runtime/context/worldItems.d.ts +21 -0
  415. package/dist/runtime/context/worldItems.js +37 -0
  416. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  417. package/dist/runtime/descriptors/baseline.js +157 -0
  418. package/dist/runtime/descriptors/features.d.ts +79 -0
  419. package/dist/runtime/descriptors/features.js +299 -0
  420. package/dist/runtime/gameContext.d.ts +2 -327
  421. package/dist/runtime/gameContext.js +273 -778
  422. package/dist/runtime/gameContextTypes.d.ts +467 -0
  423. package/dist/runtime/gameContextTypes.js +1 -0
  424. package/dist/runtime/gameRuntime.d.ts +1 -0
  425. package/dist/runtime/gameRuntime.js +1 -0
  426. package/dist/runtime/headlessRunner.d.ts +62 -0
  427. package/dist/runtime/headlessRunner.js +45 -0
  428. package/dist/runtime/hostPersistence.d.ts +12 -0
  429. package/dist/runtime/hostPersistence.js +12 -0
  430. package/dist/runtime/hostPolicy.d.ts +51 -0
  431. package/dist/runtime/hostPolicy.js +68 -0
  432. package/dist/runtime/hostedGameRunner.d.ts +11 -4
  433. package/dist/runtime/hostedGameRunner.js +27 -3
  434. package/dist/runtime/hostedWorldSession.d.ts +15 -5
  435. package/dist/runtime/hostedWorldSession.js +12 -4
  436. package/dist/runtime/inputSnapshot.d.ts +8 -3
  437. package/dist/runtime/inputSnapshot.js +6 -2
  438. package/dist/runtime/motionIntents.d.ts +11 -2
  439. package/dist/runtime/motionIntents.js +16 -2
  440. package/dist/runtime/perContext.d.ts +15 -0
  441. package/dist/runtime/perContext.js +21 -0
  442. package/dist/runtime/runtimeSave.d.ts +79 -0
  443. package/dist/runtime/runtimeSave.js +105 -0
  444. package/dist/runtime/save.d.ts +4 -0
  445. package/dist/runtime/save.js +4 -0
  446. package/dist/runtime/snapshot.d.ts +7 -0
  447. package/dist/runtime/snapshot.js +7 -0
  448. package/dist/runtime/visibility.d.ts +2 -1
  449. package/dist/runtime/visibility.js +2 -1
  450. package/dist/runtime/worldChannel.d.ts +7 -3
  451. package/dist/runtime/worldChannel.js +51 -6
  452. package/dist/runtime/worldMirror.d.ts +14 -2
  453. package/dist/runtime/worldMirror.js +15 -2
  454. package/dist/runtime/worldProjection.d.ts +47 -0
  455. package/dist/runtime/worldProjection.js +52 -0
  456. package/dist/runtime/worldReplication.d.ts +30 -7
  457. package/dist/runtime/worldReplication.js +41 -9
  458. package/dist/runtime/worldSnapshot.d.ts +42 -3
  459. package/dist/runtime/worldSnapshot.js +34 -7
  460. package/dist/scene/assetCatalog.d.ts +26 -0
  461. package/dist/scene/assetCatalog.js +4 -0
  462. package/dist/scene/assetDiagnostics.d.ts +69 -0
  463. package/dist/scene/assetDiagnostics.js +110 -0
  464. package/dist/scene/assetGenerator.d.ts +65 -0
  465. package/dist/scene/assetGenerator.js +64 -0
  466. package/dist/scene/assetSpace.d.ts +137 -0
  467. package/dist/scene/assetSpace.js +257 -0
  468. package/dist/scene/authoredTriggers.d.ts +219 -0
  469. package/dist/scene/authoredTriggers.js +454 -0
  470. package/dist/scene/behaviorRuntime.d.ts +75 -0
  471. package/dist/scene/behaviorRuntime.js +217 -0
  472. package/dist/scene/behaviors.d.ts +14 -2
  473. package/dist/scene/behaviors.js +7 -2
  474. package/dist/scene/bodyBind.d.ts +60 -0
  475. package/dist/scene/bodyBind.js +51 -0
  476. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  477. package/dist/scene/builtinSceneKinds.js +67 -0
  478. package/dist/scene/colliders.d.ts +71 -1
  479. package/dist/scene/colliders.js +145 -1
  480. package/dist/scene/collisionMesh.d.ts +94 -0
  481. package/dist/scene/collisionMesh.js +699 -0
  482. package/dist/scene/companion.d.ts +147 -0
  483. package/dist/scene/companion.js +193 -0
  484. package/dist/scene/entityStats.d.ts +18 -11
  485. package/dist/scene/entityStats.js +21 -16
  486. package/dist/scene/entityStore.d.ts +12 -1
  487. package/dist/scene/entityStore.js +15 -0
  488. package/dist/scene/facing.d.ts +18 -0
  489. package/dist/scene/facing.js +26 -0
  490. package/dist/scene/modelSockets.d.ts +33 -0
  491. package/dist/scene/modelSockets.js +29 -0
  492. package/dist/scene/objectQuery.d.ts +2 -0
  493. package/dist/scene/objectQuery.js +2 -0
  494. package/dist/scene/objectStore.d.ts +4 -0
  495. package/dist/scene/objectStore.js +6 -0
  496. package/dist/scene/possession.d.ts +8 -0
  497. package/dist/scene/possession.js +14 -0
  498. package/dist/scene/roster.d.ts +3 -0
  499. package/dist/scene/roster.js +12 -0
  500. package/dist/scene/sceneKinds.d.ts +256 -0
  501. package/dist/scene/sceneKinds.js +218 -0
  502. package/dist/scene/sceneOwnership.d.ts +169 -0
  503. package/dist/scene/sceneOwnership.js +179 -0
  504. package/dist/scene/sceneRaycast.js +15 -0
  505. package/dist/scene/selectionBookmarks.d.ts +93 -0
  506. package/dist/scene/selectionBookmarks.js +122 -0
  507. package/dist/scene/vehicleSeat.d.ts +68 -0
  508. package/dist/scene/vehicleSeat.js +59 -0
  509. package/dist/sensor/concealment.d.ts +3 -0
  510. package/dist/sensor/concealment.js +3 -0
  511. package/dist/sensor/freezeMonitor.d.ts +1 -0
  512. package/dist/sensor/freezeMonitor.js +1 -0
  513. package/dist/sensor/frustumSensor.d.ts +7 -3
  514. package/dist/sensor/frustumSensor.js +7 -3
  515. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  516. package/dist/sensor/hiddenStateProbe.js +5 -2
  517. package/dist/sensor/recordingBuffer.d.ts +2 -1
  518. package/dist/sensor/recordingBuffer.js +2 -1
  519. package/dist/sensor/replayLoop.d.ts +6 -2
  520. package/dist/sensor/replayLoop.js +6 -2
  521. package/dist/sensor/revealQuery.d.ts +2 -1
  522. package/dist/sensor/revealQuery.js +2 -1
  523. package/dist/sensor/visionCone.d.ts +10 -3
  524. package/dist/sensor/visionCone.js +10 -3
  525. package/dist/session/contestedChannel.d.ts +1 -0
  526. package/dist/session/contestedChannel.js +1 -0
  527. package/dist/session/extraction.d.ts +1 -0
  528. package/dist/session/extraction.js +1 -0
  529. package/dist/session/roles.d.ts +6 -0
  530. package/dist/session/roles.js +6 -0
  531. package/dist/session/roundState.d.ts +8 -0
  532. package/dist/session/roundState.js +2 -0
  533. package/dist/settings/settingsModel.d.ts +1 -0
  534. package/dist/settings/settingsModel.js +1 -0
  535. package/dist/stats/accumulatorMeter.d.ts +6 -0
  536. package/dist/stats/accumulatorMeter.js +6 -0
  537. package/dist/stats/eventMeter.d.ts +5 -0
  538. package/dist/stats/eventMeter.js +5 -0
  539. package/dist/stats/rollCheck.d.ts +5 -0
  540. package/dist/stats/rollCheck.js +5 -0
  541. package/dist/stats/spawnLevelStats.d.ts +110 -0
  542. package/dist/stats/spawnLevelStats.js +140 -0
  543. package/dist/stats/statModifiers.d.ts +5 -0
  544. package/dist/stats/statModifiers.js +5 -0
  545. package/dist/stats/statPool.d.ts +70 -0
  546. package/dist/stats/statPool.js +59 -0
  547. package/dist/store/changeSignal.d.ts +3 -0
  548. package/dist/store/changeSignal.js +2 -0
  549. package/dist/store/defineKeyedStore.d.ts +38 -0
  550. package/dist/store/defineKeyedStore.js +42 -0
  551. package/dist/store/defineStore.d.ts +33 -0
  552. package/dist/store/defineStore.js +35 -0
  553. package/dist/store/observableKeyedStore.d.ts +7 -0
  554. package/dist/store/observableKeyedStore.js +35 -2
  555. package/dist/survival/decayMeter.d.ts +55 -0
  556. package/dist/survival/decayMeter.js +130 -57
  557. package/dist/survival/moodle.d.ts +2 -0
  558. package/dist/survival/regionHealth.d.ts +6 -0
  559. package/dist/survival/regionHealth.js +6 -3
  560. package/dist/tactics/fallingGrid.d.ts +4 -2
  561. package/dist/tactics/fallingGrid.js +4 -2
  562. package/dist/tactics/predictiveQuery.d.ts +3 -0
  563. package/dist/tactics/predictiveQuery.js +3 -0
  564. package/dist/tactics/snapshot.d.ts +2 -0
  565. package/dist/tactics/snapshot.js +2 -0
  566. package/dist/tactics/surface.d.ts +1 -0
  567. package/dist/tactics/surface.js +1 -0
  568. package/dist/tactics/tacticalGrid.d.ts +1 -0
  569. package/dist/tactics/tacticalGrid.js +1 -0
  570. package/dist/time/beatClock.d.ts +14 -4
  571. package/dist/time/beatClock.js +14 -4
  572. package/dist/time/calendarClock.d.ts +3 -0
  573. package/dist/time/calendarClock.js +3 -0
  574. package/dist/time/idleProgress.d.ts +4 -0
  575. package/dist/time/idleProgress.js +4 -0
  576. package/dist/time/simClock.d.ts +2 -0
  577. package/dist/time/simClock.js +20 -5
  578. package/dist/ui/actionModel.d.ts +110 -0
  579. package/dist/ui/actionModel.js +159 -0
  580. package/dist/ui/gameLayout.d.ts +30 -11
  581. package/dist/ui/gameLayout.js +30 -11
  582. package/dist/ui/hudDocument.d.ts +114 -0
  583. package/dist/ui/hudDocument.js +220 -0
  584. package/dist/ui/hudLayout.d.ts +38 -1
  585. package/dist/ui/hudLayout.js +220 -17
  586. package/dist/ui/selectionModel.d.ts +92 -0
  587. package/dist/ui/selectionModel.js +88 -0
  588. package/dist/ui/tooltipModel.d.ts +63 -0
  589. package/dist/ui/tooltipModel.js +82 -0
  590. package/dist/ui.d.ts +15 -0
  591. package/dist/ui.js +15 -0
  592. package/dist/visibility/bounds.d.ts +8 -1
  593. package/dist/visibility/bounds.js +8 -1
  594. package/dist/visibility/frustum.d.ts +12 -3
  595. package/dist/visibility/frustum.js +12 -3
  596. package/dist/work/jobQueue.d.ts +201 -0
  597. package/dist/work/jobQueue.js +253 -0
  598. package/dist/work/unitTraining.d.ts +58 -0
  599. package/dist/work/unitTraining.js +52 -0
  600. package/dist/world/authoredEntities.d.ts +29 -0
  601. package/dist/world/authoredEntities.js +29 -0
  602. package/dist/world/authoredObjects.d.ts +72 -0
  603. package/dist/world/authoredObjects.js +81 -0
  604. package/dist/world/authoredSpawn.d.ts +39 -0
  605. package/dist/world/authoredSpawn.js +37 -0
  606. package/dist/world/buildSockets.d.ts +152 -0
  607. package/dist/world/buildSockets.js +188 -0
  608. package/dist/world/buildingGenerator.d.ts +18 -0
  609. package/dist/world/buildingGenerator.js +62 -0
  610. package/dist/world/buildings.d.ts +5 -0
  611. package/dist/world/buildings.js +5 -0
  612. package/dist/world/catenary.d.ts +22 -0
  613. package/dist/world/catenary.js +69 -0
  614. package/dist/world/cityBlocks.d.ts +152 -0
  615. package/dist/world/cityBlocks.js +670 -0
  616. package/dist/world/cityContent.d.ts +77 -0
  617. package/dist/world/cityContent.js +261 -0
  618. package/dist/world/cityGeometry.d.ts +114 -0
  619. package/dist/world/cityGeometry.js +573 -0
  620. package/dist/world/cityKind.d.ts +314 -0
  621. package/dist/world/cityKind.js +1578 -0
  622. package/dist/world/features.d.ts +133 -10
  623. package/dist/world/features.js +66 -6
  624. package/dist/world/footprintGrid.d.ts +59 -0
  625. package/dist/world/footprintGrid.js +141 -0
  626. package/dist/world/geometry.d.ts +64 -0
  627. package/dist/world/geometry.js +94 -0
  628. package/dist/world/grassKind.d.ts +51 -0
  629. package/dist/world/grassKind.js +101 -0
  630. package/dist/world/markers.d.ts +50 -4
  631. package/dist/world/markers.js +49 -0
  632. package/dist/world/massing.js +1 -1
  633. package/dist/world/minimapBake.d.ts +78 -0
  634. package/dist/world/minimapBake.js +208 -0
  635. package/dist/world/minimapTrack.d.ts +17 -0
  636. package/dist/world/minimapTrack.js +22 -0
  637. package/dist/world/pathInstances.d.ts +27 -0
  638. package/dist/world/pathInstances.js +27 -0
  639. package/dist/world/pathNetwork.d.ts +159 -0
  640. package/dist/world/pathNetwork.js +684 -0
  641. package/dist/world/pathTerrain.d.ts +80 -0
  642. package/dist/world/pathTerrain.js +142 -0
  643. package/dist/world/place.d.ts +166 -0
  644. package/dist/world/place.js +96 -0
  645. package/dist/world/placeAsset.d.ts +81 -0
  646. package/dist/world/placeAsset.js +79 -0
  647. package/dist/world/placement.d.ts +4 -0
  648. package/dist/world/placement.js +4 -0
  649. package/dist/world/placementController.d.ts +6 -0
  650. package/dist/world/placementController.js +6 -0
  651. package/dist/world/poleLineKind.d.ts +40 -0
  652. package/dist/world/poleLineKind.js +97 -0
  653. package/dist/world/polyline.d.ts +34 -0
  654. package/dist/world/polyline.js +88 -0
  655. package/dist/world/resourceNode.d.ts +109 -0
  656. package/dist/world/resourceNode.js +140 -0
  657. package/dist/world/roads.d.ts +8 -0
  658. package/dist/world/roads.js +38 -0
  659. package/dist/world/scatter.js +2 -20
  660. package/dist/world/scatterRegion.d.ts +164 -0
  661. package/dist/world/scatterRegion.js +409 -0
  662. package/dist/world/sceneShapes.d.ts +43 -0
  663. package/dist/world/sceneShapes.js +1 -0
  664. package/dist/world/segment.d.ts +27 -0
  665. package/dist/world/segment.js +43 -0
  666. package/dist/world/soilKind.d.ts +48 -0
  667. package/dist/world/soilKind.js +92 -0
  668. package/dist/world/spatialSample.d.ts +241 -0
  669. package/dist/world/spatialSample.js +465 -0
  670. package/dist/world/streets.d.ts +29 -0
  671. package/dist/world/streets.js +55 -0
  672. package/dist/world/terraform.d.ts +213 -1
  673. package/dist/world/terraform.js +627 -22
  674. package/dist/world/terrain.d.ts +164 -20
  675. package/dist/world/terrain.js +325 -41
  676. package/dist/world/terrainGuides.d.ts +182 -0
  677. package/dist/world/terrainGuides.js +343 -0
  678. package/dist/world/vec2.d.ts +81 -0
  679. package/dist/world/vec2.js +128 -0
  680. package/dist/world/vec3.d.ts +49 -0
  681. package/dist/world/vec3.js +76 -0
  682. package/dist/world/vegetation.d.ts +71 -0
  683. package/dist/world/vegetation.js +151 -0
  684. package/dist/world/visibilityField.d.ts +154 -0
  685. package/dist/world/visibilityField.js +271 -0
  686. package/dist/world/volumetricClouds.d.ts +52 -0
  687. package/dist/world/volumetricClouds.js +43 -0
  688. package/dist/world/walls.d.ts +9 -0
  689. package/dist/world/walls.js +9 -0
  690. package/dist/world/waterKind.d.ts +55 -0
  691. package/dist/world/waterKind.js +99 -0
  692. package/dist/world.d.ts +141 -0
  693. package/dist/world.js +141 -0
  694. package/package.json +32 -8
  695. package/skills/game-design/SKILL.md +28 -0
  696. package/skills/game-design/agents/openai.yaml +4 -0
  697. package/skills/game-design/references/application-playbook.md +170 -0
  698. package/skills/game-design/references/field-guide.md +288 -0
  699. package/skills/jgengine/SKILL.md +54 -0
  700. package/skills/jgengine/api.md +527 -0
  701. package/skills/jgengine/capabilities.md +131 -0
  702. package/skills/jgengine/recipes/minimal-game.md +88 -0
  703. package/skills/jgengine-combat/SKILL.md +38 -0
  704. package/skills/jgengine-combat/api.md +585 -0
  705. package/skills/jgengine-combat/capabilities.md +213 -0
  706. package/skills/jgengine-combat/recipes/portable-stat-pools.md +122 -0
  707. package/skills/jgengine-combat/reference.md +108 -0
  708. package/skills/jgengine-gameplay/SKILL.md +39 -0
  709. package/skills/jgengine-gameplay/api.md +1920 -0
  710. package/skills/jgengine-gameplay/capabilities.md +454 -0
  711. package/skills/jgengine-gameplay/reference-systems.md +56 -0
  712. package/skills/jgengine-world/SKILL.md +51 -0
  713. package/skills/jgengine-world/api.md +3056 -0
  714. package/skills/jgengine-world/capabilities.md +476 -0
  715. package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
  716. package/skills/jgengine-world/reference.md +261 -0
  717. package/dist/cartridge/runtime.d.ts +0 -15
  718. package/dist/cartridge/runtime.js +0 -556
  719. package/dist/cartridge/spec.d.ts +0 -188
  720. package/dist/cartridge/spec.js +0 -19
  721. package/dist/cartridge/validate.d.ts +0 -2
  722. package/dist/cartridge/validate.js +0 -78
  723. package/dist/store/engineStore.d.ts +0 -22
  724. package/dist/store/engineStore.js +0 -50
  725. package/dist/store/features.d.ts +0 -10
  726. package/dist/store/features.js +0 -23
  727. package/llms.txt +0 -5389
@@ -0,0 +1,63 @@
1
+ import { type DamageChannelId, type DamageMatchup, type ResolvedMatchup, type TargetTraitId } from "./damageMatchup.js";
2
+ import { type ReceivedDamageResult, type ReceivedModifier } from "./receivedDamage.js";
3
+ import { type StatusApplicationOutcome, type StatusApplicationSpec, type StatusImmunity, type StatusInstance } from "./statusApplication.js";
4
+ /**
5
+ * One data-defined damage hit: a channel, a base impact, the target's traits and carried statuses,
6
+ * and the caller-owned matchup/received/status data that shapes the outcome. Everything is
7
+ * serializable; the only non-data input is the injected `rng`, so authority can resolve a hit and
8
+ * replicate the returned instances.
9
+ */
10
+ export interface DamageHitInput {
11
+ channel: DamageChannelId;
12
+ /** Base direct impact before matchup and receiver modifiers. */
13
+ impact: number;
14
+ target: string;
15
+ source?: string;
16
+ /** Traits the target presents to the matchup (`"armored"`, `"shielded"`). */
17
+ targetTraits?: readonly TargetTraitId[];
18
+ /** Statuses the target already carries — feeds received predicates and stacking. */
19
+ targetStatuses?: readonly string[];
20
+ /** Caller tags on the hit (`"crit"`, `"aoe"`). */
21
+ tags?: readonly string[];
22
+ /** Channel-vs-trait table; omitted means identity outputs. */
23
+ matchup?: DamageMatchup;
24
+ /** Receiver-side modifiers to run over the post-matchup impact. */
25
+ received?: readonly ReceivedModifier[];
26
+ /** A status this hit tries to apply; omitted means impact only. */
27
+ status?: StatusApplicationSpec;
28
+ /** The target's existing instance of `status`, for stacking/refresh. */
29
+ currentStatus?: StatusInstance | null;
30
+ /** Statuses the target is immune to. */
31
+ immunity?: StatusImmunity | null;
32
+ /** Deterministic RNG for the status roll; defaults to `Math.random`. */
33
+ rng?: () => number;
34
+ }
35
+ /**
36
+ * The full, provenance-rich result of resolving a hit — every stage kept for UI and debugging.
37
+ * `impact` is the final number to drain; `matchup`, `received`, and `status` expose exactly how it
38
+ * got there. Authority applies `impact` (plus `received.redirects`/`conversions`) and the returned
39
+ * status `instance`; nothing here mutates game state.
40
+ */
41
+ export interface DamageHitResolution {
42
+ channel: DamageChannelId;
43
+ /** Final impact on the primary target/channel after matchup and receiver modifiers. */
44
+ impact: number;
45
+ immune: boolean;
46
+ /** The matchup outputs and their contributions. */
47
+ matchup: ResolvedMatchup;
48
+ /** The receiver-side pass over the matchup-scaled impact. */
49
+ received: ReceivedDamageResult;
50
+ /** The status application outcome, when the hit carried a `status`. */
51
+ status?: StatusApplicationOutcome;
52
+ }
53
+ /**
54
+ * Resolve a full damage hit through the data-defined pipeline: score the channel against the
55
+ * target's traits ({@link resolveMatchup}), scale base impact by the matchup's `impact` axis,
56
+ * run receiver-side modifiers ({@link resolveReceivedDamage}), then roll status application scaled
57
+ * by the matchup's `applyChance`/`magnitude`/`duration` axes ({@link resolveStatusApplication}).
58
+ * Pure and deterministic given a seeded `rng`; returns full provenance and never mutates state, so
59
+ * it is safe to run on the authority and replicate the results.
60
+ *
61
+ * @capability damage-hit resolve a full data-defined damage hit — matchup, impact, receiver modifiers, and status application — with provenance
62
+ */
63
+ export declare function resolveDamageHit(input: DamageHitInput): DamageHitResolution;
@@ -0,0 +1,50 @@
1
+ import { resolveMatchup, } from "./damageMatchup.js";
2
+ import { resolveReceivedDamage, } from "./receivedDamage.js";
3
+ import { resolveStatusApplication, } from "./statusApplication.js";
4
+ /**
5
+ * Resolve a full damage hit through the data-defined pipeline: score the channel against the
6
+ * target's traits ({@link resolveMatchup}), scale base impact by the matchup's `impact` axis,
7
+ * run receiver-side modifiers ({@link resolveReceivedDamage}), then roll status application scaled
8
+ * by the matchup's `applyChance`/`magnitude`/`duration` axes ({@link resolveStatusApplication}).
9
+ * Pure and deterministic given a seeded `rng`; returns full provenance and never mutates state, so
10
+ * it is safe to run on the authority and replicate the results.
11
+ *
12
+ * @capability damage-hit resolve a full data-defined damage hit — matchup, impact, receiver modifiers, and status application — with provenance
13
+ */
14
+ export function resolveDamageHit(input) {
15
+ const matchup = resolveMatchup(input.matchup ?? { entries: {} }, input.channel, input.targetTraits ?? []);
16
+ const context = {
17
+ channel: input.channel,
18
+ target: input.target,
19
+ ...(input.source !== undefined ? { source: input.source } : {}),
20
+ ...(input.targetStatuses !== undefined ? { targetStatuses: input.targetStatuses } : {}),
21
+ ...(input.tags !== undefined ? { tags: input.tags } : {}),
22
+ };
23
+ const received = resolveReceivedDamage({
24
+ amount: input.impact * matchup.impact,
25
+ context,
26
+ modifiers: input.received ?? [],
27
+ });
28
+ const resolution = {
29
+ channel: input.channel,
30
+ impact: received.amount,
31
+ immune: received.immune,
32
+ matchup,
33
+ received,
34
+ };
35
+ if (input.status !== undefined) {
36
+ resolution.status = resolveStatusApplication({
37
+ spec: input.status,
38
+ scale: {
39
+ applyChance: matchup.applyChance,
40
+ magnitude: matchup.magnitude,
41
+ duration: matchup.duration,
42
+ },
43
+ current: input.currentStatus ?? null,
44
+ immunity: input.immunity ?? null,
45
+ ...(input.source !== undefined ? { source: input.source } : {}),
46
+ ...(input.rng !== undefined ? { rng: input.rng } : {}),
47
+ });
48
+ }
49
+ return resolution;
50
+ }
@@ -1,6 +1,7 @@
1
- import type { DeathReason, GameEvents } from "../game/events.js";
1
+ import type { GameEvents } from "../game/events.js";
2
2
  import type { Drop } from "../game/lootTable.js";
3
3
  import type { ScatterOptions } from "../game/worldItem.js";
4
+ import type { DeathReason } from "./deathReason.js";
4
5
  import type { EffectVia } from "./effects.js";
5
6
  export type DeathReasonKind = DeathReason["kind"];
6
7
  export interface OnDeathDropRule {
@@ -60,6 +61,11 @@ export interface DeathSystem {
60
61
  resolveDeath(instanceId: string, reason: DeathReason): DeathResolution;
61
62
  revive(instanceId: string): boolean;
62
63
  }
64
+ /**
65
+ * Resolve entity death and the on-death consequences — drops, respawn eligibility, kill credit.
66
+ *
67
+ * @capability death-system resolve entity death and its on-death consequences
68
+ */
63
69
  export declare function createDeathSystem(deps: DeathSystemDeps): DeathSystem;
64
70
  export interface EffectDeathContext {
65
71
  from: string;
@@ -11,6 +11,11 @@ export function normalizeOnDeath(spec) {
11
11
  function matchesReason(when, reason) {
12
12
  return when === undefined || when.reason === reason.kind;
13
13
  }
14
+ /**
15
+ * Resolve entity death and the on-death consequences — drops, respawn eligibility, kill credit.
16
+ *
17
+ * @capability death-system resolve entity death and its on-death consequences
18
+ */
14
19
  export function createDeathSystem(deps) {
15
20
  const dead = new Set();
16
21
  return {
@@ -0,0 +1,14 @@
1
+ /** Why an entity died — who or what gets credit, for drop/command rules and the `entity.died` event. */
2
+ export type DeathReason = {
3
+ kind: "player_kill";
4
+ killerUserId: string;
5
+ via?: {
6
+ item?: string;
7
+ };
8
+ } | {
9
+ kind: "environment";
10
+ source: string;
11
+ } | {
12
+ kind: "self";
13
+ source: string;
14
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -31,4 +31,9 @@ export interface DefensiveWindow {
31
31
  evaluate(nowMs: number, attack: AttackMeta): DefenseResolution;
32
32
  isInvulnerable(nowMs: number): boolean;
33
33
  }
34
+ /**
35
+ * Open a timed defensive window — block, parry, or i-frames — and test incoming hits against it.
36
+ *
37
+ * @capability parry-window time a block/parry/i-frame defensive window against incoming hits
38
+ */
34
39
  export declare function createDefensiveWindow(config: DefensiveWindowConfig): DefensiveWindow;
@@ -32,6 +32,11 @@ export function resolveDefense(input) {
32
32
  return { outcome: "block", perfect: true };
33
33
  return { outcome: "hit", perfect: false };
34
34
  }
35
+ /**
36
+ * Open a timed defensive window — block, parry, or i-frames — and test incoming hits against it.
37
+ *
38
+ * @capability parry-window time a block/parry/i-frame defensive window against incoming hits
39
+ */
35
40
  export function createDefensiveWindow(config) {
36
41
  let openedAt = null;
37
42
  function elapsed(nowMs) {
@@ -39,5 +39,9 @@ export interface DotField {
39
39
  /** Advance every active DoT; returns the damage due this frame plus an `expired` marker per finished DoT. */
40
40
  tick(dtSeconds: number): DotTick[];
41
41
  }
42
- /** Builds an empty {@link DotField}; `apply` DoTs onto it and drain damage each frame with `tick`. */
42
+ /**
43
+ * Builds an empty {@link DotField}; `apply` DoTs onto it and drain damage each frame with `tick`.
44
+ *
45
+ * @capability dot-field track stacking damage-over-time effects and drain damage each frame
46
+ */
43
47
  export declare function createDotField(): DotField;
@@ -1,4 +1,8 @@
1
- /** Builds an empty {@link DotField}; `apply` DoTs onto it and drain damage each frame with `tick`. */
1
+ /**
2
+ * Builds an empty {@link DotField}; `apply` DoTs onto it and drain damage each frame with `tick`.
3
+ *
4
+ * @capability dot-field track stacking damage-over-time effects and drain damage each frame
5
+ */
2
6
  export function createDotField() {
3
7
  const dots = new Map();
4
8
  return {
@@ -32,4 +32,9 @@ export interface DownedState {
32
32
  clear(instanceId: string): void;
33
33
  snapshot(): Record<string, DownedEntry>;
34
34
  }
35
+ /**
36
+ * A downed/bleed-out state that ticks toward death and that teammates can revive before the timer runs out.
37
+ *
38
+ * @capability downed-revive a downed/bleed-out state teammates can revive before death
39
+ */
35
40
  export declare function createDownedState(config: DownedConfig): DownedState;
@@ -1,3 +1,8 @@
1
+ /**
2
+ * A downed/bleed-out state that ticks toward death and that teammates can revive before the timer runs out.
3
+ *
4
+ * @capability downed-revive a downed/bleed-out state teammates can revive before death
5
+ */
1
6
  export function createDownedState(config) {
2
7
  const bleedoutSeconds = Math.max(0, config.bleedoutSeconds);
3
8
  const reviveSeconds = config.reviveSeconds !== undefined ? Math.max(0, config.reviveSeconds) : 0;
@@ -69,4 +69,9 @@ export interface EffectSystem {
69
69
  preview(input: SingleTargetEffectInput): number;
70
70
  applyEffect(input: EffectInput): EffectResult[];
71
71
  }
72
+ /**
73
+ * Apply, stack, and tick timed status effects — buffs, debuffs, DoTs — on entities.
74
+ *
75
+ * @capability status-effects apply and tick timed status effects and buffs on entities
76
+ */
72
77
  export declare function createEffectSystem(deps: EffectSystemDeps): EffectSystem;
@@ -21,6 +21,11 @@ export function resolveAreaTargets(spatial, input, accept) {
21
21
  return targets;
22
22
  }
23
23
  const DEFAULT_DRAIN_STAT = "damage";
24
+ /**
25
+ * Apply, stack, and tick timed status effects — buffs, debuffs, DoTs — on entities.
26
+ *
27
+ * @capability status-effects apply and tick timed status effects and buffs on entities
28
+ */
24
29
  export function createEffectSystem(deps) {
25
30
  function resolveRule(instanceId, effect) {
26
31
  return deps.resolveReceive(instanceId)?.[effect] ?? null;
@@ -0,0 +1,258 @@
1
+ import type { NavPoint } from "../nav/navGrid.js";
2
+ /**
3
+ * Lifecycle status of one phase in an encounter sequence: waiting to run, currently
4
+ * running, or finished. Groups and leaves share the same three states.
5
+ */
6
+ export type PhaseStatus = "pending" | "active" | "complete";
7
+ /**
8
+ * Reference to a registered completion predicate: a `kind` naming the evaluator plus
9
+ * opaque `params` the evaluator reads. The sequence core never interprets `params`; the
10
+ * predicate registered under `kind` does.
11
+ */
12
+ export interface PhaseCompletionRef {
13
+ kind: string;
14
+ params?: Readonly<Record<string, unknown>>;
15
+ }
16
+ /**
17
+ * Reference to a registered spawn provider invoked when a phase is entered: a `kind`
18
+ * naming the provider plus opaque `params`. Spawning is one optional node adapter — a
19
+ * phase without `spawn` simply emits no spawn requests.
20
+ */
21
+ export interface PhaseSpawnRef {
22
+ kind: string;
23
+ params?: Readonly<Record<string, unknown>>;
24
+ }
25
+ /**
26
+ * One node in an encounter sequence tree. `data` is caller-owned and opaque to the core.
27
+ * A node with `children` is a group whose children run in order; a node without is a leaf.
28
+ * `completion` gates when the node finishes, `spawn` names an on-enter provider, and
29
+ * `repeat` re-runs the node's subtree that many extra times before advancing.
30
+ */
31
+ export interface EncounterPhase<TData = unknown> {
32
+ /** Stable, tree-unique id. Survives serialization and phase injection. */
33
+ id: string;
34
+ data?: TData;
35
+ children?: readonly EncounterPhase<TData>[];
36
+ /**
37
+ * Completion predicate reference. A leaf without one completes immediately (a marker or
38
+ * spawn-only phase); a group without one completes once all its children complete.
39
+ */
40
+ completion?: PhaseCompletionRef;
41
+ spawn?: PhaseSpawnRef;
42
+ /** Extra runs of this node's subtree before advancing. Default 0 (runs once). */
43
+ repeat?: number;
44
+ }
45
+ /** Per-node runtime record. Serializable — holds no functions or tree references. */
46
+ export interface PhaseRuntime {
47
+ status: PhaseStatus;
48
+ /** 0-based repeat iteration currently running. */
49
+ iteration: number;
50
+ /** `elapsed` at which the node was most recently entered, for time-based predicates. */
51
+ enteredAt: number;
52
+ }
53
+ /**
54
+ * Full serializable encounter state: the working phase tree (including any injected
55
+ * phases), a per-node runtime map, the active path from root to the deepest open node,
56
+ * accumulated time, and whether the sequence has finished. Round-trips through JSON with
57
+ * no behavioral change; the registries live in {@link EncounterConfig}, not here.
58
+ */
59
+ export interface EncounterState<TData = unknown> {
60
+ roots: EncounterPhase<TData>[];
61
+ nodes: Record<string, PhaseRuntime>;
62
+ /** Ids from a root down to the deepest open node; empty before start and once done. */
63
+ activePath: string[];
64
+ elapsed: number;
65
+ started: boolean;
66
+ done: boolean;
67
+ }
68
+ /**
69
+ * Caller-supplied signals a completion predicate reads. Every field is optional and
70
+ * opaque to the core: `counts` of tagged live entities, continuous `metrics`, cumulative
71
+ * `events`, and boolean `flags`. Deterministic given the same values.
72
+ */
73
+ export interface EncounterSignals {
74
+ counts?: Readonly<Record<string, number>>;
75
+ metrics?: Readonly<Record<string, number>>;
76
+ events?: Readonly<Record<string, number>>;
77
+ flags?: Readonly<Record<string, boolean>>;
78
+ }
79
+ /**
80
+ * Context passed to {@link startEncounter} / {@link updateEncounter}: the caller signals
81
+ * predicates evaluate against, plus named `spawnPoints` catalogs (authored in the scene,
82
+ * referenced by key) that spawn providers place against. Never holds coordinates the
83
+ * sequence itself owns.
84
+ */
85
+ export interface EncounterContext {
86
+ signals?: EncounterSignals;
87
+ /** Named lists of authored scene spawn points, referenced by spawn providers by key. */
88
+ spawnPoints?: Readonly<Record<string, readonly NavPoint[]>>;
89
+ }
90
+ /** Evaluation context a completion predicate receives for the node under test. */
91
+ export interface PredicateContext {
92
+ phaseId: string;
93
+ iteration: number;
94
+ /** Total accumulated encounter time. */
95
+ elapsed: number;
96
+ /** Time since this node was entered (0 on the tick it is entered). */
97
+ phaseElapsed: number;
98
+ signals: EncounterSignals;
99
+ }
100
+ /**
101
+ * A completion predicate: pure and deterministic, returns true when the node it gates is
102
+ * finished. Registered under a `kind` and reused across phases with different `params`.
103
+ */
104
+ export type CompletionPredicate = (params: Readonly<Record<string, unknown>>, ctx: PredicateContext) => boolean;
105
+ /** A single spawn request a provider emits; `ref` is caller-defined, `point` optional. */
106
+ export interface EncounterSpawnRequest {
107
+ ref: string;
108
+ point?: NavPoint;
109
+ data?: unknown;
110
+ }
111
+ /** Evaluation context a spawn provider receives when its phase is entered. */
112
+ export interface SpawnProviderContext {
113
+ phaseId: string;
114
+ iteration: number;
115
+ elapsed: number;
116
+ spawnPoints: Readonly<Record<string, readonly NavPoint[]>>;
117
+ }
118
+ /**
119
+ * A spawn provider: given the phase's `params` and context, returns the spawn requests to
120
+ * emit on enter. Deterministic; reads authored scene points from `ctx.spawnPoints` rather
121
+ * than embedding coordinates.
122
+ */
123
+ export type SpawnProvider = (params: Readonly<Record<string, unknown>>, ctx: SpawnProviderContext) => readonly EncounterSpawnRequest[];
124
+ /** A lifecycle event emitted while stepping an encounter, carrying provenance. */
125
+ export type EncounterEvent = {
126
+ type: "enter";
127
+ phaseId: string;
128
+ iteration: number;
129
+ } | {
130
+ type: "spawn";
131
+ phaseId: string;
132
+ provider: string;
133
+ requests: readonly EncounterSpawnRequest[];
134
+ } | {
135
+ type: "complete";
136
+ phaseId: string;
137
+ iteration: number;
138
+ reason: string;
139
+ } | {
140
+ type: "done";
141
+ };
142
+ /** Result of a step: the (mutated, returned) state and the events emitted this step. */
143
+ export interface EncounterStep<TData = unknown> {
144
+ state: EncounterState<TData>;
145
+ events: EncounterEvent[];
146
+ }
147
+ /**
148
+ * Non-serializable configuration for an encounter: the authored phase tree plus predicate
149
+ * and spawn-provider registries. Re-supplied alongside a loaded {@link EncounterState}, the
150
+ * way `advanceSpawnDirector` pairs config with state, so the state itself stays pure data.
151
+ */
152
+ export interface EncounterConfig<TData = unknown> {
153
+ phases: readonly EncounterPhase<TData>[];
154
+ /** Extra predicates, merged over the built-ins (a same-named entry overrides). */
155
+ predicates?: Readonly<Record<string, CompletionPredicate>>;
156
+ /** Extra spawn providers, merged over the built-ins. */
157
+ spawnProviders?: Readonly<Record<string, SpawnProvider>>;
158
+ }
159
+ /** Where to insert an injected phase, relative to an existing node by id. */
160
+ export type PhaseInjectAt = {
161
+ before: string;
162
+ } | {
163
+ after: string;
164
+ } | {
165
+ childOf: string;
166
+ index?: number;
167
+ };
168
+ /**
169
+ * Built-in completion predicates covering the common encounter gates: `immediate` (leaf
170
+ * marker), `manual`/`flag` (external event via a caller flag), `timer` (phase seconds),
171
+ * `cleared` (tagged entity count drained), `metric` (threshold on a live value), `event`
172
+ * (cumulative event count), and `quorum` (at least N of nested predicates met). Merge your
173
+ * own over these through {@link EncounterConfig.predicates}.
174
+ *
175
+ * @capability encounter-predicates gate encounter phase completion on timers, cleared spawns, metrics, events, or a quorum of conditions
176
+ */
177
+ export declare const BUILTIN_COMPLETION_PREDICATES: Readonly<Record<string, CompletionPredicate>>;
178
+ /**
179
+ * Built-in spawn providers. `points` reads a named authored scene point list from context
180
+ * and cycles it to emit `count` requests, keeping coordinates in the scene rather than the
181
+ * sequence. `list` echoes literal requests authored in `params.requests`. Merge your own
182
+ * catalog- or director-backed providers through {@link EncounterConfig.spawnProviders}.
183
+ *
184
+ * @capability encounter-spawn-providers turn an entered encounter phase into spawn requests from authored scene points or an inline list
185
+ */
186
+ export declare const BUILTIN_SPAWN_PROVIDERS: Readonly<Record<string, SpawnProvider>>;
187
+ /**
188
+ * Build the initial, serializable state for an encounter from its config. Deep-copies the
189
+ * authored phase tree (so later injection never mutates the config), verifies phase ids are
190
+ * unique, and leaves every node pending. Does not enter the first phase — call
191
+ * {@link startEncounter} for that.
192
+ *
193
+ * @capability encounter-state create the serializable starting state of a hierarchical encounter sequence
194
+ */
195
+ export declare function createEncounterState<TData>(config: EncounterConfig<TData>): EncounterState<TData>;
196
+ /**
197
+ * Start a created encounter: enter the first root phase, descending to its first leaf, and
198
+ * return the initial enter/spawn events. A no-op (with no events) on an already-started or
199
+ * empty encounter. Mutates and returns `state`.
200
+ *
201
+ * @capability encounter-start enter the first phase of a hierarchical encounter and emit its opening spawn events
202
+ */
203
+ export declare function startEncounter<TData>(config: EncounterConfig<TData>, state: EncounterState<TData>, ctx?: EncounterContext): EncounterStep<TData>;
204
+ /**
205
+ * Advance an encounter by `dt` seconds against the caller `ctx`. Accumulates time, then
206
+ * repeatedly: evaluates the cursor node's completion predicate; on completion, either
207
+ * re-runs its subtree (`repeat`) or marks it complete and advances to the next sibling —
208
+ * bubbling up to parent groups whose children are exhausted — entering the next chain and
209
+ * emitting enter/spawn/complete events. Emits a final `done` event when the last phase
210
+ * completes. Bounded per call by node count; mutates and returns `state`.
211
+ *
212
+ * @capability encounter-advance step a hierarchical encounter, resolving predicate-gated completion, repeats, and nested advance with lifecycle events
213
+ */
214
+ export declare function updateEncounter<TData>(config: EncounterConfig<TData>, state: EncounterState<TData>, dt: number, ctx?: EncounterContext): EncounterStep<TData>;
215
+ /**
216
+ * Force the deepest active phase (or a named active phase) to complete now, regardless of
217
+ * its predicate — the escape hatch for external/scripted completion and failure/retry flows.
218
+ * Advances into the next phase and emits the same lifecycle events as a natural completion.
219
+ * Returns no events if the phase is not currently active. Mutates and returns `state`.
220
+ *
221
+ * @capability encounter-force-complete externally complete an active encounter phase to drive scripted or failure-retry transitions
222
+ */
223
+ export declare function forceCompletePhase<TData>(config: EncounterConfig<TData>, state: EncounterState<TData>, ctx?: EncounterContext, phaseId?: string): EncounterStep<TData>;
224
+ /**
225
+ * Insert a phase into the working tree at runtime — before/after a sibling, or as a child of
226
+ * a group — without disturbing already-completed or active nodes. The injected subtree
227
+ * becomes part of the serializable state (so a mid-encounter save preserves it) and is
228
+ * reached in normal order if it sits ahead of the cursor. Ids must stay tree-unique. Mutates
229
+ * and returns `state`.
230
+ *
231
+ * @capability encounter-inject-phase dynamically insert a phase or branch into a running encounter, e.g. a boss on the final wave
232
+ */
233
+ export declare function injectPhase<TData>(state: EncounterState<TData>, phase: EncounterPhase<TData>, at: PhaseInjectAt): EncounterState<TData>;
234
+ /**
235
+ * The deepest active phase id — the completion cursor a HUD reads to label the current
236
+ * wave/phase — or null before start and once done.
237
+ *
238
+ * @capability encounter-active-phase read the id of the phase an encounter is currently waiting on
239
+ */
240
+ export declare function activePhaseId<TData>(state: EncounterState<TData>): string | null;
241
+ /**
242
+ * The runtime status of a phase by id (pending/active/complete), or null if the id is
243
+ * unknown — for driving per-phase HUD ticks and objective checklists.
244
+ *
245
+ * @capability encounter-phase-status read whether a specific encounter phase is pending, active, or complete
246
+ */
247
+ export declare function phaseStatus<TData>(state: EncounterState<TData>, id: string): PhaseStatus | null;
248
+ /**
249
+ * Progress across the whole tree: how many phases have completed out of the total node
250
+ * count, plus whether the encounter has finished. Counts injected phases.
251
+ *
252
+ * @capability encounter-progress read completed-vs-total progress across a hierarchical encounter for HUD or objective display
253
+ */
254
+ export declare function encounterProgress<TData>(state: EncounterState<TData>): {
255
+ completed: number;
256
+ total: number;
257
+ done: boolean;
258
+ };