@jgengine/core 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (727) hide show
  1. package/CHANGELOG.md +39 -2
  2. package/LICENSE +203 -661
  3. package/README.md +1 -1
  4. package/dist/ai/crowd.d.ts +55 -0
  5. package/dist/ai/crowd.js +114 -0
  6. package/dist/ai/flock.d.ts +5 -2
  7. package/dist/ai/flock.js +5 -2
  8. package/dist/ai/groupAssist.d.ts +1 -0
  9. package/dist/ai/groupAssist.js +1 -0
  10. package/dist/ai/heatSystem.d.ts +76 -0
  11. package/dist/ai/heatSystem.js +97 -0
  12. package/dist/ai/interestScheduler.d.ts +107 -0
  13. package/dist/ai/interestScheduler.js +118 -0
  14. package/dist/ai/jobBoard.d.ts +1 -0
  15. package/dist/ai/jobBoard.js +1 -0
  16. package/dist/ai/laneSelect.d.ts +5 -2
  17. package/dist/ai/laneSelect.js +5 -2
  18. package/dist/ai/mobBrain.d.ts +1 -0
  19. package/dist/ai/mobBrain.js +1 -0
  20. package/dist/ai/populationDirector.d.ts +103 -0
  21. package/dist/ai/populationDirector.js +190 -0
  22. package/dist/ai/pursuit.d.ts +56 -0
  23. package/dist/ai/pursuit.js +53 -0
  24. package/dist/ai/spawnDirector.d.ts +7 -2
  25. package/dist/ai/spawnDirector.js +18 -15
  26. package/dist/ai/spawnPoint.d.ts +3 -1
  27. package/dist/ai/spawnPoint.js +3 -1
  28. package/dist/ai/targetAcquisition.d.ts +84 -0
  29. package/dist/ai/targetAcquisition.js +92 -0
  30. package/dist/anim/easing.d.ts +19 -0
  31. package/dist/anim/easing.js +19 -0
  32. package/dist/anim/oscillator.d.ts +12 -0
  33. package/dist/anim/oscillator.js +25 -0
  34. package/dist/area/areaEffectField.d.ts +127 -0
  35. package/dist/area/areaEffectField.js +175 -0
  36. package/dist/area/stackPolicy.d.ts +47 -0
  37. package/dist/area/stackPolicy.js +99 -0
  38. package/dist/authoring.d.ts +2 -1
  39. package/dist/authoring.js +2 -1
  40. package/dist/board/laneBoard.d.ts +13 -0
  41. package/dist/board/laneBoard.js +13 -0
  42. package/dist/board/timelineBoard.d.ts +10 -0
  43. package/dist/board/timelineBoard.js +10 -0
  44. package/dist/combat/abilityKit.d.ts +18 -0
  45. package/dist/combat/abilityKit.js +24 -9
  46. package/dist/combat/animationState.d.ts +5 -0
  47. package/dist/combat/animationState.js +5 -0
  48. package/dist/combat/breakMeters.d.ts +10 -0
  49. package/dist/combat/breakMeters.js +10 -0
  50. package/dist/combat/castRunner.d.ts +5 -0
  51. package/dist/combat/castRunner.js +5 -0
  52. package/dist/combat/comboPoints.d.ts +5 -0
  53. package/dist/combat/comboPoints.js +5 -0
  54. package/dist/combat/comboString.d.ts +5 -0
  55. package/dist/combat/comboString.js +5 -0
  56. package/dist/combat/damageInterceptors.d.ts +192 -0
  57. package/dist/combat/damageInterceptors.js +251 -0
  58. package/dist/combat/damageMatchup.d.ts +68 -0
  59. package/dist/combat/damageMatchup.js +42 -0
  60. package/dist/combat/damageResolution.d.ts +63 -0
  61. package/dist/combat/damageResolution.js +50 -0
  62. package/dist/combat/death.d.ts +7 -1
  63. package/dist/combat/death.js +5 -0
  64. package/dist/combat/deathReason.d.ts +14 -0
  65. package/dist/combat/deathReason.js +1 -0
  66. package/dist/combat/defensiveWindow.d.ts +5 -0
  67. package/dist/combat/defensiveWindow.js +5 -0
  68. package/dist/combat/dotField.d.ts +5 -1
  69. package/dist/combat/dotField.js +5 -1
  70. package/dist/combat/downed.d.ts +5 -0
  71. package/dist/combat/downed.js +5 -0
  72. package/dist/combat/effects.d.ts +5 -0
  73. package/dist/combat/effects.js +5 -0
  74. package/dist/combat/encounterSequence.d.ts +258 -0
  75. package/dist/combat/encounterSequence.js +426 -0
  76. package/dist/combat/hitReaction.d.ts +57 -1
  77. package/dist/combat/hitReaction.js +45 -5
  78. package/dist/combat/magazine.d.ts +54 -0
  79. package/dist/combat/magazine.js +96 -0
  80. package/dist/combat/projectiles.d.ts +5 -0
  81. package/dist/combat/projectiles.js +32 -14
  82. package/dist/combat/receivedDamage.d.ts +117 -0
  83. package/dist/combat/receivedDamage.js +92 -0
  84. package/dist/combat/regenShield.d.ts +5 -1
  85. package/dist/combat/regenShield.js +5 -1
  86. package/dist/combat/renderCues.d.ts +51 -0
  87. package/dist/combat/renderCues.js +44 -0
  88. package/dist/combat/resourcePool.d.ts +5 -0
  89. package/dist/combat/resourcePool.js +5 -0
  90. package/dist/combat/rewardAllocation.d.ts +121 -0
  91. package/dist/combat/rewardAllocation.js +251 -0
  92. package/dist/combat/shotOrigin.d.ts +18 -1
  93. package/dist/combat/shotOrigin.js +39 -0
  94. package/dist/combat/statusApplication.d.ts +96 -0
  95. package/dist/combat/statusApplication.js +81 -0
  96. package/dist/combat/telegraph.d.ts +11 -2
  97. package/dist/combat/telegraph.js +11 -2
  98. package/dist/combat/thresholdCrossings.d.ts +85 -0
  99. package/dist/combat/thresholdCrossings.js +116 -0
  100. package/dist/combat.d.ts +35 -0
  101. package/dist/combat.js +35 -0
  102. package/dist/commands/commandRegistry.d.ts +11 -0
  103. package/dist/commands/commandRegistry.js +9 -2
  104. package/dist/crafting/crop.d.ts +18 -0
  105. package/dist/crafting/crop.js +18 -0
  106. package/dist/crafting/production.d.ts +5 -0
  107. package/dist/crafting/production.js +5 -0
  108. package/dist/devtools/controls.d.ts +38 -0
  109. package/dist/devtools/controls.js +181 -0
  110. package/dist/devtools/devtools.d.ts +5 -197
  111. package/dist/devtools/devtools.js +38 -774
  112. package/dist/devtools/discover.d.ts +32 -0
  113. package/dist/devtools/discover.js +240 -0
  114. package/dist/devtools/fallbackSeams.d.ts +50 -0
  115. package/dist/devtools/fallbackSeams.js +111 -0
  116. package/dist/devtools/frame.d.ts +15 -0
  117. package/dist/devtools/frame.js +247 -0
  118. package/dist/devtools/logs.d.ts +15 -0
  119. package/dist/devtools/logs.js +86 -0
  120. package/dist/devtools/overrides.d.ts +16 -0
  121. package/dist/devtools/overrides.js +66 -0
  122. package/dist/devtools/rewriteTunables.d.ts +17 -0
  123. package/dist/devtools/rewriteTunables.js +276 -0
  124. package/dist/devtools/saveEndpoint.d.ts +46 -0
  125. package/dist/devtools/saveEndpoint.js +48 -0
  126. package/dist/devtools/transformTunables.d.ts +3 -0
  127. package/dist/devtools/transformTunables.js +3 -0
  128. package/dist/devtools/tunableSchema.d.ts +31 -0
  129. package/dist/devtools/tunableSchema.js +31 -0
  130. package/dist/devtools/types.d.ts +212 -0
  131. package/dist/devtools/types.js +1 -0
  132. package/dist/economy/auctionBook.d.ts +122 -0
  133. package/dist/economy/auctionBook.js +213 -0
  134. package/dist/economy/currency.d.ts +12 -1
  135. package/dist/economy/currency.js +12 -1
  136. package/dist/economy/listingBook.d.ts +91 -0
  137. package/dist/economy/listingBook.js +144 -0
  138. package/dist/economy/priceHistory.d.ts +44 -0
  139. package/dist/economy/priceHistory.js +89 -0
  140. package/dist/economy/resourceLedger.d.ts +222 -0
  141. package/dist/economy/resourceLedger.js +353 -0
  142. package/dist/economy/sharedWallet.d.ts +14 -0
  143. package/dist/economy/sharedWallet.js +14 -0
  144. package/dist/economy/techTree.d.ts +12 -0
  145. package/dist/economy/techTree.js +12 -0
  146. package/dist/economy/unlockPoints.d.ts +92 -0
  147. package/dist/economy/unlockPoints.js +103 -0
  148. package/dist/economy/wallet.d.ts +26 -2
  149. package/dist/economy/wallet.js +35 -6
  150. package/dist/editor/commandApply.d.ts +5 -0
  151. package/dist/editor/commandApply.js +755 -0
  152. package/dist/editor/commands.d.ts +235 -7
  153. package/dist/editor/commands.js +82 -124
  154. package/dist/editor/directives.d.ts +94 -0
  155. package/dist/editor/directives.js +206 -0
  156. package/dist/editor/document.d.ts +194 -13
  157. package/dist/editor/document.js +1166 -19
  158. package/dist/editor/entityCatalog.d.ts +42 -0
  159. package/dist/editor/entityCatalog.js +101 -0
  160. package/dist/editor/environment.d.ts +74 -0
  161. package/dist/editor/environment.js +169 -0
  162. package/dist/editor/grid.d.ts +229 -0
  163. package/dist/editor/grid.js +366 -0
  164. package/dist/editor/gridAdapters.d.ts +80 -0
  165. package/dist/editor/gridAdapters.js +134 -0
  166. package/dist/editor/index.d.ts +98 -6
  167. package/dist/editor/index.js +13 -2
  168. package/dist/editor/liveSync.d.ts +127 -0
  169. package/dist/editor/liveSync.js +249 -0
  170. package/dist/editor/minimap.d.ts +31 -0
  171. package/dist/editor/minimap.js +73 -0
  172. package/dist/editor/runtimeInspector.d.ts +88 -0
  173. package/dist/editor/runtimeInspector.js +239 -0
  174. package/dist/editor/streamer.d.ts +66 -0
  175. package/dist/editor/streamer.js +68 -0
  176. package/dist/editor/types.d.ts +250 -1
  177. package/dist/editor/world.d.ts +136 -0
  178. package/dist/editor/world.js +303 -0
  179. package/dist/faction/reputation.d.ts +5 -0
  180. package/dist/faction/reputation.js +5 -0
  181. package/dist/format/distance.d.ts +17 -0
  182. package/dist/format/distance.js +18 -0
  183. package/dist/format/duration.d.ts +27 -0
  184. package/dist/format/duration.js +45 -0
  185. package/dist/format/speed.d.ts +17 -0
  186. package/dist/format/speed.js +25 -0
  187. package/dist/game/breeding.d.ts +161 -0
  188. package/dist/game/breeding.js +181 -0
  189. package/dist/game/cameraConfig.d.ts +451 -0
  190. package/dist/game/cameraConfig.js +1 -0
  191. package/dist/game/connectedPlayers.d.ts +6 -4
  192. package/dist/game/connectedPlayers.js +2 -2
  193. package/dist/game/cosmetics.d.ts +9 -0
  194. package/dist/game/cosmetics.js +16 -0
  195. package/dist/game/defineGame.d.ts +110 -5
  196. package/dist/game/defineGame.js +49 -4
  197. package/dist/game/defineSystem.d.ts +90 -0
  198. package/dist/game/defineSystem.js +47 -0
  199. package/dist/game/dialogue.d.ts +33 -0
  200. package/dist/game/dialogue.js +21 -0
  201. package/dist/game/events.d.ts +63 -13
  202. package/dist/game/events.js +5 -0
  203. package/dist/game/feed.d.ts +33 -0
  204. package/dist/game/feed.js +35 -2
  205. package/dist/game/gamePhase.d.ts +11 -0
  206. package/dist/game/gamePhase.js +16 -0
  207. package/dist/game/leaderboard.d.ts +5 -0
  208. package/dist/game/leaderboard.js +5 -0
  209. package/dist/game/loadout.d.ts +5 -0
  210. package/dist/game/loadout.js +5 -0
  211. package/dist/game/lootFilter.d.ts +2 -0
  212. package/dist/game/lootFilter.js +2 -0
  213. package/dist/game/lootPipeline.d.ts +164 -0
  214. package/dist/game/lootPipeline.js +216 -0
  215. package/dist/game/lootTable.d.ts +19 -2
  216. package/dist/game/lootTable.js +15 -5
  217. package/dist/game/objectives.d.ts +43 -0
  218. package/dist/game/objectives.js +36 -0
  219. package/dist/game/paramLayers.d.ts +148 -0
  220. package/dist/game/paramLayers.js +185 -0
  221. package/dist/game/ping.d.ts +5 -0
  222. package/dist/game/ping.js +5 -0
  223. package/dist/game/playableGame.d.ts +116 -432
  224. package/dist/game/playableGame.js +1 -1
  225. package/dist/game/progression.d.ts +35 -0
  226. package/dist/game/progression.js +19 -0
  227. package/dist/game/quest.d.ts +8 -0
  228. package/dist/game/quest.js +30 -3
  229. package/dist/game/race.d.ts +141 -0
  230. package/dist/game/race.js +169 -0
  231. package/dist/game/recordBook.d.ts +3 -1
  232. package/dist/game/recordBook.js +4 -1
  233. package/dist/game/ruleSelection.d.ts +75 -0
  234. package/dist/game/ruleSelection.js +127 -0
  235. package/dist/game/runDraft.d.ts +5 -0
  236. package/dist/game/runDraft.js +5 -0
  237. package/dist/game/saveStore.d.ts +111 -0
  238. package/dist/game/saveStore.js +312 -0
  239. package/dist/game/snapshotHistory.d.ts +67 -0
  240. package/dist/game/snapshotHistory.js +95 -0
  241. package/dist/game/social.d.ts +38 -1
  242. package/dist/game/social.js +71 -0
  243. package/dist/game/spawnPoints.d.ts +5 -0
  244. package/dist/game/spawnPoints.js +5 -0
  245. package/dist/game/systemRuntime.d.ts +50 -0
  246. package/dist/game/systemRuntime.js +157 -0
  247. package/dist/game/systemSchedule.d.ts +72 -0
  248. package/dist/game/systemSchedule.js +242 -0
  249. package/dist/game/toasts.d.ts +43 -0
  250. package/dist/game/toasts.js +44 -0
  251. package/dist/game/trade.d.ts +10 -0
  252. package/dist/game/trade.js +10 -0
  253. package/dist/game/tribe.d.ts +184 -0
  254. package/dist/game/tribe.js +432 -0
  255. package/dist/game/unlocks.d.ts +8 -0
  256. package/dist/game/unlocks.js +16 -0
  257. package/dist/game/vfxInstance.d.ts +138 -0
  258. package/dist/game/vfxInstance.js +96 -0
  259. package/dist/game/worldItem.d.ts +17 -4
  260. package/dist/game/worldItem.js +17 -4
  261. package/dist/gameplay.d.ts +93 -0
  262. package/dist/gameplay.js +93 -0
  263. package/dist/index.d.ts +5 -14
  264. package/dist/index.js +5 -14
  265. package/dist/input/actionBindings.d.ts +23 -6
  266. package/dist/input/actionBindings.js +23 -6
  267. package/dist/input/axisInput.d.ts +7 -2
  268. package/dist/input/axisInput.js +7 -2
  269. package/dist/input/controlGroups.d.ts +67 -0
  270. package/dist/input/controlGroups.js +41 -0
  271. package/dist/input/touchScheme.d.ts +82 -6
  272. package/dist/input/touchScheme.js +123 -10
  273. package/dist/interaction/lockpick.d.ts +61 -0
  274. package/dist/interaction/lockpick.js +168 -0
  275. package/dist/interaction/proximityPrompt.d.ts +2 -0
  276. package/dist/interaction/proximityPrompt.js +2 -0
  277. package/dist/interaction/qte.d.ts +5 -0
  278. package/dist/interaction/qte.js +5 -0
  279. package/dist/interaction/skillCheck.d.ts +5 -0
  280. package/dist/interaction/skillCheck.js +5 -0
  281. package/dist/inventory/encumbrance.d.ts +69 -0
  282. package/dist/inventory/encumbrance.js +68 -0
  283. package/dist/inventory/inventoryModel.d.ts +12 -0
  284. package/dist/inventory/inventoryModel.js +12 -0
  285. package/dist/inventory/shapedGrid.d.ts +16 -0
  286. package/dist/inventory/shapedGrid.js +16 -0
  287. package/dist/inventory/slotModel.d.ts +10 -0
  288. package/dist/inventory/slotModel.js +10 -0
  289. package/dist/item/durability.d.ts +5 -0
  290. package/dist/item/durability.js +6 -3
  291. package/dist/item/itemIdentity.d.ts +171 -0
  292. package/dist/item/itemIdentity.js +138 -0
  293. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  294. package/dist/item/itemInstanceRegistry.js +34 -0
  295. package/dist/item/itemgen.d.ts +163 -0
  296. package/dist/item/itemgen.js +151 -0
  297. package/dist/item/modularItem.d.ts +5 -0
  298. package/dist/item/modularItem.js +5 -0
  299. package/dist/item/use.d.ts +5 -0
  300. package/dist/item/use.js +5 -0
  301. package/dist/item/useBehavior.d.ts +142 -0
  302. package/dist/item/useBehavior.js +105 -0
  303. package/dist/item/weapon.d.ts +5 -0
  304. package/dist/item/weapon.js +5 -0
  305. package/dist/math/scalar.d.ts +25 -0
  306. package/dist/math/scalar.js +47 -0
  307. package/dist/meta/changelog.d.ts +4 -1
  308. package/dist/meta/changelog.js +39 -2
  309. package/dist/movement/avoidance.d.ts +45 -0
  310. package/dist/movement/avoidance.js +123 -0
  311. package/dist/movement/cameraRig.d.ts +8 -0
  312. package/dist/movement/cameraRig.js +8 -0
  313. package/dist/movement/dash.d.ts +11 -0
  314. package/dist/movement/dash.js +11 -0
  315. package/dist/movement/formation.d.ts +135 -0
  316. package/dist/movement/formation.js +194 -0
  317. package/dist/movement/glideModel.d.ts +5 -0
  318. package/dist/movement/glideModel.js +5 -0
  319. package/dist/movement/grappleSwing.d.ts +5 -0
  320. package/dist/movement/grappleSwing.js +5 -0
  321. package/dist/movement/leaderTrail.d.ts +5 -0
  322. package/dist/movement/leaderTrail.js +5 -0
  323. package/dist/movement/movementModel.d.ts +50 -9
  324. package/dist/movement/movementModel.js +75 -29
  325. package/dist/movement/playerMovement.js +167 -12
  326. package/dist/movement/poseState.d.ts +13 -0
  327. package/dist/movement/poseState.js +16 -0
  328. package/dist/movement/steering.d.ts +8 -0
  329. package/dist/movement/steering.js +18 -0
  330. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  331. package/dist/multiplayer/combatSnapshot.js +16 -8
  332. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  333. package/dist/multiplayer/lagCompensation.js +5 -0
  334. package/dist/multiplayer/presenceModel.d.ts +11 -1
  335. package/dist/multiplayer/presenceModel.js +17 -1
  336. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  337. package/dist/multiplayer/simultaneousCommit.js +3 -0
  338. package/dist/multiplayer.d.ts +11 -0
  339. package/dist/multiplayer.js +11 -0
  340. package/dist/nav/pathFollow.d.ts +57 -0
  341. package/dist/nav/pathFollow.js +109 -0
  342. package/dist/orders/orderKinds.d.ts +156 -0
  343. package/dist/orders/orderKinds.js +197 -0
  344. package/dist/orders/orderQueue.d.ts +208 -0
  345. package/dist/orders/orderQueue.js +211 -0
  346. package/dist/physics/drivableVehicle.d.ts +31 -0
  347. package/dist/physics/drivableVehicle.js +16 -0
  348. package/dist/physics/flightDynamics.d.ts +82 -0
  349. package/dist/physics/flightDynamics.js +165 -0
  350. package/dist/physics/gravityField.d.ts +25 -0
  351. package/dist/physics/gravityField.js +41 -0
  352. package/dist/physics/kinematicVehicle.d.ts +108 -1
  353. package/dist/physics/kinematicVehicle.js +212 -15
  354. package/dist/physics/physicsWorld.d.ts +50 -12
  355. package/dist/physics/physicsWorld.js +120 -122
  356. package/dist/physics/radialImpulse.d.ts +25 -0
  357. package/dist/physics/radialImpulse.js +27 -0
  358. package/dist/physics/vehicleObstacles.d.ts +44 -0
  359. package/dist/physics/vehicleObstacles.js +115 -0
  360. package/dist/procedural.d.ts +3 -0
  361. package/dist/procedural.js +3 -0
  362. package/dist/progression/statGraph.d.ts +116 -0
  363. package/dist/progression/statGraph.js +318 -0
  364. package/dist/puzzle/cellGrid.d.ts +9 -0
  365. package/dist/puzzle/cellGrid.js +9 -0
  366. package/dist/puzzle/fallingPiece.d.ts +9 -0
  367. package/dist/puzzle/fallingPiece.js +9 -0
  368. package/dist/puzzle/nonogram.d.ts +39 -0
  369. package/dist/puzzle/nonogram.js +136 -0
  370. package/dist/random/nameGen.d.ts +5 -0
  371. package/dist/random/nameGen.js +5 -0
  372. package/dist/random/pick.d.ts +8 -0
  373. package/dist/random/pick.js +31 -0
  374. package/dist/random/rng.d.ts +26 -1
  375. package/dist/random/rng.js +32 -9
  376. package/dist/random/seedLink.d.ts +4 -0
  377. package/dist/random/seedLink.js +4 -0
  378. package/dist/relation/keyedValues.d.ts +54 -0
  379. package/dist/relation/keyedValues.js +115 -0
  380. package/dist/relation/thresholds.d.ts +62 -0
  381. package/dist/relation/thresholds.js +62 -0
  382. package/dist/render/color.d.ts +12 -0
  383. package/dist/render/color.js +26 -0
  384. package/dist/render/lookPreset.d.ts +41 -0
  385. package/dist/render/lookPreset.js +29 -0
  386. package/dist/render/postProcessing.d.ts +20 -0
  387. package/dist/render/postProcessing.js +21 -1
  388. package/dist/rules/predicate.d.ts +53 -0
  389. package/dist/rules/predicate.js +64 -0
  390. package/dist/rules/ruleEffects.d.ts +38 -0
  391. package/dist/rules/ruleEffects.js +37 -0
  392. package/dist/rules/triggeredRules.d.ts +160 -0
  393. package/dist/rules/triggeredRules.js +241 -0
  394. package/dist/runtime/adapter.d.ts +55 -3
  395. package/dist/runtime/adapter.js +57 -1
  396. package/dist/runtime/cameraDirector.d.ts +1 -0
  397. package/dist/runtime/cameraDirector.js +1 -0
  398. package/dist/runtime/commandRunner.d.ts +1 -0
  399. package/dist/runtime/commandRunner.js +1 -0
  400. package/dist/runtime/context/combat.d.ts +51 -0
  401. package/dist/runtime/context/combat.js +130 -0
  402. package/dist/runtime/context/combatFx.d.ts +23 -0
  403. package/dist/runtime/context/combatFx.js +161 -0
  404. package/dist/runtime/context/deathLoot.d.ts +30 -0
  405. package/dist/runtime/context/deathLoot.js +39 -0
  406. package/dist/runtime/context/player.d.ts +48 -0
  407. package/dist/runtime/context/player.js +125 -0
  408. package/dist/runtime/context/registries.d.ts +13 -0
  409. package/dist/runtime/context/registries.js +84 -0
  410. package/dist/runtime/context/scene.d.ts +59 -0
  411. package/dist/runtime/context/scene.js +291 -0
  412. package/dist/runtime/context/snapshotCodecs.d.ts +12 -0
  413. package/dist/runtime/context/snapshotCodecs.js +26 -0
  414. package/dist/runtime/context/worldItems.d.ts +21 -0
  415. package/dist/runtime/context/worldItems.js +37 -0
  416. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  417. package/dist/runtime/descriptors/baseline.js +157 -0
  418. package/dist/runtime/descriptors/features.d.ts +79 -0
  419. package/dist/runtime/descriptors/features.js +299 -0
  420. package/dist/runtime/gameContext.d.ts +2 -327
  421. package/dist/runtime/gameContext.js +273 -778
  422. package/dist/runtime/gameContextTypes.d.ts +467 -0
  423. package/dist/runtime/gameContextTypes.js +1 -0
  424. package/dist/runtime/gameRuntime.d.ts +1 -0
  425. package/dist/runtime/gameRuntime.js +1 -0
  426. package/dist/runtime/headlessRunner.d.ts +62 -0
  427. package/dist/runtime/headlessRunner.js +45 -0
  428. package/dist/runtime/hostPersistence.d.ts +12 -0
  429. package/dist/runtime/hostPersistence.js +12 -0
  430. package/dist/runtime/hostPolicy.d.ts +51 -0
  431. package/dist/runtime/hostPolicy.js +68 -0
  432. package/dist/runtime/hostedGameRunner.d.ts +11 -4
  433. package/dist/runtime/hostedGameRunner.js +27 -3
  434. package/dist/runtime/hostedWorldSession.d.ts +15 -5
  435. package/dist/runtime/hostedWorldSession.js +12 -4
  436. package/dist/runtime/inputSnapshot.d.ts +8 -3
  437. package/dist/runtime/inputSnapshot.js +6 -2
  438. package/dist/runtime/motionIntents.d.ts +11 -2
  439. package/dist/runtime/motionIntents.js +16 -2
  440. package/dist/runtime/perContext.d.ts +15 -0
  441. package/dist/runtime/perContext.js +21 -0
  442. package/dist/runtime/runtimeSave.d.ts +79 -0
  443. package/dist/runtime/runtimeSave.js +105 -0
  444. package/dist/runtime/save.d.ts +4 -0
  445. package/dist/runtime/save.js +4 -0
  446. package/dist/runtime/snapshot.d.ts +7 -0
  447. package/dist/runtime/snapshot.js +7 -0
  448. package/dist/runtime/visibility.d.ts +2 -1
  449. package/dist/runtime/visibility.js +2 -1
  450. package/dist/runtime/worldChannel.d.ts +7 -3
  451. package/dist/runtime/worldChannel.js +51 -6
  452. package/dist/runtime/worldMirror.d.ts +14 -2
  453. package/dist/runtime/worldMirror.js +15 -2
  454. package/dist/runtime/worldProjection.d.ts +47 -0
  455. package/dist/runtime/worldProjection.js +52 -0
  456. package/dist/runtime/worldReplication.d.ts +30 -7
  457. package/dist/runtime/worldReplication.js +41 -9
  458. package/dist/runtime/worldSnapshot.d.ts +42 -3
  459. package/dist/runtime/worldSnapshot.js +34 -7
  460. package/dist/scene/assetCatalog.d.ts +26 -0
  461. package/dist/scene/assetCatalog.js +4 -0
  462. package/dist/scene/assetDiagnostics.d.ts +69 -0
  463. package/dist/scene/assetDiagnostics.js +110 -0
  464. package/dist/scene/assetGenerator.d.ts +65 -0
  465. package/dist/scene/assetGenerator.js +64 -0
  466. package/dist/scene/assetSpace.d.ts +137 -0
  467. package/dist/scene/assetSpace.js +257 -0
  468. package/dist/scene/authoredTriggers.d.ts +219 -0
  469. package/dist/scene/authoredTriggers.js +454 -0
  470. package/dist/scene/behaviorRuntime.d.ts +75 -0
  471. package/dist/scene/behaviorRuntime.js +217 -0
  472. package/dist/scene/behaviors.d.ts +14 -2
  473. package/dist/scene/behaviors.js +7 -2
  474. package/dist/scene/bodyBind.d.ts +60 -0
  475. package/dist/scene/bodyBind.js +51 -0
  476. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  477. package/dist/scene/builtinSceneKinds.js +67 -0
  478. package/dist/scene/colliders.d.ts +71 -1
  479. package/dist/scene/colliders.js +145 -1
  480. package/dist/scene/collisionMesh.d.ts +94 -0
  481. package/dist/scene/collisionMesh.js +699 -0
  482. package/dist/scene/companion.d.ts +147 -0
  483. package/dist/scene/companion.js +193 -0
  484. package/dist/scene/entityStats.d.ts +18 -11
  485. package/dist/scene/entityStats.js +21 -16
  486. package/dist/scene/entityStore.d.ts +12 -1
  487. package/dist/scene/entityStore.js +15 -0
  488. package/dist/scene/facing.d.ts +18 -0
  489. package/dist/scene/facing.js +26 -0
  490. package/dist/scene/modelSockets.d.ts +33 -0
  491. package/dist/scene/modelSockets.js +29 -0
  492. package/dist/scene/objectQuery.d.ts +2 -0
  493. package/dist/scene/objectQuery.js +2 -0
  494. package/dist/scene/objectStore.d.ts +4 -0
  495. package/dist/scene/objectStore.js +6 -0
  496. package/dist/scene/possession.d.ts +8 -0
  497. package/dist/scene/possession.js +14 -0
  498. package/dist/scene/roster.d.ts +3 -0
  499. package/dist/scene/roster.js +12 -0
  500. package/dist/scene/sceneKinds.d.ts +256 -0
  501. package/dist/scene/sceneKinds.js +218 -0
  502. package/dist/scene/sceneOwnership.d.ts +169 -0
  503. package/dist/scene/sceneOwnership.js +179 -0
  504. package/dist/scene/sceneRaycast.js +15 -0
  505. package/dist/scene/selectionBookmarks.d.ts +93 -0
  506. package/dist/scene/selectionBookmarks.js +122 -0
  507. package/dist/scene/vehicleSeat.d.ts +68 -0
  508. package/dist/scene/vehicleSeat.js +59 -0
  509. package/dist/sensor/concealment.d.ts +3 -0
  510. package/dist/sensor/concealment.js +3 -0
  511. package/dist/sensor/freezeMonitor.d.ts +1 -0
  512. package/dist/sensor/freezeMonitor.js +1 -0
  513. package/dist/sensor/frustumSensor.d.ts +7 -3
  514. package/dist/sensor/frustumSensor.js +7 -3
  515. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  516. package/dist/sensor/hiddenStateProbe.js +5 -2
  517. package/dist/sensor/recordingBuffer.d.ts +2 -1
  518. package/dist/sensor/recordingBuffer.js +2 -1
  519. package/dist/sensor/replayLoop.d.ts +6 -2
  520. package/dist/sensor/replayLoop.js +6 -2
  521. package/dist/sensor/revealQuery.d.ts +2 -1
  522. package/dist/sensor/revealQuery.js +2 -1
  523. package/dist/sensor/visionCone.d.ts +10 -3
  524. package/dist/sensor/visionCone.js +10 -3
  525. package/dist/session/contestedChannel.d.ts +1 -0
  526. package/dist/session/contestedChannel.js +1 -0
  527. package/dist/session/extraction.d.ts +1 -0
  528. package/dist/session/extraction.js +1 -0
  529. package/dist/session/roles.d.ts +6 -0
  530. package/dist/session/roles.js +6 -0
  531. package/dist/session/roundState.d.ts +8 -0
  532. package/dist/session/roundState.js +2 -0
  533. package/dist/settings/settingsModel.d.ts +1 -0
  534. package/dist/settings/settingsModel.js +1 -0
  535. package/dist/stats/accumulatorMeter.d.ts +6 -0
  536. package/dist/stats/accumulatorMeter.js +6 -0
  537. package/dist/stats/eventMeter.d.ts +5 -0
  538. package/dist/stats/eventMeter.js +5 -0
  539. package/dist/stats/rollCheck.d.ts +5 -0
  540. package/dist/stats/rollCheck.js +5 -0
  541. package/dist/stats/spawnLevelStats.d.ts +110 -0
  542. package/dist/stats/spawnLevelStats.js +140 -0
  543. package/dist/stats/statModifiers.d.ts +5 -0
  544. package/dist/stats/statModifiers.js +5 -0
  545. package/dist/stats/statPool.d.ts +70 -0
  546. package/dist/stats/statPool.js +59 -0
  547. package/dist/store/changeSignal.d.ts +3 -0
  548. package/dist/store/changeSignal.js +2 -0
  549. package/dist/store/defineKeyedStore.d.ts +38 -0
  550. package/dist/store/defineKeyedStore.js +42 -0
  551. package/dist/store/defineStore.d.ts +33 -0
  552. package/dist/store/defineStore.js +35 -0
  553. package/dist/store/observableKeyedStore.d.ts +7 -0
  554. package/dist/store/observableKeyedStore.js +35 -2
  555. package/dist/survival/decayMeter.d.ts +55 -0
  556. package/dist/survival/decayMeter.js +130 -57
  557. package/dist/survival/moodle.d.ts +2 -0
  558. package/dist/survival/regionHealth.d.ts +6 -0
  559. package/dist/survival/regionHealth.js +6 -3
  560. package/dist/tactics/fallingGrid.d.ts +4 -2
  561. package/dist/tactics/fallingGrid.js +4 -2
  562. package/dist/tactics/predictiveQuery.d.ts +3 -0
  563. package/dist/tactics/predictiveQuery.js +3 -0
  564. package/dist/tactics/snapshot.d.ts +2 -0
  565. package/dist/tactics/snapshot.js +2 -0
  566. package/dist/tactics/surface.d.ts +1 -0
  567. package/dist/tactics/surface.js +1 -0
  568. package/dist/tactics/tacticalGrid.d.ts +1 -0
  569. package/dist/tactics/tacticalGrid.js +1 -0
  570. package/dist/time/beatClock.d.ts +14 -4
  571. package/dist/time/beatClock.js +14 -4
  572. package/dist/time/calendarClock.d.ts +3 -0
  573. package/dist/time/calendarClock.js +3 -0
  574. package/dist/time/idleProgress.d.ts +4 -0
  575. package/dist/time/idleProgress.js +4 -0
  576. package/dist/time/simClock.d.ts +2 -0
  577. package/dist/time/simClock.js +20 -5
  578. package/dist/ui/actionModel.d.ts +110 -0
  579. package/dist/ui/actionModel.js +159 -0
  580. package/dist/ui/gameLayout.d.ts +30 -11
  581. package/dist/ui/gameLayout.js +30 -11
  582. package/dist/ui/hudDocument.d.ts +114 -0
  583. package/dist/ui/hudDocument.js +220 -0
  584. package/dist/ui/hudLayout.d.ts +38 -1
  585. package/dist/ui/hudLayout.js +220 -17
  586. package/dist/ui/selectionModel.d.ts +92 -0
  587. package/dist/ui/selectionModel.js +88 -0
  588. package/dist/ui/tooltipModel.d.ts +63 -0
  589. package/dist/ui/tooltipModel.js +82 -0
  590. package/dist/ui.d.ts +15 -0
  591. package/dist/ui.js +15 -0
  592. package/dist/visibility/bounds.d.ts +8 -1
  593. package/dist/visibility/bounds.js +8 -1
  594. package/dist/visibility/frustum.d.ts +12 -3
  595. package/dist/visibility/frustum.js +12 -3
  596. package/dist/work/jobQueue.d.ts +201 -0
  597. package/dist/work/jobQueue.js +253 -0
  598. package/dist/work/unitTraining.d.ts +58 -0
  599. package/dist/work/unitTraining.js +52 -0
  600. package/dist/world/authoredEntities.d.ts +29 -0
  601. package/dist/world/authoredEntities.js +29 -0
  602. package/dist/world/authoredObjects.d.ts +72 -0
  603. package/dist/world/authoredObjects.js +81 -0
  604. package/dist/world/authoredSpawn.d.ts +39 -0
  605. package/dist/world/authoredSpawn.js +37 -0
  606. package/dist/world/buildSockets.d.ts +152 -0
  607. package/dist/world/buildSockets.js +188 -0
  608. package/dist/world/buildingGenerator.d.ts +18 -0
  609. package/dist/world/buildingGenerator.js +62 -0
  610. package/dist/world/buildings.d.ts +5 -0
  611. package/dist/world/buildings.js +5 -0
  612. package/dist/world/catenary.d.ts +22 -0
  613. package/dist/world/catenary.js +69 -0
  614. package/dist/world/cityBlocks.d.ts +152 -0
  615. package/dist/world/cityBlocks.js +670 -0
  616. package/dist/world/cityContent.d.ts +77 -0
  617. package/dist/world/cityContent.js +261 -0
  618. package/dist/world/cityGeometry.d.ts +114 -0
  619. package/dist/world/cityGeometry.js +573 -0
  620. package/dist/world/cityKind.d.ts +314 -0
  621. package/dist/world/cityKind.js +1578 -0
  622. package/dist/world/features.d.ts +133 -10
  623. package/dist/world/features.js +66 -6
  624. package/dist/world/footprintGrid.d.ts +59 -0
  625. package/dist/world/footprintGrid.js +141 -0
  626. package/dist/world/geometry.d.ts +64 -0
  627. package/dist/world/geometry.js +94 -0
  628. package/dist/world/grassKind.d.ts +51 -0
  629. package/dist/world/grassKind.js +101 -0
  630. package/dist/world/markers.d.ts +50 -4
  631. package/dist/world/markers.js +49 -0
  632. package/dist/world/massing.js +1 -1
  633. package/dist/world/minimapBake.d.ts +78 -0
  634. package/dist/world/minimapBake.js +208 -0
  635. package/dist/world/minimapTrack.d.ts +17 -0
  636. package/dist/world/minimapTrack.js +22 -0
  637. package/dist/world/pathInstances.d.ts +27 -0
  638. package/dist/world/pathInstances.js +27 -0
  639. package/dist/world/pathNetwork.d.ts +159 -0
  640. package/dist/world/pathNetwork.js +684 -0
  641. package/dist/world/pathTerrain.d.ts +80 -0
  642. package/dist/world/pathTerrain.js +142 -0
  643. package/dist/world/place.d.ts +166 -0
  644. package/dist/world/place.js +96 -0
  645. package/dist/world/placeAsset.d.ts +81 -0
  646. package/dist/world/placeAsset.js +79 -0
  647. package/dist/world/placement.d.ts +4 -0
  648. package/dist/world/placement.js +4 -0
  649. package/dist/world/placementController.d.ts +6 -0
  650. package/dist/world/placementController.js +6 -0
  651. package/dist/world/poleLineKind.d.ts +40 -0
  652. package/dist/world/poleLineKind.js +97 -0
  653. package/dist/world/polyline.d.ts +34 -0
  654. package/dist/world/polyline.js +88 -0
  655. package/dist/world/resourceNode.d.ts +109 -0
  656. package/dist/world/resourceNode.js +140 -0
  657. package/dist/world/roads.d.ts +8 -0
  658. package/dist/world/roads.js +38 -0
  659. package/dist/world/scatter.js +2 -20
  660. package/dist/world/scatterRegion.d.ts +164 -0
  661. package/dist/world/scatterRegion.js +409 -0
  662. package/dist/world/sceneShapes.d.ts +43 -0
  663. package/dist/world/sceneShapes.js +1 -0
  664. package/dist/world/segment.d.ts +27 -0
  665. package/dist/world/segment.js +43 -0
  666. package/dist/world/soilKind.d.ts +48 -0
  667. package/dist/world/soilKind.js +92 -0
  668. package/dist/world/spatialSample.d.ts +241 -0
  669. package/dist/world/spatialSample.js +465 -0
  670. package/dist/world/streets.d.ts +29 -0
  671. package/dist/world/streets.js +55 -0
  672. package/dist/world/terraform.d.ts +213 -1
  673. package/dist/world/terraform.js +627 -22
  674. package/dist/world/terrain.d.ts +164 -20
  675. package/dist/world/terrain.js +325 -41
  676. package/dist/world/terrainGuides.d.ts +182 -0
  677. package/dist/world/terrainGuides.js +343 -0
  678. package/dist/world/vec2.d.ts +81 -0
  679. package/dist/world/vec2.js +128 -0
  680. package/dist/world/vec3.d.ts +49 -0
  681. package/dist/world/vec3.js +76 -0
  682. package/dist/world/vegetation.d.ts +71 -0
  683. package/dist/world/vegetation.js +151 -0
  684. package/dist/world/visibilityField.d.ts +154 -0
  685. package/dist/world/visibilityField.js +271 -0
  686. package/dist/world/volumetricClouds.d.ts +52 -0
  687. package/dist/world/volumetricClouds.js +43 -0
  688. package/dist/world/walls.d.ts +9 -0
  689. package/dist/world/walls.js +9 -0
  690. package/dist/world/waterKind.d.ts +55 -0
  691. package/dist/world/waterKind.js +99 -0
  692. package/dist/world.d.ts +141 -0
  693. package/dist/world.js +141 -0
  694. package/package.json +32 -8
  695. package/skills/game-design/SKILL.md +28 -0
  696. package/skills/game-design/agents/openai.yaml +4 -0
  697. package/skills/game-design/references/application-playbook.md +170 -0
  698. package/skills/game-design/references/field-guide.md +288 -0
  699. package/skills/jgengine/SKILL.md +54 -0
  700. package/skills/jgengine/api.md +527 -0
  701. package/skills/jgengine/capabilities.md +131 -0
  702. package/skills/jgengine/recipes/minimal-game.md +88 -0
  703. package/skills/jgengine-combat/SKILL.md +38 -0
  704. package/skills/jgengine-combat/api.md +585 -0
  705. package/skills/jgengine-combat/capabilities.md +213 -0
  706. package/skills/jgengine-combat/recipes/portable-stat-pools.md +122 -0
  707. package/skills/jgengine-combat/reference.md +108 -0
  708. package/skills/jgengine-gameplay/SKILL.md +39 -0
  709. package/skills/jgengine-gameplay/api.md +1920 -0
  710. package/skills/jgengine-gameplay/capabilities.md +454 -0
  711. package/skills/jgengine-gameplay/reference-systems.md +56 -0
  712. package/skills/jgengine-world/SKILL.md +51 -0
  713. package/skills/jgengine-world/api.md +3056 -0
  714. package/skills/jgengine-world/capabilities.md +476 -0
  715. package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
  716. package/skills/jgengine-world/reference.md +261 -0
  717. package/dist/cartridge/runtime.d.ts +0 -15
  718. package/dist/cartridge/runtime.js +0 -556
  719. package/dist/cartridge/spec.d.ts +0 -188
  720. package/dist/cartridge/spec.js +0 -19
  721. package/dist/cartridge/validate.d.ts +0 -2
  722. package/dist/cartridge/validate.js +0 -78
  723. package/dist/store/engineStore.d.ts +0 -22
  724. package/dist/store/engineStore.js +0 -50
  725. package/dist/store/features.d.ts +0 -10
  726. package/dist/store/features.js +0 -23
  727. package/llms.txt +0 -5389
