For almost a year, indie developer Sophie Houlden has been building the ultimate virtual dice roller, called Sophie’s Dice.
On the face of it, a dice roller app seems so simple. The idea of being able to randomly generate a number within some defined parameters seems straightforward.
And yet, Sophie has been working on their dice since early 2019. It’s not as simple as just randomly generating a number between one and six, you see. If you want to make a truly universal dice roller, one that can be used both by choice or in a pinch if you’re missing a certain type of die, it takes a lot of work. The end result is a dice roller that is both fun to use and handy in a pinch, but also, extremely customisable.
In their most recent update, Sophie declared their dice – now on version 1.2 – to be feature complete. That means, aside from potential bug fixes, Sophie’s Dice is now done. We caught up with Sophie to get an insight into how they developed such a comprehensive dice application.
Thumbsticks: First of all, and we’ve got to ask: why? What possessed you to embark on this massive undertaking?
Sophie Houlden: I was kind of in a weird place when I started, I was burned out and thinking about quitting video games for good, so I decided to take a month where I swore off all game development. But I find it pretty hard to stop myself from toying with a game engine, and I figured, “if it’s a dice roller, it doesn’t count as a game!”
I’d successfully found a loophole and was able to work on a little project… I mean, well it was supposed to be little…
Yes, quite! Has scope creep been an issue?
Yes. Holy crap yes! Once I started, there was always something new to learn about that I wanted to incorporate some way, from Catalan solids to numerically balanced face layouts.
Do you know what difference numerical balancing makes for virtual dice? Absolutely none! But still, I spent maybe a month writing systems to find numerically balanced layouts, and then I included all the ones I could (some which I think haven’t been discovered before?)… it adds basically nothing to the app but it was cool and I couldn’t stop myself.
I still have a “would be nice to add” feature list that is hundreds of items long. You wouldn’t think some shapes with numbers on would be such a rabbit-hole, but it’s geometry and statistics and art and play all together and it turns out they make a really deep rabbit-hole. I call the app “done” but there is so much I could still add. I’m only stopping because there are other things I still want to do with my life!
Did you enjoy the process? There’s something oddly pleasing about dice models.
Yes! Working with dice has been incredibly fascinating and it’s been cool to learn about a lot of things that were new to me. There have definitely been times where it’s been tough, but that is the same for any large project I think.
Overall I had fun working on so many different things, and completing a kind of project that I never expected I would make (not even when I started work on it).
Customisation is a big part of Sophie’s Dice – what are the coolest/weirdest things you’ve seen people do with your dice?
Probably poetry dice, or whenever people recreate dice of games they love (pretty early on I saw someone had made some great looking Hero Quest dice), or even people making dice to test for their own game systems – when I see that stuff it’s great to be assured that people can make whatever dice they need.
That was a big goal with my app, so it’s cool to see that it allows people to play whenever they are missing some obscure dice in real life.
Was it challenging making sure your dice behave just like the real thing? Have you had any difficulty persuading purists your dice are legit?
It’s been a learning experience! It was easy enough to get the dice rolling and bouncing around in a way that looked realistic thanks to Unity’s physics engine… but making the dice fair was not easy. Something I’ve learned is that there is bias everywhere, even the physics engine itself made the dice behave less fairly! I had to do a lot of study and work to eliminate all the bias I could find, and test the dice extensively to ensure they were as fair as can be.
A weird thing I realised when I was already way too deep into solving these problems was that real dice aren’t actually all that fair themselves! Fairness, like so many things, isn’t binary – dice can be more fair, less fair, more fair in one way, biased in another, and ultimately, you can’t properly test whether a single die is fair or not – dice change shape the more you roll them, and the surface might become more worn, more sticky, even the surface you roll it on changes! Under which circumstances do we want our dice to be fair? It’s all… well, it’s another rabbit hole!
In the end, I had dice that tested incredibly fair – that is to say, when tested, each face value seemed to come up as often as any other, with no discernible pattern in the order face values came up; basically the definition of randomness! – but when you start thinking even deeper, isn’t randomness determined as much by us as observers as the thing we observe? Dice are mechanical creations. If you could throw it exactly the same way every time the result would be the same, even for what we imagine as an ideal “fair” die. It’s our imperfection that creates randomness, unpredictability and randomness are determined by us and the extent to which we can predict things – so I realised it’s actually fine that most dice are less fair than we think! It’s not worth worrying about “fair” vs “not fair” when dice need only be “fair enough”.
Of course by the time I had this revelation I’d already spent way too much time chasing down perfect fairness in my dice, so for fun I added the option (should people want it) of “realistically biased” dice, where I allow certain biases to influence dice rolls. The dice are still fair, they are just more realistically fair, if that makes sense?
As for having to convince purists my dice are legit, it’s never been an issue! I worked so hard so I’d be able to defend my dice from slander but nobody seems to question them. I guess that’s a good thing; means my dice are convincing!
Computers are really not very good at being truly “random” – why are your dice better than pseudorandom number generation?
Ah, the PRNG vs TRNG debate. [Pseudorandom number generation and true random number generation – Ed.]
The truth is I try not to worry about it too much. Most elements of which values get generated are (at least partially) the result of human input – the speed you’re dragging the dice, where on the screen you’re touching – and on top of that, I add some PRNG elements (a little extra/less force in a slight random direction, random spin – just to keep people from thinking they can ‘control’ their rolls). The key thing with dice is that they are supposed to be unpredictable to people, and in my opinion, a pseudorandom number generator on a webpage is good enough for that.
Times when you really need true RNG are not what I made the app for. The human element does bring the randomness into a higher level of unpredictability but the app still runs on deterministic machines. I’d imagine a sufficiently fancy super-computer could probably predict some outcomes of automated rolls slightly more reliably over several hundred thousand rolls.
It’s probably better “randomness” than a webpage dice roller, but the real reason my app is better is just that the dice feel like dice. It’s an aesthetic thing, you get to see it roll, you see the possibilities that could be, just before the dice finally topples and lands on something else. That is more of a story. That’s more fun.
Have you thought about using your dice tech for anything else? A CRPG using a “physical” roll of Sophie’s Dice would be more authentic than PRNG, presumably?
I’ve thought about it! Recently I’ve been working on gamebooks where you roll dice in battle and thinking I could include virtual dice in that, or include the gamebooks in my dice roller… but to be honest, I kind of like the separation, if that makes sense? That my dice are just dice, I don’t want to see them as specifically for one game or another. They are just for when you need dice, you know? It’s hard for me to explain, sorry!
Has the project been a success for you, in terms of sales? What’s next for you?
I’ve not looked too closely at sales, to be honest, but tax season is coming up so I guess I’ll have to do it soon. I do know that it sold better than I expected. The costs to make an iOS version were covered and I honestly thought that would be a loss, so that was a pleasant surprise. I also know that it hasn’t sold well enough to make any discernible dent in my debt either though… but whether it was a success for me? Yeah, absolutely. I was able to work on a fun thing for a while and now that it’s behind me I’m not thinking to myself, “what the hell? That was a complete waste of time!”
Any time I can feel like this is a success!
As for what is next, I’ve decided I’m going to start work on my dream video game! I’ve been putting it off for ages but now I have collected a bunch of skills, and patrons who are kind enough to support me (even when I’m making something as absurd as a dice roller) I think it’s time to make the thing!
And a daft question to finish: Have you tried to simulate this?
Haha, I remember that! I did try to simulate some of it but that many dice would crash most any device running my app. The sad truth is 3D dice physics is more expensive to process than a simple PRNG webpage.
A spoiler for rolling very large numbers of dice, though, is that statistically, you will always get pretty close to the expected value of the roll. It’s not interesting for games to ask you to roll that many dice at once, so they don’t do it, and I don’t need to worry about simulating it!
Follow Thumbsticks on Twitter for the best video game stories. Got something you’d like to share with us? Our DMs are open.