Sophie’s Dice v1.6 – Dizzying Update!

This update has some important fixes and features, but the biggest part of it is all the new dice shapes so lets get into it!

Spinners

I think most people my age and older used to make spinners when they didn’t have dice on hand. Just cut out a cardboard disc, write some numbers around it, stick a pencil through the middle. tbh it’s fun and I recommend doing it, but NOW YOU DON’T HAVE TO!

Image of various spinners spinning, each is a flat polygon with a spindle through the middle, each polygon edge is numbered.

Teetotums

Of course, historically, people have put more effort than that into their spinning dice. Teetotums are a fascinating topic that I recommend checking out if you are a dice nerd. I’ve included two types in the app, what I consider the ‘standard’ teetotum, and a ‘fall-flat’ teetotum (which you’ll be familiar with if you’ve ever seen a dreidel – apologies to all the Hanukkah-celebrating dice fans that it took me so long to include this shape!)

A collection of teetotums, prisms with numbered sides and a spindle through the middle.

Weighted-Void Spheres

Okay so these are COOL. On the outside, it’s just a ball with numbers on it, but when you roll it you’ll see it come to rest exactly on one number. And it’s fair! In real life, these work by having an empty void in the middle of the sphere, and a weight that rolls around within. The shape of the void has just the right number of points for the weight to rest in for the number die you want. I’ve only ever seen d6 sphere dice IRL (which have an octahedron void inside), but theoretically a bunch more fair sphere shapes are possible, so I included them!

Picture of numbered spheres

Prisms

Okay so now we’re REALLY getting into the weeds… Many people have tackled the problem of fair prism/cylinder dice (which is simply summarised like this: if a tall shape is more likely to land on a side, and a flat shape is more likely to land on its top or bottom, what is the in-between point where it is equally likely to land on any side?). I had always been convinced that such things can never be ideally fair dice… but for a while this year I became uncertain! I spent a lot of time looking into it and doing a bunch of tests to get a better grasp of the problem and the conclusion I have come to is that they are not fair after all… but they are also not-not fair! This category of shape has a fairness type that I’m calling “conditionally fair” – that is, they are fair but only under very specific circumstances. If you change the circumstances, these dice stop being fair. Realistically, there are no circumstances where you can expect one of these dice to be completely fair (the same is true for ALL physical dice, but the unfairness is much more pronounced with prisms/cylinders)

Image of a variety of prisms and a cylinder, each shape's side is numbered, and the shapes with more sides are taller.

Anyway, sorry if you read all that. It was a lot to say, I couldn’t find completely fair prism shapes so I just eyeballed it and then added them to the app. They will roll fair here so long as you don’t enable the “realistic bias” option (and even then, most aren’t so bad)

Other Shapes

Okay so I find most of these interesting but if you’ve gotten this far you’ve already endured enough of an info dump, here’s the rest of the dice that were added in 1.6:

Image of many various dice shapes arranged.

New Features

There are a couple of features worth pointing out, both have been some of the largest requests I’ve gotten since launching the app. One is being able to spawn multiple dice to your hand before you roll any of them. Whenever you are dragging dice, you can now add more dice the the pool by right-clicking them on the hotbar or pressing the hotkeys for those dice (reminder: You can set hotkeys for your dice when you edit them!)

The other remarkable feature is being able to copy your roll results in text. I know this is small consolation for people that want online-multiplayer for this app (sorry, I’m no closer on that front!) but it can be used to quickly get the roll result into your group chat with proper formatting. To copy the result you can press a shortcut or right-click the result in the roll history. You can change the copy formatting by going to Settings>Results if it doesn’t suit your group chat.

A minor feature that was only ever requested once, but I added because it was easy to do and I thought it was cool: go to Settings>Dice and change the Time Rate. You’ll be able to roll lots of dice much quicker (if you’re looking to save time) or roll dice in slow motion (if you want to increase the tension!)

Other Stuff

This update also has a few new face image options (including tally marks from 1-10), and some fixes to issues that have bothered me and a few of you until now, in particular the issue with testing the stats of newly made dice is gone. No need to restart the app whenever you’re evaluating probabilities for your game’s custom dice!

That’s pretty much it for now! I’m sorry it’s been so long since the last update, I have very little control where I put what little focus I have, so finishing any single project can be really tricky. I’m super happy to get this one to you though, hopefully you enjoy it!

Thanks for the support, I love you, and I wish you happy rolling!

Don’t have Sophie’s Dice yet? Go get it!

(note: The iOS version is still at v1.5 and does not have the above features yet)


On “randomness” and my dice app

(This was originally posted on cohost)

I was asked how my dice app could produce truly random results by someone who needed to make a random selection for a research project, I wrote the following response which is way too long, but figured I’d share so I can link it next time I get a similar question:

TL;DR: For the purposes of having a defensible form of randomness with dice, get some precision casino dice and use those. Other things may be random enough but arguing so will probably be more work, and likely result in dealing with human bias about RNG and not just random bias 😉

Full answer:

In my app, dice outcomes are determined by physics simulations – the shapes roll and whichever face is the most upward-pointing is selected as the result once a die has settled.

The physics simulation system itself is deterministic, and was designed for video-game use so it likely contains optimisations and mechanisms that may be antithetical to providing randomness and I have certainly noted it introducing bias for some shapes.

However I have eliminated all bias that I’ve been capable of detecting by adjusting initial conditions of the rolls. These are randomised using a combination of human input (where dice are thrown from, and their velocity) and pseudorandom number generation (adjusting user-inputted velocity, moving faces about the physics collider (by random symmetry for face-transitive shapes, and completely shuffled for other shapes), selecting a random rotation, and also random angular velocity).

For every shape, I roll it at least 10,000*n times (where n is the number of faces the die has) without any human input, and then check the standard deviation of which faces come up to be confidant that there is no detectable bias.

Which is all to say, (aside from a couple of deliberate things a user may do) the dice in my app are very fair, and they are unpredictable.

But how random they are is not a question I can answer, nor is it one I think is important. After a certain point, it’s a problem that is more philosophical than anything else. If you know the initial conditions at the beginning of a simulated roll, you could (with a lot of work) be able to know what the result will be without looking – but the same is also true of a hypothetical perfectly fair real die (excusing some quantum weirdness that is much beyond my capability to interrogate).

A lot of people try to make a clear distinction between pseudorandom number generation, and “true” random number generation, but ultimately it comes down to how you define randomness, and what kind of randomness you need (and even then, selecting it is still a non-random human selection in the sequence of events that leads to your final result! :p). Randomness at its heart is unpredictability, so who is doing the prediction? Does it matter if it is unpredictable to a child? To you? To a supercomputer? How accurate do predictions need to be for a system to fail?

For me, randomness is an ocean of unknowable depth. You just need to pick the deepest point you can find. If you can’t see the floor when you dive (the bias in the selections you make), then you’re in the right place and won’t be limited by it.

I’ve made my app to be as deep as I possibly can make it, but for the purposes of having RNG that has the most socially and academically defensible notion of randomness, I’d just use machined casino dice. Whether that is more or less random than my app I can’t say – either way I doubt you’ll predict any outcome reliably, but real dice are closer to the dirt and noise of the universe, and casino dice are the most precisely crafted ones, as such they are the hardest to argue against being fair (although testing the fairness of real dice is another thing I can get a bee in my bonnet about – any test of sufficient magnitude will change the conditions of the test and introduce their own bias).