@@ -0,0 +1,41 @@
1
+ import type { BackdropConfig, LightingConfig } from "../game/playableGame.js";
2
+ import type { SkyEnvironmentConfig } from "../world/features.js";
3
+ import type { PostProcessingConfig } from "./postProcessing.js";
4
+ /**
5
+ * Named default-look preset composing the existing lighting/sky/fog/post knobs into one field.
6
+ * `"cinematic"` (the default when unset) draws a scene lit like a shipped game — a real day sky
7
+ * with a view-following shadow-casting sun + hemisphere fill, a network-free image-based-lighting
8
+ * environment so PBR surfaces catch soft reflections, and a tuned tone-map/bloom/AO/vignette post
9
+ * stack. `"flat"` opts out of the sky/IBL/post rig to the bare ambient+directional default (pre-#773).
10
+ * The upgraded default primitive materials — tuned roughness/metalness plus subtle procedural surface
11
+ * detail so un-modeled boxes/capsules stop reading as flat plastic — apply under both presets.
12
+ * @capability default-look one field that lights a scene like a shipped game (opt out with "flat")
13
+ */
14
+ export type LookPreset = "cinematic" | "flat";
15
+ /** Explicit graphics knobs a game may set; the preset only fills the ones left undefined. */
16
+ export interface GameLookInput {
17
+ look?: LookPreset;
18
+ lighting?: LightingConfig;
19
+ backdrop?: BackdropConfig;
20
+ postProcessing?: PostProcessingConfig;
21
+ /** True when the world already declares its own sky — the preset then leaves the sky to the world. */
22
+ hasWorldSky?: boolean;
23
+ }
24
+ /** Concrete lighting/backdrop/post the shell renders after the preset has filled unset knobs. */
25
+ export interface ResolvedGameLook {
26
+ lighting?: LightingConfig;
27
+ backdrop?: BackdropConfig;
28
+ postProcessing?: PostProcessingConfig;
29
+ }
30
+ /** A static day sky: a real dome plus the shell's view-following shadow-casting sun and hemisphere fill. */
31
+ export declare const CINEMATIC_SKY: SkyEnvironmentConfig;
32
+ /** Tuned tone-map + bloom + gentle SSAO + vignette/grade stack — the shipped-game post look. */
33
+ export declare const CINEMATIC_POST_PROCESSING: PostProcessingConfig;
34
+ /**
35
+ * Expand a game's `look` into concrete lighting/backdrop/post. The default is `"cinematic"`, so a
36
+ * scene reads lit-like-a-game out of the box; `"flat"` passes the explicit knobs through untouched.
37
+ * Anything the game authored wins — the preset only fills unset knobs, and it never adds a sky when
38
+ * the world already owns one (so the sky's tuned sun/hemisphere serve as the lighting rig).
39
+ * @capability resolve-game-look expand a look preset into concrete lighting/backdrop/post knobs
40
+ */
41
+ export declare function resolveGameLook(input: GameLookInput): ResolvedGameLook;
@@ -0,0 +1,29 @@
1
+ /** A static day sky: a real dome plus the shell's view-following shadow-casting sun and hemisphere fill. */
2
+ export const CINEMATIC_SKY = { preset: "day" };
3
+ /** Tuned tone-map + bloom + gentle SSAO + vignette/grade stack — the shipped-game post look. */
4
+ export const CINEMATIC_POST_PROCESSING = {
5
+ toneMapping: "aces",
6
+ bloom: {},
7
+ ao: { intensity: 1.4 },
8
+ grade: {},
9
+ };
10
+ /**
11
+ * Expand a game's `look` into concrete lighting/backdrop/post. The default is `"cinematic"`, so a
12
+ * scene reads lit-like-a-game out of the box; `"flat"` passes the explicit knobs through untouched.
13
+ * Anything the game authored wins — the preset only fills unset knobs, and it never adds a sky when
14
+ * the world already owns one (so the sky's tuned sun/hemisphere serve as the lighting rig).
15
+ * @capability resolve-game-look expand a look preset into concrete lighting/backdrop/post knobs
16
+ */
17
+ export function resolveGameLook(input) {
18
+ const look = input.look ?? "cinematic";
19
+ if (look === "flat") {
20
+ return { lighting: input.lighting, backdrop: input.backdrop, postProcessing: input.postProcessing };
21
+ }
22
+ const sky = input.backdrop?.sky ?? (input.hasWorldSky === true ? undefined : CINEMATIC_SKY);
23
+ const backdrop = sky === input.backdrop?.sky ? input.backdrop : { ...input.backdrop, sky };
24
+ return {
25
+ lighting: input.lighting,
26
+ backdrop,
27
+ postProcessing: input.postProcessing ?? CINEMATIC_POST_PROCESSING,
28
+ };
29
+ }
@@ -34,6 +34,17 @@ export interface GradeConfig {
34
34
  vignette?: number;
35
35
  /** Animated film-grain amplitude. Default 0.012. */
36
36
  grain?: number;
37
+ /** Chromatic-aberration RGB split, in fractions of the frame (~0..0.01), scaled toward the edges. Default 0 (off). */
38
+ chromaticAberration?: number;
39
+ }
40
+ /** Depth-of-field (bokeh) stage — throws the fore/background out of focus around a focus distance. */
41
+ export interface DofConfig {
42
+ /** Focus distance from the camera in world units. Default 18. */
43
+ focus?: number;
44
+ /** Aperture — larger blurs a shallower slice more aggressively. Default 0.00025. */
45
+ aperture?: number;
46
+ /** Maximum blur radius, 0..1. Default 0.01. */
47
+ maxBlur?: number;
37
48
  }
