Repository navigation
[EPIC] Ship eight games that hold 60 FPS and play like products #2312
Description
The 8 games are built; what is left is a handful of engine capabilities, one dev-loop cost, and adoption per game. This board replaces the 70 open boxes in #2038, which was closed as COMPLETED. Same identifiers, one line each; the original text and acceptance checks stay in #2038.
Measured state, 2026-10-22/23: six of eight games hold 60 FPS, Harbor Heat 15.1 and Drift Foundry 38.1 are the frame-cost work. Perf gate green on all eight (run 40048802446).
Loop
- A1.19 Cheap a landing to <= 90 s idle:
test (i)is 94 s (run 40048802446) behindCreatorApp.sceneIo.test.ts44-68 s. Landing queue itself is done (land hands off; land:queue is the only waiter #2296). - A6.5 A failed dev runner build shows the error and a retry, never a blank world.
Engine capability
- A2.7 One depth-normal prepass feeding GTAO and bokeh.
- A2.8 Build-time LODs with cross-fade, tier cull distance, coarse occluder grid. Only the sim LOD scheduler exists (
packages/core/src/world/lod.ts). - A3.1 Harbor Heat to budget: 9,463 draws / 4.04M triangles measured.
- A3.3 Drift Foundry to budget: 4,282 draws / 1.64M triangles.
- A3.4 Brightway Park to budget: 2,701 draws against 1,500.
- A3.5 Ember Command to budget: 2,052 draws against 1,500.
- A3.6 Beacon Bastion to budget: 3.39M triangles against 1.5M.
- A4.2 Asset weight: meshopt glTF, KTX2 mips, hashed long-cache URLs.
- A4.3 Zone streaming with no frame over 33 ms in a cell swap;
createWorldStreameris the seam, Harbor the adopter. - A4.4 Allocation audit to 0.5 MB/s in play.
- A4.5 Precompile must not delay the cover: +6-8 s Harbor, +10-13 s Scrap Signal.
- A5.1 Auto quality: drop a tier after 3 s over 20 ms, probe up after 30 s under 12 ms, dynamic resolution 0.7-1.0.
- A5.2 Integrated-GPU pass: 30 FPS at medium.
- A5.3 Mobile/touch pass: 30 FPS at low, touch controls, HUD fits.
- A6.1 F3 perf overlay: FPS graph, draws, nodes, programs, costliest subsystems.
- A6.2 Deterministic replay: input plus seed.
- A6.3 Runtime error and context loss show a recoverable screen; no silent black frames.
- A7.4 Instanced traffic bodies: 200 cars under 2 ms of frame cost on Harbor's graph.
- C1.3 Material library: 40+ PBR materials, triplanar, no flat world surfaces left.
- C1.6 Macro ground material for Brightway's turf, optional displacement role, library-to-surface bridge in
@jgengine/assets. - C2.2 Camera kit remainder: FOV kick, lock-on, cinematic rails. Spring arm, shake and photo mode exist.
- C2.3 Character customization seam.
- C3.2 HUD kit gaps: hit marker, crosshair states, boss bar. Damage numbers, compass, minimap, objective tracker, toasts and the radial wheel exist.
- C3.3 Inventory and loot UI gap: the drag grid.
- C4.1 Feel kit gap: decals and time dilation. Event bus, hit-stop, shake and rumble exist.
- C4.3 Adaptive music with explore, tension and combat states.
- C4.4 CC0 sound library credited in
CREDITS.md. - D5.8 Move Beacon's bank and relic draw onto
packages/core/src/run, which now exists. Beacon still carries the local copy. - C2.x foot-IK proof (filed as a second C2.2 in [EPIC] 320-hour roadmap: from prototypes to shipped-quality games (perf, systems, look, depth) #2038) One sloped-ground foot shot, the 8-game rig/IK/T-pose audit, standard rig where a game shows placeholder lumps. Foot IK PR [gaps] No joints/constraints in PhysicsWorld (hinge/distance/spring/fixed) #79 is open in jgengine-games.
Game adoption
- C5.1 Every toast expires. The self-expiring feed exists; Odd Orbit and Beacon still hold them on screen.
- C5.2 Beacon's built tower keeps its authored material, shot per tower type.
- C5.3 Odd Orbit's four members match their four portraits.
- D1.5 Money buys property and upgrades; districts unlock.
- D1.6 Harbor radio stations on the audio seam. Menu, HUD and minimap already exist.
- D1.7 District standing replaces street cred;
progression/cred.tsis still the progression. - D2.4 Two Scrap classes with skill trees.
- D2.7 Level gates the map, and discovery pays XP.
- D2.9 Talents with actives, synergies and respec.
- D2.10 Cores from salvage; prices move with purchases.
- D4.1 Supply cap on top of the gathering loop, which already hauls and deposits.
- D4.2 Tech tree and unit counters. Rank upgrades exist.
- D4.7 Research unlocks counters and armor types instead of flat damage.
- D5.1 Upgrade branches per tower. Targeting modes already exist in
combat/towerAI.ts. - D5.2 Beacon armor types and resistances.
- D5.3 Beacon mazing on the navmesh.
- D5.5 Beacon hero abilities.
- D6.5 Drift ghosts and time trials.
- D7.3 Odd Orbit build/buy mode.
BuildPalette.tsxis the start. - D8.2 Deepward enemies hunt by sound.
Closed as stale
- A1.18 Trim to eight shards and attack
types- both halves measured. Eight shards cost 15-24 s on the deepest job (5f204db), so nine stand;scripts/type-shard.tstook typecheck from 59 s serial to 30 s and thetypesjob reads 58 s. The floor istest (i), which is A1.19. - A7.2 Title frames are cheaper than play - written off Harbor's 2.7 FPS play against a 20.4 FPS title. A7.1 fixed that loop (Scrap Signal 11.5 -> 60.0, Harbor 9.7 -> 21.7) and Harbor now reads 15.1 FPS on a bigger scene. Harbor's remaining frame cost is A3.1.
Already done (do not redo)
A1.10 publish guard (#2289 merged) - A3.2 Scrap Signal 60.1 FPS inside draws/tris/nodes - A3.7 Odd Orbit 60.1 FPS inside - A3.8 Deepward 60.0 FPS inside - A7.3 pause stops world draws (packages/shell/src/canvasCoverDraws.test.tsx) - C2.1 character pipeline merged (ragdoll + foot IK) - C4.2 audio engine (createAudioEngine) - D1.4 Harbor vehicles, damage and garage (garage-purchase.test.ts, vehicle/damage.test.ts) - D2.2 Scrap elements and statuses (status-runtime) - D3.2 Brightway ride breakdowns and queues (rides.test.ts) - D3.4 Brightway loans and ledger (loan.test.ts) - D3.5 Brightway scenarios (scenarios.test.ts) - D3.6 Brightway coaster circuit (coaster/circuit.test.ts) - D3.8 Brightway milestones (milestones.test.ts) - D4.3 Ember formations and fog (formations.test.ts, fog.test.ts) - D6.3 Drift damage (vehicle/damage.test.ts) - D9.4 Beacon ring cost, #2074 merged and the budget re-measured to 658 draws.
Activity
Noisemaker111 commentedon Oct 24, 2026
A2.8 distance + occlusion: tried a tier instance-cull policy plus a built-once occluder grid, wired into scatter batches and the visibility driver (PR #2313, closed unmerged).
Measured on origin/beta vs the branch at 8 pinned cameras: four shots identical to the draw, the other two differing in both directions with matched draw counts and moving NPCs - no saving. The grid finds almost no occluders because it trusts only placed solids >= 6 m, while Harbor Heat's downtown is generated chunks and Brightway Park's props are smaller.
Occlusion becomes worth building when the grid reads occluders from generated building chunks and a scene has a large occluder covering a large batch; until then A2.8 stays open.