MarbleMagnificence

Pre-TestFlight build

Marble Magnificence

An isometric marble roller that keeps derailing into other games.

You pick it up in a waiting room. You roll a heavy, slippery marble down a mountain, you take a corner far too fast, and you go over the side — which costs you about a second and a half and is, frankly, the best part.

Then the floor turns into a skeeball alley.

Tell me when it’s out See what it derails into

What it’s for

It is a goofy toy, not a skill gauntlet.

Marble Madness is the reference, not the target. This one is slippery, generous and stupid on purpose. Falling off costs about a second and a half, and there are no lives.

The roll

The roll is the joke.

The marble is slippery. It overshoots. It gets away from you while you are still deciding what to do about it. That is the comedy engine, not a defect being tuned out — if rolling around an empty grey box isn’t funny, nothing downstream saves it.

The camera

You own the camera.

Spin the whole world with your other thumb. Half the fun is whipping the view around mid-roll and losing track of which way is downhill.

The level

The level lies to you.

The floor becomes a skeeball alley. A corridor becomes a pellet maze with four ghosts in it. Same marble, different rules, no warning.

What you roll down

Four courses, and none of them is a slide.

A stepped mountain, a mean ice crossing, four rainbow halls dropping seven storeys apiece, and a loop with no fixed floor. Ten seconds of each, off a real phone →

Under the hood

Native Swift, hand-written physics, no engine.

MARBLE uses its own sphere solver because the exact wobble is the product. The rest is native Swift and SceneKit, with no game engine.

Colour is navigation, not decoration: hue tells you what you can roll on even while the camera spins. How that rule got measured →

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
One import
A SwiftPM package that imports simd and nothing else, so 266 tests run with no simulator — and on Linux, against a stand-in simd.
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().
Target run
90 s
The designed length. The clock that enforces it isn’t built yet.

Where it’s at

Playable development build, pre-TestFlight

The next external milestone is a TestFlight build, and the gate on it is content: four full levels and their minigames, reachable in normal play without a developer menu.

Working

  • Sphere-vs-triangle-mesh solver at a fixed 120 Hz
  • Free-orbit camera with flick momentum and a drunk roll
  • Two live thumbs — a floating stick and the world spin, at once
  • Four courses: The Mountain, The Long Thaw, Prism Hall and Escher
  • Three modes: Skeeball, Chomp and Mirror
  • Squash-and-stretch, googly eyes, synthesised thocks, haptics, music
  • A macOS level editor, a headless CI renderer, and 266 core tests

Rough

  • Every mode launches on its own. The director that cuts you into one mid-roll isn’t built.
  • No shared clock, score, checkpoints, results or replay across the courses.
  • Prism Hall is a route skeleton; Escher still needs its ending.
  • Two failing checks: a tunnel-ride sightline, and a debug-only music timing budget.

Doing now

Finishing Prism Hall and Escher, then building the run spine — clock, checkpoints, score, results, replay — so the modes stop being separate apps and start being interruptions.

Want to know when it rolls?

There is no mailing list yet, no launch date, and no App Store page. There is a price, and the price is nothing — free, with no ads and no in-app purchases. A TestFlight build is close, and the beta page is where the link turns up.

hello@marble.baby

Press should start at the press kit instead.