@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,59 @@
1
+ import { createMountController, MountController } from "./mount.js";
2
+ /**
3
+ * Composes `scene/mount`'s control-transfer bookkeeping with the seat/camera/movement-mode transition
4
+ * every enter/exit-vehicle flow needs (#533.2): boarding resolves a free seat and reports the camera
5
+ * target, drive target, and rider movement-lock patch in one call; leaving computes a side-door
6
+ * placement next to the vehicle and reports the same triad in reverse. Pure — no entity/camera side
7
+ * effects — the caller applies `riderMovementPatch`/`placement`/`cameraTarget` via its own `ctx`.
8
+ */
9
+ export class VehicleSeats {
10
+ controller;
11
+ constructor(controller) {
12
+ this.controller = controller ?? createMountController();
13
+ }
14
+ register(config) {
15
+ this.controller.register(config);
16
+ }
17
+ enter(riderId, vehicleId, options = {}) {
18
+ const result = this.controller.mount(riderId, vehicleId, options.seatId);
19
+ if (!result.ok)
20
+ return { ok: false, reason: result.reason };
21
+ return {
22
+ ok: true,
23
+ seat: result.seat,
24
+ cameraTarget: this.controller.cameraTarget(riderId),
25
+ driveTarget: this.controller.driveTarget(riderId),
26
+ riderMovementPatch: { frozen: true },
27
+ };
28
+ }
29
+ exit(riderId, vehiclePose, offset = {}) {
30
+ const vehicleId = this.controller.dismount(riderId);
31
+ if (vehicleId === null)
32
+ return { ok: false, reason: "not_seated" };
33
+ const distance = offset.distance ?? 2.2;
34
+ const sign = offset.side === "left" ? -1 : 1;
35
+ const side = vehiclePose.rotationY + (Math.PI / 2) * sign;
36
+ const x = vehiclePose.position[0] + Math.sin(side) * distance;
37
+ const z = vehiclePose.position[2] + Math.cos(side) * distance;
38
+ return {
39
+ ok: true,
40
+ vehicleId,
41
+ placement: { position: [x, vehiclePose.position[1], z], rotationY: vehiclePose.rotationY },
42
+ cameraTarget: riderId,
43
+ riderMovementPatch: { frozen: false },
44
+ };
45
+ }
46
+ isSeated(riderId) {
47
+ return this.controller.isSeated(riderId);
48
+ }
49
+ driverOf(vehicleId) {
50
+ return this.controller.driver(vehicleId);
51
+ }
52
+ get mounts() {
53
+ return this.controller;
54
+ }
55
+ }
56
+ /** Builds a {@link VehicleSeats}, optionally over an existing `MountController` to share its occupancy. */
57
+ export function createVehicleSeats(controller) {
58
+ return new VehicleSeats(controller);
59
+ }
@@ -1,5 +1,7 @@
1
1
  export type ColorHex = string;
2
+ /** @internal */
2
3
  export declare function colorDistance(a: ColorHex, b: ColorHex): number;
4
+ /** @internal */
3
5
  export declare function concealmentScore(entityColors: readonly ColorHex[], backgroundColors: readonly ColorHex[]): number;
