Roll Hippo

The phone is the tray. And the shoe.

Two ways to get a roll, and Roll Hippo is equally both. Deal a card from a shoe holding every outcome your dice could produce, drawn without replacement and cut where you like — the same wager as the throw, with the one thing a shoe adds. Or throw them for real: set your dice up once, up to ten of them, any mixture of D4 through D20 — plus a poker die — then hold the phone upright and shake it. They tumble inside a box the size of the screen on a real rigid-body simulation and settle where they settle.

Download on the App Store Coming soon Google Play

Free, no account, no ads. On the App Store now; the Play listing is not up yet, and until it is, the source builds and runs on both platforms.

iOS & Android  ·  Flutter · Dart  ·  Apache-2.0  ·  Free & open source

Three phones running Roll Hippo: the picker with a rack of dice, the tray with five dice settled, and the card table with a card dealt.

A shoe and a tray, both done properly

The box is the size of your phone and 20 cm deep, and it is simulated in the phone's own frame of reference — so the walls never move and the acceleration inside them comes straight off the accelerometer. There is no shake threshold and no gesture to learn, because tilting and shaking are the same number arriving from the same sensor.

The shoe is the other half, and it is the same care applied to a different question. A deck holds every ordered outcome of your dice, once each, so drawing a card is the same wager as making the throw it stands for. What it adds is the thing a shoe has always been for: it is dealt without replacement, so what has already gone tells you something about what is left, and you decide with the cut how much of that you want. Up to four shoes at once, each with its own dice, decks and cut, swiped between the way the trays are — a shoe is its own memory, and two of them side by side stay two.

The number is landed on, not chosen. Roll Hippo does not pick a result and animate towards it. Each die is thrown with a uniformly random orientation and speed, it tumbles, and the value you read is read off the die's own orientation once it has stopped — the face that finished pointing up, or for the D4 the face it came to rest on. Every solid is isohedral, and each one's inertia tensor is computed from its own geometry rather than copied from a table, because a die whose inertia is wrong is a loaded die.

Shake it, and they tumble

The accelerometer and gyroscope drive the box directly, so a wrist flick turns into a tumble rather than a slide. Tilt it and the dice pour down the screen. No button to press — though there is one, for when your hands are full.

Or deal it from a shoe

One card for every ordered outcome of your dice — 1-2 and 2-1 are two ways for a pair to land where snake eyes has only one, so a deck that held each pair once would make every double twice as likely as it is. Up to three decks, dealt without replacement. Cut it where you like and it reshuffles when it gets there.

Seven kinds, ten dice, your colours

D4, D6, D8, D10, D12 and D20 — every one of them a real polyhedron with its faces, its numbering and its mass found from its vertices — and a poker die, which is a D6 printed with the six cards it stands for. Ten in the tray at once, in any mixture, each picked out in a colour of its own.

Several trays, several results

Set up as many as four separate groups — the picker offers you one empty page at a time, so they arrive as you fill them — and swipe between them. A tray you are not looking at is not simulated at all, so the numbers a group rolled stay the numbers it rolled — a swipe cannot shake them, and neither can anything happening next door.

Save a set-up, share the square

Keep the sets you actually play under names you choose, and reopen one in a tap. A profile turns into a QR code that carries the whole thing — every die, its kind and its colour, the mode and the shoe — so the next player points a camera at your screen and has it too.

It works with the SIM out

No account, no network call, no analytics, no ads, no update ping. Nothing about you leaves the phone, because nothing leaves the phone. Prefer the dice without the shaking? Turn motion control off and the buttons are the whole interface.

Every screen, as it ships

These are captures of the real app, rendered from the same widgets the phone runs. Push them sideways.

Ask for the thing that isn’t there

Roll Hippo is built around games somebody actually plays, which is exactly why the gaps in it are invisible from the inside. If the die your game wants isn’t in the rack, if your table cuts a shoe somewhere the slider won’t reach, or if a screen reads wrong on the phone you actually own, nothing here finds that out on its own. Say what the game is and what it needed, and it turns into something that can be built.

All of it goes to one place — the issue tracker on GitHub, beside the source. It is public on purpose: somebody may have asked for your feature already and can say so, and if the answer turns out to be no, the reason stays attached to the question instead of ending up in one person’s mailbox. A free GitHub account is the whole of what it costs.

A bug report has to carry what the app cannot send. There is no crash reporting in Roll Hippo and no telemetry of any kind, so a wrong result or a stuck screen leaves no trace anywhere but the phone it happened on — until somebody writes it down, nobody knows it happened. The phone, its OS version and what was on screen are usually enough; if a particular set of dice is involved, the QR code from the app’s Share sheet carries the entire set-up in one picture.

On both phones, from one source tree

Roll Hippo is the herd's first mobile app: one Flutter codebase, shipping to the App Store and to Google Play. It is on the App Store now; the Play listing is still to come. It is free and Apache-2.0, and it will stay that way.

Download on the App Store Coming soon Google Play