@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.
- package/CHANGELOG.md +39 -2
- package/LICENSE +203 -661
- package/README.md +1 -1
- package/dist/ai/crowd.d.ts +55 -0
- package/dist/ai/crowd.js +114 -0
- package/dist/ai/flock.d.ts +5 -2
- package/dist/ai/flock.js +5 -2
- package/dist/ai/groupAssist.d.ts +1 -0
- package/dist/ai/groupAssist.js +1 -0
- package/dist/ai/heatSystem.d.ts +76 -0
- package/dist/ai/heatSystem.js +97 -0
- package/dist/ai/interestScheduler.d.ts +107 -0
- package/dist/ai/interestScheduler.js +118 -0
- package/dist/ai/jobBoard.d.ts +1 -0
- package/dist/ai/jobBoard.js +1 -0
- package/dist/ai/laneSelect.d.ts +5 -2
- package/dist/ai/laneSelect.js +5 -2
- package/dist/ai/mobBrain.d.ts +1 -0
- package/dist/ai/mobBrain.js +1 -0
- package/dist/ai/populationDirector.d.ts +103 -0
- package/dist/ai/populationDirector.js +190 -0
- package/dist/ai/pursuit.d.ts +56 -0
- package/dist/ai/pursuit.js +53 -0
- package/dist/ai/spawnDirector.d.ts +7 -2
- package/dist/ai/spawnDirector.js +18 -15
- package/dist/ai/spawnPoint.d.ts +3 -1
- package/dist/ai/spawnPoint.js +3 -1
- package/dist/ai/targetAcquisition.d.ts +84 -0
- package/dist/ai/targetAcquisition.js +92 -0
- package/dist/anim/easing.d.ts +19 -0
- package/dist/anim/easing.js +19 -0
- package/dist/anim/oscillator.d.ts +12 -0
- package/dist/anim/oscillator.js +25 -0
- package/dist/area/areaEffectField.d.ts +127 -0
- package/dist/area/areaEffectField.js +175 -0
- package/dist/area/stackPolicy.d.ts +47 -0
- package/dist/area/stackPolicy.js +99 -0
- package/dist/authoring.d.ts +2 -1
- package/dist/authoring.js +2 -1
- package/dist/board/laneBoard.d.ts +13 -0
- package/dist/board/laneBoard.js +13 -0
- package/dist/board/timelineBoard.d.ts +10 -0
- package/dist/board/timelineBoard.js +10 -0
- package/dist/combat/abilityKit.d.ts +18 -0
- package/dist/combat/abilityKit.js +24 -9
- package/dist/combat/animationState.d.ts +5 -0
- package/dist/combat/animationState.js +5 -0
- package/dist/combat/breakMeters.d.ts +10 -0
- package/dist/combat/breakMeters.js +10 -0
- package/dist/combat/castRunner.d.ts +5 -0
- package/dist/combat/castRunner.js +5 -0
- package/dist/combat/comboPoints.d.ts +5 -0
- package/dist/combat/comboPoints.js +5 -0
- package/dist/combat/comboString.d.ts +5 -0
- package/dist/combat/comboString.js +5 -0
- package/dist/combat/damageInterceptors.d.ts +192 -0
- package/dist/combat/damageInterceptors.js +251 -0
- package/dist/combat/damageMatchup.d.ts +68 -0
- package/dist/combat/damageMatchup.js +42 -0
- package/dist/combat/damageResolution.d.ts +63 -0
- package/dist/combat/damageResolution.js +50 -0
- package/dist/combat/death.d.ts +7 -1
- package/dist/combat/death.js +5 -0
- package/dist/combat/deathReason.d.ts +14 -0
- package/dist/combat/deathReason.js +1 -0
- package/dist/combat/defensiveWindow.d.ts +5 -0
- package/dist/combat/defensiveWindow.js +5 -0
- package/dist/combat/dotField.d.ts +5 -1
- package/dist/combat/dotField.js +5 -1
- package/dist/combat/downed.d.ts +5 -0
- package/dist/combat/downed.js +5 -0
- package/dist/combat/effects.d.ts +5 -0
- package/dist/combat/effects.js +5 -0
- package/dist/combat/encounterSequence.d.ts +258 -0
- package/dist/combat/encounterSequence.js +426 -0
- package/dist/combat/hitReaction.d.ts +57 -1
- package/dist/combat/hitReaction.js +45 -5
- package/dist/combat/magazine.d.ts +54 -0
- package/dist/combat/magazine.js +96 -0
- package/dist/combat/projectiles.d.ts +5 -0
- package/dist/combat/projectiles.js +32 -14
- package/dist/combat/receivedDamage.d.ts +117 -0
- package/dist/combat/receivedDamage.js +92 -0
- package/dist/combat/regenShield.d.ts +5 -1
- package/dist/combat/regenShield.js +5 -1
- package/dist/combat/renderCues.d.ts +51 -0
- package/dist/combat/renderCues.js +44 -0
- package/dist/combat/resourcePool.d.ts +5 -0
- package/dist/combat/resourcePool.js +5 -0
- package/dist/combat/rewardAllocation.d.ts +121 -0
- package/dist/combat/rewardAllocation.js +251 -0
- package/dist/combat/shotOrigin.d.ts +18 -1
- package/dist/combat/shotOrigin.js +39 -0
- package/dist/combat/statusApplication.d.ts +96 -0
- package/dist/combat/statusApplication.js +81 -0
- package/dist/combat/telegraph.d.ts +11 -2
- package/dist/combat/telegraph.js +11 -2
- package/dist/combat/thresholdCrossings.d.ts +85 -0
- package/dist/combat/thresholdCrossings.js +116 -0
- package/dist/combat.d.ts +35 -0
- package/dist/combat.js +35 -0
- package/dist/commands/commandRegistry.d.ts +11 -0
- package/dist/commands/commandRegistry.js +9 -2
- package/dist/crafting/crop.d.ts +18 -0
- package/dist/crafting/crop.js +18 -0
- package/dist/crafting/production.d.ts +5 -0
- package/dist/crafting/production.js +5 -0
- package/dist/devtools/controls.d.ts +38 -0
- package/dist/devtools/controls.js +181 -0
- package/dist/devtools/devtools.d.ts +5 -197
- package/dist/devtools/devtools.js +38 -774
- package/dist/devtools/discover.d.ts +32 -0
- package/dist/devtools/discover.js +240 -0
- package/dist/devtools/fallbackSeams.d.ts +50 -0
- package/dist/devtools/fallbackSeams.js +111 -0
- package/dist/devtools/frame.d.ts +15 -0
- package/dist/devtools/frame.js +247 -0
- package/dist/devtools/logs.d.ts +15 -0
- package/dist/devtools/logs.js +86 -0
- package/dist/devtools/overrides.d.ts +16 -0
- package/dist/devtools/overrides.js +66 -0
- package/dist/devtools/rewriteTunables.d.ts +17 -0
- package/dist/devtools/rewriteTunables.js +276 -0
- package/dist/devtools/saveEndpoint.d.ts +46 -0
- package/dist/devtools/saveEndpoint.js +48 -0
- package/dist/devtools/transformTunables.d.ts +3 -0
- package/dist/devtools/transformTunables.js +3 -0
- package/dist/devtools/tunableSchema.d.ts +31 -0
- package/dist/devtools/tunableSchema.js +31 -0
- package/dist/devtools/types.d.ts +212 -0
- package/dist/devtools/types.js +1 -0
- package/dist/economy/auctionBook.d.ts +122 -0
- package/dist/economy/auctionBook.js +213 -0
- package/dist/economy/currency.d.ts +12 -1
- package/dist/economy/currency.js +12 -1
- package/dist/economy/listingBook.d.ts +91 -0
- package/dist/economy/listingBook.js +144 -0
- package/dist/economy/priceHistory.d.ts +44 -0
- package/dist/economy/priceHistory.js +89 -0
- package/dist/economy/resourceLedger.d.ts +222 -0
- package/dist/economy/resourceLedger.js +353 -0
- package/dist/economy/sharedWallet.d.ts +14 -0
- package/dist/economy/sharedWallet.js +14 -0
- package/dist/economy/techTree.d.ts +12 -0
- package/dist/economy/techTree.js +12 -0
- package/dist/economy/unlockPoints.d.ts +92 -0
- package/dist/economy/unlockPoints.js +103 -0
- package/dist/economy/wallet.d.ts +26 -2
- package/dist/economy/wallet.js +35 -6
- package/dist/editor/commandApply.d.ts +5 -0
- package/dist/editor/commandApply.js +755 -0
- package/dist/editor/commands.d.ts +235 -7
- package/dist/editor/commands.js +82 -124
- package/dist/editor/directives.d.ts +94 -0
- package/dist/editor/directives.js +206 -0
- package/dist/editor/document.d.ts +194 -13
- package/dist/editor/document.js +1166 -19
- package/dist/editor/entityCatalog.d.ts +42 -0
- package/dist/editor/entityCatalog.js +101 -0
- package/dist/editor/environment.d.ts +74 -0
- package/dist/editor/environment.js +169 -0
- package/dist/editor/grid.d.ts +229 -0
- package/dist/editor/grid.js +366 -0
- package/dist/editor/gridAdapters.d.ts +80 -0
- package/dist/editor/gridAdapters.js +134 -0
- package/dist/editor/index.d.ts +98 -6
- package/dist/editor/index.js +13 -2
- package/dist/editor/liveSync.d.ts +127 -0
- package/dist/editor/liveSync.js +249 -0
- package/dist/editor/minimap.d.ts +31 -0
- package/dist/editor/minimap.js +73 -0
- package/dist/editor/runtimeInspector.d.ts +88 -0
- package/dist/editor/runtimeInspector.js +239 -0
- package/dist/editor/streamer.d.ts +66 -0
- package/dist/editor/streamer.js +68 -0
- package/dist/editor/types.d.ts +250 -1
- package/dist/editor/world.d.ts +136 -0
- package/dist/editor/world.js +303 -0
- package/dist/faction/reputation.d.ts +5 -0
- package/dist/faction/reputation.js +5 -0
- package/dist/format/distance.d.ts +17 -0
- package/dist/format/distance.js +18 -0
- package/dist/format/duration.d.ts +27 -0
- package/dist/format/duration.js +45 -0
- package/dist/format/speed.d.ts +17 -0
- package/dist/format/speed.js +25 -0
- package/dist/game/breeding.d.ts +161 -0
- package/dist/game/breeding.js +181 -0
- package/dist/game/cameraConfig.d.ts +451 -0
- package/dist/game/cameraConfig.js +1 -0
- package/dist/game/connectedPlayers.d.ts +6 -4
- package/dist/game/connectedPlayers.js +2 -2
- package/dist/game/cosmetics.d.ts +9 -0
- package/dist/game/cosmetics.js +16 -0
- package/dist/game/defineGame.d.ts +110 -5
- package/dist/game/defineGame.js +49 -4
- package/dist/game/defineSystem.d.ts +90 -0
- package/dist/game/defineSystem.js +47 -0
- package/dist/game/dialogue.d.ts +33 -0
- package/dist/game/dialogue.js +21 -0
- package/dist/game/events.d.ts +63 -13
- package/dist/game/events.js +5 -0
- package/dist/game/feed.d.ts +33 -0
- package/dist/game/feed.js +35 -2
- package/dist/game/gamePhase.d.ts +11 -0
- package/dist/game/gamePhase.js +16 -0
- package/dist/game/leaderboard.d.ts +5 -0
- package/dist/game/leaderboard.js +5 -0
- package/dist/game/loadout.d.ts +5 -0
- package/dist/game/loadout.js +5 -0
- package/dist/game/lootFilter.d.ts +2 -0
- package/dist/game/lootFilter.js +2 -0
- package/dist/game/lootPipeline.d.ts +164 -0
- package/dist/game/lootPipeline.js +216 -0
- package/dist/game/lootTable.d.ts +19 -2
- package/dist/game/lootTable.js +15 -5
- package/dist/game/objectives.d.ts +43 -0
- package/dist/game/objectives.js +36 -0
- package/dist/game/paramLayers.d.ts +148 -0
- package/dist/game/paramLayers.js +185 -0
- package/dist/game/ping.d.ts +5 -0
- package/dist/game/ping.js +5 -0
- package/dist/game/playableGame.d.ts +116 -432
- package/dist/game/playableGame.js +1 -1
- package/dist/game/progression.d.ts +35 -0
- package/dist/game/progression.js +19 -0
- package/dist/game/quest.d.ts +8 -0
- package/dist/game/quest.js +30 -3
- package/dist/game/race.d.ts +141 -0
- package/dist/game/race.js +169 -0
- package/dist/game/recordBook.d.ts +3 -1
- package/dist/game/recordBook.js +4 -1
- package/dist/game/ruleSelection.d.ts +75 -0
- package/dist/game/ruleSelection.js +127 -0
- package/dist/game/runDraft.d.ts +5 -0
- package/dist/game/runDraft.js +5 -0
- package/dist/game/saveStore.d.ts +111 -0
- package/dist/game/saveStore.js +312 -0
- package/dist/game/snapshotHistory.d.ts +67 -0
- package/dist/game/snapshotHistory.js +95 -0
- package/dist/game/social.d.ts +38 -1
- package/dist/game/social.js +71 -0
- package/dist/game/spawnPoints.d.ts +5 -0
- package/dist/game/spawnPoints.js +5 -0
- package/dist/game/systemRuntime.d.ts +50 -0
- package/dist/game/systemRuntime.js +157 -0
- package/dist/game/systemSchedule.d.ts +72 -0
- package/dist/game/systemSchedule.js +242 -0
- package/dist/game/toasts.d.ts +43 -0
- package/dist/game/toasts.js +44 -0
- package/dist/game/trade.d.ts +10 -0
- package/dist/game/trade.js +10 -0
- package/dist/game/tribe.d.ts +184 -0
- package/dist/game/tribe.js +432 -0
- package/dist/game/unlocks.d.ts +8 -0
- package/dist/game/unlocks.js +16 -0
- package/dist/game/vfxInstance.d.ts +138 -0
- package/dist/game/vfxInstance.js +96 -0
- package/dist/game/worldItem.d.ts +17 -4
- package/dist/game/worldItem.js +17 -4
- package/dist/gameplay.d.ts +93 -0
- package/dist/gameplay.js +93 -0
- package/dist/index.d.ts +5 -14
- package/dist/index.js +5 -14
- package/dist/input/actionBindings.d.ts +23 -6
- package/dist/input/actionBindings.js +23 -6
- package/dist/input/axisInput.d.ts +7 -2
- package/dist/input/axisInput.js +7 -2
- package/dist/input/controlGroups.d.ts +67 -0
- package/dist/input/controlGroups.js +41 -0
- package/dist/input/touchScheme.d.ts +82 -6
- package/dist/input/touchScheme.js +123 -10
- package/dist/interaction/lockpick.d.ts +61 -0
- package/dist/interaction/lockpick.js +168 -0
- package/dist/interaction/proximityPrompt.d.ts +2 -0
- package/dist/interaction/proximityPrompt.js +2 -0
- package/dist/interaction/qte.d.ts +5 -0
- package/dist/interaction/qte.js +5 -0
- package/dist/interaction/skillCheck.d.ts +5 -0
- package/dist/interaction/skillCheck.js +5 -0
- package/dist/inventory/encumbrance.d.ts +69 -0
- package/dist/inventory/encumbrance.js +68 -0
- package/dist/inventory/inventoryModel.d.ts +12 -0
- package/dist/inventory/inventoryModel.js +12 -0
- package/dist/inventory/shapedGrid.d.ts +16 -0
- package/dist/inventory/shapedGrid.js +16 -0
- package/dist/inventory/slotModel.d.ts +10 -0
- package/dist/inventory/slotModel.js +10 -0
- package/dist/item/durability.d.ts +5 -0
- package/dist/item/durability.js +6 -3
- package/dist/item/itemIdentity.d.ts +171 -0
- package/dist/item/itemIdentity.js +138 -0
- package/dist/item/itemInstanceRegistry.d.ts +32 -0
- package/dist/item/itemInstanceRegistry.js +34 -0
- package/dist/item/itemgen.d.ts +163 -0
- package/dist/item/itemgen.js +151 -0
- package/dist/item/modularItem.d.ts +5 -0
- package/dist/item/modularItem.js +5 -0
- package/dist/item/use.d.ts +5 -0
- package/dist/item/use.js +5 -0
- package/dist/item/useBehavior.d.ts +142 -0
- package/dist/item/useBehavior.js +105 -0
- package/dist/item/weapon.d.ts +5 -0
- package/dist/item/weapon.js +5 -0
- package/dist/math/scalar.d.ts +25 -0
- package/dist/math/scalar.js +47 -0
- package/dist/meta/changelog.d.ts +4 -1
- package/dist/meta/changelog.js +39 -2
- package/dist/movement/avoidance.d.ts +45 -0
- package/dist/movement/avoidance.js +123 -0
- package/dist/movement/cameraRig.d.ts +8 -0
- package/dist/movement/cameraRig.js +8 -0
- package/dist/movement/dash.d.ts +11 -0
- package/dist/movement/dash.js +11 -0
- package/dist/movement/formation.d.ts +135 -0
- package/dist/movement/formation.js +194 -0
- package/dist/movement/glideModel.d.ts +5 -0
- package/dist/movement/glideModel.js +5 -0
- package/dist/movement/grappleSwing.d.ts +5 -0
- package/dist/movement/grappleSwing.js +5 -0
- package/dist/movement/leaderTrail.d.ts +5 -0
- package/dist/movement/leaderTrail.js +5 -0
- package/dist/movement/movementModel.d.ts +50 -9
- package/dist/movement/movementModel.js +75 -29
- package/dist/movement/playerMovement.js +167 -12
- package/dist/movement/poseState.d.ts +13 -0
- package/dist/movement/poseState.js +16 -0
- package/dist/movement/steering.d.ts +8 -0
- package/dist/movement/steering.js +18 -0
- package/dist/multiplayer/combatSnapshot.d.ts +3 -0
- package/dist/multiplayer/combatSnapshot.js +16 -8
- package/dist/multiplayer/lagCompensation.d.ts +5 -0
- package/dist/multiplayer/lagCompensation.js +5 -0
- package/dist/multiplayer/presenceModel.d.ts +11 -1
- package/dist/multiplayer/presenceModel.js +17 -1
- package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
- package/dist/multiplayer/simultaneousCommit.js +3 -0
- package/dist/multiplayer.d.ts +11 -0
- package/dist/multiplayer.js +11 -0
- package/dist/nav/pathFollow.d.ts +57 -0
- package/dist/nav/pathFollow.js +109 -0
- package/dist/orders/orderKinds.d.ts +156 -0
- package/dist/orders/orderKinds.js +197 -0
- package/dist/orders/orderQueue.d.ts +208 -0
- package/dist/orders/orderQueue.js +211 -0
- package/dist/physics/drivableVehicle.d.ts +31 -0
- package/dist/physics/drivableVehicle.js +16 -0
- package/dist/physics/flightDynamics.d.ts +82 -0
- package/dist/physics/flightDynamics.js +165 -0
- package/dist/physics/gravityField.d.ts +25 -0
- package/dist/physics/gravityField.js +41 -0
- package/dist/physics/kinematicVehicle.d.ts +108 -1
- package/dist/physics/kinematicVehicle.js +212 -15
- package/dist/physics/physicsWorld.d.ts +50 -12
- package/dist/physics/physicsWorld.js +120 -122
- package/dist/physics/radialImpulse.d.ts +25 -0
- package/dist/physics/radialImpulse.js +27 -0
- package/dist/physics/vehicleObstacles.d.ts +44 -0
- package/dist/physics/vehicleObstacles.js +115 -0
- package/dist/procedural.d.ts +3 -0
- package/dist/procedural.js +3 -0
- package/dist/progression/statGraph.d.ts +116 -0
- package/dist/progression/statGraph.js +318 -0
- package/dist/puzzle/cellGrid.d.ts +9 -0
- package/dist/puzzle/cellGrid.js +9 -0
- package/dist/puzzle/fallingPiece.d.ts +9 -0
- package/dist/puzzle/fallingPiece.js +9 -0
- package/dist/puzzle/nonogram.d.ts +39 -0
- package/dist/puzzle/nonogram.js +136 -0
- package/dist/random/nameGen.d.ts +5 -0
- package/dist/random/nameGen.js +5 -0
- package/dist/random/pick.d.ts +8 -0
- package/dist/random/pick.js +31 -0
- package/dist/random/rng.d.ts +26 -1
- package/dist/random/rng.js +32 -9
- package/dist/random/seedLink.d.ts +4 -0
- package/dist/random/seedLink.js +4 -0
- package/dist/relation/keyedValues.d.ts +54 -0
- package/dist/relation/keyedValues.js +115 -0
- package/dist/relation/thresholds.d.ts +62 -0
- package/dist/relation/thresholds.js +62 -0
- package/dist/render/color.d.ts +12 -0
- package/dist/render/color.js +26 -0
- package/dist/render/lookPreset.d.ts +41 -0
- package/dist/render/lookPreset.js +29 -0
- package/dist/render/postProcessing.d.ts +20 -0
- package/dist/render/postProcessing.js +21 -1
- package/dist/rules/predicate.d.ts +53 -0
- package/dist/rules/predicate.js +64 -0
- package/dist/rules/ruleEffects.d.ts +38 -0
- package/dist/rules/ruleEffects.js +37 -0
- package/dist/rules/triggeredRules.d.ts +160 -0
- package/dist/rules/triggeredRules.js +241 -0
- package/dist/runtime/adapter.d.ts +55 -3
- package/dist/runtime/adapter.js +57 -1
- package/dist/runtime/cameraDirector.d.ts +1 -0
- package/dist/runtime/cameraDirector.js +1 -0
- package/dist/runtime/commandRunner.d.ts +1 -0
- package/dist/runtime/commandRunner.js +1 -0
- package/dist/runtime/context/combat.d.ts +51 -0
- package/dist/runtime/context/combat.js +130 -0
- package/dist/runtime/context/combatFx.d.ts +23 -0
- package/dist/runtime/context/combatFx.js +161 -0
- package/dist/runtime/context/deathLoot.d.ts +30 -0
- package/dist/runtime/context/deathLoot.js +39 -0
- package/dist/runtime/context/player.d.ts +48 -0
- package/dist/runtime/context/player.js +125 -0
- package/dist/runtime/context/registries.d.ts +13 -0
- package/dist/runtime/context/registries.js +84 -0
- package/dist/runtime/context/scene.d.ts +59 -0
- package/dist/runtime/context/scene.js +291 -0
- package/dist/runtime/context/snapshotCodecs.d.ts +12 -0
- package/dist/runtime/context/snapshotCodecs.js +26 -0
- package/dist/runtime/context/worldItems.d.ts +21 -0
- package/dist/runtime/context/worldItems.js +37 -0
- package/dist/runtime/descriptors/baseline.d.ts +48 -0
- package/dist/runtime/descriptors/baseline.js +157 -0
- package/dist/runtime/descriptors/features.d.ts +79 -0
- package/dist/runtime/descriptors/features.js +299 -0
- package/dist/runtime/gameContext.d.ts +2 -327
- package/dist/runtime/gameContext.js +273 -778
- package/dist/runtime/gameContextTypes.d.ts +467 -0
- package/dist/runtime/gameContextTypes.js +1 -0
- package/dist/runtime/gameRuntime.d.ts +1 -0
- package/dist/runtime/gameRuntime.js +1 -0
- package/dist/runtime/headlessRunner.d.ts +62 -0
- package/dist/runtime/headlessRunner.js +45 -0
- package/dist/runtime/hostPersistence.d.ts +12 -0
- package/dist/runtime/hostPersistence.js +12 -0
- package/dist/runtime/hostPolicy.d.ts +51 -0
- package/dist/runtime/hostPolicy.js +68 -0
- package/dist/runtime/hostedGameRunner.d.ts +11 -4
- package/dist/runtime/hostedGameRunner.js +27 -3
- package/dist/runtime/hostedWorldSession.d.ts +15 -5
- package/dist/runtime/hostedWorldSession.js +12 -4
- package/dist/runtime/inputSnapshot.d.ts +8 -3
- package/dist/runtime/inputSnapshot.js +6 -2
- package/dist/runtime/motionIntents.d.ts +11 -2
- package/dist/runtime/motionIntents.js +16 -2
- package/dist/runtime/perContext.d.ts +15 -0
- package/dist/runtime/perContext.js +21 -0
- package/dist/runtime/runtimeSave.d.ts +79 -0
- package/dist/runtime/runtimeSave.js +105 -0
- package/dist/runtime/save.d.ts +4 -0
- package/dist/runtime/save.js +4 -0
- package/dist/runtime/snapshot.d.ts +7 -0
- package/dist/runtime/snapshot.js +7 -0
- package/dist/runtime/visibility.d.ts +2 -1
- package/dist/runtime/visibility.js +2 -1
- package/dist/runtime/worldChannel.d.ts +7 -3
- package/dist/runtime/worldChannel.js +51 -6
- package/dist/runtime/worldMirror.d.ts +14 -2
- package/dist/runtime/worldMirror.js +15 -2
- package/dist/runtime/worldProjection.d.ts +47 -0
- package/dist/runtime/worldProjection.js +52 -0
- package/dist/runtime/worldReplication.d.ts +30 -7
- package/dist/runtime/worldReplication.js +41 -9
- package/dist/runtime/worldSnapshot.d.ts +42 -3
- package/dist/runtime/worldSnapshot.js +34 -7
- package/dist/scene/assetCatalog.d.ts +26 -0
- package/dist/scene/assetCatalog.js +4 -0
- package/dist/scene/assetDiagnostics.d.ts +69 -0
- package/dist/scene/assetDiagnostics.js +110 -0
- package/dist/scene/assetGenerator.d.ts +65 -0
- package/dist/scene/assetGenerator.js +64 -0
- package/dist/scene/assetSpace.d.ts +137 -0
- package/dist/scene/assetSpace.js +257 -0
- package/dist/scene/authoredTriggers.d.ts +219 -0
- package/dist/scene/authoredTriggers.js +454 -0
- package/dist/scene/behaviorRuntime.d.ts +75 -0
- package/dist/scene/behaviorRuntime.js +217 -0
- package/dist/scene/behaviors.d.ts +14 -2
- package/dist/scene/behaviors.js +7 -2
- package/dist/scene/bodyBind.d.ts +60 -0
- package/dist/scene/bodyBind.js +51 -0
- package/dist/scene/builtinSceneKinds.d.ts +5 -0
- package/dist/scene/builtinSceneKinds.js +67 -0
- package/dist/scene/colliders.d.ts +71 -1
- package/dist/scene/colliders.js +145 -1
- package/dist/scene/collisionMesh.d.ts +94 -0
- package/dist/scene/collisionMesh.js +699 -0
- package/dist/scene/companion.d.ts +147 -0
- package/dist/scene/companion.js +193 -0
- package/dist/scene/entityStats.d.ts +18 -11
- package/dist/scene/entityStats.js +21 -16
- package/dist/scene/entityStore.d.ts +12 -1
- package/dist/scene/entityStore.js +15 -0
- package/dist/scene/facing.d.ts +18 -0
- package/dist/scene/facing.js +26 -0
- package/dist/scene/modelSockets.d.ts +33 -0
- package/dist/scene/modelSockets.js +29 -0
- package/dist/scene/objectQuery.d.ts +2 -0
- package/dist/scene/objectQuery.js +2 -0
- package/dist/scene/objectStore.d.ts +4 -0
- package/dist/scene/objectStore.js +6 -0
- package/dist/scene/possession.d.ts +8 -0
- package/dist/scene/possession.js +14 -0
- package/dist/scene/roster.d.ts +3 -0
- package/dist/scene/roster.js +12 -0
- package/dist/scene/sceneKinds.d.ts +256 -0
- package/dist/scene/sceneKinds.js +218 -0
- package/dist/scene/sceneOwnership.d.ts +169 -0
- package/dist/scene/sceneOwnership.js +179 -0
- package/dist/scene/sceneRaycast.js +15 -0
- package/dist/scene/selectionBookmarks.d.ts +93 -0
- package/dist/scene/selectionBookmarks.js +122 -0
- package/dist/scene/vehicleSeat.d.ts +68 -0
- package/dist/scene/vehicleSeat.js +59 -0
- package/dist/sensor/concealment.d.ts +3 -0
- package/dist/sensor/concealment.js +3 -0
- package/dist/sensor/freezeMonitor.d.ts +1 -0
- package/dist/sensor/freezeMonitor.js +1 -0
- package/dist/sensor/frustumSensor.d.ts +7 -3
- package/dist/sensor/frustumSensor.js +7 -3
- package/dist/sensor/hiddenStateProbe.d.ts +5 -2
- package/dist/sensor/hiddenStateProbe.js +5 -2
- package/dist/sensor/recordingBuffer.d.ts +2 -1
- package/dist/sensor/recordingBuffer.js +2 -1
- package/dist/sensor/replayLoop.d.ts +6 -2
- package/dist/sensor/replayLoop.js +6 -2
- package/dist/sensor/revealQuery.d.ts +2 -1
- package/dist/sensor/revealQuery.js +2 -1
- package/dist/sensor/visionCone.d.ts +10 -3
- package/dist/sensor/visionCone.js +10 -3
- package/dist/session/contestedChannel.d.ts +1 -0
- package/dist/session/contestedChannel.js +1 -0
- package/dist/session/extraction.d.ts +1 -0
- package/dist/session/extraction.js +1 -0
- package/dist/session/roles.d.ts +6 -0
- package/dist/session/roles.js +6 -0
- package/dist/session/roundState.d.ts +8 -0
- package/dist/session/roundState.js +2 -0
- package/dist/settings/settingsModel.d.ts +1 -0
- package/dist/settings/settingsModel.js +1 -0
- package/dist/stats/accumulatorMeter.d.ts +6 -0
- package/dist/stats/accumulatorMeter.js +6 -0
- package/dist/stats/eventMeter.d.ts +5 -0
- package/dist/stats/eventMeter.js +5 -0
- package/dist/stats/rollCheck.d.ts +5 -0
- package/dist/stats/rollCheck.js +5 -0
- package/dist/stats/spawnLevelStats.d.ts +110 -0
- package/dist/stats/spawnLevelStats.js +140 -0
- package/dist/stats/statModifiers.d.ts +5 -0
- package/dist/stats/statModifiers.js +5 -0
- package/dist/stats/statPool.d.ts +70 -0
- package/dist/stats/statPool.js +59 -0
- package/dist/store/changeSignal.d.ts +3 -0
- package/dist/store/changeSignal.js +2 -0
- package/dist/store/defineKeyedStore.d.ts +38 -0
- package/dist/store/defineKeyedStore.js +42 -0
- package/dist/store/defineStore.d.ts +33 -0
- package/dist/store/defineStore.js +35 -0
- package/dist/store/observableKeyedStore.d.ts +7 -0
- package/dist/store/observableKeyedStore.js +35 -2
- package/dist/survival/decayMeter.d.ts +55 -0
- package/dist/survival/decayMeter.js +130 -57
- package/dist/survival/moodle.d.ts +2 -0
- package/dist/survival/regionHealth.d.ts +6 -0
- package/dist/survival/regionHealth.js +6 -3
- package/dist/tactics/fallingGrid.d.ts +4 -2
- package/dist/tactics/fallingGrid.js +4 -2
- package/dist/tactics/predictiveQuery.d.ts +3 -0
- package/dist/tactics/predictiveQuery.js +3 -0
- package/dist/tactics/snapshot.d.ts +2 -0
- package/dist/tactics/snapshot.js +2 -0
- package/dist/tactics/surface.d.ts +1 -0
- package/dist/tactics/surface.js +1 -0
- package/dist/tactics/tacticalGrid.d.ts +1 -0
- package/dist/tactics/tacticalGrid.js +1 -0
- package/dist/time/beatClock.d.ts +14 -4
- package/dist/time/beatClock.js +14 -4
- package/dist/time/calendarClock.d.ts +3 -0
- package/dist/time/calendarClock.js +3 -0
- package/dist/time/idleProgress.d.ts +4 -0
- package/dist/time/idleProgress.js +4 -0
- package/dist/time/simClock.d.ts +2 -0
- package/dist/time/simClock.js +20 -5
- package/dist/ui/actionModel.d.ts +110 -0
- package/dist/ui/actionModel.js +159 -0
- package/dist/ui/gameLayout.d.ts +30 -11
- package/dist/ui/gameLayout.js +30 -11
- package/dist/ui/hudDocument.d.ts +114 -0
- package/dist/ui/hudDocument.js +220 -0
- package/dist/ui/hudLayout.d.ts +38 -1
- package/dist/ui/hudLayout.js +220 -17
- package/dist/ui/selectionModel.d.ts +92 -0
- package/dist/ui/selectionModel.js +88 -0
- package/dist/ui/tooltipModel.d.ts +63 -0
- package/dist/ui/tooltipModel.js +82 -0
- package/dist/ui.d.ts +15 -0
- package/dist/ui.js +15 -0
- package/dist/visibility/bounds.d.ts +8 -1
- package/dist/visibility/bounds.js +8 -1
- package/dist/visibility/frustum.d.ts +12 -3
- package/dist/visibility/frustum.js +12 -3
- package/dist/work/jobQueue.d.ts +201 -0
- package/dist/work/jobQueue.js +253 -0
- package/dist/work/unitTraining.d.ts +58 -0
- package/dist/work/unitTraining.js +52 -0
- package/dist/world/authoredEntities.d.ts +29 -0
- package/dist/world/authoredEntities.js +29 -0
- package/dist/world/authoredObjects.d.ts +72 -0
- package/dist/world/authoredObjects.js +81 -0
- package/dist/world/authoredSpawn.d.ts +39 -0
- package/dist/world/authoredSpawn.js +37 -0
- package/dist/world/buildSockets.d.ts +152 -0
- package/dist/world/buildSockets.js +188 -0
- package/dist/world/buildingGenerator.d.ts +18 -0
- package/dist/world/buildingGenerator.js +62 -0
- package/dist/world/buildings.d.ts +5 -0
- package/dist/world/buildings.js +5 -0
- package/dist/world/catenary.d.ts +22 -0
- package/dist/world/catenary.js +69 -0
- package/dist/world/cityBlocks.d.ts +152 -0
- package/dist/world/cityBlocks.js +670 -0
- package/dist/world/cityContent.d.ts +77 -0
- package/dist/world/cityContent.js +261 -0
- package/dist/world/cityGeometry.d.ts +114 -0
- package/dist/world/cityGeometry.js +573 -0
- package/dist/world/cityKind.d.ts +314 -0
- package/dist/world/cityKind.js +1578 -0
- package/dist/world/features.d.ts +133 -10
- package/dist/world/features.js +66 -6
- package/dist/world/footprintGrid.d.ts +59 -0
- package/dist/world/footprintGrid.js +141 -0
- package/dist/world/geometry.d.ts +64 -0
- package/dist/world/geometry.js +94 -0
- package/dist/world/grassKind.d.ts +51 -0
- package/dist/world/grassKind.js +101 -0
- package/dist/world/markers.d.ts +50 -4
- package/dist/world/markers.js +49 -0
- package/dist/world/massing.js +1 -1
- package/dist/world/minimapBake.d.ts +78 -0
- package/dist/world/minimapBake.js +208 -0
- package/dist/world/minimapTrack.d.ts +17 -0
- package/dist/world/minimapTrack.js +22 -0
- package/dist/world/pathInstances.d.ts +27 -0
- package/dist/world/pathInstances.js +27 -0
- package/dist/world/pathNetwork.d.ts +159 -0
- package/dist/world/pathNetwork.js +684 -0
- package/dist/world/pathTerrain.d.ts +80 -0
- package/dist/world/pathTerrain.js +142 -0
- package/dist/world/place.d.ts +166 -0
- package/dist/world/place.js +96 -0
- package/dist/world/placeAsset.d.ts +81 -0
- package/dist/world/placeAsset.js +79 -0
- package/dist/world/placement.d.ts +4 -0
- package/dist/world/placement.js +4 -0
- package/dist/world/placementController.d.ts +6 -0
- package/dist/world/placementController.js +6 -0
- package/dist/world/poleLineKind.d.ts +40 -0
- package/dist/world/poleLineKind.js +97 -0
- package/dist/world/polyline.d.ts +34 -0
- package/dist/world/polyline.js +88 -0
- package/dist/world/resourceNode.d.ts +109 -0
- package/dist/world/resourceNode.js +140 -0
- package/dist/world/roads.d.ts +8 -0
- package/dist/world/roads.js +38 -0
- package/dist/world/scatter.js +2 -20
- package/dist/world/scatterRegion.d.ts +164 -0
- package/dist/world/scatterRegion.js +409 -0
- package/dist/world/sceneShapes.d.ts +43 -0
- package/dist/world/sceneShapes.js +1 -0
- package/dist/world/segment.d.ts +27 -0
- package/dist/world/segment.js +43 -0
- package/dist/world/soilKind.d.ts +48 -0
- package/dist/world/soilKind.js +92 -0
- package/dist/world/spatialSample.d.ts +241 -0
- package/dist/world/spatialSample.js +465 -0
- package/dist/world/streets.d.ts +29 -0
- package/dist/world/streets.js +55 -0
- package/dist/world/terraform.d.ts +213 -1
- package/dist/world/terraform.js +627 -22
- package/dist/world/terrain.d.ts +164 -20
- package/dist/world/terrain.js +325 -41
- package/dist/world/terrainGuides.d.ts +182 -0
- package/dist/world/terrainGuides.js +343 -0
- package/dist/world/vec2.d.ts +81 -0
- package/dist/world/vec2.js +128 -0
- package/dist/world/vec3.d.ts +49 -0
- package/dist/world/vec3.js +76 -0
- package/dist/world/vegetation.d.ts +71 -0
- package/dist/world/vegetation.js +151 -0
- package/dist/world/visibilityField.d.ts +154 -0
- package/dist/world/visibilityField.js +271 -0
- package/dist/world/volumetricClouds.d.ts +52 -0
- package/dist/world/volumetricClouds.js +43 -0
- package/dist/world/walls.d.ts +9 -0
- package/dist/world/walls.js +9 -0
- package/dist/world/waterKind.d.ts +55 -0
- package/dist/world/waterKind.js +99 -0
- package/dist/world.d.ts +141 -0
- package/dist/world.js +141 -0
- package/package.json +32 -8
- package/skills/game-design/SKILL.md +28 -0
- package/skills/game-design/agents/openai.yaml +4 -0
- package/skills/game-design/references/application-playbook.md +170 -0
- package/skills/game-design/references/field-guide.md +288 -0
- package/skills/jgengine/SKILL.md +54 -0
- package/skills/jgengine/api.md +527 -0
- package/skills/jgengine/capabilities.md +131 -0
- package/skills/jgengine/recipes/minimal-game.md +88 -0
- package/skills/jgengine-combat/SKILL.md +38 -0
- package/skills/jgengine-combat/api.md +585 -0
- package/skills/jgengine-combat/capabilities.md +213 -0
- package/skills/jgengine-combat/recipes/portable-stat-pools.md +122 -0
- package/skills/jgengine-combat/reference.md +108 -0
- package/skills/jgengine-gameplay/SKILL.md +39 -0
- package/skills/jgengine-gameplay/api.md +1920 -0
- package/skills/jgengine-gameplay/capabilities.md +454 -0
- package/skills/jgengine-gameplay/reference-systems.md +56 -0
- package/skills/jgengine-world/SKILL.md +51 -0
- package/skills/jgengine-world/api.md +3056 -0
- package/skills/jgengine-world/capabilities.md +476 -0
- package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
- package/skills/jgengine-world/reference.md +261 -0
- package/dist/cartridge/runtime.d.ts +0 -15
- package/dist/cartridge/runtime.js +0 -556
- package/dist/cartridge/spec.d.ts +0 -188
- package/dist/cartridge/spec.js +0 -19
- package/dist/cartridge/validate.d.ts +0 -2
- package/dist/cartridge/validate.js +0 -78
- package/dist/store/engineStore.d.ts +0 -22
- package/dist/store/engineStore.js +0 -50
- package/dist/store/features.d.ts +0 -10
- package/dist/store/features.js +0 -23
- package/llms.txt +0 -5389
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
<!-- GENERATED by scripts/gen-capability-index.ts — do not edit. Regenerate: bun run gen:capabilities -->
|
|
2
|
+
|
|
3
|
+
# jgengine-gameplay — capability index
|
|
4
|
+
|
|
5
|
+
Reach for these before hand-rolling. Each row is *the thing you need* → *the primitive that already does it*.
|
|
6
|
+
|
|
7
|
+
## advance-ledger — settle due scheduled transactions through a policy pipeline
|
|
8
|
+
|
|
9
|
+
- `advanceLedger` (function) · `import { advanceLedger } from "@jgengine/core/gameplay"`
|
|
10
|
+
|
|
11
|
+
## auction-book — timed bid auctions with escrowed bids, buyout, anti-snipe close extension, and collection-box settlement
|
|
12
|
+
|
|
13
|
+
- `createAuctionBook` (function) · `import { createAuctionBook } from "@jgengine/core/gameplay"`
|
|
14
|
+
|
|
15
|
+
## best-record — persist personal-best times/scores with safe storage fallback
|
|
16
|
+
|
|
17
|
+
- `createRecordBook` (function) · `import { createRecordBook } from "@jgengine/core/gameplay"`
|
|
18
|
+
|
|
19
|
+
## build — a serializable directed/undirected pair key that resists delimiter collisions
|
|
20
|
+
|
|
21
|
+
- `createPairKeyCodec` (function) · `import { createPairKeyCodec } from "@jgengine/core/gameplay"`
|
|
22
|
+
|
|
23
|
+
## cancel-scheduled-rule — remove a scheduled rule and its cursor entirely
|
|
24
|
+
|
|
25
|
+
- `cancelRule` (function) · `import { cancelRule } from "@jgengine/core/gameplay"`
|
|
26
|
+
|
|
27
|
+
## cancel-work — remove a job and compute its refund from reservation and progress
|
|
28
|
+
|
|
29
|
+
- `cancelJob` (function) · `import { cancelJob } from "@jgengine/core/gameplay"`
|
|
30
|
+
|
|
31
|
+
## carry-encumbrance — carried mass vs capacity into movement penalty tiers and a speed multiplier
|
|
32
|
+
|
|
33
|
+
- `resolveEncumbrance` (function) · `import { resolveEncumbrance } from "@jgengine/core/inventory/encumbrance"`
|
|
34
|
+
|
|
35
|
+
## carry-load — sum carried mass from item stacks via an injected mass resolver
|
|
36
|
+
|
|
37
|
+
- `totalLoad` (function) · `import { totalLoad } from "@jgengine/core/inventory/encumbrance"`
|
|
38
|
+
|
|
39
|
+
## compose-game-loop — fold composable systems into the game loop without a manual tick fan-out
|
|
40
|
+
|
|
41
|
+
- `composeGameLoop` (function) · `import { composeGameLoop } from "@jgengine/core/gameplay"`
|
|
42
|
+
|
|
43
|
+
## consumables — use/consume items with cooldowns and effects
|
|
44
|
+
|
|
45
|
+
- `createItemUse` (function) · `import { createItemUse } from "@jgengine/core/gameplay"`
|
|
46
|
+
|
|
47
|
+
## cosmetics — equip cosmetic skins and customizations by slot
|
|
48
|
+
|
|
49
|
+
- `createCosmetics` (function) · `import { createCosmetics } from "@jgengine/core/gameplay"`
|
|
50
|
+
|
|
51
|
+
## creature-breeding — deterministic stat inheritance, mutation, and lineage genetics for taming games
|
|
52
|
+
|
|
53
|
+
- `breedOffspring` (function) · `import { breedOffspring } from "@jgengine/core/game/breeding"`
|
|
54
|
+
|
|
55
|
+
## decay-meter — survival meters that drain/refill over game time (hunger, water, oxygen, stamina)
|
|
56
|
+
|
|
57
|
+
- `createDecayMeterSet` (function) · `import { createDecayMeterSet } from "@jgengine/core/gameplay"`
|
|
58
|
+
- `decayMeterMoodles` (function) · `import { decayMeterMoodles } from "@jgengine/core/gameplay"`
|
|
59
|
+
- `decayMeterSnapshot` (function) · `import { decayMeterSnapshot } from "@jgengine/core/gameplay"`
|
|
60
|
+
- `decayMeterState` (function) · `import { decayMeterState } from "@jgengine/core/gameplay"`
|
|
61
|
+
- `decayMeters` (function) · `import { decayMeters } from "@jgengine/core/gameplay"`
|
|
62
|
+
- `initDecayMeters` (function) · `import { initDecayMeters } from "@jgengine/core/gameplay"`
|
|
63
|
+
- `refillMeter` (function) · `import { refillMeter } from "@jgengine/core/gameplay"`
|
|
64
|
+
|
|
65
|
+
## declarative-predicate — serializable data-driven conditions with no callbacks in saved content
|
|
66
|
+
|
|
67
|
+
- `evaluatePredicate` (function) · `import { evaluatePredicate } from "@jgengine/core/gameplay"`
|
|
68
|
+
- `readPath` (function) · `import { readPath } from "@jgengine/core/gameplay"`
|
|
69
|
+
|
|
70
|
+
## define-system — composable game behavior — pure data + hooks the engine schedules; pass via `defineGame({ systems })`
|
|
71
|
+
|
|
72
|
+
- `defineSystem` (function) · `import { defineSystem } from "@jgengine/core/gameplay"`
|
|
73
|
+
|
|
74
|
+
## detect — fire-once threshold/milestone/tier crossings when a value moves
|
|
75
|
+
|
|
76
|
+
- `crossThresholds` (function) · `import { crossThresholds } from "@jgengine/core/gameplay"`
|
|
77
|
+
|
|
78
|
+
## dialogue-bridge — open/close the talkable→DialogueBox flow with no per-game store or command glue
|
|
79
|
+
|
|
80
|
+
- `createGameDialogue` (function) · `import { createGameDialogue } from "@jgengine/core/gameplay"`
|
|
81
|
+
|
|
82
|
+
## durability — track item wear, breakage, and repair
|
|
83
|
+
|
|
84
|
+
- `applyWear` (function) · `import { applyWear } from "@jgengine/core/gameplay"`
|
|
85
|
+
|
|
86
|
+
## encumbrance-move-curve — progressive move-speed multiplier from a carry-load fraction
|
|
87
|
+
|
|
88
|
+
- `encumbranceMoveMultiplier` (function) · `import { encumbranceMoveMultiplier } from "@jgengine/core/inventory/encumbrance"`
|
|
89
|
+
|
|
90
|
+
## enqueue-work — reserve inputs and add a timed job, honoring capacity and validation policy
|
|
91
|
+
|
|
92
|
+
- `enqueue` (function) · `import { enqueue } from "@jgengine/core/gameplay"`
|
|
93
|
+
|
|
94
|
+
## event-bus — typed publish/subscribe bus for gameplay events
|
|
95
|
+
|
|
96
|
+
- `createGameEvents` (function) · `import { createGameEvents } from "@jgengine/core/gameplay"`
|
|
97
|
+
|
|
98
|
+
## event-feed — a rolling feed of recent gameplay events for a HUD ticker or killfeed
|
|
99
|
+
|
|
100
|
+
- `createGameFeed` (function) · `import { createGameFeed } from "@jgengine/core/gameplay"`
|
|
101
|
+
|
|
102
|
+
## game-save — save/load game state with a pluggable backend, autosave, slots, and migration
|
|
103
|
+
|
|
104
|
+
- `createSaveStore` (function) · `import { createSaveStore } from "@jgengine/core/gameplay"`
|
|
105
|
+
|
|
106
|
+
## game-system — declare a composable capability with its own schedule and lifecycle
|
|
107
|
+
|
|
108
|
+
- `SystemDefinition` (interface) · `import { SystemDefinition } from "@jgengine/core/gameplay"`
|
|
109
|
+
|
|
110
|
+
## imprint-bonus — apply imprint stat and handler bonuses at an imprint fraction
|
|
111
|
+
|
|
112
|
+
- `applyImprintBonus` (function) · `import { applyImprintBonus } from "@jgengine/core/game/breeding"`
|
|
113
|
+
|
|
114
|
+
## imprint-increment — per-care-request imprint gain across a maturation schedule
|
|
115
|
+
|
|
116
|
+
- `imprintIncrementPerRequest` (function) · `import { imprintIncrementPerRequest } from "@jgengine/core/game/breeding"`
|
|
117
|
+
|
|
118
|
+
## incubation-tick — advance egg incubation health inside/outside its temperature range
|
|
119
|
+
|
|
120
|
+
- `tickIncubation` (function) · `import { tickIncubation } from "@jgengine/core/game/breeding"`
|
|
121
|
+
|
|
122
|
+
## incubation-viability — test whether an egg incubation still has health to hatch
|
|
123
|
+
|
|
124
|
+
- `incubationViable` (function) · `import { incubationViable } from "@jgengine/core/game/breeding"`
|
|
125
|
+
|
|
126
|
+
## item-generation — compose constraints, weighted pools, transforms, and provenance into a deterministic generated item
|
|
127
|
+
|
|
128
|
+
- `generate` (function) · `import { generate } from "@jgengine/core/gameplay"`
|
|
129
|
+
|
|
130
|
+
## item-identity — resolve which match/set bonuses an item qualifies for
|
|
131
|
+
|
|
132
|
+
- `activeSetBonuses` (function) · `import { activeSetBonuses } from "@jgengine/core/gameplay"`
|
|
133
|
+
- `applySetBonuses` (function) · `import { applySetBonuses } from "@jgengine/core/gameplay"`
|
|
134
|
+
- `candidateViolatesForbid` (function) · `import { candidateViolatesForbid } from "@jgengine/core/gameplay"`
|
|
135
|
+
- `captureProvenance` (function) · `import { captureProvenance } from "@jgengine/core/gameplay"`
|
|
136
|
+
- `countSetMembers` (function) · `import { countSetMembers } from "@jgengine/core/gameplay"`
|
|
137
|
+
- `identityOf` (function) · `import { identityOf } from "@jgengine/core/gameplay"`
|
|
138
|
+
- `isIdentityValid` (function) · `import { isIdentityValid } from "@jgengine/core/gameplay"`
|
|
139
|
+
- `matchesQuery` (function) · `import { matchesQuery } from "@jgengine/core/gameplay"`
|
|
140
|
+
- `validateIdentity` (function) · `import { validateIdentity } from "@jgengine/core/gameplay"`
|
|
141
|
+
|
|
142
|
+
## item-instance-registry — a runtime store for procedurally generated item instances
|
|
143
|
+
|
|
144
|
+
- `createItemInstanceRegistry` (function) · `import { createItemInstanceRegistry } from "@jgengine/core/gameplay"`
|
|
145
|
+
- `proceduralLootEntry` (function) · `import { proceduralLootEntry } from "@jgengine/core/gameplay"`
|
|
146
|
+
|
|
147
|
+
## item-use-composition — compose pluggable, ordered item use-behaviors from serializable references
|
|
148
|
+
|
|
149
|
+
- `createUseBehaviorRegistry` (function) · `import { createUseBehaviorRegistry } from "@jgengine/core/gameplay"`
|
|
150
|
+
|
|
151
|
+
## lap-splits — per-lap durations from a cumulative split book
|
|
152
|
+
|
|
153
|
+
- `lapDurations` (function) · `import { lapDurations } from "@jgengine/core/gameplay"`
|
|
154
|
+
- `parDelta` (function) · `import { parDelta } from "@jgengine/core/gameplay"`
|
|
155
|
+
- `splitSegments` (function) · `import { splitSegments } from "@jgengine/core/gameplay"`
|
|
156
|
+
|
|
157
|
+
## lap-timer — wall-clock current/last/best lap timing with splits
|
|
158
|
+
|
|
159
|
+
- `createLapTimer` (function) · `import { createLapTimer } from "@jgengine/core/gameplay"`
|
|
160
|
+
|
|
161
|
+
## leaderboard — ranked score tracking across global, server, and per-profile scopes
|
|
162
|
+
|
|
163
|
+
- `createLeaderboard` (function) · `import { createLeaderboard } from "@jgengine/core/gameplay"`
|
|
164
|
+
|
|
165
|
+
## leveling-track — grant XP, resolve level-ups against a curve, and write level+xp stats back through a stat adapter
|
|
166
|
+
|
|
167
|
+
- `leveling` (function) · `import { leveling } from "@jgengine/core/gameplay"`
|
|
168
|
+
|
|
169
|
+
## lifecycle — declarative start/restart run flow — the engine owns the command glue and phase sync, the game supplies pure state transitions
|
|
170
|
+
|
|
171
|
+
- `LifecycleConfig` (interface) · `import { LifecycleConfig } from "@jgengine/core/gameplay"`
|
|
172
|
+
|
|
173
|
+
## limb-health — per-body-part/region health tracked separately
|
|
174
|
+
|
|
175
|
+
- `createMultiRegionHealth` (function) · `import { createMultiRegionHealth } from "@jgengine/core/gameplay"`
|
|
176
|
+
|
|
177
|
+
## listing-book — player-driven marketplace listings with a house cut, expiry sweep, and seller collection box
|
|
178
|
+
|
|
179
|
+
- `createListingBook` (function) · `import { createListingBook } from "@jgengine/core/gameplay"`
|
|
180
|
+
|
|
181
|
+
## loadouts — save and swap named equipment loadouts
|
|
182
|
+
|
|
183
|
+
- `createLoadouts` (function) · `import { createLoadouts } from "@jgengine/core/gameplay"`
|
|
184
|
+
|
|
185
|
+
## local-save — persist a game to on-device localStorage (offline)
|
|
186
|
+
|
|
187
|
+
- `localSaveBackend` (function) · `import { localSaveBackend } from "@jgengine/core/gameplay"`
|
|
188
|
+
|
|
189
|
+
## loot-filter — filter and highlight drops by rarity/name rules
|
|
190
|
+
|
|
191
|
+
- `evaluateLootFilter` (function) · `import { evaluateLootFilter } from "@jgengine/core/gameplay"`
|
|
192
|
+
|
|
193
|
+
## loot-pipeline — compose ordered loot pools with fallbacks, roll modifiers, and provenance
|
|
194
|
+
|
|
195
|
+
- `createLootPipeline` (function) · `import { createLootPipeline } from "@jgengine/core/gameplay"`
|
|
196
|
+
- `defineLootPipeline` (function) · `import { defineLootPipeline } from "@jgengine/core/gameplay"`
|
|
197
|
+
|
|
198
|
+
## loot-table — register loot tables and roll weighted randomized drops
|
|
199
|
+
|
|
200
|
+
- `createLootRegistry` (function) · `import { createLootRegistry } from "@jgengine/core/gameplay"`
|
|
201
|
+
- `lootTable` (function) · `import { lootTable } from "@jgengine/core/gameplay"`
|
|
202
|
+
|
|
203
|
+
## maturation-stage — resolve the baby/juvenile/adolescent/adult stage from elapsed maturation
|
|
204
|
+
|
|
205
|
+
- `maturationStage` (function) · `import { maturationStage } from "@jgengine/core/game/breeding"`
|
|
206
|
+
|
|
207
|
+
## modular-item — attach parts into item mount slots to compute combined stats
|
|
208
|
+
|
|
209
|
+
- `slotAccepts` (function) · `import { slotAccepts } from "@jgengine/core/gameplay"`
|
|
210
|
+
|
|
211
|
+
## move — a keyed value toward a target by a bounded step
|
|
212
|
+
|
|
213
|
+
- `towardValue` (function) · `import { towardValue } from "@jgengine/core/gameplay"`
|
|
214
|
+
|
|
215
|
+
## name-generator — generate procedural names from templates and word banks
|
|
216
|
+
|
|
217
|
+
- `createNameGenerator` (function) · `import { createNameGenerator } from "@jgengine/core/gameplay"`
|
|
218
|
+
|
|
219
|
+
## notice-feed — serializable tone-tagged notice/event feed bounded by count and age (toasts, life events, killfeed)
|
|
220
|
+
|
|
221
|
+
- `appendFeed` (function) · `import { appendFeed } from "@jgengine/core/gameplay"`
|
|
222
|
+
- `pruneFeed` (function) · `import { pruneFeed } from "@jgengine/core/gameplay"`
|
|
223
|
+
|
|
224
|
+
## objectives — check progress of a threshold objective against a live metric
|
|
225
|
+
|
|
226
|
+
- `evaluateObjective` (function) · `import { evaluateObjective } from "@jgengine/core/gameplay"`
|
|
227
|
+
|
|
228
|
+
## param-layers — register parameter layers by stable id and resolve serialized selections
|
|
229
|
+
|
|
230
|
+
- `createLayerRegistry` (function) · `import { createLayerRegistry } from "@jgengine/core/gameplay"`
|
|
231
|
+
- `diffParams` (function) · `import { diffParams } from "@jgengine/core/gameplay"`
|
|
232
|
+
- `orderLayers` (function) · `import { orderLayers } from "@jgengine/core/gameplay"`
|
|
233
|
+
- `resolveParams` (function) · `import { resolveParams } from "@jgengine/core/gameplay"`
|
|
234
|
+
- `resolveSelection` (function) · `import { resolveSelection } from "@jgengine/core/gameplay"`
|
|
235
|
+
- `validateLayers` (function) · `import { validateLayers } from "@jgengine/core/gameplay"`
|
|
236
|
+
|
|
237
|
+
## pause-scheduled-rule — stop a scheduled rule from firing while retaining its cursor
|
|
238
|
+
|
|
239
|
+
- `pauseRule` (function) · `import { pauseRule } from "@jgengine/core/gameplay"`
|
|
240
|
+
|
|
241
|
+
## pause-work — pause a queued or active job in place, retaining its progress
|
|
242
|
+
|
|
243
|
+
- `pauseJob` (function) · `import { pauseJob } from "@jgengine/core/gameplay"`
|
|
244
|
+
|
|
245
|
+
## ping-wheel — contextual ping/marker communication between teammates
|
|
246
|
+
|
|
247
|
+
- `createPingSystem` (function) · `import { createPingSystem } from "@jgengine/core/gameplay"`
|
|
248
|
+
|
|
249
|
+
## policy-annotate — tag a scheduled transaction's provenance without changing its value
|
|
250
|
+
|
|
251
|
+
- `annotate` (function) · `import { annotate } from "@jgengine/core/gameplay"`
|
|
252
|
+
|
|
253
|
+
## policy-cap — cap a scheduled transaction amount by context
|
|
254
|
+
|
|
255
|
+
- `capAmount` (function) · `import { capAmount } from "@jgengine/core/gameplay"`
|
|
256
|
+
|
|
257
|
+
## policy-curve — scale a transaction by a curve over context
|
|
258
|
+
|
|
259
|
+
- `curveScale` (function) · `import { curveScale } from "@jgengine/core/gameplay"`
|
|
260
|
+
|
|
261
|
+
## policy-redirect — redirect a scheduled transaction's source or recipient
|
|
262
|
+
|
|
263
|
+
- `redirect` (function) · `import { redirect } from "@jgengine/core/gameplay"`
|
|
264
|
+
|
|
265
|
+
## policy-reject — reject scheduled transactions by predicate
|
|
266
|
+
|
|
267
|
+
- `rejectWhen` (function) · `import { rejectWhen } from "@jgengine/core/gameplay"`
|
|
268
|
+
|
|
269
|
+
## policy-tax — split off a fraction of a transaction as tax or transfer
|
|
270
|
+
|
|
271
|
+
- `taxFraction` (function) · `import { taxFraction } from "@jgengine/core/gameplay"`
|
|
272
|
+
|
|
273
|
+
## policy-threshold — scale a transaction by a context threshold band
|
|
274
|
+
|
|
275
|
+
- `thresholdScale` (function) · `import { thresholdScale } from "@jgengine/core/gameplay"`
|
|
276
|
+
|
|
277
|
+
## price-history — rolling per-item sale records aggregated into market price stats
|
|
278
|
+
|
|
279
|
+
- `createPriceHistory` (function) · `import { createPriceHistory } from "@jgengine/core/gameplay"`
|
|
280
|
+
|
|
281
|
+
## production-building — a factory building converting inputs to outputs over time
|
|
282
|
+
|
|
283
|
+
- `createProductionState` (function) · `import { createProductionState } from "@jgengine/core/gameplay"`
|
|
284
|
+
|
|
285
|
+
## progression-curve — evaluate a level/rank curve (const, linear, power, geometric, steps, piecewise) at a point
|
|
286
|
+
|
|
287
|
+
- `evalCurve` (function) · `import { evalCurve } from "@jgengine/core/gameplay"`
|
|
288
|
+
|
|
289
|
+
## quest-log — track accepted quests and their per-objective progress
|
|
290
|
+
|
|
291
|
+
- `createQuestJournal` (function) · `import { createQuestJournal } from "@jgengine/core/gameplay"`
|
|
292
|
+
|
|
293
|
+
## race-placements — look up one racer's place + win/lose within a finish order
|
|
294
|
+
|
|
295
|
+
- `placementOf` (function) · `import { placementOf } from "@jgengine/core/gameplay"`
|
|
296
|
+
- `racePlacements` (function) · `import { racePlacements } from "@jgengine/core/gameplay"`
|
|
297
|
+
|
|
298
|
+
## race-session — pure idle→countdown→racing→finished clock every racer wraps around its state
|
|
299
|
+
|
|
300
|
+
- `idleRaceSession` (function) · `import { idleRaceSession } from "@jgengine/core/gameplay"`
|
|
301
|
+
|
|
302
|
+
## race-track — a checkpoint race with laps, standings, splits, and win conditions
|
|
303
|
+
|
|
304
|
+
- `createRaceState` (function) · `import { createRaceState } from "@jgengine/core/gameplay"`
|
|
305
|
+
|
|
306
|
+
## resolve — the current tier/band label for a keyed or scalar value
|
|
307
|
+
|
|
308
|
+
- `tierAt` (function) · `import { tierAt } from "@jgengine/core/gameplay"`
|
|
309
|
+
|
|
310
|
+
## resource-ledger — schedule recurring resource transactions with policy transforms
|
|
311
|
+
|
|
312
|
+
- `createResourceLedger` (function) · `import { createResourceLedger } from "@jgengine/core/gameplay"`
|
|
313
|
+
|
|
314
|
+
## resume-scheduled-rule — resume a paused scheduled rule, deferring missed cycles to its catch-up policy
|
|
315
|
+
|
|
316
|
+
- `resumeRule` (function) · `import { resumeRule } from "@jgengine/core/gameplay"`
|
|
317
|
+
|
|
318
|
+
## resume-work — resume a paused job back into the queue's slot competition
|
|
319
|
+
|
|
320
|
+
- `resumeJob` (function) · `import { resumeJob } from "@jgengine/core/gameplay"`
|
|
321
|
+
|
|
322
|
+
## retained-vfx — create/update/stop long-lived dynamic visual effects (beam, tether, zone, target line) by stable id
|
|
323
|
+
|
|
324
|
+
- `createVfxInstanceStore` (function) · `import { createVfxInstanceStore } from "@jgengine/core/gameplay"`
|
|
325
|
+
|
|
326
|
+
## rule-selection — register rules and bridge a selection to its contributed parameter layers
|
|
327
|
+
|
|
328
|
+
- `createRuleRegistry` (function) · `import { createRuleRegistry } from "@jgengine/core/gameplay"`
|
|
329
|
+
- `rerollRules` (function) · `import { rerollRules } from "@jgengine/core/gameplay"`
|
|
330
|
+
- `selectRules` (function) · `import { selectRules } from "@jgengine/core/gameplay"`
|
|
331
|
+
|
|
332
|
+
## run-modifiers — a roguelike run built from stacking drafted modifier picks
|
|
333
|
+
|
|
334
|
+
- `createRunDraft` (function) · `import { createRunDraft } from "@jgengine/core/gameplay"`
|
|
335
|
+
|
|
336
|
+
## seeded-random — injected deterministic randomness for game logic — never `Math.random` in a simulation
|
|
337
|
+
|
|
338
|
+
- `seededRng` (function) · `import { seededRng } from "@jgengine/core/gameplay"`
|
|
339
|
+
|
|
340
|
+
## set — a bounded keyed value in a caller-owned serializable record
|
|
341
|
+
|
|
342
|
+
- `setValue` (function) · `import { setValue } from "@jgengine/core/gameplay"`
|
|
343
|
+
|
|
344
|
+
## social-emotes — emotes and social interactions between nearby players
|
|
345
|
+
|
|
346
|
+
- `createSocial` (function) · `import { createSocial } from "@jgengine/core/gameplay"`
|
|
347
|
+
|
|
348
|
+
## spawn-points — register spawn locations and pick where entities respawn
|
|
349
|
+
|
|
350
|
+
- `createSpawnPoints` (function) · `import { createSpawnPoints } from "@jgengine/core/gameplay"`
|
|
351
|
+
|
|
352
|
+
## stat-graph — derive game-defined stats from named inputs with provenance and preview
|
|
353
|
+
|
|
354
|
+
- `createStatGraph` (function) · `import { createStatGraph } from "@jgengine/core/gameplay"`
|
|
355
|
+
|
|
356
|
+
## stat-graph-bridge — feed an existing StatModifierSet into a stat-graph source
|
|
357
|
+
|
|
358
|
+
- `statModifierContributions` (function) · `import { statModifierContributions } from "@jgengine/core/gameplay"`
|
|
359
|
+
|
|
360
|
+
## system-schedule — compile fixed/frame/interval system ticks into deterministic ordered stages
|
|
361
|
+
|
|
362
|
+
- `compileSystemSchedule` (function) · `import { compileSystemSchedule } from "@jgengine/core/gameplay"`
|
|
363
|
+
|
|
364
|
+
## tick-work — advance jobs over time, completing work and emitting typed lifecycle events
|
|
365
|
+
|
|
366
|
+
- `tick` (function) · `import { tick } from "@jgengine/core/gameplay"`
|
|
367
|
+
|
|
368
|
+
## toast-feed — queue of transient self-expiring on-screen messages (toasts, announcer, kill-feed)
|
|
369
|
+
|
|
370
|
+
- `appendToast` (function) · `import { appendToast } from "@jgengine/core/gameplay"`
|
|
371
|
+
- `createToastQueue` (function) · `import { createToastQueue } from "@jgengine/core/gameplay"`
|
|
372
|
+
|
|
373
|
+
## touch-controls — default on-screen button silhouette for a touch action
|
|
374
|
+
|
|
375
|
+
- `touchButtonShape` (function) · `import { touchButtonShape } from "@jgengine/core/gameplay"`
|
|
376
|
+
|
|
377
|
+
## tribe-group — shared-ownership group (tribe/guild/clan) with ranked permissions, group vs personal assets, alliances, and a bounded event log
|
|
378
|
+
|
|
379
|
+
- `createTribe` (function) · `import { createTribe } from "@jgengine/core/game/tribe"`
|
|
380
|
+
|
|
381
|
+
## tribe-registry — registry of tribes with mutual alliances and cross-tribe relation lookup
|
|
382
|
+
|
|
383
|
+
- `createTribeRegistry` (function) · `import { createTribeRegistry } from "@jgengine/core/game/tribe"`
|
|
384
|
+
|
|
385
|
+
## triggered-rules — event-conditioned effects with declarative predicates, lifetimes, and stacking
|
|
386
|
+
|
|
387
|
+
- `createTriggeredRuleEngine` (function) · `import { createTriggeredRuleEngine } from "@jgengine/core/gameplay"`
|
|
388
|
+
- `getRuleEffect` (function) · `import { getRuleEffect } from "@jgengine/core/gameplay"`
|
|
389
|
+
- `listRuleEffects` (function) · `import { listRuleEffects } from "@jgengine/core/gameplay"`
|
|
390
|
+
- `registerRuleEffect` (function) · `import { registerRuleEffect } from "@jgengine/core/gameplay"`
|
|
391
|
+
|
|
392
|
+
## typed-keyed-store — a cast-free typed handle onto a per-owner keyed family of reactive game-store slots, replayable and host-authoritative
|
|
393
|
+
|
|
394
|
+
- `defineKeyedStore` (function) · `import { defineKeyedStore } from "@jgengine/core/store/defineKeyedStore"`
|
|
395
|
+
|
|
396
|
+
## typed-store — a cast-free typed handle onto one reactive game-store slot, replayable and host-authoritative
|
|
397
|
+
|
|
398
|
+
- `defineStore` (function) · `import { defineStore } from "@jgengine/core/store/defineStore"`
|
|
399
|
+
|
|
400
|
+
## unit-training — compose a timed work queue that trains catalog units into spawn orders
|
|
401
|
+
|
|
402
|
+
- `unitTrainingConfig` (function) · `import { unitTrainingConfig } from "@jgengine/core/gameplay"`
|
|
403
|
+
|
|
404
|
+
## unlock-points — spendable point pool earned per level and spent to unlock nodes, with refund and respec
|
|
405
|
+
|
|
406
|
+
- `createUnlockPoints` (function) · `import { createUnlockPoints } from "@jgengine/core/economy/unlockPoints"`
|
|
407
|
+
|
|
408
|
+
## unlockables — gate content behind unlock conditions the player earns
|
|
409
|
+
|
|
410
|
+
- `createUnlockCatalog` (function) · `import { createUnlockCatalog } from "@jgengine/core/gameplay"`
|
|
411
|
+
|
|
412
|
+
## wallet — hold currency balances with charge and affordability checks
|
|
413
|
+
|
|
414
|
+
- `createEmptyWallet` (function) · `import { createEmptyWallet } from "@jgengine/core/gameplay"`
|
|
415
|
+
|
|
416
|
+
## weapon-stats — resolve per-weapon stat values for combat math
|
|
417
|
+
|
|
418
|
+
- `createWeaponStats` (function) · `import { createWeaponStats } from "@jgengine/core/gameplay"`
|
|
419
|
+
|
|
420
|
+
## weighted-pick — pick one item from a set with an injected random source
|
|
421
|
+
|
|
422
|
+
- `pickUniform` (function) · `import { pickUniform } from "@jgengine/core/gameplay"`
|
|
423
|
+
|
|
424
|
+
## work-active-jobs — list jobs currently progressing in a work queue
|
|
425
|
+
|
|
426
|
+
- `activeJobs` (function) · `import { activeJobs } from "@jgengine/core/gameplay"`
|
|
427
|
+
|
|
428
|
+
## work-job-by-id — look up a queued job by id
|
|
429
|
+
|
|
430
|
+
- `jobById` (function) · `import { jobById } from "@jgengine/core/gameplay"`
|
|
431
|
+
|
|
432
|
+
## work-job-progress — compute a job's fractional progress
|
|
433
|
+
|
|
434
|
+
- `jobProgress` (function) · `import { jobProgress } from "@jgengine/core/gameplay"`
|
|
435
|
+
|
|
436
|
+
## work-order-fifo — order queued jobs by enqueue sequence
|
|
437
|
+
|
|
438
|
+
- `fifoOrdering` (function) · `import { fifoOrdering } from "@jgengine/core/gameplay"`
|
|
439
|
+
|
|
440
|
+
## work-order-priority — order queued jobs by priority, then FIFO within equal priority
|
|
441
|
+
|
|
442
|
+
- `priorityOrdering` (function) · `import { priorityOrdering } from "@jgengine/core/gameplay"`
|
|
443
|
+
|
|
444
|
+
## work-queue — a serializable timed job queue with reservation, cancellation, completion, and output routing
|
|
445
|
+
|
|
446
|
+
- `createWorkQueue` (function) · `import { createWorkQueue } from "@jgengine/core/gameplay"`
|
|
447
|
+
|
|
448
|
+
## work-queue-size — count non-terminal jobs in a work queue
|
|
449
|
+
|
|
450
|
+
- `queueSize` (function) · `import { queueSize } from "@jgengine/core/gameplay"`
|
|
451
|
+
|
|
452
|
+
## work-queued-jobs — list jobs waiting for a slot, in selection order
|
|
453
|
+
|
|
454
|
+
- `queuedJobs` (function) · `import { queuedJobs } from "@jgengine/core/gameplay"`
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Composable systems (`defineSystem`)
|
|
2
|
+
|
|
3
|
+
Single public authoring path: `defineGame({ systems, loop?, … })` from `@jgengine/shell/defineGame`. Systems are meaningful capabilities — not micro-ticks.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { defineSystem } from "@jgengine/core/game/defineSystem";
|
|
9
|
+
import { compileSystemSchedule, DEFAULT_FIXED_STAGES, DEFAULT_FRAME_STAGES } from "@jgengine/core/game/systemSchedule";
|
|
10
|
+
import { composeGameLoop, installSystems } from "@jgengine/core/game/systemRuntime";
|
|
11
|
+
|
|
12
|
+
export const combat = defineSystem({
|
|
13
|
+
id: "combat",
|
|
14
|
+
feature: "quest", // optional — enables ctx.game.quest without features: { quest: true }
|
|
15
|
+
dependsOn: ["movement"], // optional — must also be in systems[]
|
|
16
|
+
tick: {
|
|
17
|
+
type: "fixed", // | "frame" | "interval" | "manual"
|
|
18
|
+
rate: 60, // fixed only (Hz); default 60
|
|
19
|
+
every: 1, // interval only (game-seconds)
|
|
20
|
+
stage: "combat",
|
|
21
|
+
after: "movement", // optional local order within the stage
|
|
22
|
+
before: "cleanup",
|
|
23
|
+
},
|
|
24
|
+
create(ctx) {},
|
|
25
|
+
start(ctx) {},
|
|
26
|
+
update(ctx, dt) {},
|
|
27
|
+
events: {
|
|
28
|
+
"entity.died"(ctx, event) {},
|
|
29
|
+
},
|
|
30
|
+
save: { key: "combat", snapshot: () => state, hydrate: (data) => { state = data; } },
|
|
31
|
+
replicate: (ctx) => ({ key: "combat-pub", snapshot: () => pub, hydrate: (d) => { pub = d; } }),
|
|
32
|
+
reset(ctx) {},
|
|
33
|
+
dispose(ctx) {},
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`defineGame` OR-merges `feature` flags, then `composeGameLoop(systems, loop)` so systems install on `onInit` and tick before residual `loop.onTick`. Classic games migrate by moving fan-out out of `onTick` into systems while keeping boot in `loop`.
|
|
38
|
+
|
|
39
|
+
## Timing channels
|
|
40
|
+
|
|
41
|
+
| `tick.type` | When it runs |
|
|
42
|
+
|-------------|--------------|
|
|
43
|
+
| `fixed` | Accumulator at `rate` Hz (default 60); multi-subscribe OK |
|
|
44
|
+
| `frame` | Once per `onTick` with the frame's game `dt` |
|
|
45
|
+
| `interval` | Every `every` game-seconds (own accumulator per system) |
|
|
46
|
+
| `manual` | Installed only; call `systemsOf(ctx)?.runManual(ctx, id)` |
|
|
47
|
+
| *(omit)* | Event-only — handlers in `events` |
|
|
48
|
+
|
|
49
|
+
Multiple systems may share a channel. Order is stage tables + optional `before`/`after` — **never import order**. `compileSystemSchedule` validates unique ids, `dependsOn`, and cycles.
|
|
50
|
+
|
|
51
|
+
Default stages: fixed `input → movement → combat → ai → activities → cleanup`; frame includes those plus `animation → camera → effects`.
|
|
52
|
+
|
|
53
|
+
## Ownership
|
|
54
|
+
|
|
55
|
+
- **Save / replicate** — system modules register via `ctx.game.registerSave` / `registerReplicate` at install.
|
|
56
|
+
- **Reset / dispose** — `loop.onReset` / `loop.onDispose` (composed) run system hooks.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jgengine-world
|
|
3
|
+
description: Build spatial runtime, movement, interaction, AI, and environments.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# JGengine world runtime
|
|
7
|
+
|
|
8
|
+
## Ownership
|
|
9
|
+
|
|
10
|
+
This skill owns runtime spatial behavior: authored-scene consumption, environments, movement, input mapping, interaction, AI, navigation, physics, visibility, time, and spatial audio. Scene creation and placement stay in `jgengine-editor`; presentation stays in `jgengine-ui`.
|
|
11
|
+
|
|
12
|
+
Search [capabilities.md](capabilities.md) by intent before designing a primitive. Use [api.md](api.md) for exact exports and [reference.md](reference.md) for environment, camera, navigation, physics, audio, and authored-scene recipes.
|
|
13
|
+
|
|
14
|
+
For a *connected* walkthrough that wires several primitives into a running loop, read the goal-oriented recipes under [recipes/](recipes/) — organized by composition seam (what connects to what), never by genre. Start there before reading a game's source to learn how pieces fit; a hybrid game is just a different composition of the same primitives.
|
|
15
|
+
|
|
16
|
+
- [recipes/commanding-entities.md](recipes/commanding-entities.md) — select → order → tick → resolve: direct command over a group of entities (the command loop behind squad control, base-defense, herding, autobattle, or a mutating game's real-time phase).
|
|
17
|
+
|
|
18
|
+
## Canonical workflows
|
|
19
|
+
|
|
20
|
+
### Declare the place
|
|
21
|
+
|
|
22
|
+
A world is the place you play in: substrate + laws, via `world()` from `@jgengine/core/world/place` — `{ id, ground: { mode: flat|round|voxel|board, size, surface?, generator? }, physics? }`. Thin is complete: flat with `Infinity` axes for 3D, `board` for 2D, or omit `world` for pure UI/rules games. Never put seed, sky, or vegetation in a world definition — seeds derive from world id + save/run (`seedForPlace`); sky look and foliage scatter are editor-authored scene content, with the engine default sky when the document has none. `ground.surface` carries matter/feel laws (metal vs slime vs felt) that the same rule systems read — swap the surface, not the rules. See [reference.md](reference.md) for the full shape; `environment()` is the legacy consumption path for editor/preset-written scene data, never the starter.
|
|
23
|
+
|
|
24
|
+
### Authored world
|
|
25
|
+
|
|
26
|
+
1. Load the scene document through the shared authored-scene feature.
|
|
27
|
+
2. Render objects, paths, terrain, foliage, and markers generically.
|
|
28
|
+
3. Query the same ids/layers for spawns, routes, plots, and interaction.
|
|
29
|
+
4. Keep derived caches rebuildable; the document remains authoritative.
|
|
30
|
+
|
|
31
|
+
### Movement and interaction
|
|
32
|
+
|
|
33
|
+
Choose input intent, controller/motor, collision/navigation, and camera as separate seams. Commands express game intent; world systems resolve motion. Interaction targets come from bounded spatial/sensor queries, not full-world scans.
|
|
34
|
+
|
|
35
|
+
### AI and navigation
|
|
36
|
+
|
|
37
|
+
Compose perception, selection, planning/behavior, movement, and lifecycle independently. Inject randomness and scheduling. Use spatial indexes, interest tiers, or bounded candidate sets for scale.
|
|
38
|
+
|
|
39
|
+
### Fallback-seam diagnostics
|
|
40
|
+
|
|
41
|
+
Render seams fall back to placeholders when content is unauthored: default green ground (no environment), primitive capsule/box actors (no `entityModels`/`objectModels` mapping), stylized proxy foliage (no scatter `resolveItem`). These placeholders are sometimes intended, so runtime never changes — but a dev-only, opt-in probe (`@jgengine/core/devtools/fallbackSeams`) tells "unauthored/misconfigured" apart from "intended". The shell arms it via `armFallbackSeams(devtoolsEnabled)`; each seam reports at its choice site (`reportFallbackSeam`), and counts surface through the devtools `fallbacks` probe. Disarmed (production) it is a pure, allocation-free no-op.
|
|
42
|
+
|
|
43
|
+
## Traps
|
|
44
|
+
|
|
45
|
+
- Do not put seed, sky presets, or vegetation/scatter fields in a world definition — `world()` rejects them; dressing belongs to the editor's scene document.
|
|
46
|
+
- Do not put UI layout, touch chrome, combat resolution, or asset acquisition here.
|
|
47
|
+
- Do not duplicate editor coordinates in runtime state.
|
|
48
|
+
- Public APIs accept semantic policies and caller data, not renderer mechanics or internal tuning rolls.
|
|
49
|
+
- Generated environments still need deterministic data assertions; authored environments need scene-document assertions.
|
|
50
|
+
- Audio files and licensing belong to `jgengine-assets`; spatial playback policy belongs here.
|
|
51
|
+
|