@jgengine/core 0.10.0 → 0.11.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 (607) hide show
  1. package/CHANGELOG.md +13 -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/spawnDirector.d.ts +7 -2
  21. package/dist/ai/spawnDirector.js +18 -15
  22. package/dist/ai/spawnPoint.d.ts +3 -1
  23. package/dist/ai/spawnPoint.js +3 -1
  24. package/dist/ai/targetAcquisition.d.ts +84 -0
  25. package/dist/ai/targetAcquisition.js +92 -0
  26. package/dist/anim/easing.d.ts +19 -0
  27. package/dist/anim/easing.js +19 -0
  28. package/dist/anim/oscillator.d.ts +12 -0
  29. package/dist/anim/oscillator.js +25 -0
  30. package/dist/area/areaEffectField.d.ts +127 -0
  31. package/dist/area/areaEffectField.js +175 -0
  32. package/dist/area/stackPolicy.d.ts +47 -0
  33. package/dist/area/stackPolicy.js +99 -0
  34. package/dist/authoring.d.ts +1 -0
  35. package/dist/authoring.js +1 -0
  36. package/dist/board/laneBoard.d.ts +13 -0
  37. package/dist/board/laneBoard.js +13 -0
  38. package/dist/board/timelineBoard.d.ts +10 -0
  39. package/dist/board/timelineBoard.js +10 -0
  40. package/dist/combat/abilityKit.d.ts +18 -0
  41. package/dist/combat/abilityKit.js +24 -9
  42. package/dist/combat/animationState.d.ts +5 -0
  43. package/dist/combat/animationState.js +5 -0
  44. package/dist/combat/breakMeters.d.ts +10 -0
  45. package/dist/combat/breakMeters.js +10 -0
  46. package/dist/combat/castRunner.d.ts +5 -0
  47. package/dist/combat/castRunner.js +5 -0
  48. package/dist/combat/comboPoints.d.ts +5 -0
  49. package/dist/combat/comboPoints.js +5 -0
  50. package/dist/combat/comboString.d.ts +5 -0
  51. package/dist/combat/comboString.js +5 -0
  52. package/dist/combat/damageInterceptors.d.ts +192 -0
  53. package/dist/combat/damageInterceptors.js +251 -0
  54. package/dist/combat/damageMatchup.d.ts +68 -0
  55. package/dist/combat/damageMatchup.js +42 -0
  56. package/dist/combat/damageResolution.d.ts +63 -0
  57. package/dist/combat/damageResolution.js +50 -0
  58. package/dist/combat/death.d.ts +7 -1
  59. package/dist/combat/death.js +5 -0
  60. package/dist/combat/deathReason.d.ts +14 -0
  61. package/dist/combat/deathReason.js +1 -0
  62. package/dist/combat/defensiveWindow.d.ts +5 -0
  63. package/dist/combat/defensiveWindow.js +5 -0
  64. package/dist/combat/dotField.d.ts +5 -1
  65. package/dist/combat/dotField.js +5 -1
  66. package/dist/combat/downed.d.ts +5 -0
  67. package/dist/combat/downed.js +5 -0
  68. package/dist/combat/effects.d.ts +5 -0
  69. package/dist/combat/effects.js +5 -0
  70. package/dist/combat/encounterSequence.d.ts +258 -0
  71. package/dist/combat/encounterSequence.js +426 -0
  72. package/dist/combat/hitReaction.d.ts +57 -1
  73. package/dist/combat/hitReaction.js +45 -5
  74. package/dist/combat/magazine.d.ts +54 -0
  75. package/dist/combat/magazine.js +96 -0
  76. package/dist/combat/projectiles.d.ts +5 -0
  77. package/dist/combat/projectiles.js +32 -14
  78. package/dist/combat/receivedDamage.d.ts +117 -0
  79. package/dist/combat/receivedDamage.js +92 -0
  80. package/dist/combat/regenShield.d.ts +5 -1
  81. package/dist/combat/regenShield.js +5 -1
  82. package/dist/combat/renderCues.d.ts +51 -0
  83. package/dist/combat/renderCues.js +44 -0
  84. package/dist/combat/resourcePool.d.ts +5 -0
  85. package/dist/combat/resourcePool.js +5 -0
  86. package/dist/combat/rewardAllocation.d.ts +121 -0
  87. package/dist/combat/rewardAllocation.js +251 -0
  88. package/dist/combat/shotOrigin.d.ts +18 -1
  89. package/dist/combat/shotOrigin.js +39 -0
  90. package/dist/combat/statusApplication.d.ts +96 -0
  91. package/dist/combat/statusApplication.js +81 -0
  92. package/dist/combat/telegraph.d.ts +11 -2
  93. package/dist/combat/telegraph.js +11 -2
  94. package/dist/combat/thresholdCrossings.d.ts +85 -0
  95. package/dist/combat/thresholdCrossings.js +116 -0
  96. package/dist/combat.d.ts +34 -0
  97. package/dist/combat.js +34 -0
  98. package/dist/commands/commandRegistry.d.ts +11 -0
  99. package/dist/commands/commandRegistry.js +9 -2
  100. package/dist/crafting/crop.d.ts +18 -0
  101. package/dist/crafting/crop.js +18 -0
  102. package/dist/crafting/production.d.ts +5 -0
  103. package/dist/crafting/production.js +5 -0
  104. package/dist/devtools/rewriteTunables.d.ts +17 -0
  105. package/dist/devtools/rewriteTunables.js +276 -0
  106. package/dist/devtools/saveEndpoint.d.ts +46 -0
  107. package/dist/devtools/saveEndpoint.js +48 -0
  108. package/dist/devtools/transformTunables.d.ts +3 -0
  109. package/dist/devtools/transformTunables.js +3 -0
  110. package/dist/devtools/tunableSchema.d.ts +31 -0
  111. package/dist/devtools/tunableSchema.js +31 -0
  112. package/dist/economy/currency.d.ts +12 -1
  113. package/dist/economy/currency.js +12 -1
  114. package/dist/economy/listingBook.d.ts +91 -0
  115. package/dist/economy/listingBook.js +144 -0
  116. package/dist/economy/resourceLedger.d.ts +222 -0
  117. package/dist/economy/resourceLedger.js +353 -0
  118. package/dist/economy/sharedWallet.d.ts +14 -0
  119. package/dist/economy/sharedWallet.js +14 -0
  120. package/dist/economy/techTree.d.ts +12 -0
  121. package/dist/economy/techTree.js +12 -0
  122. package/dist/economy/wallet.d.ts +26 -2
  123. package/dist/economy/wallet.js +35 -6
  124. package/dist/editor/commands.d.ts +190 -7
  125. package/dist/editor/commands.js +727 -55
  126. package/dist/editor/document.d.ts +159 -13
  127. package/dist/editor/document.js +750 -19
  128. package/dist/editor/grid.d.ts +229 -0
  129. package/dist/editor/grid.js +366 -0
  130. package/dist/editor/gridAdapters.d.ts +80 -0
  131. package/dist/editor/gridAdapters.js +134 -0
  132. package/dist/editor/index.d.ts +73 -6
  133. package/dist/editor/index.js +6 -2
  134. package/dist/editor/liveSync.d.ts +127 -0
  135. package/dist/editor/liveSync.js +249 -0
  136. package/dist/editor/runtimeInspector.d.ts +88 -0
  137. package/dist/editor/runtimeInspector.js +239 -0
  138. package/dist/editor/types.d.ts +107 -1
  139. package/dist/faction/reputation.d.ts +5 -0
  140. package/dist/faction/reputation.js +5 -0
  141. package/dist/format/distance.d.ts +17 -0
  142. package/dist/format/distance.js +18 -0
  143. package/dist/format/duration.d.ts +27 -0
  144. package/dist/format/duration.js +45 -0
  145. package/dist/format/speed.d.ts +17 -0
  146. package/dist/format/speed.js +25 -0
  147. package/dist/game/connectedPlayers.d.ts +6 -4
  148. package/dist/game/connectedPlayers.js +2 -2
  149. package/dist/game/cosmetics.d.ts +9 -0
  150. package/dist/game/cosmetics.js +16 -0
  151. package/dist/game/defineGame.d.ts +100 -2
  152. package/dist/game/defineGame.js +39 -2
  153. package/dist/game/defineSystem.d.ts +88 -0
  154. package/dist/game/defineSystem.js +45 -0
  155. package/dist/game/dialogue.d.ts +33 -0
  156. package/dist/game/dialogue.js +21 -0
  157. package/dist/game/events.d.ts +35 -13
  158. package/dist/game/events.js +5 -0
  159. package/dist/game/feed.d.ts +33 -0
  160. package/dist/game/feed.js +35 -2
  161. package/dist/game/gamePhase.d.ts +11 -0
  162. package/dist/game/gamePhase.js +16 -0
  163. package/dist/game/leaderboard.d.ts +5 -0
  164. package/dist/game/leaderboard.js +5 -0
  165. package/dist/game/loadout.d.ts +5 -0
  166. package/dist/game/loadout.js +5 -0
  167. package/dist/game/lootFilter.d.ts +2 -0
  168. package/dist/game/lootFilter.js +2 -0
  169. package/dist/game/lootPipeline.d.ts +164 -0
  170. package/dist/game/lootPipeline.js +216 -0
  171. package/dist/game/lootTable.d.ts +19 -2
  172. package/dist/game/lootTable.js +15 -5
  173. package/dist/game/objectives.d.ts +43 -0
  174. package/dist/game/objectives.js +36 -0
  175. package/dist/game/paramLayers.d.ts +148 -0
  176. package/dist/game/paramLayers.js +185 -0
  177. package/dist/game/ping.d.ts +5 -0
  178. package/dist/game/ping.js +5 -0
  179. package/dist/game/playableGame.d.ts +92 -7
  180. package/dist/game/quest.d.ts +8 -0
  181. package/dist/game/quest.js +29 -0
  182. package/dist/game/race.d.ts +141 -0
  183. package/dist/game/race.js +169 -0
  184. package/dist/game/recordBook.d.ts +3 -1
  185. package/dist/game/recordBook.js +4 -1
  186. package/dist/game/ruleSelection.d.ts +75 -0
  187. package/dist/game/ruleSelection.js +127 -0
  188. package/dist/game/runDraft.d.ts +5 -0
  189. package/dist/game/runDraft.js +5 -0
  190. package/dist/game/saveStore.d.ts +111 -0
  191. package/dist/game/saveStore.js +312 -0
  192. package/dist/game/snapshotHistory.d.ts +67 -0
  193. package/dist/game/snapshotHistory.js +95 -0
  194. package/dist/game/social.d.ts +38 -1
  195. package/dist/game/social.js +71 -0
  196. package/dist/game/spawnPoints.d.ts +5 -0
  197. package/dist/game/spawnPoints.js +5 -0
  198. package/dist/game/systemRuntime.d.ts +50 -0
  199. package/dist/game/systemRuntime.js +157 -0
  200. package/dist/game/systemSchedule.d.ts +72 -0
  201. package/dist/game/systemSchedule.js +242 -0
  202. package/dist/game/toasts.d.ts +43 -0
  203. package/dist/game/toasts.js +44 -0
  204. package/dist/game/trade.d.ts +10 -0
  205. package/dist/game/trade.js +10 -0
  206. package/dist/game/unlocks.d.ts +8 -0
  207. package/dist/game/unlocks.js +16 -0
  208. package/dist/game/vfxInstance.d.ts +138 -0
  209. package/dist/game/vfxInstance.js +96 -0
  210. package/dist/game/worldItem.d.ts +17 -4
  211. package/dist/game/worldItem.js +17 -4
  212. package/dist/gameplay.d.ts +91 -0
  213. package/dist/gameplay.js +91 -0
  214. package/dist/index.d.ts +5 -14
  215. package/dist/index.js +5 -14
  216. package/dist/input/actionBindings.d.ts +23 -6
  217. package/dist/input/actionBindings.js +23 -6
  218. package/dist/input/axisInput.d.ts +7 -2
  219. package/dist/input/axisInput.js +7 -2
  220. package/dist/input/controlGroups.d.ts +67 -0
  221. package/dist/input/controlGroups.js +41 -0
  222. package/dist/input/touchScheme.d.ts +82 -6
  223. package/dist/input/touchScheme.js +123 -10
  224. package/dist/interaction/lockpick.d.ts +61 -0
  225. package/dist/interaction/lockpick.js +168 -0
  226. package/dist/interaction/proximityPrompt.d.ts +2 -0
  227. package/dist/interaction/proximityPrompt.js +2 -0
  228. package/dist/interaction/qte.d.ts +5 -0
  229. package/dist/interaction/qte.js +5 -0
  230. package/dist/interaction/skillCheck.d.ts +5 -0
  231. package/dist/interaction/skillCheck.js +5 -0
  232. package/dist/inventory/inventoryModel.d.ts +12 -0
  233. package/dist/inventory/inventoryModel.js +12 -0
  234. package/dist/inventory/shapedGrid.d.ts +16 -0
  235. package/dist/inventory/shapedGrid.js +16 -0
  236. package/dist/inventory/slotModel.d.ts +10 -0
  237. package/dist/inventory/slotModel.js +10 -0
  238. package/dist/item/durability.d.ts +5 -0
  239. package/dist/item/durability.js +5 -0
  240. package/dist/item/itemIdentity.d.ts +171 -0
  241. package/dist/item/itemIdentity.js +138 -0
  242. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  243. package/dist/item/itemInstanceRegistry.js +34 -0
  244. package/dist/item/itemgen.d.ts +163 -0
  245. package/dist/item/itemgen.js +151 -0
  246. package/dist/item/modularItem.d.ts +5 -0
  247. package/dist/item/modularItem.js +5 -0
  248. package/dist/item/use.d.ts +5 -0
  249. package/dist/item/use.js +5 -0
  250. package/dist/item/useBehavior.d.ts +142 -0
  251. package/dist/item/useBehavior.js +105 -0
  252. package/dist/item/weapon.d.ts +5 -0
  253. package/dist/item/weapon.js +5 -0
  254. package/dist/math/scalar.d.ts +25 -0
  255. package/dist/math/scalar.js +47 -0
  256. package/dist/meta/changelog.d.ts +4 -1
  257. package/dist/meta/changelog.js +16 -2
  258. package/dist/movement/avoidance.d.ts +45 -0
  259. package/dist/movement/avoidance.js +123 -0
  260. package/dist/movement/cameraRig.d.ts +8 -0
  261. package/dist/movement/cameraRig.js +8 -0
  262. package/dist/movement/dash.d.ts +11 -0
  263. package/dist/movement/dash.js +11 -0
  264. package/dist/movement/formation.d.ts +135 -0
  265. package/dist/movement/formation.js +194 -0
  266. package/dist/movement/glideModel.d.ts +5 -0
  267. package/dist/movement/glideModel.js +5 -0
  268. package/dist/movement/grappleSwing.d.ts +5 -0
  269. package/dist/movement/grappleSwing.js +5 -0
  270. package/dist/movement/leaderTrail.d.ts +5 -0
  271. package/dist/movement/leaderTrail.js +5 -0
  272. package/dist/movement/movementModel.d.ts +35 -8
  273. package/dist/movement/movementModel.js +42 -14
  274. package/dist/movement/playerMovement.js +65 -10
  275. package/dist/movement/poseState.d.ts +13 -0
  276. package/dist/movement/poseState.js +16 -0
  277. package/dist/movement/steering.d.ts +8 -0
  278. package/dist/movement/steering.js +18 -0
  279. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  280. package/dist/multiplayer/combatSnapshot.js +3 -0
  281. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  282. package/dist/multiplayer/lagCompensation.js +5 -0
  283. package/dist/multiplayer/presenceModel.d.ts +9 -1
  284. package/dist/multiplayer/presenceModel.js +9 -1
  285. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  286. package/dist/multiplayer/simultaneousCommit.js +3 -0
  287. package/dist/multiplayer.d.ts +11 -0
  288. package/dist/multiplayer.js +11 -0
  289. package/dist/nav/pathFollow.d.ts +57 -0
  290. package/dist/nav/pathFollow.js +109 -0
  291. package/dist/orders/orderKinds.d.ts +156 -0
  292. package/dist/orders/orderKinds.js +197 -0
  293. package/dist/orders/orderQueue.d.ts +208 -0
  294. package/dist/orders/orderQueue.js +211 -0
  295. package/dist/physics/drivableVehicle.d.ts +29 -0
  296. package/dist/physics/drivableVehicle.js +16 -0
  297. package/dist/physics/kinematicVehicle.d.ts +21 -1
  298. package/dist/physics/kinematicVehicle.js +23 -8
  299. package/dist/physics/physicsWorld.d.ts +24 -12
  300. package/dist/physics/physicsWorld.js +11 -5
  301. package/dist/physics/radialImpulse.d.ts +25 -0
  302. package/dist/physics/radialImpulse.js +27 -0
  303. package/dist/procedural.d.ts +3 -0
  304. package/dist/procedural.js +3 -0
  305. package/dist/progression/statGraph.d.ts +116 -0
  306. package/dist/progression/statGraph.js +318 -0
  307. package/dist/puzzle/cellGrid.d.ts +9 -0
  308. package/dist/puzzle/cellGrid.js +9 -0
  309. package/dist/puzzle/fallingPiece.d.ts +9 -0
  310. package/dist/puzzle/fallingPiece.js +9 -0
  311. package/dist/puzzle/nonogram.d.ts +39 -0
  312. package/dist/puzzle/nonogram.js +136 -0
  313. package/dist/random/nameGen.d.ts +5 -0
  314. package/dist/random/nameGen.js +5 -0
  315. package/dist/random/pick.d.ts +8 -0
  316. package/dist/random/pick.js +31 -0
  317. package/dist/random/rng.d.ts +22 -0
  318. package/dist/random/rng.js +28 -8
  319. package/dist/random/seedLink.d.ts +4 -0
  320. package/dist/random/seedLink.js +4 -0
  321. package/dist/relation/keyedValues.d.ts +54 -0
  322. package/dist/relation/keyedValues.js +115 -0
  323. package/dist/relation/thresholds.d.ts +62 -0
  324. package/dist/relation/thresholds.js +62 -0
  325. package/dist/render/color.d.ts +12 -0
  326. package/dist/render/color.js +26 -0
  327. package/dist/render/lookPreset.d.ts +41 -0
  328. package/dist/render/lookPreset.js +29 -0
  329. package/dist/render/postProcessing.d.ts +20 -0
  330. package/dist/render/postProcessing.js +21 -1
  331. package/dist/rules/predicate.d.ts +53 -0
  332. package/dist/rules/predicate.js +64 -0
  333. package/dist/rules/ruleEffects.d.ts +38 -0
  334. package/dist/rules/ruleEffects.js +37 -0
  335. package/dist/rules/triggeredRules.d.ts +160 -0
  336. package/dist/rules/triggeredRules.js +241 -0
  337. package/dist/runtime/adapter.d.ts +42 -3
  338. package/dist/runtime/adapter.js +44 -1
  339. package/dist/runtime/cameraDirector.d.ts +1 -0
  340. package/dist/runtime/cameraDirector.js +1 -0
  341. package/dist/runtime/commandRunner.d.ts +1 -0
  342. package/dist/runtime/commandRunner.js +1 -0
  343. package/dist/runtime/context/combatFx.d.ts +23 -0
  344. package/dist/runtime/context/combatFx.js +161 -0
  345. package/dist/runtime/context/registries.d.ts +13 -0
  346. package/dist/runtime/context/registries.js +84 -0
  347. package/dist/runtime/context/worldItems.d.ts +21 -0
  348. package/dist/runtime/context/worldItems.js +37 -0
  349. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  350. package/dist/runtime/descriptors/baseline.js +134 -0
  351. package/dist/runtime/descriptors/features.d.ts +74 -0
  352. package/dist/runtime/descriptors/features.js +281 -0
  353. package/dist/runtime/gameContext.d.ts +114 -13
  354. package/dist/runtime/gameContext.js +303 -395
  355. package/dist/runtime/gameRuntime.d.ts +1 -0
  356. package/dist/runtime/gameRuntime.js +1 -0
  357. package/dist/runtime/headlessRunner.d.ts +60 -0
  358. package/dist/runtime/headlessRunner.js +44 -0
  359. package/dist/runtime/hostPersistence.d.ts +12 -0
  360. package/dist/runtime/hostPersistence.js +12 -0
  361. package/dist/runtime/hostedGameRunner.d.ts +8 -3
  362. package/dist/runtime/hostedGameRunner.js +26 -3
  363. package/dist/runtime/hostedWorldSession.d.ts +12 -4
  364. package/dist/runtime/hostedWorldSession.js +11 -4
  365. package/dist/runtime/inputSnapshot.d.ts +8 -3
  366. package/dist/runtime/inputSnapshot.js +6 -2
  367. package/dist/runtime/motionIntents.d.ts +11 -2
  368. package/dist/runtime/motionIntents.js +16 -2
  369. package/dist/runtime/perContext.d.ts +15 -0
  370. package/dist/runtime/perContext.js +21 -0
  371. package/dist/runtime/runtimeSave.d.ts +79 -0
  372. package/dist/runtime/runtimeSave.js +105 -0
  373. package/dist/runtime/save.d.ts +4 -0
  374. package/dist/runtime/save.js +4 -0
  375. package/dist/runtime/snapshot.d.ts +7 -0
  376. package/dist/runtime/snapshot.js +7 -0
  377. package/dist/runtime/visibility.d.ts +2 -1
  378. package/dist/runtime/visibility.js +2 -1
  379. package/dist/runtime/worldChannel.d.ts +7 -3
  380. package/dist/runtime/worldChannel.js +51 -6
  381. package/dist/runtime/worldMirror.d.ts +14 -2
  382. package/dist/runtime/worldMirror.js +15 -2
  383. package/dist/runtime/worldProjection.d.ts +47 -0
  384. package/dist/runtime/worldProjection.js +52 -0
  385. package/dist/runtime/worldReplication.d.ts +30 -7
  386. package/dist/runtime/worldReplication.js +41 -9
  387. package/dist/runtime/worldSnapshot.d.ts +30 -3
  388. package/dist/runtime/worldSnapshot.js +20 -5
  389. package/dist/scene/assetCatalog.d.ts +21 -0
  390. package/dist/scene/assetCatalog.js +4 -0
  391. package/dist/scene/assetDiagnostics.d.ts +69 -0
  392. package/dist/scene/assetDiagnostics.js +110 -0
  393. package/dist/scene/assetGenerator.d.ts +65 -0
  394. package/dist/scene/assetGenerator.js +64 -0
  395. package/dist/scene/assetSpace.d.ts +137 -0
  396. package/dist/scene/assetSpace.js +259 -0
  397. package/dist/scene/authoredTriggers.d.ts +169 -0
  398. package/dist/scene/authoredTriggers.js +340 -0
  399. package/dist/scene/behaviorRuntime.d.ts +75 -0
  400. package/dist/scene/behaviorRuntime.js +217 -0
  401. package/dist/scene/behaviors.d.ts +14 -2
  402. package/dist/scene/behaviors.js +7 -2
  403. package/dist/scene/bodyBind.d.ts +60 -0
  404. package/dist/scene/bodyBind.js +51 -0
  405. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  406. package/dist/scene/builtinSceneKinds.js +62 -0
  407. package/dist/scene/colliders.d.ts +13 -1
  408. package/dist/scene/colliders.js +37 -1
  409. package/dist/scene/entityStats.d.ts +11 -2
  410. package/dist/scene/entityStats.js +11 -2
  411. package/dist/scene/entityStore.d.ts +12 -1
  412. package/dist/scene/entityStore.js +15 -0
  413. package/dist/scene/facing.d.ts +18 -0
  414. package/dist/scene/facing.js +26 -0
  415. package/dist/scene/modelSockets.d.ts +33 -0
  416. package/dist/scene/modelSockets.js +29 -0
  417. package/dist/scene/objectQuery.d.ts +2 -0
  418. package/dist/scene/objectQuery.js +2 -0
  419. package/dist/scene/objectStore.d.ts +4 -0
  420. package/dist/scene/objectStore.js +6 -0
  421. package/dist/scene/possession.d.ts +8 -0
  422. package/dist/scene/possession.js +14 -0
  423. package/dist/scene/roster.d.ts +3 -0
  424. package/dist/scene/roster.js +12 -0
  425. package/dist/scene/sceneKinds.d.ts +240 -0
  426. package/dist/scene/sceneKinds.js +214 -0
  427. package/dist/scene/sceneOwnership.d.ts +169 -0
  428. package/dist/scene/sceneOwnership.js +179 -0
  429. package/dist/scene/selectionBookmarks.d.ts +93 -0
  430. package/dist/scene/selectionBookmarks.js +122 -0
  431. package/dist/scene/vehicleSeat.d.ts +68 -0
  432. package/dist/scene/vehicleSeat.js +59 -0
  433. package/dist/sensor/concealment.d.ts +3 -0
  434. package/dist/sensor/concealment.js +3 -0
  435. package/dist/sensor/freezeMonitor.d.ts +1 -0
  436. package/dist/sensor/freezeMonitor.js +1 -0
  437. package/dist/sensor/frustumSensor.d.ts +7 -3
  438. package/dist/sensor/frustumSensor.js +7 -3
  439. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  440. package/dist/sensor/hiddenStateProbe.js +5 -2
  441. package/dist/sensor/recordingBuffer.d.ts +2 -1
  442. package/dist/sensor/recordingBuffer.js +2 -1
  443. package/dist/sensor/replayLoop.d.ts +6 -2
  444. package/dist/sensor/replayLoop.js +6 -2
  445. package/dist/sensor/revealQuery.d.ts +2 -1
  446. package/dist/sensor/revealQuery.js +2 -1
  447. package/dist/sensor/visionCone.d.ts +10 -3
  448. package/dist/sensor/visionCone.js +10 -3
  449. package/dist/session/contestedChannel.d.ts +1 -0
  450. package/dist/session/contestedChannel.js +1 -0
  451. package/dist/session/extraction.d.ts +1 -0
  452. package/dist/session/extraction.js +1 -0
  453. package/dist/session/roles.d.ts +6 -0
  454. package/dist/session/roles.js +6 -0
  455. package/dist/session/roundState.d.ts +8 -0
  456. package/dist/session/roundState.js +2 -0
  457. package/dist/settings/settingsModel.d.ts +1 -0
  458. package/dist/settings/settingsModel.js +1 -0
  459. package/dist/stats/accumulatorMeter.d.ts +6 -0
  460. package/dist/stats/accumulatorMeter.js +6 -0
  461. package/dist/stats/eventMeter.d.ts +5 -0
  462. package/dist/stats/eventMeter.js +5 -0
  463. package/dist/stats/rollCheck.d.ts +5 -0
  464. package/dist/stats/rollCheck.js +5 -0
  465. package/dist/stats/statModifiers.d.ts +5 -0
  466. package/dist/stats/statModifiers.js +5 -0
  467. package/dist/store/defineKeyedStore.d.ts +38 -0
  468. package/dist/store/defineKeyedStore.js +42 -0
  469. package/dist/store/defineStore.d.ts +33 -0
  470. package/dist/store/defineStore.js +35 -0
  471. package/dist/store/observableKeyedStore.d.ts +5 -0
  472. package/dist/store/observableKeyedStore.js +34 -2
  473. package/dist/survival/decayMeter.d.ts +55 -0
  474. package/dist/survival/decayMeter.js +130 -55
  475. package/dist/survival/moodle.d.ts +2 -0
  476. package/dist/survival/regionHealth.d.ts +6 -0
  477. package/dist/survival/regionHealth.js +5 -0
  478. package/dist/tactics/fallingGrid.d.ts +4 -2
  479. package/dist/tactics/fallingGrid.js +4 -2
  480. package/dist/tactics/predictiveQuery.d.ts +3 -0
  481. package/dist/tactics/predictiveQuery.js +3 -0
  482. package/dist/tactics/snapshot.d.ts +2 -0
  483. package/dist/tactics/snapshot.js +2 -0
  484. package/dist/tactics/surface.d.ts +1 -0
  485. package/dist/tactics/surface.js +1 -0
  486. package/dist/tactics/tacticalGrid.d.ts +1 -0
  487. package/dist/tactics/tacticalGrid.js +1 -0
  488. package/dist/time/beatClock.d.ts +14 -4
  489. package/dist/time/beatClock.js +14 -4
  490. package/dist/time/calendarClock.d.ts +3 -0
  491. package/dist/time/calendarClock.js +3 -0
  492. package/dist/time/idleProgress.d.ts +4 -0
  493. package/dist/time/idleProgress.js +4 -0
  494. package/dist/time/simClock.d.ts +2 -0
  495. package/dist/time/simClock.js +20 -5
  496. package/dist/ui/actionModel.d.ts +110 -0
  497. package/dist/ui/actionModel.js +159 -0
  498. package/dist/ui/gameLayout.d.ts +30 -11
  499. package/dist/ui/gameLayout.js +30 -11
  500. package/dist/ui/hudDocument.d.ts +114 -0
  501. package/dist/ui/hudDocument.js +220 -0
  502. package/dist/ui/hudLayout.d.ts +33 -1
  503. package/dist/ui/hudLayout.js +204 -17
  504. package/dist/ui/selectionModel.d.ts +92 -0
  505. package/dist/ui/selectionModel.js +88 -0
  506. package/dist/ui/tooltipModel.d.ts +63 -0
  507. package/dist/ui/tooltipModel.js +82 -0
  508. package/dist/ui.d.ts +15 -0
  509. package/dist/ui.js +15 -0
  510. package/dist/visibility/bounds.d.ts +8 -1
  511. package/dist/visibility/bounds.js +8 -1
  512. package/dist/visibility/frustum.d.ts +12 -3
  513. package/dist/visibility/frustum.js +12 -3
  514. package/dist/work/jobQueue.d.ts +201 -0
  515. package/dist/work/jobQueue.js +253 -0
  516. package/dist/work/unitTraining.d.ts +58 -0
  517. package/dist/work/unitTraining.js +52 -0
  518. package/dist/world/authoredObjects.d.ts +58 -0
  519. package/dist/world/authoredObjects.js +69 -0
  520. package/dist/world/buildingGenerator.d.ts +18 -0
  521. package/dist/world/buildingGenerator.js +62 -0
  522. package/dist/world/buildings.d.ts +5 -0
  523. package/dist/world/buildings.js +5 -0
  524. package/dist/world/catenary.d.ts +22 -0
  525. package/dist/world/catenary.js +69 -0
  526. package/dist/world/features.d.ts +115 -7
  527. package/dist/world/features.js +56 -5
  528. package/dist/world/footprintGrid.d.ts +59 -0
  529. package/dist/world/footprintGrid.js +141 -0
  530. package/dist/world/geometry.d.ts +64 -0
  531. package/dist/world/geometry.js +94 -0
  532. package/dist/world/grassKind.d.ts +51 -0
  533. package/dist/world/grassKind.js +101 -0
  534. package/dist/world/pathInstances.d.ts +27 -0
  535. package/dist/world/pathInstances.js +27 -0
  536. package/dist/world/pathTerrain.d.ts +80 -0
  537. package/dist/world/pathTerrain.js +142 -0
  538. package/dist/world/placeAsset.d.ts +81 -0
  539. package/dist/world/placeAsset.js +77 -0
  540. package/dist/world/placement.d.ts +4 -0
  541. package/dist/world/placement.js +4 -0
  542. package/dist/world/placementController.d.ts +6 -0
  543. package/dist/world/placementController.js +6 -0
  544. package/dist/world/polyline.d.ts +34 -0
  545. package/dist/world/polyline.js +81 -0
  546. package/dist/world/roads.d.ts +8 -0
  547. package/dist/world/roads.js +38 -0
  548. package/dist/world/scatterRegion.d.ts +164 -0
  549. package/dist/world/scatterRegion.js +409 -0
  550. package/dist/world/sceneShapes.d.ts +43 -0
  551. package/dist/world/sceneShapes.js +1 -0
  552. package/dist/world/segment.d.ts +27 -0
  553. package/dist/world/segment.js +43 -0
  554. package/dist/world/soilKind.d.ts +48 -0
  555. package/dist/world/soilKind.js +92 -0
  556. package/dist/world/spatialSample.d.ts +241 -0
  557. package/dist/world/spatialSample.js +465 -0
  558. package/dist/world/terraform.d.ts +213 -1
  559. package/dist/world/terraform.js +655 -20
  560. package/dist/world/terrain.d.ts +119 -20
  561. package/dist/world/terrain.js +247 -41
  562. package/dist/world/terrainGuides.d.ts +182 -0
  563. package/dist/world/terrainGuides.js +343 -0
  564. package/dist/world/vec2.d.ts +81 -0
  565. package/dist/world/vec2.js +128 -0
  566. package/dist/world/vec3.d.ts +49 -0
  567. package/dist/world/vec3.js +76 -0
  568. package/dist/world/vegetation.d.ts +71 -0
  569. package/dist/world/vegetation.js +151 -0
  570. package/dist/world/visibilityField.d.ts +154 -0
  571. package/dist/world/visibilityField.js +271 -0
  572. package/dist/world/volumetricClouds.d.ts +52 -0
  573. package/dist/world/volumetricClouds.js +43 -0
  574. package/dist/world/walls.d.ts +9 -0
  575. package/dist/world/walls.js +9 -0
  576. package/dist/world/waterKind.d.ts +55 -0
  577. package/dist/world/waterKind.js +99 -0
  578. package/dist/world.d.ts +132 -0
  579. package/dist/world.js +132 -0
  580. package/package.json +32 -8
  581. package/skills/jgengine/SKILL.md +51 -0
  582. package/skills/jgengine/api.md +434 -0
  583. package/skills/jgengine/capabilities.md +29 -0
  584. package/skills/jgengine/reference-cartridge.md +72 -0
  585. package/skills/jgengine-combat/SKILL.md +34 -0
  586. package/skills/jgengine-combat/api.md +549 -0
  587. package/skills/jgengine-combat/capabilities.md +169 -0
  588. package/skills/jgengine-combat/reference.md +98 -0
  589. package/skills/jgengine-gameplay/SKILL.md +39 -0
  590. package/skills/jgengine-gameplay/api.md +1794 -0
  591. package/skills/jgengine-gameplay/capabilities.md +378 -0
  592. package/skills/jgengine-gameplay/reference-systems.md +60 -0
  593. package/skills/jgengine-world/SKILL.md +38 -0
  594. package/skills/jgengine-world/api.md +2652 -0
  595. package/skills/jgengine-world/capabilities.md +370 -0
  596. package/skills/jgengine-world/reference.md +222 -0
  597. package/dist/cartridge/runtime.d.ts +0 -15
  598. package/dist/cartridge/runtime.js +0 -556
  599. package/dist/cartridge/spec.d.ts +0 -188
  600. package/dist/cartridge/spec.js +0 -19
  601. package/dist/cartridge/validate.d.ts +0 -2
  602. package/dist/cartridge/validate.js +0 -78
  603. package/dist/store/engineStore.d.ts +0 -22
  604. package/dist/store/engineStore.js +0 -50
  605. package/dist/store/features.d.ts +0 -10
  606. package/dist/store/features.js +0 -23
  607. package/llms.txt +0 -5389
