@jgengine/github 0.5.1 → 0.8.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 +504 -7
- package/package.json +1 -1
- package/skills/ce-handoff/SKILL.md +2 -2
- package/skills/jgengine/SKILL.md +28 -6
- package/skills/jgengine/api.md +139 -99
- package/skills/jgengine/capabilities.md +28 -0
- package/skills/jgengine/recipes/minimal-game.md +10 -2
|
@@ -12,6 +12,10 @@ Reach for these before hand-rolling. Each row is *the thing you need* → *the p
|
|
|
12
12
|
|
|
13
13
|
- `collectAuthoredTriggers` (function) · `import { collectAuthoredTriggers } from "@jgengine/shell/gameKit"`
|
|
14
14
|
|
|
15
|
+
## chase-view-cycle — cycle a vehicle camera between chase, hood and cockpit views at runtime
|
|
16
|
+
|
|
17
|
+
- `nextChaseView` (function) · `import { nextChaseView } from "@jgengine/core/runtime/cameraDirector"`
|
|
18
|
+
|
|
15
19
|
## client-side — input prediction with replay reconciliation
|
|
16
20
|
|
|
17
21
|
- `createPredictionBuffer` (function) · `import { createPredictionBuffer } from "@jgengine/core/runtime/prediction"`
|
|
@@ -20,6 +24,14 @@ Reach for these before hand-rolling. Each row is *the thing you need* → *the p
|
|
|
20
24
|
|
|
21
25
|
- `GameContextModels` (interface) · `import { GameContextModels } from "@jgengine/core/runtime/gameContext"`
|
|
22
26
|
|
|
27
|
+
## command-number — validate finite, bounded numbers and integers at command boundaries
|
|
28
|
+
|
|
29
|
+
- `readInputNumber` (function) · `import { readInputNumber } from "@jgengine/core/runtime/commandInput"`
|
|
30
|
+
|
|
31
|
+
## command-parse — parse untrusted command input once so every command stage sees typed, bounded values
|
|
32
|
+
|
|
33
|
+
- `defineCommand` (function) · `import { defineCommand } from "@jgengine/core/runtime/commandRunner"`
|
|
34
|
+
|
|
23
35
|
## command-quantity — validate bounded whole-item counts at command boundaries
|
|
24
36
|
|
|
25
37
|
- `readQuantity` (function) · `import { readQuantity } from "@jgengine/core/runtime/commandInput"`
|
|
@@ -40,6 +52,10 @@ Reach for these before hand-rolling. Each row is *the thing you need* → *the p
|
|
|
40
52
|
|
|
41
53
|
- `EditorCatalogDefinition` (interface) · `import { EditorCatalogDefinition } from "@jgengine/shell/gameKit"`
|
|
42
54
|
|
|
55
|
+
## fire-input — bind a key or mouse button to a named action that runs the same-named command with the aim; repeatMs auto-fires while held
|
|
56
|
+
|
|
57
|
+
- `ActionCodesMap` (type) · `import { ActionCodesMap } from "@jgengine/core/authoring"`
|
|
58
|
+
|
|
43
59
|
## game-system — declare a composable capability with its own schedule and lifecycle
|
|
44
60
|
|
|
45
61
|
- `SystemDefinition` (interface) · `import { SystemDefinition } from "@jgengine/shell/gameKit"`
|
|
@@ -96,6 +112,10 @@ Reach for these before hand-rolling. Each row is *the thing you need* → *the p
|
|
|
96
112
|
|
|
97
113
|
- `createInputRecorder` (function) · `import { createInputRecorder } from "@jgengine/core/runtime/inputRecorder"`
|
|
98
114
|
|
|
115
|
+
## local-players — Couch co-op seats: devices hot-join into slots, each with its own user id and input snapshot.
|
|
116
|
+
|
|
117
|
+
- `createLocalPlayers` (function) · `import { createLocalPlayers } from "@jgengine/core/runtime/localPlayers"`
|
|
118
|
+
|
|
99
119
|
## loot-table — validate a loot table definition for use with the registry
|
|
100
120
|
|
|
101
121
|
- `lootTable` (function) · `import { lootTable } from "@jgengine/core/authoring"`
|
|
@@ -178,6 +198,10 @@ Reach for these before hand-rolling. Each row is *the thing you need* → *the p
|
|
|
178
198
|
|
|
179
199
|
- `defineStore` (function) · `import { defineStore } from "@jgengine/shell/gameKit"`
|
|
180
200
|
|
|
201
|
+
## warn-once — emit a dev-only warning a single time per call site
|
|
202
|
+
|
|
203
|
+
- `warnOnce` (function) · `import { warnOnce } from "@jgengine/core/devtools/warnOnce"`
|
|
204
|
+
|
|
181
205
|
## world-chunk-key — map world positions to persisted chunk keys at a declared cell size
|
|
182
206
|
|
|
183
207
|
- `chunkKeyOf` (function) · `import { chunkKeyOf } from "@jgengine/core/runtime/worldChunks"`
|
|
@@ -193,3 +217,7 @@ Reach for these before hand-rolling. Each row is *the thing you need* → *the p
|
|
|
193
217
|
## world-environment — compose editor/preset-derived outdoor dressing — terrain, weather, water, structures — into a legacy environment feature
|
|
194
218
|
|
|
195
219
|
- `environment` (function) · `import { environment } from "@jgengine/shell/gameKit"`
|
|
220
|
+
|
|
221
|
+
## world-item-pickup — pick up dropped items: ctx.scene.worldItem nearestInRadius → pickup into the player's inventory
|
|
222
|
+
|
|
223
|
+
- `SceneWorldItemContext` (interface) · `import { SceneWorldItemContext } from "@jgengine/core/runtime/gameContext"`
|
|
@@ -6,6 +6,11 @@ authored scene edited in the browser, one system, one store slot, an empty-canva
|
|
|
6
6
|
and a win condition. Every new game starts here; add combat, multiplayer, or deeper
|
|
7
7
|
world features only after this loop plays.
|
|
8
8
|
|
|
9
|
+
Every extension follows the [framework-first decision](../SKILL.md#framework-first-decisions):
|
|
10
|
+
compose an installed SDK capability, improve its upstream contract if needed, then
|
|
11
|
+
remove superseded game glue after published adoption. The game owns its rules and art;
|
|
12
|
+
it should not recreate input, model lifecycle, storage or UI accessibility machinery.
|
|
13
|
+
|
|
9
14
|
## 1. Scaffold
|
|
10
15
|
|
|
11
16
|
`npx jgengine create <name>` (inside the engine monorepo: `bun run new:game "<id-or-title>"`).
|
|
@@ -45,6 +50,9 @@ spatial place. When the game *is* a place, declare only substrate + laws with `w
|
|
|
45
50
|
`@jgengine/core/world/place` (e.g. `{ id, ground: { mode: "flat", size: { x: Infinity, z: Infinity } }, physics: { gravity: -24 } }`,
|
|
46
51
|
or `mode: "board"` for 2D). Never seed, sky, or vegetation in `world` — the engine renders its
|
|
47
52
|
default sky until you author one in the editor, and foliage is editor scatter over the ground.
|
|
53
|
+
A created 3D game instead ships hills as a terrain sculpt in `editor.scene.json` and a `world.ts`
|
|
54
|
+
that consumes it with `environment({ sculpt })` via `environmentContentFromDocument`; the file
|
|
55
|
+
holds only the ground palette. Reshape the hills in the editor, not in code.
|
|
48
56
|
|
|
49
57
|
|
|
50
58
|
```ts
|
|
@@ -77,8 +85,8 @@ direction. Compose the shipped building blocks the moment you need them (`StatBa
|
|
|
77
85
|
`Coins`, `InventoryGrid`, `CharacterSheet`, window shells from `jgengine-ui`), then reskin via
|
|
78
86
|
`HudTheme` tokens. Reaching for those is using the engine correctly, not incomplete work. What
|
|
79
87
|
the engine does not ship is a whole finished game *face* or genre theme preset — do not leave an
|
|
80
|
-
unarranged, unskinned generic dashboard as the product.
|
|
81
|
-
|
|
88
|
+
unarranged, unskinned generic dashboard as the product. Custom markup can use headless
|
|
89
|
+
SDK behavior; a missing reusable behavior is an upstream gap (see `jgengine-ui`).
|
|
82
90
|
|
|
83
91
|
## 3. Author, play, win
|
|
84
92
|
|