4
6
  export interface ConcealmentTarget {
5
7
  id: string;
@@ -16,6 +18,7 @@ export interface ConcealmentSensor {
16
18
  tick(targets: readonly ConcealmentTarget[], dt: number): ConcealmentSample[];
17
19
  reset(id?: string): void;
18
20
  }
21
+ /** @internal */
19
22
  export declare function createConcealmentSensor(config?: {
20
23
  threshold?: number;
21
24
  }): ConcealmentSensor;
@@ -13,10 +13,12 @@ function redmean(a, b) {
13
13
  return Math.sqrt((2 + rmean / 256) * dr * dr + 4 * dg * dg + (2 + (255 - rmean) / 256) * db * db);
14
14
  }
15
15
  const REDMEAN_MAX = redmean([0, 0, 0], [255, 255, 255]);
16
+ /** @internal */
16
17
  export function colorDistance(a, b) {
17
18
  const distance = redmean(parseHex(a), parseHex(b));
18
19
  return REDMEAN_MAX === 0 ? 0 : Math.min(1, distance / REDMEAN_MAX);
19
20
  }
21
+ /** @internal */
20
22
  export function concealmentScore(entityColors, backgroundColors) {
21
23
  if (entityColors.length === 0 || backgroundColors.length === 0)
22
24
  return 0;
@@ -32,6 +34,7 @@ export function concealmentScore(entityColors, backgroundColors) {
32
34
  }
33
35
  return 1 - total / entityColors.length;
34
36
  }
37
+ /** @internal */
35
38
  export function createConcealmentSensor(config) {
36
39
  const threshold = config?.threshold ?? 0.7;
37
40
  const dwell = new Map();
@@ -11,6 +11,7 @@ export interface FreezeMonitor {
11
11
  tick(subjects: readonly FreezeSubject[], frozenIds: ReadonlySet<string>, dt: number): FreezeViolation[];
12
12
  reset(id?: string): void;
13
13
  }
14
+ /** @internal */
14
15
  export declare function createFreezeMonitor(config?: {
15
16
  toleranceSpeed?: number;
16
17
  graceSeconds?: number;
@@ -1,3 +1,4 @@
1
+ /** @internal */
1
2
  export function createFreezeMonitor(config) {
2
3
  const toleranceSpeed = config?.toleranceSpeed ?? 0.05;
3
4
  const graceSeconds = config?.graceSeconds ?? 0;
@@ -26,7 +26,8 @@ export interface FrustumProjection {
26
26
  * Project a world point into the camera's view. Pure geometry — no three.js —
27
27
  * so a game can run "is this framed?" checks headlessly (photo-mode scoring,
28
28
  * server-side kill-cam validation) as well as from the live render camera.
29
- */
29
+ * @internal
30
+ */
30
31
  export declare function projectToView(camera: FrustumCamera, point: EntityPosition): FrustumProjection;
31
32
  export interface FramingConfig {
32
33
  /** World-unit distance from camera that reads as "ideally framed" size. Default 6. */
@@ -36,7 +37,9 @@ export interface FramingConfig {
36
37
  /** Weight of subject size (distance-to-ideal) in the framing score. Default 0.4. */
37
38
  sizeWeight?: number;
38
39
  }
39
- /** 0 (not framed) .. 1 (dead-center, ideal distance) framing quality for an in-view projection. */
40
+ /** 0 (not framed) .. 1 (dead-center, ideal distance) framing quality for an in-view projection.
41
+ * @internal
42
+ */
40
43
  export declare function framingScore(projection: FrustumProjection, config?: FramingConfig): number;
41
44
  export interface FrustumSample {
42
45
  id: string;
@@ -56,5 +59,6 @@ export interface FrustumSensor {
56
59
  * A view-frustum sensor on a held camera object: which entities are in frame,
57
60
  * how well framed they are, and how long they've stayed on-screen (photo-mode
58
61
  * "is this subject framed", Content Warning-style monster-filming scoring).
59
- */
62
+ * @internal
63
+ */
60
64
  export declare function createFrustumSensor(config?: FramingConfig): FrustumSensor;
@@ -19,7 +19,8 @@ const WORLD_UP = [0, 1, 0];
19
19
  * Project a world point into the camera's view. Pure geometry — no three.js —
20
20
  * so a game can run "is this framed?" checks headlessly (photo-mode scoring,
21
21
  * server-side kill-cam validation) as well as from the live render camera.
22
- */
22
+ * @internal
23
+ */
23
24
  export function projectToView(camera, point) {
24
25
  const forward = normalize(subtract(camera.lookAt, camera.position));
25
26
  const relative = subtract(point, camera.position);
@@ -47,7 +48,9 @@ export function projectToView(camera, point) {
47
48
  const inView = Math.abs(screenX) <= 1 && Math.abs(screenY) <= 1;
48
49
  return { inView, distance, screenX, screenY };
49
50
  }
50
- /** 0 (not framed) .. 1 (dead-center, ideal distance) framing quality for an in-view projection. */
51
+ /** 0 (not framed) .. 1 (dead-center, ideal distance) framing quality for an in-view projection.
52
+ * @internal
53
+ */
51
54
  export function framingScore(projection, config) {
52
55
  if (!projection.inView)
53
56
  return 0;
@@ -65,7 +68,8 @@ export function framingScore(projection, config) {
65
68
  * A view-frustum sensor on a held camera object: which entities are in frame,
66
69
  * how well framed they are, and how long they've stayed on-screen (photo-mode
67
70
  * "is this subject framed", Content Warning-style monster-filming scoring).
68
- */
71
+ * @internal
72
+ */
69
73
  export function createFrustumSensor(config) {
70
74
  const dwell = new Map();
71
75
  return {
@@ -25,7 +25,10 @@ export interface SensorReading {
25
25
  * `proximityPrompt` (a UI affordance), this reads world state the player has no
26
26
  * other way to see — the strongest in-range reading wins, mirroring how a real
27
27
  * handheld sensor needle settles on the loudest nearby source.
28
- */
28
+ * @internal
29
+ */
29
30
  export declare function probeHiddenState(origin: EntityPosition, sources: readonly HiddenStateSource[], options: SensorProbeOptions): SensorReading | null;
30
- /** All in-range readings for `variableId`, strongest first. */
31
+ /** All in-range readings for `variableId`, strongest first.
32
+ * @internal
33
+ */
31
34
  export declare function probeHiddenStateAll(origin: EntityPosition, sources: readonly HiddenStateSource[], options: SensorProbeOptions): SensorReading[];
@@ -12,12 +12,15 @@ function strengthAt(distance, range, falloff) {
12
12
  * `proximityPrompt` (a UI affordance), this reads world state the player has no
13
13
  * other way to see — the strongest in-range reading wins, mirroring how a real
14
14
  * handheld sensor needle settles on the loudest nearby source.
15
- */
15
+ * @internal
16
+ */
16
17
  export function probeHiddenState(origin, sources, options) {
17
18
  const readings = probeHiddenStateAll(origin, sources, options);
18
19
  return readings.length === 0 ? null : readings[0];
19
20
  }
20
- /** All in-range readings for `variableId`, strongest first. */
21
+ /** All in-range readings for `variableId`, strongest first.
22
+ * @internal
23
+ */
21
24
  export function probeHiddenStateAll(origin, sources, options) {
22
25
  const { range, variableId, falloff = "linear" } = options;
23
26
  const readings = [];
@@ -31,5 +31,6 @@ export interface RecordingBuffer<T> {
31
31
  * then seek/scrub the recording independent of the live sim. Frames are
32
32
  * expected in non-decreasing `t` order (one push per tick); `seek`/`range`
33
33
  * binary-search on that assumption.
34
- */
34
+ * @internal
35
+ */
35
36
  export declare function createRecordingBuffer<T>(options?: RecordingBufferOptions): RecordingBuffer<T>;
@@ -17,7 +17,8 @@ function evict(frames, options) {
17
17
  * then seek/scrub the recording independent of the live sim. Frames are
18
18
  * expected in non-decreasing `t` order (one push per tick); `seek`/`range`
19
19
  * binary-search on that assumption.
20
- */
20
+ * @internal
21
+ */
21
22
  export function createRecordingBuffer(options = {}) {
22
23
  const frames = [];
23
24
  function floorIndex(t) {
@@ -14,6 +14,7 @@ export interface ReplayLoop<T> {
14
14
  duration(): number;
15
15
  sample(t: number): T | null;
16
16
  }
17
+ /** @internal */
17
18
  export declare function createReplayLoop<T>(buffer: RecordingBuffer<T>, options?: ReplayLoopOptions<T>): ReplayLoop<T>;
18
19
  export interface ReplayEntityDeps {
19
20
  has(id: string): boolean;
@@ -29,11 +30,14 @@ export interface RecordedPoseLike {
29
30
  position: readonly [number, number, number];
30
31
  rotationY?: number;
31
32
  }
32
- /** Linear pose blend for `ReplayLoopOptions.interpolate` — position lerp plus shortest-arc yaw. */
33
+ /** Linear pose blend for `ReplayLoopOptions.interpolate` — position lerp plus shortest-arc yaw.
34
+ * @internal
35
+ */
33
36
  export declare function interpolateRecordedPose<T extends RecordedPoseLike>(before: T, after: T, alpha: number): T;
34
37
  /**
35
38
  * Reconcile a replayed pose against an entity store: spawns the ghost on the first non-null sample,
36
39
  * poses it while samples flow, despawns it through grace gaps or after the recording empties.
37
40
  * `deps` matches `ctx.scene.entity` structurally — pass `{ has: (id) => ctx.scene.entity.get(id) !== null, spawn, setPose, despawn }`.
38
- */
41
+ * @internal
42
+ */
39
43
  export declare function syncReplayEntity(deps: ReplayEntityDeps, id: string, pose: RecordedPoseLike | null, dt?: number): void;
@@ -1,3 +1,4 @@
1
+ /** @internal */
1
2
  export function createReplayLoop(buffer, options = {}) {
2
3
  const grace = Math.max(0, options.spawnGraceSeconds ?? 0);
3
4
  const interpolate = options.interpolate;
@@ -26,7 +27,9 @@ export function createReplayLoop(buffer, options = {}) {
26
27
  },
27
28
  };
28
29
  }
29
- /** Linear pose blend for `ReplayLoopOptions.interpolate` — position lerp plus shortest-arc yaw. */
30
+ /** Linear pose blend for `ReplayLoopOptions.interpolate` — position lerp plus shortest-arc yaw.
31
+ * @internal
32
+ */
30
33
  export function interpolateRecordedPose(before, after, alpha) {
31
34
  let yawDelta = (after.rotationY ?? 0) - (before.rotationY ?? 0);
32
35
  while (yawDelta > Math.PI)
@@ -47,7 +50,8 @@ export function interpolateRecordedPose(before, after, alpha) {
47
50
  * Reconcile a replayed pose against an entity store: spawns the ghost on the first non-null sample,
48
51
  * poses it while samples flow, despawns it through grace gaps or after the recording empties.
49
52
  * `deps` matches `ctx.scene.entity` structurally — pass `{ has: (id) => ctx.scene.entity.get(id) !== null, spawn, setPose, despawn }`.
50
- */
53
+ * @internal
54
+ */
51
55
  export function syncReplayEntity(deps, id, pose, dt) {
52
56
  if (pose === null) {
53
57
  if (deps.has(id))
@@ -18,5 +18,6 @@ export interface RevealQuery {
18
18
  * the same unfiltered radius query, scoped to catalog-declared tags and shaped
19
19
  * for a vision readout (Dark Sight / detective-vision reveal) instead of damage
20
20
  * resolution — it never consults an occluder, by design.
21
- */
21
+ * @internal
22
+ */
22
23
  export declare function createRevealQuery(options: RevealQueryOptions): RevealQuery;
@@ -5,7 +5,8 @@ import { distanceBetween } from "../scene/spatial.js";
5
5
  * the same unfiltered radius query, scoped to catalog-declared tags and shaped
6
6
  * for a vision readout (Dark Sight / detective-vision reveal) instead of damage
7
7
  * resolution — it never consults an occluder, by design.
8
- */
8
+ * @internal
9
+ */
9
10
  export function createRevealQuery(options) {
10
11
  const { resolvePosition, resolveTags, candidates } = options;
11
12
  return {
@@ -9,11 +9,17 @@ export interface VisionConeConfig {
9
9
  /** Full cone opening angle in radians (matches `TelegraphShape`'s cone `angle`). */
10
10
  angle: number;
11
11
  }
12
- /** 2D segment intersection on the XZ plane (collinear overlaps count) — the LoS building block `revealQuery`/`frustumSensor` never shipped (#286.5). */
12
+ /** 2D segment intersection on the XZ plane (collinear overlaps count) — the LoS building block `revealQuery`/`frustumSensor` never shipped (#286.5).
13
+ * @internal
14
+ */
13
15
  export declare function segmentsIntersect(a1: VisionPoint, a2: VisionPoint, b1: VisionPoint, b2: VisionPoint): boolean;
14
- /** True when no wall segment crosses the sight line. */
16
+ /** True when no wall segment crosses the sight line.
17
+ * @internal
18
+ */
15
19
  export declare function hasWallLineOfSight(from: VisionPoint, to: VisionPoint, walls: readonly VisionWall[]): boolean;
16
- /** Angle + range test only — no occlusion. `heading` is engine yaw (radians, `atan2(dx, dz)`). */
20
+ /** Angle + range test only — no occlusion. `heading` is engine yaw (radians, `atan2(dx, dz)`).
21
+ * @internal
22
+ */
17
23
  export declare function pointInCone(origin: VisionPoint, heading: number, config: VisionConeConfig, point: VisionPoint): boolean;
18
24
  export interface VisionTarget<TId extends string = string> {
19
25
  id: TId;
@@ -28,4 +34,5 @@ export interface VisionCone {
28
34
  canSee(origin: VisionPoint, heading: number, target: VisionPoint): boolean;
29
35
  visibleTargets<TId extends string>(origin: VisionPoint, heading: number, targets: readonly VisionTarget<TId>[]): TId[];
30
36
  }
37
+ /** @internal */
31
38
  export declare function createVisionCone(config: VisionConeConfig, walls?: readonly VisionWall[]): VisionCone;
@@ -12,7 +12,9 @@ function onSegment(ax, az, bx, bz, cx, cz) {
12
12
  Math.min(az, bz) - 1e-9 <= cz &&
13
13
  cz <= Math.max(az, bz) + 1e-9);
14
14
  }
15
- /** 2D segment intersection on the XZ plane (collinear overlaps count) — the LoS building block `revealQuery`/`frustumSensor` never shipped (#286.5). */
15
+ /** 2D segment intersection on the XZ plane (collinear overlaps count) — the LoS building block `revealQuery`/`frustumSensor` never shipped (#286.5).
16
+ * @internal
17
+ */
16
18
  export function segmentsIntersect(a1, a2, b1, b2) {
17
19
  const o1 = orientation(a1[0], a1[1], a2[0], a2[1], b1[0], b1[1]);
18
20
  const o2 = orientation(a1[0], a1[1], a2[0], a2[1], b2[0], b2[1]);
@@ -30,7 +32,9 @@ export function segmentsIntersect(a1, a2, b1, b2) {
30
32
  return true;
31
33
  return false;
32
34
  }
33
- /** True when no wall segment crosses the sight line. */
35
+ /** True when no wall segment crosses the sight line.
36
+ * @internal
37
+ */
34
38
  export function hasWallLineOfSight(from, to, walls) {
35
39
  for (const wall of walls) {
36
40
  if (segmentsIntersect(from, to, wall.from, wall.to))
@@ -38,7 +42,9 @@ export function hasWallLineOfSight(from, to, walls) {
38
42
  }
39
43
  return true;
40
44
  }
41
- /** Angle + range test only — no occlusion. `heading` is engine yaw (radians, `atan2(dx, dz)`). */
45
+ /** Angle + range test only — no occlusion. `heading` is engine yaw (radians, `atan2(dx, dz)`).
46
+ * @internal
47
+ */
42
48
  export function pointInCone(origin, heading, config, point) {
43
49
  const dx = point[0] - origin[0];
44
50
  const dz = point[1] - origin[1];
@@ -54,6 +60,7 @@ export function pointInCone(origin, heading, config, point) {
54
60
  delta += Math.PI * 2;
55
61
  return Math.abs(delta) <= config.angle / 2;
56
62
  }
63
+ /** @internal */
57
64
  export function createVisionCone(config, walls = []) {
58
65
  function canSee(origin, heading, target) {
59
66
  return pointInCone(origin, heading, config, target) && hasWallLineOfSight(origin, target, walls);
@@ -33,4 +33,5 @@ export interface ContestedChannel {
33
33
  remaining(): number;
34
34
  snapshot(): ContestedSnapshot;
35
35
  }
36
+ /** @internal */
36
37
  export declare function createContestedChannel(config: ContestedChannelConfig): ContestedChannel;
@@ -10,6 +10,7 @@ function anyContester(occupants, owner) {
10
10
  }
11
11
  return false;
12
12
  }
13
+ /** @internal */
13
14
  export function createContestedChannel(config) {
14
15
  const duration = config.duration > 0 ? config.duration : Number.EPSILON;
15
16
  const interruptOnDamage = config.interruptOnDamage ?? true;
@@ -51,4 +51,5 @@ export interface RaidSession {
51
51
  status(userId: string): RaidStatus;
52
52
  playerSnapshot(userId: string): RaidPlayerSnapshot;
53
53
  }
54
+ /** @internal */
54
55
  export declare function createRaidSession(config: RaidSessionConfig): RaidSession;
@@ -18,6 +18,7 @@ function mergeAll(containers) {
18
18
  out.push({ itemId, count });
19
19
  return out;
20
20
  }
21
+ /** @internal */
21
22
  export function createRaidSession(config) {
22
23
  const points = new Map();
23
24
  for (const point of config.extracts)
@@ -3,4 +3,10 @@ export interface RoleSpec {
3
3
  count?: number;
4
4
  ratio?: number;
5
5
  }
6
+ /**
7
+ * Assign hidden or team roles across players by ratio — social-deduction and team-shuffle setups.
8
+ *
9
+ * @capability role-assign assign hidden or team roles to players by ratio
10
+ * @internal
11
+ */
6
12
  export declare function assignRoles(userIds: readonly string[], roles: readonly RoleSpec[], rng?: () => number): Record<string, string>;
@@ -1,4 +1,10 @@
1
1
  import { shuffleWithRng } from "../cards/cardPile.js";
2
+ /**
3
+ * Assign hidden or team roles across players by ratio — social-deduction and team-shuffle setups.
4
+ *
5
+ * @capability role-assign assign hidden or team roles to players by ratio
6
+ * @internal
7
+ */
2
8
  export function assignRoles(userIds, roles, rng = Math.random) {
3
9
  if (roles.length === 0)
4
10
  throw new Error("assignRoles needs at least one role");
@@ -72,8 +72,16 @@ export interface RoundState<TPhase extends string = RoundPhase> {
72
72
  roleOf(team: string): string | undefined;
73
73
  snapshot(): RoundSnapshot<TPhase>;
74
74
  }
75
+ /** @internal */
75
76
  export declare function lossBonusFor(rule: LossBonusRule | undefined, streak: number): number;
77
+ /**
78
+ * Run a match as repeating buy/action/end round phases with per-round win rewards and loss-streak economy.
79
+ *
80
+ * @capability match-rounds run buy/action/end round phases with per-round economy
81
+ * @internal
82
+ */
76
83
  export declare function createRoundState(config: RoundConfig<RoundPhase>): RoundState<RoundPhase>;
84
+ /** @internal */
77
85
  export declare function createRoundState<TPhase extends string>(config: RoundConfig<TPhase> & {
78
86
  phaseOrder: readonly TPhase[];
79
87
  }): RoundState<TPhase>;
@@ -1,4 +1,5 @@
1
1
  const DEFAULT_PHASE_ORDER = ["buy", "live", "end"];
2
+ /** @internal */
2
3
  export function lossBonusFor(rule, streak) {
3
4
  if (rule === undefined)
4
5
  return 0;
@@ -17,6 +18,7 @@ function isConcludable(order, phase) {
17
18
  const idx = order.indexOf(phase);
18
19
  return idx > 0 && idx < order.length - 1;
19
20
  }
21
+ /** @internal */
20
22
  export function createRoundState(config) {
21
23
  const order = config.phaseOrder ?? DEFAULT_PHASE_ORDER;
22
24
  const durations = config.phases;
@@ -67,6 +67,7 @@ export declare const SETTING_IDS: {
67
67
  readonly graphicsQuality: "graphics.quality";
68
68
  readonly graphicsShadows: "graphics.shadows";
69
69
  readonly graphicsUiScale: "graphics.uiScale";
70
+ readonly touchStyle: "controls.touchStyle";
70
71
  };
71
72
  export type GraphicsQuality = "low" | "medium" | "high";
72
73
  export declare const GRAPHICS_QUALITY_OPTIONS: readonly SettingOption[];
@@ -11,6 +11,7 @@ export const SETTING_IDS = {
11
11
  graphicsQuality: "graphics.quality",
12
12
  graphicsShadows: "graphics.shadows",
13
13
  graphicsUiScale: "graphics.uiScale",
14
+ touchStyle: "controls.touchStyle",
14
15
  };
15
16
  export const GRAPHICS_QUALITY_OPTIONS = [
16
17
  { value: "low", label: "Low" },
@@ -27,5 +27,11 @@ export interface AccumulatorMeter {
27
27
  reset(): void;
28
28
  tick(dtSeconds: number): void;
29
29
  }
30
+ /** The highest tier id whose `at` threshold `value` has reached, or `null` below every tier — the pure lookup `createAccumulatorMeter`/`createEventMeter` call on every `add`/`tick`. */
30
31
  export declare function tierAt(value: number, tiers: readonly MeterTier[]): string | null;
32
+ /**
33
+ * A raw accumulating gauge that crosses named tier thresholds as a value builds, with optional decay — the primitive under charge, rage, and combo meters.
34
+ *
35
+ * @capability charge-meter fill a gauge toward named tier thresholds as a value accumulates
36
+ */
31
37
  export declare function createAccumulatorMeter(config: AccumulatorMeterConfig): AccumulatorMeter;
@@ -3,6 +3,7 @@ function sortedTiers(tiers) {
3
3
  return [];
4
4
  return [...tiers].sort((a, b) => a.at - b.at);
5
5
  }
6
+ /** The highest tier id whose `at` threshold `value` has reached, or `null` below every tier — the pure lookup `createAccumulatorMeter`/`createEventMeter` call on every `add`/`tick`. */
6
7
  export function tierAt(value, tiers) {
7
8
  let current = null;
8
9
  for (const tier of tiers) {
@@ -13,6 +14,11 @@ export function tierAt(value, tiers) {
13
14
  }
14
15
  return current;
15
16
  }
17
+ /**
18
+ * A raw accumulating gauge that crosses named tier thresholds as a value builds, with optional decay — the primitive under charge, rage, and combo meters.
19
+ *
20
+ * @capability charge-meter fill a gauge toward named tier thresholds as a value accumulates
21
+ */
16
22
  export function createAccumulatorMeter(config) {
17
23
  const mode = config.mode ?? "hold";
18
24
  const tiers = sortedTiers(config.tiers);
@@ -31,4 +31,9 @@ export interface EventMeter {
31
31
  reset(): void;
32
32
  tick(dtSeconds: number): void;
33
33
  }
34
+ /**
35
+ * A heat/hype gauge that rises as tagged events land and cools between them, firing when it fills or breaks — the streak/overdrive meter shooters and fighters hand-roll.
36
+ *
37
+ * @capability event-meter a heat/streak gauge that builds from repeated hits and cools down over time
38
+ */
34
39
  export declare function createEventMeter(config: EventMeterConfig): EventMeter;
@@ -2,6 +2,11 @@ import { createAccumulatorMeter, } from "./accumulatorMeter.js";
2
2
  function readyOf(meter, mode) {
3
3
  return mode === "hold" ? meter.broke() : meter.value() >= 0 && meter.fraction() >= 1;
4
4
  }
5
+ /**
6
+ * A heat/hype gauge that rises as tagged events land and cools between them, firing when it fills or breaks — the streak/overdrive meter shooters and fighters hand-roll.
7
+ *
8
+ * @capability event-meter a heat/streak gauge that builds from repeated hits and cools down over time
9
+ */
5
10
  export function createEventMeter(config) {
6
11
  const mode = config.mode ?? "hold";
7
12
  const resets = new Set(config.resets ?? []);
@@ -12,4 +12,9 @@ export interface CheckResult {
12
12
  success: boolean;
13
13
  critical: "success" | "failure" | null;
14
14
  }
15
+ /**
16
+ * Resolve a tabletop-style pass/fail roll against a target number with modifiers and crit/fumble bands.
17
+ *
18
+ * @capability dice-check resolve a pass/fail roll against a target number with modifiers and crits
19
+ */
15
20
  export declare function rollCheck(input: CheckInput, rng?: () => number): CheckResult;
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Resolve a tabletop-style pass/fail roll against a target number with modifiers and crit/fumble bands.
3
+ *
4
+ * @capability dice-check resolve a pass/fail roll against a target number with modifiers and crits
5
+ */
1
6
  export function rollCheck(input, rng = Math.random) {
2
7
  const sides = input.diceSides ?? 20;
3
8
  const advantage = input.advantage ?? "normal";