@@ -20,6 +20,26 @@ export interface KinematicVehicleOptions {
20
20
  surfaceFriction?: (x: number, z: number) => number;
21
21
  /** Extra velocity damping per second by world position (rough ground drag); default `0`. */
22
22
  dragAt?: (x: number, z: number) => number;
23
+ /**
24
+ * Veto or clamp a planar move before it commits — walls, closed gates, arena bounds. Given the
25
+ * attempted `from`→`to` on the XZ plane, return the destination actually allowed; velocity is
26
+ * rederived from the permitted displacement, so motion blocked on an axis stops on that axis
27
+ * instead of grinding into the obstacle. Default: no clamp (the move always commits).
28
+ */
29
+ clampMove?: (from: readonly [number, number], to: readonly [number, number]) => readonly [number, number];
30
+ }
31
+ /**
32
+ * Per-tick multipliers layered over the base tuning — the transient overrides games apply for one
33
+ * frame without rebuilding the vehicle: nitro/boost, a braced-plow bonus, or entering a speed zone or
34
+ * slow field. Each defaults to `1` (no change), so passing nothing leaves the base tuning untouched.
35
+ */
36
+ export interface KinematicVehicleModifiers {
37
+ /** Scale top speed this tick (sustained boost, speed pads). */
38
+ topSpeedScale?: number;
39
+ /** Scale engine acceleration this tick (boost, brace bonus). */
40
+ accelScale?: number;
41
+ /** Scale turn rate this tick (brace penalty, heavy-load steering). */
42
+ turnRateScale?: number;
23
43
  }
