@jgengine/core 0.9.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 (631) hide show
  1. package/CHANGELOG.md +34 -3
  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 +19 -1
  21. package/dist/ai/spawnDirector.js +53 -26
  22. package/dist/ai/spawnPoint.d.ts +7 -0
  23. package/dist/ai/spawnPoint.js +7 -0
  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/audio/audioFalloff.d.ts +5 -2
  35. package/dist/audio/music.d.ts +53 -0
  36. package/dist/audio/music.js +34 -0
  37. package/dist/audio/synth.d.ts +60 -0
  38. package/dist/audio/synth.js +8 -0
  39. package/dist/authoring.d.ts +15 -0
  40. package/dist/authoring.js +15 -0
  41. package/dist/board/laneBoard.d.ts +13 -0
  42. package/dist/board/laneBoard.js +13 -0
  43. package/dist/board/timelineBoard.d.ts +10 -0
  44. package/dist/board/timelineBoard.js +10 -0
  45. package/dist/combat/abilityKit.d.ts +18 -0
  46. package/dist/combat/abilityKit.js +24 -9
  47. package/dist/combat/animationState.d.ts +5 -0
  48. package/dist/combat/animationState.js +5 -0
  49. package/dist/combat/breakMeters.d.ts +10 -0
  50. package/dist/combat/breakMeters.js +10 -0
  51. package/dist/combat/castRunner.d.ts +5 -0
  52. package/dist/combat/castRunner.js +5 -0
  53. package/dist/combat/comboPoints.d.ts +5 -0
  54. package/dist/combat/comboPoints.js +5 -0
  55. package/dist/combat/comboString.d.ts +5 -0
  56. package/dist/combat/comboString.js +5 -0
  57. package/dist/combat/damageInterceptors.d.ts +192 -0
  58. package/dist/combat/damageInterceptors.js +251 -0
  59. package/dist/combat/damageMatchup.d.ts +68 -0
  60. package/dist/combat/damageMatchup.js +42 -0
  61. package/dist/combat/damageResolution.d.ts +63 -0
  62. package/dist/combat/damageResolution.js +50 -0
  63. package/dist/combat/death.d.ts +7 -1
  64. package/dist/combat/death.js +5 -0
  65. package/dist/combat/deathReason.d.ts +14 -0
  66. package/dist/combat/deathReason.js +1 -0
  67. package/dist/combat/defensiveWindow.d.ts +5 -0
  68. package/dist/combat/defensiveWindow.js +5 -0
  69. package/dist/combat/dotField.d.ts +47 -0
  70. package/dist/combat/dotField.js +52 -0
  71. package/dist/combat/downed.d.ts +5 -0
  72. package/dist/combat/downed.js +5 -0
  73. package/dist/combat/effects.d.ts +5 -0
  74. package/dist/combat/effects.js +5 -0
  75. package/dist/combat/encounterSequence.d.ts +258 -0
  76. package/dist/combat/encounterSequence.js +426 -0
  77. package/dist/combat/hitReaction.d.ts +57 -1
  78. package/dist/combat/hitReaction.js +45 -5
  79. package/dist/combat/magazine.d.ts +54 -0
  80. package/dist/combat/magazine.js +96 -0
  81. package/dist/combat/projectiles.d.ts +7 -2
  82. package/dist/combat/projectiles.js +48 -17
  83. package/dist/combat/receivedDamage.d.ts +117 -0
  84. package/dist/combat/receivedDamage.js +92 -0
  85. package/dist/combat/regenShield.d.ts +39 -0
  86. package/dist/combat/regenShield.js +49 -0
  87. package/dist/combat/renderCues.d.ts +51 -0
  88. package/dist/combat/renderCues.js +44 -0
  89. package/dist/combat/resourcePool.d.ts +5 -0
  90. package/dist/combat/resourcePool.js +5 -0
  91. package/dist/combat/rewardAllocation.d.ts +121 -0
  92. package/dist/combat/rewardAllocation.js +251 -0
  93. package/dist/combat/shotOrigin.d.ts +30 -1
  94. package/dist/combat/shotOrigin.js +70 -2
  95. package/dist/combat/statusApplication.d.ts +96 -0
  96. package/dist/combat/statusApplication.js +81 -0
  97. package/dist/combat/telegraph.d.ts +11 -2
  98. package/dist/combat/telegraph.js +11 -2
  99. package/dist/combat/thresholdCrossings.d.ts +85 -0
  100. package/dist/combat/thresholdCrossings.js +116 -0
  101. package/dist/combat.d.ts +34 -0
  102. package/dist/combat.js +34 -0
  103. package/dist/commands/commandRegistry.d.ts +11 -0
  104. package/dist/commands/commandRegistry.js +9 -2
  105. package/dist/crafting/crop.d.ts +18 -0
  106. package/dist/crafting/crop.js +18 -0
  107. package/dist/crafting/production.d.ts +5 -0
  108. package/dist/crafting/production.js +5 -0
  109. package/dist/devtools/rewriteTunables.d.ts +17 -0
  110. package/dist/devtools/rewriteTunables.js +276 -0
  111. package/dist/devtools/saveEndpoint.d.ts +46 -0
  112. package/dist/devtools/saveEndpoint.js +48 -0
  113. package/dist/devtools/transformTunables.d.ts +3 -0
  114. package/dist/devtools/transformTunables.js +3 -0
  115. package/dist/devtools/tunableSchema.d.ts +31 -0
  116. package/dist/devtools/tunableSchema.js +31 -0
  117. package/dist/economy/currency.d.ts +12 -1
  118. package/dist/economy/currency.js +12 -1
  119. package/dist/economy/listingBook.d.ts +91 -0
  120. package/dist/economy/listingBook.js +144 -0
  121. package/dist/economy/resourceLedger.d.ts +222 -0
  122. package/dist/economy/resourceLedger.js +353 -0
  123. package/dist/economy/sharedWallet.d.ts +14 -0
  124. package/dist/economy/sharedWallet.js +14 -0
  125. package/dist/economy/techTree.d.ts +12 -0
  126. package/dist/economy/techTree.js +12 -0
  127. package/dist/economy/wallet.d.ts +26 -2
  128. package/dist/economy/wallet.js +35 -6
  129. package/dist/editor/commands.d.ts +248 -0
  130. package/dist/editor/commands.js +865 -0
  131. package/dist/editor/document.d.ts +186 -0
  132. package/dist/editor/document.js +884 -0
  133. package/dist/editor/grid.d.ts +229 -0
  134. package/dist/editor/grid.js +366 -0
  135. package/dist/editor/gridAdapters.d.ts +80 -0
  136. package/dist/editor/gridAdapters.js +134 -0
  137. package/dist/editor/index.d.ts +97 -0
  138. package/dist/editor/index.js +10 -0
  139. package/dist/editor/liveSync.d.ts +127 -0
  140. package/dist/editor/liveSync.js +249 -0
  141. package/dist/editor/runtimeInspector.d.ts +88 -0
  142. package/dist/editor/runtimeInspector.js +239 -0
  143. package/dist/editor/types.d.ts +175 -0
  144. package/dist/editor/types.js +29 -0
  145. package/dist/faction/reputation.d.ts +5 -0
  146. package/dist/faction/reputation.js +5 -0
  147. package/dist/format/distance.d.ts +17 -0
  148. package/dist/format/distance.js +18 -0
  149. package/dist/format/duration.d.ts +27 -0
  150. package/dist/format/duration.js +45 -0
  151. package/dist/format/speed.d.ts +17 -0
  152. package/dist/format/speed.js +25 -0
  153. package/dist/game/connectedPlayers.d.ts +30 -0
  154. package/dist/game/connectedPlayers.js +21 -0
  155. package/dist/game/cosmetics.d.ts +9 -0
  156. package/dist/game/cosmetics.js +16 -0
  157. package/dist/game/defineGame.d.ts +141 -2
  158. package/dist/game/defineGame.js +39 -1
  159. package/dist/game/defineSystem.d.ts +88 -0
  160. package/dist/game/defineSystem.js +45 -0
  161. package/dist/game/dialogue.d.ts +33 -0
  162. package/dist/game/dialogue.js +21 -0
  163. package/dist/game/events.d.ts +50 -13
  164. package/dist/game/events.js +5 -0
  165. package/dist/game/feed.d.ts +33 -0
  166. package/dist/game/feed.js +35 -2
  167. package/dist/game/gamePhase.d.ts +11 -0
  168. package/dist/game/gamePhase.js +16 -0
  169. package/dist/game/keyValueStore.d.ts +25 -0
  170. package/dist/game/keyValueStore.js +61 -0
  171. package/dist/game/leaderboard.d.ts +5 -0
  172. package/dist/game/leaderboard.js +5 -0
  173. package/dist/game/levelSequence.d.ts +24 -2
  174. package/dist/game/levelSequence.js +51 -2
  175. package/dist/game/loadout.d.ts +5 -0
  176. package/dist/game/loadout.js +5 -0
  177. package/dist/game/lootFilter.d.ts +2 -0
  178. package/dist/game/lootFilter.js +2 -0
  179. package/dist/game/lootPipeline.d.ts +164 -0
  180. package/dist/game/lootPipeline.js +216 -0
  181. package/dist/game/lootTable.d.ts +21 -0
  182. package/dist/game/lootTable.js +15 -4
  183. package/dist/game/modelAnimation.d.ts +8 -0
  184. package/dist/game/modelAnimation.js +18 -0
  185. package/dist/game/objectives.d.ts +43 -0
  186. package/dist/game/objectives.js +36 -0
  187. package/dist/game/paramLayers.d.ts +148 -0
  188. package/dist/game/paramLayers.js +185 -0
  189. package/dist/game/ping.d.ts +5 -0
  190. package/dist/game/ping.js +5 -0
  191. package/dist/game/playableGame.d.ts +160 -12
  192. package/dist/game/quest.d.ts +8 -0
  193. package/dist/game/quest.js +29 -0
  194. package/dist/game/race.d.ts +141 -0
  195. package/dist/game/race.js +169 -0
  196. package/dist/game/recordBook.d.ts +5 -5
  197. package/dist/game/recordBook.js +4 -1
  198. package/dist/game/ruleSelection.d.ts +75 -0
  199. package/dist/game/ruleSelection.js +127 -0
  200. package/dist/game/runDraft.d.ts +5 -0
  201. package/dist/game/runDraft.js +5 -0
  202. package/dist/game/saveStore.d.ts +111 -0
  203. package/dist/game/saveStore.js +312 -0
  204. package/dist/game/snapshotHistory.d.ts +67 -0
  205. package/dist/game/snapshotHistory.js +95 -0
  206. package/dist/game/social.d.ts +38 -1
  207. package/dist/game/social.js +71 -0
  208. package/dist/game/spawnPoints.d.ts +5 -0
  209. package/dist/game/spawnPoints.js +5 -0
  210. package/dist/game/systemRuntime.d.ts +50 -0
  211. package/dist/game/systemRuntime.js +157 -0
  212. package/dist/game/systemSchedule.d.ts +72 -0
  213. package/dist/game/systemSchedule.js +242 -0
  214. package/dist/game/toasts.d.ts +43 -0
  215. package/dist/game/toasts.js +44 -0
  216. package/dist/game/trade.d.ts +10 -0
  217. package/dist/game/trade.js +10 -0
  218. package/dist/game/unlocks.d.ts +8 -0
  219. package/dist/game/unlocks.js +16 -0
  220. package/dist/game/vfxInstance.d.ts +138 -0
  221. package/dist/game/vfxInstance.js +96 -0
  222. package/dist/game/worldItem.d.ts +17 -4
  223. package/dist/game/worldItem.js +17 -4
  224. package/dist/gameplay.d.ts +91 -0
  225. package/dist/gameplay.js +91 -0
  226. package/dist/index.d.ts +5 -7
  227. package/dist/index.js +5 -7
  228. package/dist/input/actionBindings.d.ts +24 -5
  229. package/dist/input/actionBindings.js +23 -5
  230. package/dist/input/axisInput.d.ts +13 -1
  231. package/dist/input/axisInput.js +22 -1
  232. package/dist/input/controlGroups.d.ts +67 -0
  233. package/dist/input/controlGroups.js +41 -0
  234. package/dist/input/touchScheme.d.ts +82 -6
  235. package/dist/input/touchScheme.js +123 -10
  236. package/dist/interaction/contextMenu.d.ts +1 -0
  237. package/dist/interaction/contextMenu.js +1 -0
  238. package/dist/interaction/lockpick.d.ts +61 -0
  239. package/dist/interaction/lockpick.js +168 -0
  240. package/dist/interaction/proximityPrompt.d.ts +5 -1
  241. package/dist/interaction/proximityPrompt.js +5 -3
  242. package/dist/interaction/qte.d.ts +5 -0
  243. package/dist/interaction/qte.js +5 -0
  244. package/dist/interaction/skillCheck.d.ts +5 -0
  245. package/dist/interaction/skillCheck.js +5 -0
  246. package/dist/inventory/inventoryModel.d.ts +12 -0
  247. package/dist/inventory/inventoryModel.js +12 -0
  248. package/dist/inventory/shapedGrid.d.ts +16 -0
  249. package/dist/inventory/shapedGrid.js +16 -0
  250. package/dist/inventory/slotModel.d.ts +10 -0
  251. package/dist/inventory/slotModel.js +10 -0
  252. package/dist/item/durability.d.ts +5 -0
  253. package/dist/item/durability.js +5 -0
  254. package/dist/item/itemIdentity.d.ts +171 -0
  255. package/dist/item/itemIdentity.js +138 -0
  256. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  257. package/dist/item/itemInstanceRegistry.js +34 -0
  258. package/dist/item/itemgen.d.ts +163 -0
  259. package/dist/item/itemgen.js +151 -0
  260. package/dist/item/modularItem.d.ts +5 -0
  261. package/dist/item/modularItem.js +5 -0
  262. package/dist/item/use.d.ts +5 -0
  263. package/dist/item/use.js +5 -0
  264. package/dist/item/useBehavior.d.ts +142 -0
  265. package/dist/item/useBehavior.js +105 -0
  266. package/dist/item/weapon.d.ts +5 -0
  267. package/dist/item/weapon.js +5 -0
  268. package/dist/math/scalar.d.ts +25 -0
  269. package/dist/math/scalar.js +47 -0
  270. package/dist/meta/changelog.d.ts +4 -1
  271. package/dist/meta/changelog.js +36 -1
  272. package/dist/movement/avoidance.d.ts +45 -0
  273. package/dist/movement/avoidance.js +123 -0
  274. package/dist/movement/cameraRig.d.ts +8 -0
  275. package/dist/movement/cameraRig.js +8 -0
  276. package/dist/movement/dash.d.ts +11 -0
  277. package/dist/movement/dash.js +11 -0
  278. package/dist/movement/formation.d.ts +135 -0
  279. package/dist/movement/formation.js +194 -0
  280. package/dist/movement/glideModel.d.ts +5 -0
  281. package/dist/movement/glideModel.js +5 -0
  282. package/dist/movement/grappleSwing.d.ts +5 -0
  283. package/dist/movement/grappleSwing.js +5 -0
  284. package/dist/movement/leaderTrail.d.ts +5 -0
  285. package/dist/movement/leaderTrail.js +5 -0
  286. package/dist/movement/movementModel.d.ts +38 -7
  287. package/dist/movement/movementModel.js +54 -13
  288. package/dist/movement/playerMovement.d.ts +41 -0
  289. package/dist/movement/playerMovement.js +236 -0
  290. package/dist/movement/poseState.d.ts +13 -0
  291. package/dist/movement/poseState.js +16 -0
  292. package/dist/movement/steering.d.ts +8 -0
  293. package/dist/movement/steering.js +18 -0
  294. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  295. package/dist/multiplayer/combatSnapshot.js +3 -0
  296. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  297. package/dist/multiplayer/lagCompensation.js +5 -0
  298. package/dist/multiplayer/presenceModel.d.ts +9 -1
  299. package/dist/multiplayer/presenceModel.js +9 -1
  300. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  301. package/dist/multiplayer/simultaneousCommit.js +3 -0
  302. package/dist/multiplayer.d.ts +11 -0
  303. package/dist/multiplayer.js +11 -0
  304. package/dist/nav/pathFollow.d.ts +57 -0
  305. package/dist/nav/pathFollow.js +109 -0
  306. package/dist/orders/orderKinds.d.ts +156 -0
  307. package/dist/orders/orderKinds.js +197 -0
  308. package/dist/orders/orderQueue.d.ts +208 -0
  309. package/dist/orders/orderQueue.js +211 -0
  310. package/dist/physics/drivableVehicle.d.ts +29 -0
  311. package/dist/physics/drivableVehicle.js +16 -0
  312. package/dist/physics/kinematicVehicle.d.ts +21 -1
  313. package/dist/physics/kinematicVehicle.js +23 -8
  314. package/dist/physics/physicsWorld.d.ts +24 -12
  315. package/dist/physics/physicsWorld.js +11 -5
  316. package/dist/physics/radialImpulse.d.ts +25 -0
  317. package/dist/physics/radialImpulse.js +27 -0
  318. package/dist/procedural.d.ts +3 -0
  319. package/dist/procedural.js +3 -0
  320. package/dist/progression/statGraph.d.ts +116 -0
  321. package/dist/progression/statGraph.js +318 -0
  322. package/dist/puzzle/cellGrid.d.ts +9 -0
  323. package/dist/puzzle/cellGrid.js +9 -0
  324. package/dist/puzzle/fallingPiece.d.ts +9 -0
  325. package/dist/puzzle/fallingPiece.js +9 -0
  326. package/dist/puzzle/nonogram.d.ts +39 -0
  327. package/dist/puzzle/nonogram.js +136 -0
  328. package/dist/random/nameGen.d.ts +5 -0
  329. package/dist/random/nameGen.js +5 -0
  330. package/dist/random/pick.d.ts +8 -0
  331. package/dist/random/pick.js +31 -0
  332. package/dist/random/rng.d.ts +24 -0
  333. package/dist/random/rng.js +30 -8
  334. package/dist/random/seedLink.d.ts +4 -0
  335. package/dist/random/seedLink.js +4 -0
  336. package/dist/relation/keyedValues.d.ts +54 -0
  337. package/dist/relation/keyedValues.js +115 -0
  338. package/dist/relation/thresholds.d.ts +62 -0
  339. package/dist/relation/thresholds.js +62 -0
  340. package/dist/render/color.d.ts +12 -0
  341. package/dist/render/color.js +26 -0
  342. package/dist/render/lookPreset.d.ts +41 -0
  343. package/dist/render/lookPreset.js +29 -0
  344. package/dist/render/postProcessing.d.ts +76 -0
  345. package/dist/render/postProcessing.js +21 -0
  346. package/dist/rules/predicate.d.ts +53 -0
  347. package/dist/rules/predicate.js +64 -0
  348. package/dist/rules/ruleEffects.d.ts +38 -0
  349. package/dist/rules/ruleEffects.js +37 -0
  350. package/dist/rules/triggeredRules.d.ts +160 -0
  351. package/dist/rules/triggeredRules.js +241 -0
  352. package/dist/runtime/adapter.d.ts +58 -0
  353. package/dist/runtime/adapter.js +54 -5
  354. package/dist/runtime/cameraDirector.d.ts +1 -0
  355. package/dist/runtime/cameraDirector.js +1 -0
  356. package/dist/runtime/commandRunner.d.ts +1 -0
  357. package/dist/runtime/commandRunner.js +1 -0
  358. package/dist/runtime/context/combatFx.d.ts +23 -0
  359. package/dist/runtime/context/combatFx.js +161 -0
  360. package/dist/runtime/context/registries.d.ts +13 -0
  361. package/dist/runtime/context/registries.js +84 -0
  362. package/dist/runtime/context/worldItems.d.ts +21 -0
  363. package/dist/runtime/context/worldItems.js +37 -0
  364. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  365. package/dist/runtime/descriptors/baseline.js +134 -0
  366. package/dist/runtime/descriptors/features.d.ts +74 -0
  367. package/dist/runtime/descriptors/features.js +281 -0
  368. package/dist/runtime/gameContext.d.ts +163 -19
  369. package/dist/runtime/gameContext.js +385 -339
  370. package/dist/runtime/gameRuntime.d.ts +1 -0
  371. package/dist/runtime/gameRuntime.js +1 -0
  372. package/dist/runtime/headlessRunner.d.ts +60 -0
  373. package/dist/runtime/headlessRunner.js +44 -0
  374. package/dist/runtime/hostPersistence.d.ts +12 -0
  375. package/dist/runtime/hostPersistence.js +12 -0
  376. package/dist/runtime/hostedGameRunner.d.ts +54 -0
  377. package/dist/runtime/hostedGameRunner.js +85 -0
  378. package/dist/runtime/hostedWorldSession.d.ts +73 -0
  379. package/dist/runtime/hostedWorldSession.js +64 -0
  380. package/dist/runtime/inputSnapshot.d.ts +21 -3
  381. package/dist/runtime/inputSnapshot.js +8 -2
  382. package/dist/runtime/motionIntents.d.ts +12 -1
  383. package/dist/runtime/motionIntents.js +26 -1
  384. package/dist/runtime/perContext.d.ts +15 -0
  385. package/dist/runtime/perContext.js +21 -0
  386. package/dist/runtime/runtimeSave.d.ts +79 -0
  387. package/dist/runtime/runtimeSave.js +105 -0
  388. package/dist/runtime/save.d.ts +4 -0
  389. package/dist/runtime/save.js +4 -0
  390. package/dist/runtime/snapshot.d.ts +7 -0
  391. package/dist/runtime/snapshot.js +7 -0
  392. package/dist/runtime/visibility.d.ts +2 -1
  393. package/dist/runtime/visibility.js +2 -1
  394. package/dist/runtime/worldChannel.d.ts +62 -0
  395. package/dist/runtime/worldChannel.js +114 -0
  396. package/dist/runtime/worldMirror.d.ts +36 -0
  397. package/dist/runtime/worldMirror.js +44 -0
  398. package/dist/runtime/worldProjection.d.ts +47 -0
  399. package/dist/runtime/worldProjection.js +52 -0
  400. package/dist/runtime/worldReplication.d.ts +69 -0
  401. package/dist/runtime/worldReplication.js +217 -0
  402. package/dist/runtime/worldSnapshot.d.ts +44 -0
  403. package/dist/runtime/worldSnapshot.js +30 -0
  404. package/dist/scene/assetCatalog.d.ts +22 -0
  405. package/dist/scene/assetCatalog.js +4 -0
  406. package/dist/scene/assetDiagnostics.d.ts +69 -0
  407. package/dist/scene/assetDiagnostics.js +110 -0
  408. package/dist/scene/assetGenerator.d.ts +65 -0
  409. package/dist/scene/assetGenerator.js +64 -0
  410. package/dist/scene/assetSpace.d.ts +137 -0
  411. package/dist/scene/assetSpace.js +259 -0
  412. package/dist/scene/authoredTriggers.d.ts +169 -0
  413. package/dist/scene/authoredTriggers.js +340 -0
  414. package/dist/scene/behaviorRuntime.d.ts +75 -0
  415. package/dist/scene/behaviorRuntime.js +217 -0
  416. package/dist/scene/behaviors.d.ts +14 -2
  417. package/dist/scene/behaviors.js +7 -2
  418. package/dist/scene/bodyBind.d.ts +60 -0
  419. package/dist/scene/bodyBind.js +51 -0
  420. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  421. package/dist/scene/builtinSceneKinds.js +62 -0
  422. package/dist/scene/colliders.d.ts +18 -0
  423. package/dist/scene/colliders.js +61 -1
  424. package/dist/scene/entityStats.d.ts +13 -0
  425. package/dist/scene/entityStats.js +30 -0
  426. package/dist/scene/entityStore.d.ts +41 -1
  427. package/dist/scene/entityStore.js +75 -0
  428. package/dist/scene/facing.d.ts +18 -0
  429. package/dist/scene/facing.js +26 -0
  430. package/dist/scene/modelSockets.d.ts +33 -0
  431. package/dist/scene/modelSockets.js +29 -0
  432. package/dist/scene/objectQuery.d.ts +2 -0
  433. package/dist/scene/objectQuery.js +2 -0
  434. package/dist/scene/objectStore.d.ts +4 -0
  435. package/dist/scene/objectStore.js +6 -0
  436. package/dist/scene/possession.d.ts +8 -0
  437. package/dist/scene/possession.js +14 -0
  438. package/dist/scene/roster.d.ts +3 -0
  439. package/dist/scene/roster.js +12 -0
  440. package/dist/scene/sceneKinds.d.ts +240 -0
  441. package/dist/scene/sceneKinds.js +214 -0
  442. package/dist/scene/sceneOwnership.d.ts +169 -0
  443. package/dist/scene/sceneOwnership.js +179 -0
  444. package/dist/scene/selectionBookmarks.d.ts +93 -0
  445. package/dist/scene/selectionBookmarks.js +122 -0
  446. package/dist/scene/vehicleSeat.d.ts +68 -0
  447. package/dist/scene/vehicleSeat.js +59 -0
  448. package/dist/sensor/concealment.d.ts +3 -0
  449. package/dist/sensor/concealment.js +3 -0
  450. package/dist/sensor/freezeMonitor.d.ts +1 -0
  451. package/dist/sensor/freezeMonitor.js +1 -0
  452. package/dist/sensor/frustumSensor.d.ts +7 -3
  453. package/dist/sensor/frustumSensor.js +7 -3
  454. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  455. package/dist/sensor/hiddenStateProbe.js +5 -2
  456. package/dist/sensor/recordingBuffer.d.ts +2 -1
  457. package/dist/sensor/recordingBuffer.js +2 -1
  458. package/dist/sensor/replayLoop.d.ts +6 -2
  459. package/dist/sensor/replayLoop.js +6 -2
  460. package/dist/sensor/revealQuery.d.ts +2 -1
  461. package/dist/sensor/revealQuery.js +2 -1
  462. package/dist/sensor/visionCone.d.ts +10 -3
  463. package/dist/sensor/visionCone.js +10 -3
  464. package/dist/session/contestedChannel.d.ts +1 -0
  465. package/dist/session/contestedChannel.js +1 -0
  466. package/dist/session/extraction.d.ts +1 -0
  467. package/dist/session/extraction.js +1 -0
  468. package/dist/session/roles.d.ts +6 -0
  469. package/dist/session/roles.js +6 -0
  470. package/dist/session/roundState.d.ts +8 -0
  471. package/dist/session/roundState.js +2 -0
  472. package/dist/settings/settingsModel.d.ts +1 -0
  473. package/dist/settings/settingsModel.js +1 -0
  474. package/dist/stats/accumulatorMeter.d.ts +6 -0
  475. package/dist/stats/accumulatorMeter.js +6 -0
  476. package/dist/stats/eventMeter.d.ts +5 -0
  477. package/dist/stats/eventMeter.js +5 -0
  478. package/dist/stats/rollCheck.d.ts +5 -0
  479. package/dist/stats/rollCheck.js +5 -0
  480. package/dist/stats/statModifiers.d.ts +5 -0
  481. package/dist/stats/statModifiers.js +5 -0
  482. package/dist/store/defineKeyedStore.d.ts +38 -0
  483. package/dist/store/defineKeyedStore.js +42 -0
  484. package/dist/store/defineStore.d.ts +33 -0
  485. package/dist/store/defineStore.js +35 -0
  486. package/dist/store/observableKeyedStore.d.ts +9 -0
  487. package/dist/store/observableKeyedStore.js +43 -2
  488. package/dist/survival/decayMeter.d.ts +55 -0
  489. package/dist/survival/decayMeter.js +130 -55
  490. package/dist/survival/moodle.d.ts +2 -0
  491. package/dist/survival/regionHealth.d.ts +6 -0
  492. package/dist/survival/regionHealth.js +5 -0
  493. package/dist/tactics/fallingGrid.d.ts +6 -4
  494. package/dist/tactics/fallingGrid.js +6 -4
  495. package/dist/tactics/predictiveQuery.d.ts +3 -0
  496. package/dist/tactics/predictiveQuery.js +3 -0
  497. package/dist/tactics/snapshot.d.ts +2 -0
  498. package/dist/tactics/snapshot.js +2 -0
  499. package/dist/tactics/surface.d.ts +1 -0
  500. package/dist/tactics/surface.js +1 -0
  501. package/dist/tactics/tacticalGrid.d.ts +1 -0
  502. package/dist/tactics/tacticalGrid.js +1 -0
  503. package/dist/time/beatClock.d.ts +14 -4
  504. package/dist/time/beatClock.js +14 -4
  505. package/dist/time/calendarClock.d.ts +3 -0
  506. package/dist/time/calendarClock.js +3 -0
  507. package/dist/time/idleProgress.d.ts +4 -0
  508. package/dist/time/idleProgress.js +4 -0
  509. package/dist/time/simClock.d.ts +2 -0
  510. package/dist/time/simClock.js +20 -5
  511. package/dist/ui/actionModel.d.ts +110 -0
  512. package/dist/ui/actionModel.js +159 -0
  513. package/dist/ui/gameLayout.d.ts +144 -0
  514. package/dist/ui/gameLayout.js +148 -0
  515. package/dist/ui/hudDocument.d.ts +114 -0
  516. package/dist/ui/hudDocument.js +220 -0
  517. package/dist/ui/hudLayout.d.ts +33 -1
  518. package/dist/ui/hudLayout.js +204 -17
  519. package/dist/ui/orientation.d.ts +39 -0
  520. package/dist/ui/orientation.js +49 -0
  521. package/dist/ui/selectionModel.d.ts +92 -0
  522. package/dist/ui/selectionModel.js +88 -0
  523. package/dist/ui/swingTimer.d.ts +42 -0
  524. package/dist/ui/swingTimer.js +38 -0
  525. package/dist/ui/tooltipModel.d.ts +63 -0
  526. package/dist/ui/tooltipModel.js +82 -0
  527. package/dist/ui.d.ts +15 -0
  528. package/dist/ui.js +15 -0
  529. package/dist/visibility/bounds.d.ts +8 -1
  530. package/dist/visibility/bounds.js +8 -1
  531. package/dist/visibility/frustum.d.ts +12 -3
  532. package/dist/visibility/frustum.js +12 -3
  533. package/dist/visibility/spatialIndex.js +34 -20
  534. package/dist/work/jobQueue.d.ts +201 -0
  535. package/dist/work/jobQueue.js +253 -0
  536. package/dist/work/unitTraining.d.ts +58 -0
  537. package/dist/work/unitTraining.js +52 -0
  538. package/dist/world/authoredObjects.d.ts +58 -0
  539. package/dist/world/authoredObjects.js +69 -0
  540. package/dist/world/buildingGenerator.d.ts +18 -0
  541. package/dist/world/buildingGenerator.js +62 -0
  542. package/dist/world/buildings.d.ts +5 -0
  543. package/dist/world/buildings.js +5 -0
  544. package/dist/world/catenary.d.ts +22 -0
  545. package/dist/world/catenary.js +69 -0
  546. package/dist/world/environmentSummary.d.ts +11 -2
  547. package/dist/world/environmentSummary.js +11 -1
  548. package/dist/world/features.d.ts +244 -7
  549. package/dist/world/features.js +92 -4
  550. package/dist/world/footprintGrid.d.ts +59 -0
  551. package/dist/world/footprintGrid.js +141 -0
  552. package/dist/world/geometry.d.ts +64 -0
  553. package/dist/world/geometry.js +94 -0
  554. package/dist/world/grassKind.d.ts +51 -0
  555. package/dist/world/grassKind.js +101 -0
  556. package/dist/world/pathInstances.d.ts +27 -0
  557. package/dist/world/pathInstances.js +27 -0
  558. package/dist/world/pathTerrain.d.ts +80 -0
  559. package/dist/world/pathTerrain.js +142 -0
  560. package/dist/world/placeAsset.d.ts +81 -0
  561. package/dist/world/placeAsset.js +77 -0
  562. package/dist/world/placement.d.ts +4 -0
  563. package/dist/world/placement.js +4 -0
  564. package/dist/world/placementController.d.ts +6 -0
  565. package/dist/world/placementController.js +6 -0
  566. package/dist/world/polyline.d.ts +34 -0
  567. package/dist/world/polyline.js +81 -0
  568. package/dist/world/roads.d.ts +55 -0
  569. package/dist/world/roads.js +184 -0
  570. package/dist/world/scatterRegion.d.ts +164 -0
  571. package/dist/world/scatterRegion.js +409 -0
  572. package/dist/world/sceneShapes.d.ts +43 -0
  573. package/dist/world/sceneShapes.js +1 -0
  574. package/dist/world/segment.d.ts +27 -0
  575. package/dist/world/segment.js +43 -0
  576. package/dist/world/soilKind.d.ts +48 -0
  577. package/dist/world/soilKind.js +92 -0
  578. package/dist/world/spatialSample.d.ts +241 -0
  579. package/dist/world/spatialSample.js +465 -0
  580. package/dist/world/streets.d.ts +80 -0
  581. package/dist/world/streets.js +144 -0
  582. package/dist/world/terraform.d.ts +213 -1
  583. package/dist/world/terraform.js +655 -20
  584. package/dist/world/terrain.d.ts +138 -12
  585. package/dist/world/terrain.js +346 -28
  586. package/dist/world/terrainGuides.d.ts +182 -0
  587. package/dist/world/terrainGuides.js +343 -0
  588. package/dist/world/vec2.d.ts +81 -0
  589. package/dist/world/vec2.js +128 -0
  590. package/dist/world/vec3.d.ts +49 -0
  591. package/dist/world/vec3.js +76 -0
  592. package/dist/world/vegetation.d.ts +71 -0
  593. package/dist/world/vegetation.js +151 -0
  594. package/dist/world/visibilityField.d.ts +154 -0
  595. package/dist/world/visibilityField.js +271 -0
  596. package/dist/world/volumetricClouds.d.ts +52 -0
  597. package/dist/world/volumetricClouds.js +43 -0
  598. package/dist/world/walls.d.ts +9 -0
  599. package/dist/world/walls.js +9 -0
  600. package/dist/world/waterKind.d.ts +55 -0
  601. package/dist/world/waterKind.js +99 -0
  602. package/dist/world.d.ts +132 -0
  603. package/dist/world.js +132 -0
  604. package/package.json +32 -8
  605. package/skills/jgengine/SKILL.md +51 -0
  606. package/skills/jgengine/api.md +434 -0
  607. package/skills/jgengine/capabilities.md +29 -0
  608. package/skills/jgengine/reference-cartridge.md +72 -0
  609. package/skills/jgengine-combat/SKILL.md +34 -0
  610. package/skills/jgengine-combat/api.md +549 -0
  611. package/skills/jgengine-combat/capabilities.md +169 -0
  612. package/skills/jgengine-combat/reference.md +98 -0
  613. package/skills/jgengine-gameplay/SKILL.md +39 -0
  614. package/skills/jgengine-gameplay/api.md +1794 -0
  615. package/skills/jgengine-gameplay/capabilities.md +378 -0
  616. package/skills/jgengine-gameplay/reference-systems.md +60 -0
  617. package/skills/jgengine-world/SKILL.md +38 -0
  618. package/skills/jgengine-world/api.md +2652 -0
  619. package/skills/jgengine-world/capabilities.md +370 -0
  620. package/skills/jgengine-world/reference.md +222 -0
  621. package/dist/cartridge/runtime.d.ts +0 -15
  622. package/dist/cartridge/runtime.js +0 -556
  623. package/dist/cartridge/spec.d.ts +0 -188
  624. package/dist/cartridge/spec.js +0 -19
  625. package/dist/cartridge/validate.d.ts +0 -2
  626. package/dist/cartridge/validate.js +0 -78
  627. package/dist/store/engineStore.d.ts +0 -22
  628. package/dist/store/engineStore.js +0 -50
  629. package/dist/store/features.d.ts +0 -10
  630. package/dist/store/features.js +0 -23
  631. package/llms.txt +0 -4983
