• 16 × 14 m · section at 1.2 m
  • 18 fixtures, sized from models.json
  • Counter 12.6 m
  • 9 tables · 4 bought with upgrades
Sizzle Stop as a greybox: 59 blocks generated from the project’s own data.
  • 16 × 14 m · section at 1.2 m
  • 18 fixtures, sized from models.json
  • Counter 12.6 m
  • 9 tables · 4 bought with upgrades

Work / Game

A first-person fast‑food restaurant sim. Every model, texture, sound and song in it is generated by a script.

Year
2026
Status
Playable, private build
Code
Private repository

Sizzle Stop

Sizzle Stop at dusk: a red-brick storefront with a lit sign, guests on the sidewalk, street lamps on.
Dusk, near closing. Every frame here is captured from the running game.

Concept

You run a burger restaurant for one day. Take orders, grill, fry, pour, assemble trays, keep the room clean, restock from deliveries, hire staff and buy upgrades. A day runs from 9 AM to 9 PM in six real minutes and ends with a report.

The problem

A restaurant is dozens of stations, and each one exists twice: as a model someone builds, and as colliders, slots and paths the game uses. Built separately, the two drift apart, and every gap becomes a bug.

…so models and gameplay cannot drift apart.

From the sizzle-stop README, Architecture

How it works

  1. One data file

    src/data/*.json holds every dimension. Headless Blender scripts build the models from it, and the game builds collision, navigation and interaction from the same file. The menu and the upgrades are data too.

    Source: README, Architecture

  2. The whole game runs headless

    GameWorld runs headless. Unit tests drive complete days, including a three-day staffed soak test. Presentation lives in a separate GameSession.

    Source: README, Architecture and Tests

  3. Staff that multitask

    Employees take work from a task board with atomic claims and follow step-based plans. Fries go in while the patty grills, and unfinished work gets picked up by whoever is free.

    Source: README, employees/

  4. Own physics, own paths

    A kinematic collision world with oriented boxes, capsules and ray casts. Customers path on an A* nav grid with string pulling, area masks, avoidance and repathing.

    Source: README, physics/ and navigation/

  5. Generated, not downloaded

    Models come from headless Blender Python, textures and icons from a procedural generator, and effects, ambience and music from a synthesiser. Identical materials are shared at load and static geometry is merged per material.

    Source: README, Credits and Rendering

Built with

  • TypeScript
  • Three.js
  • Vite
  • Electron
  • Blender Python
  • Vitest + Playwright

Numbers

135–225
FPS at 1080p, busy restaurant, vsync off (RTX 4070 Ti)README, tools/dev/perf.mjs
4–7 ms
CPU per frameREADME
69
models, all built by scriptrepo: public/assets/*.glb
130+
unit and integration tests, plus a bot that plays full shiftsREADME, Tests
Mid-service, in real time. The build is private for now.