MarbleMagnificence

M0 — The Roll

Marble Magnificence

An isometric marble roller that keeps derailing into other games.

You pick it up in a waiting room. You have ninety seconds. 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 a second and a half and is, frankly, the best part.

Then the floor turns into a bowling lane.

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. That game was punishing, precise, and mean. This one is slippery, generous, and stupid on purpose. You basically cannot lose: falling off costs about a second and a half, there are no lives, and there is no death screen worth building.

The roll

The roll is the joke.

The marble is slippery. It overshoots. It gets away from you and goes over the edge while you are still deciding what to do about it. That is the comedy engine, not a defect we are tuning 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. It’s a toy in its own right, and half the fun is whipping the view around mid-roll and completely losing track of which way is downhill.

The level

The level lies to you.

A ramp becomes a bowling lane. A corridor flattens into a side-scroller. The gargoyle that has been watching you from the wall this whole time challenges you to a duel. Same marble, different rules, no warning.

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.

Where it’s at

M0 — “The Roll”

The gate on this milestone is whether it’s funny, not whether it’s finished.

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
  • The Mountain: five octagonal terraces, 16 units of descent, nine ramps
  • Squash-and-stretch, inertial googly eyes, synthesised impact thocks
  • Real cast shadows and face-orientation shading at every camera yaw
  • 14 unit tests, and a build script that runs them in about a second

Rough

  • Faint seam lines where two block tops meet — shadow acne, cosmetic
  • Every feel number is still a guess until it’s been tuned on a real phone

Doing now

Tuning it on the phone, with the sliders that are already in the build. Three fingers on the screen opens them mid-roll. That’s the whole remaining job of this milestone.

Want to know when it rolls?

There is no mailing list yet, no launch date, and no App Store page. There is an email address, and a person who reads it.

hello@marble.baby

Press should start at the press kit instead.