Shoal — Studio Status
Current State: Live
Shoal is live on itch.io (Published) and the rfditservices.com arcade. No current open items.
The Six-Stage Performance Investigation
Shoal started as a Lua-backed game under RFDGameStudio’s four-file contract. When it hit real performance walls under fengari (the TypeScript Lua runtime), the investigation went through six real stages:
- Spatial hash optimization — the first real performance work, reducing O(n²) neighbor lookups
- get_nearby optimization — narrowing the spatial query further
- Wasmoon evaluation — tested as an alternative Lua runtime; rejected because it loses to fengari in every measured case
- TS-native benchmark — measured at 130-183x faster than fengari for Shoal’s actual workload
- Production TS-native migration — not a prototype, a real migration with 151.7x measured speedup
- Lua source preserved — the original
logic.luafiles remain in the repo, read-only, not deleted
This investigation directly drove ADR-013 (TS-native as the studio default), reinforced with hard measured data rather than preference.
artGen Consumption
Shoal is one of two real consumers of the shared artGen module (the other is SlimeWorld). Direct file verification confirms:
ts/src/games/shoal/App.tsximports and actively usescanvasTeardropFinPath,canvasRadialBurstPath, andcanvasIrregularFragmentPathfromartGen/shapes.tsts/src/games/shoal/art/shoal.config.tscontains hunger-aware spec builders:buildTeardropFinSpecWithHunger,buildAlgaeSpec,buildFleshChunkSpec- A path-caching/render-profiling layer sits on top (
ts/src/games/shoal/art/pathCache.ts)
This is ADR-014’s realized proof case — shared engine modules consumed by a real production game, not a speculative extraction.
Deployment
Live on itch.io with a posted devlog. Real traceable Reddit-driven traffic confirmed. Also playable in the rfditservices.com arcade.