First One Kind, Then Five: How This Game Grows 🪨
Anyone looking at our version list will find 29 releases in a good five weeks — from 0.1.0 on 20 June to 0.9.0 yesterday. How does that work? Certainly not by sitting down and building a finished feature in one grand sweep. We build in stages: first the smallest version that genuinely works, then — once it's stable and fun — the next stage. Right now the asteroids show that better than anything.
Stage 1: they exist at all. When asteroids arrived in the game, one single question mattered: does landing, walking and mining work on a tiny body you can circle in a couple of minutes? An asteroid isn't a small planet — it has its own size class, different gravity, a different horizon. That was stage 1, and everything else was deliberately beside the point. Which is why there was exactly one kind: the type was hardcoded, and because it had no list of possible surfaces, every single column got covered in crystal. Every asteroid in the entire galaxy looked the same. The only variation was the circumference and where the craters happened to sit.
Stage 2: now it's allowed to differ. Stage two has been finished since yesterday — it reaches the game with the next update. Then there will be five asteroid families, and every rock draws its own by weighted chance. The stony one is the workhorse, carrying iron, silicate, copper and tin. The metallic one is nearly solid metal — titanium everywhere, cobalt, tungsten and platinum deeper down. The icy one sits at −95 °C and carries volatiles instead of metals: carbon, lithium, sulfur. The carbon-rich one is soot-black, riddled with caves, hiding uranium and diamond far below. And the crystalline one — precisely what every asteroid used to be — is now the rare find. On top of that, each body gets its own crater relief: density, basin width, depth, rim height and how rolling the dust between them lies. Previously those were five fixed numbers for the whole universe, which is why every airless body looked identical. The moons benefit too, by the way, because they travel the same path through the code.
The real payoff comes afterwards. The lovely thing about a cleanly built second stage is the third: a sixth family is no longer a programming job but an entry in a data file — name, surfaces, ores, frequency, done. "Someone ought to build that in" has turned into "we could try that one evening". That's what makes the rebuild worth it.
Why we always do it this way. Three reasons, all of them learned the painful way. First: you don't know in advance whether an idea is fun. A small first build can be tried out with Justus in an evening, and afterwards you know whether the expansion is worth it — or whether the idea was actually boring. Second: a small step can be reviewed, tested and, if needed, taken back. A giant feature that reaches into fifty places at once can only be prayed over. Third, and most important to us: this game is played by children. A half-finished giant feature is worse for them than a small one that works reliably.
The same pattern everywhere. Blocks were cubes at first; ramps, stairs and spheres came later, then colouring, then the fine edge bevels so nothing looks like a cardboard box any more. Planets started as a grey rock; real seas, cave systems, altitude-based climate and volcanoes came later, then frozen seas on cold worlds — and now the asteroids. In child safety, there was first only a report command in chat, then bans with reasons and time-outs, and most recently the invisible observer mode. And our bandits, only just released, are themselves still stage 1: they hit you through a proximity effect rather than with actual flying projectiles. That isn't an oversight, it's written into the plan — stage 2, once stage 1 has proven itself.
What this way of working costs. Two things, honestly. First, existing worlds change: because a celestial body's type is recomputed on every load and never stored, the asteroids in your old worlds will get different families and a different relief with the next update. Your built blocks survive — but they may suddenly float freely or sit embedded in rock. That's why such things always go into the release notes. Second, even the first stage has to be built so the second is possible at all. For asteroids that means: there is now exactly one place in the code that answers "is this an asteroid?", and a test that checks, for every generated family, that it really is sorted as one. Miss a single caller and a nasty old bug comes back: a rock where you cannot mine a single block.
And once again the tests saved us. While building the new families, a long-standing check fired: it makes sure that on every world with ore deposits you can reach the cable recipe. Three of the five new families simply had no copper — players would have been stuck there in their progression. No human noticed that; a test somebody wrote weeks earlier did. All families now carry copper and silicate.
Next up is another one of those stages, somewhere between plants, animals and the bandits. Which one it'll be is usually Justus's call. 🌟
Comments