@@ -0,0 +1,378 @@
1
+ <!-- GENERATED by scripts/gen-capability-index.ts — do not edit. Regenerate: bun run gen:capabilities -->
2
+
3
+ # jgengine-gameplay — capability index
4
+
5
+ Reach for these before hand-rolling. Each row is *the thing you need* → *the primitive that already does it*.
6
+
7
+ ## advance-ledger — settle due scheduled transactions through a policy pipeline
8
+
9
+ - `advanceLedger` (function) · `import { advanceLedger } from "@jgengine/core/gameplay"`
10
+
11
+ ## best-record — persist personal-best times/scores with safe storage fallback
12
+
13
+ - `createRecordBook` (function) · `import { createRecordBook } from "@jgengine/core/gameplay"`
14
+
15
+ ## build — a serializable directed/undirected pair key that resists delimiter collisions
16
+
17
+ - `createPairKeyCodec` (function) · `import { createPairKeyCodec } from "@jgengine/core/gameplay"`
18
+
19
+ ## cancel-scheduled-rule — remove a scheduled rule and its cursor entirely
20
+
21
+ - `cancelRule` (function) · `import { cancelRule } from "@jgengine/core/gameplay"`
22
+
23
+ ## cancel-work — remove a job and compute its refund from reservation and progress
24
+
25
+ - `cancelJob` (function) · `import { cancelJob } from "@jgengine/core/gameplay"`
26
+
27
+ ## compose-game-loop — fold composable systems into the game loop without a manual tick fan-out
28
+
29
+ - `composeGameLoop` (function) · `import { composeGameLoop } from "@jgengine/core/gameplay"`
30
+
31
+ ## consumables — use/consume items with cooldowns and effects
32
+
33
+ - `createItemUse` (function) · `import { createItemUse } from "@jgengine/core/gameplay"`
34
+
35
+ ## cosmetics — equip cosmetic skins and customizations by slot
36
+
37
+ - `createCosmetics` (function) · `import { createCosmetics } from "@jgengine/core/gameplay"`
38
+
39
+ ## decay-meter — survival meters that drain/refill over game time (hunger, water, oxygen, stamina)
40
+
41
+ - `createDecayMeterSet` (function) · `import { createDecayMeterSet } from "@jgengine/core/gameplay"`
42
+ - `decayMeterMoodles` (function) · `import { decayMeterMoodles } from "@jgengine/core/gameplay"`
43
+ - `decayMeterSnapshot` (function) · `import { decayMeterSnapshot } from "@jgengine/core/gameplay"`
44
+ - `decayMeterState` (function) · `import { decayMeterState } from "@jgengine/core/gameplay"`
45
+ - `decayMeters` (function) · `import { decayMeters } from "@jgengine/core/gameplay"`
46
+ - `initDecayMeters` (function) · `import { initDecayMeters } from "@jgengine/core/gameplay"`
47
+ - `refillMeter` (function) · `import { refillMeter } from "@jgengine/core/gameplay"`
48
+
49
+ ## declarative-predicate — serializable data-driven conditions with no callbacks in saved content
50
+
51
+ - `evaluatePredicate` (function) · `import { evaluatePredicate } from "@jgengine/core/gameplay"`
52
+ - `readPath` (function) · `import { readPath } from "@jgengine/core/gameplay"`
53
+
54
+ ## define-game — single public game-authoring path — compose systems, world, and loop in one definition
55
+
56
+ - `defineGame` (function) · `import { defineGame } from "@jgengine/core/gameplay"`
57
+
58
+ ## detect — fire-once threshold/milestone/tier crossings when a value moves
59
+
60
+ - `crossThresholds` (function) · `import { crossThresholds } from "@jgengine/core/gameplay"`
61
+
62
+ ## dialogue-bridge — open/close the talkable→DialogueBox flow with no per-game store or command glue
63
+
64
+ - `createGameDialogue` (function) · `import { createGameDialogue } from "@jgengine/core/gameplay"`
65
+
66
+ ## durability — track item wear, breakage, and repair
67
+
68
+ - `applyWear` (function) · `import { applyWear } from "@jgengine/core/gameplay"`
69
+
70
+ ## enqueue-work — reserve inputs and add a timed job, honoring capacity and validation policy
71
+
72
+ - `enqueue` (function) · `import { enqueue } from "@jgengine/core/gameplay"`
73
+
74
+ ## event-bus — typed publish/subscribe bus for gameplay events
75
+
76
+ - `createGameEvents` (function) · `import { createGameEvents } from "@jgengine/core/gameplay"`
77
+
78
+ ## event-feed — a rolling feed of recent gameplay events for a HUD ticker or killfeed
79
+
80
+ - `createGameFeed` (function) · `import { createGameFeed } from "@jgengine/core/gameplay"`
81
+
82
+ ## game-save — save/load game state with a pluggable backend, autosave, slots, and migration
83
+
84
+ - `createSaveStore` (function) · `import { createSaveStore } from "@jgengine/core/gameplay"`
85
+
86
+ ## game-system — declare a composable capability with its own schedule and lifecycle
87
+
88
+ - `SystemDefinition` (interface) · `import { SystemDefinition } from "@jgengine/core/gameplay"`
89
+
90
+ ## item-generation — compose constraints, weighted pools, transforms, and provenance into a deterministic generated item
91
+
92
+ - `generate` (function) · `import { generate } from "@jgengine/core/gameplay"`
93
+
94
+ ## item-identity — resolve which match/set bonuses an item qualifies for
95
+
96
+ - `activeSetBonuses` (function) · `import { activeSetBonuses } from "@jgengine/core/gameplay"`
97
+ - `applySetBonuses` (function) · `import { applySetBonuses } from "@jgengine/core/gameplay"`
98
+ - `candidateViolatesForbid` (function) · `import { candidateViolatesForbid } from "@jgengine/core/gameplay"`
99
+ - `captureProvenance` (function) · `import { captureProvenance } from "@jgengine/core/gameplay"`
100
+ - `countSetMembers` (function) · `import { countSetMembers } from "@jgengine/core/gameplay"`
101
+ - `identityOf` (function) · `import { identityOf } from "@jgengine/core/gameplay"`
102
+ - `isIdentityValid` (function) · `import { isIdentityValid } from "@jgengine/core/gameplay"`
103
+ - `matchesQuery` (function) · `import { matchesQuery } from "@jgengine/core/gameplay"`
104
+ - `validateIdentity` (function) · `import { validateIdentity } from "@jgengine/core/gameplay"`
105
+
106
+ ## item-instance-registry — a runtime store for procedurally generated item instances
107
+
108
+ - `createItemInstanceRegistry` (function) · `import { createItemInstanceRegistry } from "@jgengine/core/gameplay"`
109
+ - `proceduralLootEntry` (function) · `import { proceduralLootEntry } from "@jgengine/core/gameplay"`
110
+
111
+ ## item-use-composition — compose pluggable, ordered item use-behaviors from serializable references
112
+
113
+ - `createUseBehaviorRegistry` (function) · `import { createUseBehaviorRegistry } from "@jgengine/core/gameplay"`
114
+
115
+ ## lap-splits — per-lap durations from a cumulative split book
116
+
117
+ - `lapDurations` (function) · `import { lapDurations } from "@jgengine/core/gameplay"`
118
+ - `parDelta` (function) · `import { parDelta } from "@jgengine/core/gameplay"`
119
+ - `splitSegments` (function) · `import { splitSegments } from "@jgengine/core/gameplay"`
120
+
121
+ ## lap-timer — wall-clock current/last/best lap timing with splits
122
+
123
+ - `createLapTimer` (function) · `import { createLapTimer } from "@jgengine/core/gameplay"`
124
+
125
+ ## leaderboard — ranked score tracking across global, server, and per-profile scopes
126
+
127
+ - `createLeaderboard` (function) · `import { createLeaderboard } from "@jgengine/core/gameplay"`
128
+
129
+ ## lifecycle — declarative start/restart run flow — the engine owns the command glue and phase sync, the game supplies pure state transitions
130
+
131
+ - `LifecycleConfig` (interface) · `import { LifecycleConfig } from "@jgengine/core/gameplay"`
132
+
133
+ ## limb-health — per-body-part/region health tracked separately
134
+
135
+ - `createMultiRegionHealth` (function) · `import { createMultiRegionHealth } from "@jgengine/core/gameplay"`
136
+
137
+ ## listing-book — player-driven marketplace listings with a house cut, expiry sweep, and seller collection box
138
+
139
+ - `createListingBook` (function) · `import { createListingBook } from "@jgengine/core/gameplay"`
140
+
141
+ ## loadouts — save and swap named equipment loadouts
142
+
143
+ - `createLoadouts` (function) · `import { createLoadouts } from "@jgengine/core/gameplay"`
144
+
145
+ ## local-save — persist a game to on-device localStorage (offline)
146
+
147
+ - `localSaveBackend` (function) · `import { localSaveBackend } from "@jgengine/core/gameplay"`
148
+
149
+ ## loot-filter — filter and highlight drops by rarity/name rules
150
+
151
+ - `evaluateLootFilter` (function) · `import { evaluateLootFilter } from "@jgengine/core/gameplay"`
152
+
153
+ ## loot-pipeline — compose ordered loot pools with fallbacks, roll modifiers, and provenance
154
+
155
+ - `createLootPipeline` (function) · `import { createLootPipeline } from "@jgengine/core/gameplay"`
156
+ - `defineLootPipeline` (function) · `import { defineLootPipeline } from "@jgengine/core/gameplay"`
157
+
158
+ ## loot-table — register loot tables and roll weighted randomized drops
159
+
160
+ - `createLootRegistry` (function) · `import { createLootRegistry } from "@jgengine/core/gameplay"`
161
+ - `lootTable` (function) · `import { lootTable } from "@jgengine/core/gameplay"`
162
+
163
+ ## modular-item — attach parts into item mount slots to compute combined stats
164
+
165
+ - `slotAccepts` (function) · `import { slotAccepts } from "@jgengine/core/gameplay"`
166
+
167
+ ## move — a keyed value toward a target by a bounded step
168
+
169
+ - `towardValue` (function) · `import { towardValue } from "@jgengine/core/gameplay"`
170
+
171
+ ## name-generator — generate procedural names from templates and word banks
172
+
173
+ - `createNameGenerator` (function) · `import { createNameGenerator } from "@jgengine/core/gameplay"`
174
+
175
+ ## notice-feed — serializable tone-tagged notice/event feed bounded by count and age (toasts, life events, killfeed)
176
+
177
+ - `appendFeed` (function) · `import { appendFeed } from "@jgengine/core/gameplay"`
178
+ - `pruneFeed` (function) · `import { pruneFeed } from "@jgengine/core/gameplay"`
179
+
180
+ ## objectives — check progress of a threshold objective against a live metric
181
+
182
+ - `evaluateObjective` (function) · `import { evaluateObjective } from "@jgengine/core/gameplay"`
183
+
184
+ ## param-layers — register parameter layers by stable id and resolve serialized selections
185
+
186
+ - `createLayerRegistry` (function) · `import { createLayerRegistry } from "@jgengine/core/gameplay"`
187
+ - `diffParams` (function) · `import { diffParams } from "@jgengine/core/gameplay"`
188
+ - `orderLayers` (function) · `import { orderLayers } from "@jgengine/core/gameplay"`
189
+ - `resolveParams` (function) · `import { resolveParams } from "@jgengine/core/gameplay"`
190
+ - `resolveSelection` (function) · `import { resolveSelection } from "@jgengine/core/gameplay"`
191
+ - `validateLayers` (function) · `import { validateLayers } from "@jgengine/core/gameplay"`
192
+
193
+ ## pause-scheduled-rule — stop a scheduled rule from firing while retaining its cursor
194
+
195
+ - `pauseRule` (function) · `import { pauseRule } from "@jgengine/core/gameplay"`
196
+
197
+ ## pause-work — pause a queued or active job in place, retaining its progress
198
+
199
+ - `pauseJob` (function) · `import { pauseJob } from "@jgengine/core/gameplay"`
200
+
201
+ ## ping-wheel — contextual ping/marker communication between teammates
202
+
203
+ - `createPingSystem` (function) · `import { createPingSystem } from "@jgengine/core/gameplay"`
204
+
205
+ ## policy-annotate — tag a scheduled transaction's provenance without changing its value
206
+
207
+ - `annotate` (function) · `import { annotate } from "@jgengine/core/gameplay"`
208
+
209
+ ## policy-cap — cap a scheduled transaction amount by context
210
+
211
+ - `capAmount` (function) · `import { capAmount } from "@jgengine/core/gameplay"`
212
+
213
+ ## policy-curve — scale a transaction by a curve over context
214
+
215
+ - `curveScale` (function) · `import { curveScale } from "@jgengine/core/gameplay"`
216
+
217
+ ## policy-redirect — redirect a scheduled transaction's source or recipient
218
+
219
+ - `redirect` (function) · `import { redirect } from "@jgengine/core/gameplay"`
220
+
221
+ ## policy-reject — reject scheduled transactions by predicate
222
+
223
+ - `rejectWhen` (function) · `import { rejectWhen } from "@jgengine/core/gameplay"`
224
+
225
+ ## policy-tax — split off a fraction of a transaction as tax or transfer
226
+
227
+ - `taxFraction` (function) · `import { taxFraction } from "@jgengine/core/gameplay"`
228
+
229
+ ## policy-threshold — scale a transaction by a context threshold band
230
+
231
+ - `thresholdScale` (function) · `import { thresholdScale } from "@jgengine/core/gameplay"`
232
+
233
+ ## production-building — a factory building converting inputs to outputs over time
234
+
235
+ - `createProductionState` (function) · `import { createProductionState } from "@jgengine/core/gameplay"`
236
+
237
+ ## quest-log — track accepted quests and their per-objective progress
238
+
239
+ - `createQuestJournal` (function) · `import { createQuestJournal } from "@jgengine/core/gameplay"`
240
+
241
+ ## race-placements — look up one racer's place + win/lose within a finish order
242
+
243
+ - `placementOf` (function) · `import { placementOf } from "@jgengine/core/gameplay"`
244
+ - `racePlacements` (function) · `import { racePlacements } from "@jgengine/core/gameplay"`
245
+
246
+ ## race-session — pure idle→countdown→racing→finished clock every racer wraps around its state
247
+
248
+ - `idleRaceSession` (function) · `import { idleRaceSession } from "@jgengine/core/gameplay"`
249
+
250
+ ## race-track — a checkpoint race with laps, standings, splits, and win conditions
251
+
252
+ - `createRaceState` (function) · `import { createRaceState } from "@jgengine/core/gameplay"`
253
+
254
+ ## resolve — the current tier/band label for a keyed or scalar value
255
+
256
+ - `tierAt` (function) · `import { tierAt } from "@jgengine/core/gameplay"`
257
+
258
+ ## resource-ledger — schedule recurring resource transactions with policy transforms
259
+
260
+ - `createResourceLedger` (function) · `import { createResourceLedger } from "@jgengine/core/gameplay"`
261
+
262
+ ## resume-scheduled-rule — resume a paused scheduled rule, deferring missed cycles to its catch-up policy
263
+
264
+ - `resumeRule` (function) · `import { resumeRule } from "@jgengine/core/gameplay"`
265
+
266
+ ## resume-work — resume a paused job back into the queue's slot competition
267
+
268
+ - `resumeJob` (function) · `import { resumeJob } from "@jgengine/core/gameplay"`
269
+
270
+ ## retained-vfx — create/update/stop long-lived dynamic visual effects (beam, tether, zone, target line) by stable id
271
+
272
+ - `createVfxInstanceStore` (function) · `import { createVfxInstanceStore } from "@jgengine/core/gameplay"`
273
+
274
+ ## rule-selection — register rules and bridge a selection to its contributed parameter layers
275
+
276
+ - `createRuleRegistry` (function) · `import { createRuleRegistry } from "@jgengine/core/gameplay"`
277
+ - `rerollRules` (function) · `import { rerollRules } from "@jgengine/core/gameplay"`
278
+ - `selectRules` (function) · `import { selectRules } from "@jgengine/core/gameplay"`
279
+
280
+ ## run-modifiers — a roguelike run built from stacking drafted modifier picks
281
+
282
+ - `createRunDraft` (function) · `import { createRunDraft } from "@jgengine/core/gameplay"`
283
+
284
+ ## set — a bounded keyed value in a caller-owned serializable record
285
+
286
+ - `setValue` (function) · `import { setValue } from "@jgengine/core/gameplay"`
287
+
288
+ ## social-emotes — emotes and social interactions between nearby players
289
+
290
+ - `createSocial` (function) · `import { createSocial } from "@jgengine/core/gameplay"`
291
+
292
+ ## spawn-points — register spawn locations and pick where entities respawn
293
+
294
+ - `createSpawnPoints` (function) · `import { createSpawnPoints } from "@jgengine/core/gameplay"`
295
+
296
+ ## stat-graph — derive game-defined stats from named inputs with provenance and preview
297
+
298
+ - `createStatGraph` (function) · `import { createStatGraph } from "@jgengine/core/gameplay"`
299
+
300
+ ## stat-graph-bridge — feed an existing StatModifierSet into a stat-graph source
301
+
302
+ - `statModifierContributions` (function) · `import { statModifierContributions } from "@jgengine/core/gameplay"`
303
+
304
+ ## system-schedule — compile fixed/frame/interval system ticks into deterministic ordered stages
305
+
306
+ - `compileSystemSchedule` (function) · `import { compileSystemSchedule } from "@jgengine/core/gameplay"`
307
+
308
+ ## tick-work — advance jobs over time, completing work and emitting typed lifecycle events
309
+
310
+ - `tick` (function) · `import { tick } from "@jgengine/core/gameplay"`
311
+
312
+ ## toast-feed — queue of transient self-expiring on-screen messages (toasts, announcer, kill-feed)
313
+
314
+ - `appendToast` (function) · `import { appendToast } from "@jgengine/core/gameplay"`
315
+ - `createToastQueue` (function) · `import { createToastQueue } from "@jgengine/core/gameplay"`
316
+
317
+ ## touch-controls — default on-screen button silhouette for a touch action
318
+
319
+ - `touchButtonShape` (function) · `import { touchButtonShape } from "@jgengine/core/gameplay"`
320
+
321
+ ## triggered-rules — event-conditioned effects with declarative predicates, lifetimes, and stacking
322
+
323
+ - `createTriggeredRuleEngine` (function) · `import { createTriggeredRuleEngine } from "@jgengine/core/gameplay"`
324
+ - `getRuleEffect` (function) · `import { getRuleEffect } from "@jgengine/core/gameplay"`
325
+ - `listRuleEffects` (function) · `import { listRuleEffects } from "@jgengine/core/gameplay"`
326
+ - `registerRuleEffect` (function) · `import { registerRuleEffect } from "@jgengine/core/gameplay"`
327
+
328
+ ## unit-training — compose a timed work queue that trains catalog units into spawn orders
329
+
330
+ - `unitTrainingConfig` (function) · `import { unitTrainingConfig } from "@jgengine/core/gameplay"`
331
+
332
+ ## unlockables — gate content behind unlock conditions the player earns
333
+
334
+ - `createUnlockCatalog` (function) · `import { createUnlockCatalog } from "@jgengine/core/gameplay"`
335
+
336
+ ## wallet — hold currency balances with charge and affordability checks
337
+
338
+ - `createEmptyWallet` (function) · `import { createEmptyWallet } from "@jgengine/core/gameplay"`
339
+
340
+ ## weapon-stats — resolve per-weapon stat values for combat math
341
+
342
+ - `createWeaponStats` (function) · `import { createWeaponStats } from "@jgengine/core/gameplay"`
343
+
344
+ ## weighted-pick — pick one item from a set with an injected random source
345
+
346
+ - `pickUniform` (function) · `import { pickUniform } from "@jgengine/core/gameplay"`
347
+
348
+ ## work-active-jobs — list jobs currently progressing in a work queue
349
+
350
+ - `activeJobs` (function) · `import { activeJobs } from "@jgengine/core/gameplay"`
351
+
352
+ ## work-job-by-id — look up a queued job by id
353
+
354
+ - `jobById` (function) · `import { jobById } from "@jgengine/core/gameplay"`
355
+
356
+ ## work-job-progress — compute a job's fractional progress
357
+
358
+ - `jobProgress` (function) · `import { jobProgress } from "@jgengine/core/gameplay"`
359
+
360
+ ## work-order-fifo — order queued jobs by enqueue sequence
361
+
362
+ - `fifoOrdering` (function) · `import { fifoOrdering } from "@jgengine/core/gameplay"`
363
+
364
+ ## work-order-priority — order queued jobs by priority, then FIFO within equal priority
365
+
366
+ - `priorityOrdering` (function) · `import { priorityOrdering } from "@jgengine/core/gameplay"`
367
+
368
+ ## work-queue — a serializable timed job queue with reservation, cancellation, completion, and output routing
369
+
370
+ - `createWorkQueue` (function) · `import { createWorkQueue } from "@jgengine/core/gameplay"`
371
+
372
+ ## work-queue-size — count non-terminal jobs in a work queue
373
+
374
+ - `queueSize` (function) · `import { queueSize } from "@jgengine/core/gameplay"`
375
+
376
+ ## work-queued-jobs — list jobs waiting for a slot, in selection order
377
+
378
+ - `queuedJobs` (function) · `import { queuedJobs } from "@jgengine/core/gameplay"`
@@ -0,0 +1,60 @@
1
+ # Composable systems (`defineSystem`)
2
+
3
+ Single public authoring path: `defineGame({ systems, loop?, … })` from `@jgengine/shell/defineGame` (or core). Systems are meaningful capabilities — not micro-ticks.
4
+
5
+ ## API
6
+
7
+ ```ts
8
+ import { defineSystem } from "@jgengine/core/game/defineSystem";
9
+ import { compileSystemSchedule, DEFAULT_FIXED_STAGES, DEFAULT_FRAME_STAGES } from "@jgengine/core/game/systemSchedule";
10
+ import { composeGameLoop, installSystems } from "@jgengine/core/game/systemRuntime";
11
+
12
+ export const combat = defineSystem({
13
+ id: "combat",
14
+ feature: "quest", // optional — enables ctx.game.quest without features: { quest: true }
15
+ dependsOn: ["movement"], // optional — must also be in systems[]
16
+ tick: {
17
+ type: "fixed", // | "frame" | "interval" | "manual"
18
+ rate: 60, // fixed only (Hz); default 60
19
+ every: 1, // interval only (game-seconds)
20
+ stage: "combat",
21
+ after: "movement", // optional local order within the stage
22
+ before: "cleanup",
23
+ },
24
+ create(ctx) {},
25
+ start(ctx) {},
26
+ update(ctx, dt) {},
27
+ events: {
28
+ "entity.died"(ctx, event) {},
29
+ },
30
+ save: { key: "combat", snapshot: () => state, hydrate: (data) => { state = data; } },
31
+ replicate: (ctx) => ({ key: "combat-pub", snapshot: () => pub, hydrate: (d) => { pub = d; } }),
32
+ reset(ctx) {},
33
+ dispose(ctx) {},
34
+ });
35
+ ```
36
+
37
+ `defineGame` OR-merges `feature` flags, then `composeGameLoop(systems, loop)` so systems install on `onInit` and tick before residual `loop.onTick`. Classic games migrate by moving fan-out out of `onTick` into systems while keeping boot in `loop`.
38
+
39
+ ## Timing channels
40
+
41
+ | `tick.type` | When it runs |
42
+ |-------------|--------------|
43
+ | `fixed` | Accumulator at `rate` Hz (default 60); multi-subscribe OK |
44
+ | `frame` | Once per `onTick` with the frame's game `dt` |
45
+ | `interval` | Every `every` game-seconds (own accumulator per system) |
46
+ | `manual` | Installed only; call `systemsOf(ctx)?.runManual(ctx, id)` |
47
+ | *(omit)* | Event-only — handlers in `events` |
48
+
49
+ Multiple systems may share a channel. Order is stage tables + optional `before`/`after` — **never import order**. `compileSystemSchedule` validates unique ids, `dependsOn`, and cycles.
50
+
51
+ Default stages: fixed `input → movement → combat → ai → activities → cleanup`; frame includes those plus `animation → camera → effects`.
52
+
53
+ ## Cartridge path
54
+
55
+ Cartridge remains a convenience wrapper. Express the same shape as ordinary systems (`runFlow`, wave director, combat) under `defineGame({ systems })` when you outgrow the cartridge schema — one authoring model, no rewrite cliff.
56
+
57
+ ## Ownership
58
+
59
+ - **Save / replicate** — system modules register via `ctx.game.registerSave` / `registerReplicate` at install.
60
+ - **Reset / dispose** — `loop.onReset` / `loop.onDispose` (composed) run system hooks.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: jgengine-world
3
+ description: Build spatial runtime, movement, interaction, AI, and environments.
4
+ ---
5
+
6
+ # JGengine world runtime
7
+
8
+ ## Ownership
9
+
10
+ This skill owns runtime spatial behavior: authored-scene consumption, environments, movement, input mapping, interaction, AI, navigation, physics, visibility, time, and spatial audio. Scene creation and placement stay in `jgengine-editor`; presentation stays in `jgengine-ui`.
11
+
12
+ Search [capabilities.md](capabilities.md) by intent before designing a primitive. Use [api.md](api.md) for exact exports and [reference.md](reference.md) for environment, camera, navigation, physics, audio, and authored-scene recipes.
13
+
14
+ ## Canonical workflows
15
+
16
+ ### Authored world
17
+
18
+ 1. Load the scene document through the shared authored-scene feature.
19
+ 2. Render objects, paths, terrain, foliage, and markers generically.
20
+ 3. Query the same ids/layers for spawns, routes, plots, and interaction.
21
+ 4. Keep derived caches rebuildable; the document remains authoritative.
22
+
23
+ ### Movement and interaction
24
+
25
+ Choose input intent, controller/motor, collision/navigation, and camera as separate seams. Commands express game intent; world systems resolve motion. Interaction targets come from bounded spatial/sensor queries, not full-world scans.
26
+
27
+ ### AI and navigation
28
+
29
+ Compose perception, selection, planning/behavior, movement, and lifecycle independently. Inject randomness and scheduling. Use spatial indexes, interest tiers, or bounded candidate sets for scale.
30
+
31
+ ## Traps
32
+
33
+ - Do not put UI layout, touch chrome, combat resolution, or asset acquisition here.
34
+ - Do not duplicate editor coordinates in runtime state.
35
+ - Public APIs accept semantic policies and caller data, not renderer mechanics or internal tuning rolls.
36
+ - Generated environments still need deterministic data assertions; authored environments need scene-document assertions.
37
+ - Audio files and licensing belong to `jgengine-assets`; spatial playback policy belongs here.
38
+