24
44
  export interface KinematicVehicleStep {
25
45
  position: readonly [number, number, number];
@@ -39,7 +59,7 @@ export interface KinematicVehicleStep {
39
59
  * (drift meters, boost, off-track rules) via `surfaceFriction`/`dragAt` hooks and the returned slip.
40
60
  */
41
61
  export interface KinematicVehicle {
42
- tick(dt: number, axis: AxisInput): KinematicVehicleStep;
62
+ tick(dt: number, axis: AxisInput, modifiers?: KinematicVehicleModifiers): KinematicVehicleStep;
43
63
  pose(): {
44
64
  position: readonly [number, number, number];
45
65
  heading: number;
@@ -5,6 +5,7 @@ export function createKinematicVehicle(tuning, options = {}) {
5
5
  const rollingResistance = tuning.rollingResistance ?? 0;
6
6
  const surfaceFriction = options.surfaceFriction ?? (() => 1);
7
7
  const dragAt = options.dragAt ?? (() => 0);
8
+ const clampMove = options.clampMove;
8
9
  let x = options.position?.[0] ?? 0;
9
10
  let y = options.position?.[1] ?? 0;
10
11
  let z = options.position?.[2] ?? 0;
@@ -15,21 +16,24 @@ export function createKinematicVehicle(tuning, options = {}) {
15
16
  return [Math.sin(heading), Math.cos(heading)];
16
17
  }
17
18
  return {
18
- tick(dt, axis) {
19
+ tick(dt, axis, modifiers) {
20
+ const topSpeed = tuning.topSpeed * (modifiers?.topSpeedScale ?? 1);
21
+ const engineAccel = tuning.engineAccel * (modifiers?.accelScale ?? 1);
22
+ const turnRate = tuning.turnRate * (modifiers?.turnRateScale ?? 1);
19
23
  const [fx0, fz0] = forward();
20
24
  const speed = vx * fx0 + vz * fz0;
21
25
  const steerScale = Math.min(1, Math.abs(speed) / tuning.turnSpeedRef);
22
26
  const direction = speed >= 0 ? 1 : -1;
23
- heading = steerYaw(heading, axis.steer * steerScale * direction, tuning.turnRate, dt);
27
+ heading = steerYaw(heading, axis.steer * steerScale * direction, turnRate, dt);
24
28
  const [fx, fz] = forward();
25
29
  let accel = 0;
26
- if (axis.throttle > 0 && speed < tuning.topSpeed)
27
- accel += axis.throttle * tuning.engineAccel;
30
+ if (axis.throttle > 0 && speed < topSpeed)
31
+ accel += axis.throttle * engineAccel;
28
32
  if (axis.brake > 0) {
29
33
  if (speed > 0.2)
30
34
  accel -= axis.brake * tuning.brakeAccel;
31
35
  else if (speed > -tuning.reverseSpeed)
32
- accel -= axis.brake * tuning.engineAccel;
36
+ accel -= axis.brake * engineAccel;
33
37
  }
34
38
  vx += fx * accel * dt;
35
39
  vz += fz * accel * dt;
@@ -52,13 +56,24 @@ export function createKinematicVehicle(tuning, options = {}) {
52
56
  vx *= dragDamp;
53
57
  vz *= dragDamp;
54
58
  }
55
- x += vx * dt;
56
- z += vz * dt;
59
+ const toX = x + vx * dt;
60
+ const toZ = z + vz * dt;
61
+ if (clampMove !== undefined && dt > 0) {
62
+ const allowed = clampMove([x, z], [toX, toZ]);
63
+ vx = (allowed[0] - x) / dt;
64
+ vz = (allowed[1] - z) / dt;
65
+ x = allowed[0];
66
+ z = allowed[1];
67
+ }
68
+ else {
69
+ x = toX;
70
+ z = toZ;
71
+ }
57
72
  return {
58
73
  position: [x, y, z],
59
74
  heading,
60
75
  forwardSpeed: vx * fx + vz * fz,
61
- lateralSpeed: keptLateral * dragDamp,
76
+ lateralSpeed: -vx * fz + vz * fx,
62
77
  slip,
63
78
  surface,
64
79
  };
@@ -2,6 +2,12 @@ export interface PhysicsBounds {
2
2
  min: readonly [number, number, number];
3
3
  max: readonly [number, number, number];
4
4
  }
5
+ /**
6
+ * Simulation fidelity intent: `low` (cheap — many bodies, loose stacks, forgiving sleep), `standard`
7
+ * (default), `high` (tight stacks, accurate joints, worth the extra solver work). Sets the solver
8
+ * knobs below to a matched preset; an individual knob left explicit always wins over the preset.
9
+ */
10
+ export type PhysicsPrecision = "low" | "standard" | "high";
5
11
  export interface PhysicsWorldConfig {
6
12
  /** Maximum bodies the SoA buffers can hold. Fixed at construction; no reallocation later. */
7
13
  capacity: number;
@@ -9,8 +15,8 @@ export interface PhysicsWorldConfig {
9
15
  bounds: PhysicsBounds;
10
16
  /** Downward acceleration applied to awake bodies each substep. Default -20. */
11
17
  gravity?: number;
12
- /** Broadphase cell edge; tune to ≈ small-body diameter. Default 1. */
13
- cellSize?: number;
18
+ /** Simulation fidelity intent. Default "standard" — see {@link PhysicsPrecision}. */
19
+ precision?: PhysicsPrecision;
14
20
  /** Fixed substep length in seconds. Default 1/60. */
15
21
  fixedDt?: number;
16
22
  /** Cap on substeps per `step()` — bounds catch-up work, drops the rest. Default 4. */
@@ -23,21 +29,27 @@ export interface PhysicsWorldConfig {
23
29
  friction?: number;
24
30
  /** Per-second linear velocity damping (physical energy bleed so piles settle and sleep). Default 0.2. */
25
31
  linearDamping?: number;
26
- /** Sequential-impulse velocity iterations per substep (higher = more stable stacks). Default 4. */
32
+ /** Speed at or below which a body counts as still. Default 0.08. */
33
+ sleepLinearVelocity?: number;
34
+ /** Maximum simultaneous joints the constraint buffers can hold. Default 256. */
35
+ jointCapacity?: number;
36
+ /**
37
+ * @deprecated Advanced escape hatch — tune only when profiling shows the broadphase grid is the
38
+ * bottleneck; most games never set this. Broadphase cell edge; ideally ≈ small-body diameter.
39
+ * Default 1.
40
+ */
41
+ cellSize?: number;
42
+ /** @deprecated Advanced escape hatch — prefer `precision`. Sequential-impulse velocity iterations per substep (higher = more stable stacks). */
27
43
  solverIterations?: number;
28
- /** Baumgarte positional-correction fraction per substep, 0..1. Default 0.2. */
44
+ /** @deprecated Advanced escape hatch — prefer `precision`. Baumgarte positional-correction fraction per substep, 0..1. */
29
45
  correctionFactor?: number;
30
- /** Penetration tolerated before correction kicks in. Default 0.005. */
46
+ /** @deprecated Advanced escape hatch — prefer `precision`. Penetration tolerated before correction kicks in. Default 0.005. */
31
47
  slop?: number;
32
- /** Speed at or below which a body counts as still. Default 0.08. */
33
- sleepLinearVelocity?: number;
34
- /** Consecutive still substeps before a body sleeps. Default 30. */
48
+ /** @deprecated Advanced escape hatch — prefer `precision`. Consecutive still substeps before a body sleeps. */
35
49
  sleepThresholdSteps?: number;
36
- /** Approach speed a contact must exceed to wake a sleeping body (resting contacts don't). Default 0.5. */
50
+ /** @deprecated Advanced escape hatch — prefer `precision`. Approach speed a contact must exceed to wake a sleeping body (resting contacts don't). */
37
51
  wakeThreshold?: number;
38
- /** Maximum simultaneous joints the constraint buffers can hold. Default 256. */
39
- jointCapacity?: number;
40
- /** Baumgarte fraction applied to hard-joint positional error per iteration, 0..1. Default 0.5. */
52
+ /** @deprecated Advanced escape hatch — prefer `precision`. Baumgarte fraction applied to hard-joint positional error per iteration, 0..1. */
41
53
  jointCorrection?: number;
42
54
  }
43
55
  export interface PhysicsStats {
@@ -1,3 +1,8 @@
1
+ const PHYSICS_PRECISION_PRESETS = {
2
+ low: { solverIterations: 2, correctionFactor: 0.15, sleepThresholdSteps: 15, wakeThreshold: 0.75, jointCorrection: 0.35 },
3
+ standard: { solverIterations: 4, correctionFactor: 0.2, sleepThresholdSteps: 30, wakeThreshold: 0.5, jointCorrection: 0.5 },
4
+ high: { solverIterations: 8, correctionFactor: 0.3, sleepThresholdSteps: 45, wakeThreshold: 0.35, jointCorrection: 0.65 },
5
+ };
1
6
  export const SHAPE_BOX = 0;
2
7
  export const SHAPE_SPHERE = 1;
3
8
  export const JOINT_FIXED = 0;
@@ -119,6 +124,7 @@ export class PhysicsWorld {
119
124
  stepMs: 0,
120
125
  };
121
126
  constructor(config) {
127
+ const preset = PHYSICS_PRECISION_PRESETS[config.precision ?? "standard"];
122
128
  this.capacity = config.capacity;
123
129
  this.bounds = { min: config.bounds.min, max: config.bounds.max };
124
130
  this.gravity = config.gravity ?? -20;
@@ -129,16 +135,16 @@ export class PhysicsWorld {
129
135
  this.restitutionThreshold = config.restitutionThreshold ?? 1;
130
136
  this.friction = config.friction ?? 0.4;
131
137
  this.linearDamping = config.linearDamping ?? 0.2;
132
- this.solverIterations = Math.max(1, config.solverIterations ?? 4);
133
- this.correctionFactor = config.correctionFactor ?? 0.2;
138
+ this.solverIterations = Math.max(1, config.solverIterations ?? preset.solverIterations);
139
+ this.correctionFactor = config.correctionFactor ?? preset.correctionFactor;
134
140
  this.slop = config.slop ?? 0.005;
135
141
  const sleepV = config.sleepLinearVelocity ?? 0.08;
136
142
  const sleepMoveEps = sleepV * this.fixedDt;
137
143
  this.sleepMove2 = sleepMoveEps * sleepMoveEps;
138
- this.sleepSteps = config.sleepThresholdSteps ?? 30;
139
- this.wakeThreshold = config.wakeThreshold ?? 0.5;
144
+ this.sleepSteps = config.sleepThresholdSteps ?? preset.sleepThresholdSteps;
145
+ this.wakeThreshold = config.wakeThreshold ?? preset.wakeThreshold;
140
146
  this.jointCapacity = Math.max(0, config.jointCapacity ?? 256);
141
- this.jointCorrection = config.jointCorrection ?? 0.5;
147
+ this.jointCorrection = config.jointCorrection ?? preset.jointCorrection;
142
148
  const cap = config.capacity;
143
149
  this.posX = new Float32Array(cap);
144
150
  this.posY = new Float32Array(cap);
@@ -0,0 +1,25 @@
1
+ /** How a radial impulse fades from the blast center to its edge. */
2
+ export type RadialFalloff = "linear" | "quadratic" | "none";
3
+ /** A radial push: the impulse vector plus the 0..1 falloff sampled at the target. */
4
+ export interface RadialImpulse {
5
+ /** Impulse along the first axis (direction × magnitude). */
6
+ x: number;
7
+ /** Impulse along the second axis (direction × magnitude). */
8
+ y: number;
9
+ /** Impulse magnitude = `power` × `falloff`. */
10
+ magnitude: number;
11
+ /** Falloff weight at the target, 1 at the center down to 0 at the radius. */
12
+ falloff: number;
13
+ }
14
+ /** Options for {@link radialImpulse}. */
15
+ export interface RadialImpulseOptions {
16
+ /** Falloff shape. Defaults to `"linear"` (`1 − d/r`). */
17
+ falloff?: RadialFalloff;
18
+ }
19
+ /**
20
+ * Point-source radial impulse pushing a `target` away from a blast `source`: full `power` at the center
21
+ * fading to zero at `radius`. Returns `null` when the target sits at or beyond the radius (unaffected),
22
+ * so callers can early-out. At the exact center the direction is zero. This is the explosion/knockback/
23
+ * shockwave push — every arena game hand-rolled the distance, falloff, and normalize.
24
+ */
25
+ export declare function radialImpulse(source: readonly [number, number], target: readonly [number, number], radius: number, power: number, options?: RadialImpulseOptions): RadialImpulse | null;
@@ -0,0 +1,27 @@
1
+ function falloffAt(distance, radius, shape) {
2
+ const linear = 1 - distance / radius;
3
+ if (shape === "none")
4
+ return 1;
5
+ if (shape === "quadratic")
6
+ return linear * linear;
7
+ return linear;
8
+ }
9
+ /**
10
+ * Point-source radial impulse pushing a `target` away from a blast `source`: full `power` at the center
11
+ * fading to zero at `radius`. Returns `null` when the target sits at or beyond the radius (unaffected),
12
+ * so callers can early-out. At the exact center the direction is zero. This is the explosion/knockback/
13
+ * shockwave push — every arena game hand-rolled the distance, falloff, and normalize.
14
+ */
15
+ export function radialImpulse(source, target, radius, power, options = {}) {
16
+ if (radius <= 0)
17
+ return null;
18
+ const dx = target[0] - source[0];
19
+ const dy = target[1] - source[1];
20
+ const distance = Math.hypot(dx, dy);
21
+ if (distance >= radius)
22
+ return null;
23
+ const falloff = falloffAt(distance, radius, options.falloff ?? "linear");
24
+ const magnitude = power * falloff;
25
+ const invLen = distance > 1e-6 ? 1 / distance : 0;
26
+ return { x: dx * invLen * magnitude, y: dy * invLen * magnitude, magnitude, falloff };
27
+ }
@@ -0,0 +1,3 @@
1
+ export { createDecayMeterSet, type DecayMeterSet } from "./survival/decayMeter.js";
2
+ export { createMoodleStack, stackMoodles, type Moodle, type MoodleStack } from "./survival/moodle.js";
3
+ export { createMultiRegionHealth, type MultiRegionHealth } from "./survival/regionHealth.js";
@@ -0,0 +1,3 @@
1
+ export { createDecayMeterSet } from "./survival/decayMeter.js";
2
+ export { createMoodleStack, stackMoodles } from "./survival/moodle.js";
3
+ export { createMultiRegionHealth } from "./survival/regionHealth.js";
@@ -0,0 +1,116 @@
1
+ import type { StatModifierSet } from "../stats/statModifiers.js";
2
+ /**
3
+ * A game-owned named input value. The engine ships no attribute vocabulary — ids,
4
+ * bounds, defaults, and metadata are entirely caller data, so the same graph can
5
+ * model STR/AGI/INT, SPECIAL scores, skills, difficulty knobs, or anything else.
6
+ */
7
+ export interface StatInputDef {
8
+ id: string;
9
+ /** Default base value a fresh sheet starts at. Defaults to `min ?? 0`. */
10
+ base?: number;
11
+ /** Lower bound applied to the resolved value. */
12
+ min?: number;
13
+ /** Upper bound applied to the resolved value. */
14
+ max?: number;
15
+ /** Free-form, engine-ignored metadata (labels, descriptions, UI hints). */
16
+ meta?: Readonly<Record<string, unknown>>;
17
+ }
18
+ /** How a single contribution folds into a running value. */
19
+ export type StatOp = "add" | "mul" | "override" | "clampMin" | "clampMax";
20
+ /**
21
+ * One folded contribution to a value, retained so a sheet can explain
22
+ * "why is this value 42?" — every step carries the source that produced it.
23
+ */
24
+ export interface StatContribution {
25
+ /** Provenance label — who/what produced this contribution. */
26
+ source: string;
27
+ op: StatOp;
28
+ value: number;
29
+ }
30
+ /** A modifier entry targeting one stat: a single contribution or an ordered list. */
31
+ export type StatModEntry = StatContribution | readonly StatContribution[];
32
+ /** The read-only view a derived formula gets: resolved values of its declared dependencies. */
33
+ export interface StatDeriveContext {
34
+ /** Resolved (fully modified) value of a declared dependency (input or derived). */
35
+ value(id: string): number;
36
+ }
37
+ /**
38
+ * A derived value whose formula and dependencies are caller-owned. `compute` may
39
+ * return a scalar (shorthand for a single `add`) or an ordered list of contributions
40
+ * folded left-to-right, so additive/multiplicative/clamped and conditional modifiers
41
+ * are all expressed as plain data or branches inside the function.
42
+ */
43
+ export interface StatDerivedDef {
44
+ id: string;
45
+ /** ids (inputs or other derived) this formula reads — drives ordering, cycle detection, and selective recompute. */
46
+ deps?: readonly string[];
47
+ min?: number;
48
+ max?: number;
49
+ round?: "floor" | "ceil" | "round";
50
+ meta?: Readonly<Record<string, unknown>>;
51
+ compute(ctx: StatDeriveContext): number | readonly StatContribution[];
52
+ }
53
+ /** The full schema of a stat graph: its named inputs and caller-authored derived formulas. */
54
+ export interface StatGraphDef {
55
+ inputs: readonly StatInputDef[];
56
+ derived?: readonly StatDerivedDef[];
57
+ }
58
+ /** Plain-data, JSON-safe sheet state: input base values plus registered modifier sources. */
59
+ export interface StatSheetState {
60
+ base: Record<string, number>;
61
+ sources: Record<string, Record<string, StatContribution[]>>;
62
+ }
63
+ /** One line of a provenance trace: a contribution plus the running total after it folds in. */
64
+ export interface StatContributionStep extends StatContribution {
65
+ /** Running total after this contribution folds in. */
66
+ subtotal: number;
67
+ }
68
+ /** A full provenance trace for one stat: the ordered steps that produced its value. */
69
+ export interface StatExplanation {
70
+ id: string;
71
+ value: number;
72
+ steps: StatContributionStep[];
73
+ }
74
+ /** A live per-entity instance of a {@link StatGraph}: mutable base values and modifier sources over a shared schema. */
75
+ export interface StatSheet {
76
+ /** Resolve the fully modified value of an input or derived stat. */
77
+ get(id: string): number;
78
+ /** The stored base of an input stat (before modifiers/clamping). */
79
+ getBase(id: string): number;
80
+ setBase(id: string, value: number): void;
81
+ /** Register (or replace) a named modifier source targeting one or more stats. */
82
+ addSource(sourceId: string, mods: Record<string, StatModEntry>): void;
83
+ removeSource(sourceId: string): boolean;
84
+ hasSource(sourceId: string): boolean;
85
+ sources(): string[];
86
+ /** Resolve every input and derived stat into a plain record. */
87
+ values(): Record<string, number>;
88
+ /** Ordered contribution trace explaining a stat's current value. */
89
+ explain(id: string): StatExplanation;
90
+ /** Resolve values under a proposed, uncommitted mutation (e.g. a previewed allocation). */
91
+ preview(mutate: (draft: StatSheet) => void): Record<string, number>;
92
+ toJSON(): StatSheetState;
93
+ }
94
+ /** A compiled, immutable stat-graph schema that mints per-entity {@link StatSheet}s from base values or saved state. */
95
+ export interface StatGraph {
96
+ readonly inputIds: readonly string[];
97
+ readonly derivedIds: readonly string[];
98
+ create(base?: Record<string, number>): StatSheet;
99
+ restore(state: StatSheetState): StatSheet;
100
+ }
101
+ /**
102
+ * A data-driven stat graph: game-owned named inputs feed caller-authored derived
103
+ * formulas, with contribution provenance, uncommitted previews, cycle detection, and
104
+ * selective recomputation. Formula semantics and numeric tables stay entirely game-defined.
105
+ *
106
+ * @capability stat-graph derive game-defined stats from named inputs with provenance and preview
107
+ */
108
+ export declare function createStatGraph(def: StatGraphDef): StatGraph;
109
+ /**
110
+ * Bridge the shared {@link StatModifierSet} shape (add/multiply, used by talents, items,
111
+ * and buffs) into stat-graph contributions, so a ranked talent tree or gear roll feeds
112
+ * the graph as one named source instead of a parallel store.
113
+ *
114
+ * @capability stat-graph-bridge feed an existing StatModifierSet into a stat-graph source
115
+ */
116
+ export declare function statModifierContributions<TStat extends string>(source: string, set: StatModifierSet<TStat>): Record<string, StatContribution[]>;