38
49
  /**
39
50
  * Declarative post-processing chain (RenderPass → AO → Bloom → tone-map output →
@@ -52,5 +63,14 @@ export interface PostProcessingConfig {
52
63
  bloom?: BloomConfig | false;
53
64
  /** Ambient occlusion. Heavier than the other stages — omit or `false` on low-end targets. Default off (omitted). */
54
65
  ao?: AoConfig | false;
66
+ /** Depth-of-field / bokeh. Heavier stage — omit or `false` to skip. Default off (omitted). */
67
+ dof?: DofConfig | false;
55
68
  grade?: GradeConfig | false;
56
69
  }
70
+ /**
71
+ * A cinematic "product shot" post preset — the full chain on (contact-AO, soft bloom, a warm film
72
+ * grade with vignette + a touch of grain + chromatic aberration). Meant for a `StudioStage` where a
73
+ * single parametric asset is framed on a backdrop, so every studio reads shipped, not intern-tier. DoF
74
+ * is left off by default (it needs a per-scene focus distance); set `dof` to enable it.
75
+ */
76
+ export declare const STUDIO_STAGE_POST: PostProcessingConfig;
@@ -1 +1,21 @@
1
- export {};
1
+ /**
2
+ * A cinematic "product shot" post preset — the full chain on (contact-AO, soft bloom, a warm film
3
+ * grade with vignette + a touch of grain + chromatic aberration). Meant for a `StudioStage` where a
4
+ * single parametric asset is framed on a backdrop, so every studio reads shipped, not intern-tier. DoF
5
+ * is left off by default (it needs a per-scene focus distance); set `dof` to enable it.
6
+ */
7
+ export const STUDIO_STAGE_POST = {
8
+ toneMapping: "aces",
9
+ exposure: 1.05,
10
+ bloom: { strength: 0.28, radius: 0.6, threshold: 0.8 },
11
+ ao: { radius: 1.4, intensity: 2.2, distanceFalloff: 3, blend: 1 },
12
+ grade: {
13
+ lift: [0.008, 0.008, 0.014],
14
+ gain: [1.05, 1.02, 0.98],
15
+ gamma: 0.96,
16
+ saturation: 1.12,
17
+ vignette: 0,
18
+ grain: 0.006,
19
+ chromaticAberration: 0.001,
20
+ },
21
+ };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A declarative, serializable predicate AST evaluated against a plain fact bag. Predicates carry no
3
+ * closures, so they survive save/load and stay deterministic — the reusable condition seam that
4
+ * event-conditioned rules, quests, perks, and reactive AI gate on instead of hand-rolled callbacks.
5
+ */
6
+ /** A leaf value a predicate can compare against — JSON-safe so predicates serialize cleanly. */
7
+ export type PredicateValue = string | number | boolean | null;
8
+ /** Dot path into a fact bag, e.g. `"hit.crit"` or `"attacker.team"`. */
9
+ export type PredicatePath = string;
10
+ /**
11
+ * One node of the predicate tree. Combinators (`all`/`any`/`not`) nest; leaf comparators read a
12
+ * dot path from the facts and compare it. `has` passes when the path resolves to a non-nullish value.
13
+ */
14
+ export type Predicate = {
15
+ readonly all: readonly Predicate[];
16
+ } | {
17
+ readonly any: readonly Predicate[];
18
+ } | {
19
+ readonly not: Predicate;
20
+ } | {
21
+ readonly eq: readonly [PredicatePath, PredicateValue];
22
+ } | {
23
+ readonly ne: readonly [PredicatePath, PredicateValue];
24
+ } | {
25
+ readonly gt: readonly [PredicatePath, number];
26
+ } | {
27
+ readonly gte: readonly [PredicatePath, number];
28
+ } | {
29
+ readonly lt: readonly [PredicatePath, number];
30
+ } | {
31
+ readonly lte: readonly [PredicatePath, number];
32
+ } | {
33
+ readonly in: readonly [PredicatePath, readonly PredicateValue[]];
34
+ } | {
35
+ readonly has: PredicatePath;
36
+ };
37
+ /** Plain, serializable bag of facts a predicate reads by dot path. */
38
+ export type PredicateFacts = Record<string, unknown>;
39
+ /**
40
+ * Read a dot path out of a fact bag, descending only through plain objects. Returns `undefined` when
41
+ * any segment is missing or non-traversable. Bounded by the path's segment count.
42
+ *
43
+ * @capability declarative-predicate serializable data-driven conditions with no callbacks in saved content
44
+ */
45
+ export declare function readPath(facts: PredicateFacts, path: PredicatePath): unknown;
46
+ /**
47
+ * Evaluate a predicate against a fact bag. An omitted predicate matches unconditionally, so callers
48
+ * can treat "no condition" and "always" identically. Pure and deterministic — no allocation beyond
49
+ * path splits and no reliance on evaluation order between sibling clauses.
50
+ *
51
+ * @capability declarative-predicate serializable data-driven conditions with no callbacks in saved content
52
+ */
53
+ export declare function evaluatePredicate(predicate: Predicate | undefined, facts: PredicateFacts): boolean;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * A declarative, serializable predicate AST evaluated against a plain fact bag. Predicates carry no
3
+ * closures, so they survive save/load and stay deterministic — the reusable condition seam that
4
+ * event-conditioned rules, quests, perks, and reactive AI gate on instead of hand-rolled callbacks.
5
+ */
6
+ /**
7
+ * Read a dot path out of a fact bag, descending only through plain objects. Returns `undefined` when
8
+ * any segment is missing or non-traversable. Bounded by the path's segment count.
9
+ *
10
+ * @capability declarative-predicate serializable data-driven conditions with no callbacks in saved content
11
+ */
12
+ export function readPath(facts, path) {
13
+ let current = facts;
14
+ for (const segment of path.split(".")) {
15
+ if (typeof current !== "object" || current === null)
16
+ return undefined;
17
+ current = current[segment];
18
+ }
19
+ return current;
20
+ }
21
+ function asNumber(value) {
22
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
23
+ }
24
+ /**
25
+ * Evaluate a predicate against a fact bag. An omitted predicate matches unconditionally, so callers
26
+ * can treat "no condition" and "always" identically. Pure and deterministic — no allocation beyond
27
+ * path splits and no reliance on evaluation order between sibling clauses.
28
+ *
29
+ * @capability declarative-predicate serializable data-driven conditions with no callbacks in saved content
30
+ */
31
+ export function evaluatePredicate(predicate, facts) {
32
+ if (predicate === undefined)
33
+ return true;
34
+ if ("all" in predicate)
35
+ return predicate.all.every((child) => evaluatePredicate(child, facts));
36
+ if ("any" in predicate)
37
+ return predicate.any.some((child) => evaluatePredicate(child, facts));
38
+ if ("not" in predicate)
39
+ return !evaluatePredicate(predicate.not, facts);
40
+ if ("has" in predicate) {
41
+ const value = readPath(facts, predicate.has);
42
+ return value !== undefined && value !== null;
43
+ }
44
+ if ("eq" in predicate)
45
+ return readPath(facts, predicate.eq[0]) === predicate.eq[1];
46
+ if ("ne" in predicate)
47
+ return readPath(facts, predicate.ne[0]) !== predicate.ne[1];
48
+ if ("in" in predicate)
49
+ return predicate.in[1].includes(readPath(facts, predicate.in[0]));
50
+ if ("gt" in predicate) {
51
+ const value = asNumber(readPath(facts, predicate.gt[0]));
52
+ return value !== undefined && value > predicate.gt[1];
53
+ }
54
+ if ("gte" in predicate) {
55
+ const value = asNumber(readPath(facts, predicate.gte[0]));
56
+ return value !== undefined && value >= predicate.gte[1];
57
+ }
58
+ if ("lt" in predicate) {
59
+ const value = asNumber(readPath(facts, predicate.lt[0]));
60
+ return value !== undefined && value < predicate.lt[1];
61
+ }
62
+ const value = asNumber(readPath(facts, predicate.lte[0]));
63
+ return value !== undefined && value <= predicate.lte[1];
64
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * A registration seam for the effect ids that triggered rules reference. Saved content names an
3
+ * effect by id; the game declares what that id means here (label for inspectors, optional param
4
+ * schema note) so authored rules validate against a known vocabulary instead of stringly-invented,
5
+ * un-inspectable callbacks. Mirrors the authored-trigger action registry for editor parity.
6
+ */
7
+ import type { PredicateValue } from "./predicate.js";
8
+ /** A declared effect a triggered rule may reference. Behavior lives in the game; this is metadata. */
9
+ export interface RuleEffectDefinition {
10
+ /** Effect id used in {@link TriggeredRule.effect} references. */
11
+ id: string;
12
+ /** Human label for debug/inspector surfaces. */
13
+ label?: string;
14
+ /** Default params merged under a rule's own params, for authoring convenience. */
15
+ defaults?: Readonly<Record<string, PredicateValue>>;
16
+ }
17
+ /**
18
+ * Declare a rule effect id. Idempotent per id (last registration wins); call at module load next to
19
+ * catalogs so authored content and inspectors share one vocabulary.
20
+ *
21
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
22
+ */
23
+ export declare function registerRuleEffect(definition: RuleEffectDefinition): void;
24
+ /**
25
+ * Look up a declared rule effect, or `undefined` when the id was never registered — lets callers
26
+ * reject unknown effect references in authored content.
27
+ *
28
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
29
+ */
30
+ export declare function getRuleEffect(id: string): RuleEffectDefinition | undefined;
31
+ /**
32
+ * Every declared rule effect, for populating inspector dropdowns and validating a content set.
33
+ *
34
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
35
+ */
36
+ export declare function listRuleEffects(): RuleEffectDefinition[];
37
+ /** Clear the rule-effect registry — tests only. @internal */
38
+ export declare function clearRuleEffects(): void;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * A registration seam for the effect ids that triggered rules reference. Saved content names an
3
+ * effect by id; the game declares what that id means here (label for inspectors, optional param
4
+ * schema note) so authored rules validate against a known vocabulary instead of stringly-invented,
5
+ * un-inspectable callbacks. Mirrors the authored-trigger action registry for editor parity.
6
+ */
7
+ const registry = new Map();
8
+ /**
9
+ * Declare a rule effect id. Idempotent per id (last registration wins); call at module load next to
10
+ * catalogs so authored content and inspectors share one vocabulary.
11
+ *
12
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
13
+ */
14
+ export function registerRuleEffect(definition) {
15
+ registry.set(definition.id, definition);
16
+ }
17
+ /**
18
+ * Look up a declared rule effect, or `undefined` when the id was never registered — lets callers
19
+ * reject unknown effect references in authored content.
20
+ *
21
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
22
+ */
23
+ export function getRuleEffect(id) {
24
+ return registry.get(id);
25
+ }
26
+ /**
27
+ * Every declared rule effect, for populating inspector dropdowns and validating a content set.
28
+ *
29
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
30
+ */
31
+ export function listRuleEffects() {
32
+ return [...registry.values()];
33
+ }
34
+ /** Clear the rule-effect registry — tests only. @internal */
35
+ export function clearRuleEffects() {
36
+ registry.clear();
37
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * The reusable bridge from typed runtime events to effects. A triggered rule is pure data — which
3
+ * event it listens to, a declarative predicate over the event facts, how the affected target is
4
+ * resolved, an effect *reference* (never a callback), and how the resulting effect is gated, lived,
5
+ * and stacked. Affixes, talents, perks, quests, achievements, environment rules, and reactive AI all
6
+ * subscribe through this one seam instead of owning parallel trigger runtimes.
7
+ *
8
+ * Core stays decoupled from any specific effect system: `dispatch` returns provenance-rich firings
9
+ * and the game applies them to whatever effect/stat system it owns. Gate state (cooldowns, rate
10
+ * windows, remaining charges) and active timed effects serialize cleanly so future triggers survive
11
+ * save/load.
12
+ */
13
+ import { type Predicate, type PredicateFacts, type PredicateValue } from "./predicate.js";
14
+ /** Role slots an event exposes; a target selector resolves one of these to a concrete id. */
15
+ export type TargetRole = "subject" | "object" | "source" | "owner";
16
+ /**
17
+ * How a rule picks the id its effect lands on: a fixed event role, a dot path into the event facts,
18
+ * or a literal id. Data-only so it saves with the rule.
19
+ */
20
+ export type TargetSelector = {
21
+ readonly role: TargetRole;
22
+ } | {
23
+ readonly path: string;
24
+ } | {
25
+ readonly literal: string;
26
+ };
27
+ /** A reference to an effect the game knows how to apply — id plus JSON-safe params, no closures. */
28
+ export interface EffectRef {
29
+ readonly id: string;
30
+ readonly params?: Readonly<Record<string, PredicateValue>>;
31
+ }
32
+ /**
33
+ * How a repeated application of the same rule's effect on the same target combines with a live one:
34
+ * `refresh` re-arms the timer at one stack, `stack` adds a stack up to `maxStacks` and re-arms,
35
+ * `independent` keeps each application as its own instance with its own expiry, `ignore` drops the
36
+ * new application while one is already active.
37
+ */
38
+ export type StackPolicy = "refresh" | "stack" | "independent" | "ignore";
39
+ /** Bounded firing budget over a sliding time window. */
40
+ export interface RateLimit {
41
+ readonly count: number;
42
+ readonly windowMs: number;
43
+ }
44
+ /**
45
+ * A declarative subscription from an event to an effect. Everything here is serializable content —
46
+ * the runtime reads it, it never embeds behavior. `effect` names an effect the game resolves; core
47
+ * only routes and gates.
48
+ */
49
+ export interface TriggeredRule {
50
+ /** Stable id, unique within an engine. */
51
+ readonly id: string;
52
+ /** Event type this rule subscribes to. */
53
+ readonly event: string;
54
+ /** Owner/source identity (item instance, talent node, quest id) for provenance and bulk cleanup. */
55
+ readonly owner?: string;
56
+ /** Declarative gate over the event facts; omitted fires unconditionally. */
57
+ readonly when?: Predicate;
58
+ /** How the affected target id is resolved; defaults to the `subject` role. */
59
+ readonly target?: TargetSelector;
60
+ /** The effect to apply when the rule fires. */
61
+ readonly effect: EffectRef;
62
+ /** Minimum ms between fires of this rule against the same resolved target. */
63
+ readonly cooldownMs?: number;
64
+ /** Sliding-window firing cap across all targets. */
65
+ readonly rateLimit?: RateLimit;
66
+ /** Total fires before the rule is spent; omitted is unlimited. */
67
+ readonly charges?: number;
68
+ /** Lifetime of the applied effect in ms; omitted is instantaneous (no active instance kept). */
69
+ readonly durationMs?: number;
70
+ /** Stacking policy for repeat applications while an instance is live; defaults to `refresh`. */
71
+ readonly stacking?: StackPolicy;
72
+ /** Cap for the `stack` policy; defaults to 1 (i.e. behaves like `refresh` until raised). */
73
+ readonly maxStacks?: number;
74
+ }
75
+ /** A typed event handed to the engine; roles feed target resolution, facts feed the predicate. */
76
+ export interface RuleEvent {
77
+ readonly type: string;
78
+ readonly subject?: string;
79
+ readonly object?: string;
80
+ readonly source?: string;
81
+ /** Fact bag the predicate and `{ path }` target selectors read. */
82
+ readonly facts?: PredicateFacts;
83
+ }
84
+ /** A live timed effect an engine is tracking until it expires or is cleaned up. */
85
+ export interface ActiveEffect {
86
+ readonly instanceId: string;
87
+ readonly ruleId: string;
88
+ readonly effectId: string;
89
+ readonly owner: string | undefined;
90
+ readonly target: string;
91
+ readonly params: Readonly<Record<string, PredicateValue>> | undefined;
92
+ readonly appliedAt: number;
93
+ readonly expiresAt: number;
94
+ readonly stacks: number;
95
+ }
96
+ /** Reason a firing did not produce an effect — surfaced for debug inspection, never thrown. */
97
+ export type FiringBlock = "predicate" | "no-target" | "cooldown" | "rate-limit" | "no-charges" | "stack-ignored";
98
+ /**
99
+ * The outcome of matching one rule against one event. `applied` is the effect the caller should now
100
+ * run through its own effect system; a blocked firing reports why. Provenance (rule, owner, event,
101
+ * timestamp) rides along for auditability.
102
+ */
103
+ export interface RuleFiring {
104
+ readonly ruleId: string;
105
+ readonly event: string;
106
+ readonly owner: string | undefined;
107
+ readonly target: string;
108
+ readonly effect: EffectRef;
109
+ readonly at: number;
110
+ /** Set when the firing produced/updated a timed instance. */
111
+ readonly instanceId?: string;
112
+ /** Stack count on the target after this firing (>= 1 for timed effects). */
113
+ readonly stacks?: number;
114
+ /** Absent when the effect was applied; set when the firing was gated out. */
115
+ readonly blocked?: FiringBlock;
116
+ }
117
+ /** Serializable runtime state — everything that changes future triggers. Rules travel with it. */
118
+ export interface TriggeredRuleState {
119
+ seq: number;
120
+ rules: TriggeredRule[];
121
+ charges: Record<string, number>;
122
+ cooldowns: Record<string, number>;
123
+ windows: Record<string, number[]>;
124
+ active: ActiveEffect[];
125
+ }
126
+ /** A running set of triggered rules with gating, timed lifetimes, stacking, cleanup, and save/load. */
127
+ export interface TriggeredRuleEngine {
128
+ /** Register or replace a rule by id. */
129
+ add(rule: TriggeredRule): void;
130
+ /** Drop a rule and any active effects it produced. */
131
+ remove(ruleId: string): void;
132
+ /** Drop every rule and active effect belonging to an owner (unequip, respec, entity removal). */
133
+ removeByOwner(owner: string): void;
134
+ /** Snapshot of registered rules in insertion order. */
135
+ rules(): readonly TriggeredRule[];
136
+ /** Match an event against all rules, gate, spawn/refresh timed effects, and return firings. */
137
+ dispatch(event: RuleEvent, now: number): readonly RuleFiring[];
138
+ /** Advance time and return the active effects that expired (and were removed) this tick. */
139
+ tick(now: number): readonly ActiveEffect[];
140
+ /** All live timed effects. */
141
+ active(): readonly ActiveEffect[];
142
+ /** Live timed effects landed on a given target. */
143
+ activeFor(target: string): readonly ActiveEffect[];
144
+ /** Drop all active timed effects but keep rules and gate state. */
145
+ clearActive(): void;
146
+ /** Reset gate state and active effects (respec/encounter reset) while keeping rules. */
147
+ reset(): void;
148
+ /** Serialize all future-affecting state. */
149
+ snapshot(): TriggeredRuleState;
150
+ /** Replace all state from a snapshot. */
151
+ hydrate(state: TriggeredRuleState): void;
152
+ }
153
+ /**
154
+ * Create an empty triggered-rule engine. Rules are added as data; dispatching an event returns the
155
+ * firings the caller applies to its own effect system. Time is caller-supplied (`now` in ms), so the
156
+ * engine is deterministic and drives equally from a fixed-step loop or a save-restored timeline.
157
+ *
158
+ * @capability triggered-rules event-conditioned effects with declarative predicates, lifetimes, and stacking
159
+ */
160
+ export declare function createTriggeredRuleEngine(rules?: readonly TriggeredRule[]): TriggeredRuleEngine;