Under the hood
Native Swift, hand-written physics, no engine.
The marble is not a rigid body someone configured. It is a sphere solver
written from scratch, because the exact quality of the wobble is the
product, and you cannot file a bug against a black box about your game not
being funny enough.
- Written in
- Swift 6
- Native. No Unity, no engine licence, no runtime.
- Rendering
- SceneKit
- Orthographic, isometric, real cast shadows.
- Marble physics
- Hand-written
- Sphere-vs-triangle-mesh solver, conservative advancement.
- Simulation rate
- 120 Hz
- Fixed step, decoupled from the frame rate.
- Game core
- Zero Apple deps
- A SwiftPM package that unit-tests in under a second, no simulator.
- Level format
- Data, not scenes
- A block kit on a 1-unit grid. Levels are diffable in git.
- Runs on
- iPhone · Apple TV
- One source directory, every difference behind an #if os().
- Session length
- 60–120 s
- Then a score, a one-tap restart, and no menu in between.
One more, because it’s the detail everyone asks about: the walls are
yellow and red, the floors are grey and orange, and that is a rule rather
than a mood. You can spin the camera through a full circle under an
orthographic projection, which strips out nearly every depth cue a 3D game
normally gets for free. So hue tells you what you can roll on and
value doesn’t — the floor deliberately sits between the two
wall brightnesses, so there is no threshold you could mistake for one.