The Luminids plains looking north toward terraced peaks and cloud
Standing at camp, looking north. Everything you can see, you can walk to.

In August we threw the world away and built a new one.

The old world was infinite and procedural in the honest sense: it went on forever, and it was never anywhere in particular. That’s a lovely engineering achievement and a poor place to set a story about coming home. So the replacement is a different world, on a different generator, in a new repository, and the old one survives only as a rollback artifact.

This is the longest dev log I’ve written, and it still leaves things out.

One island, nine realms, one compiled world

Luminids is now an island, about four kilometres by five. It’s authored, in that the mountains are where I decided the mountains should be, and it’s generated, in that the ground between them is still built by the machine, at the scale where machines are better than people.

Under the hood the whole thing is a single compiled generator: a graph of three hundred and seventy six nodes that compiles in about a sixth of a second, sitting on top of a compiled field that carries height, region, land and ocean, coast distance, water surface and slope across the entire island. Five hand-authored kernels get composited into it in a fixed order, each one blending into its neighbours over a sixty four metre band, so the mountain pass I sculpted by hand and the meadow the noise made meet at a seam you can’t find.

The nine realms:

  • Plains Meadow, home, deliberately the least opinionated place on the island
  • Temperate Grove, canopy shade, reeds and a still pond
  • Highlands Mountains, thin air, everything ten percent sharper
  • Tundra Alpine, snow and cold blue light
  • Desert Rim, heat you can see
  • Desert Badlands, carved red stone that keeps its edges
  • Volcanic Highlands, striped rock, lavafalls and hot pools
  • Coast Beach, cliffs, a sand shelf and turquoise shallows
  • Ocean Shallows, in the water rather than beside it, all sea-glass colours

Each realm also has a one-line brief, and I’ll admit a few of them got poetic. The tundra’s is “held breath, blue silence that is somehow kind”. But those lines aren’t marketing copy. They’re the acceptance criteria.

What "biome soul" actually means

I kept saying I wanted biomes with soul and it kept meaning nothing, so in August we made it testable.

The test: stand a player at a realm’s interior station, cover the HUD completely, and show them the frame at noon, at golden hour and at half nine at night. They should be able to name the realm from colour and light alone, and they should never once say the word “filter”.

That last clause is the hard half. Anyone can tint a biome orange. It looks like an Instagram preset laid over a generic world, and the moment a player clocks that, the place stops being a place.

So each realm’s look comes from three layers that do different jobs. The foundation is the realm’s own body (its rocks, plants, water and weather), and no colour grade has ever rescued a bare floor. The strong layer is the light axis (how the ambient light and the sun are actually tinted), and that’s what makes somewhere feel hot or cold. The colour grade on top is kept tiny on purpose: a hundredth of a step.

The results I’m proudest of are the ones that go against the obvious choice:

Tundra refuses golden hour. Every other realm turns honey at dusk. The tundra crown pulls to a cold rose-violet instead, so sunset there feels like the temperature dropping. And tundra night is brighter than any other night, because snow reflects the sky and the ground goes blue-silver under the stars.

Desert flips completely. Noon is heat as light rather than heat as saturation, colours slightly eaten by glare, shadows open and dusty. Night goes cold, blue, star-clear, and a campfire pops harder there than anywhere else in the game.

In the volcanic highlands the land is told to shut up. Muted warm grey, sooty shade, no clean whites under an ash sky. Any frame where the terrain competes with the lava has failed, because in that realm the lava is the protagonist.

And the borders get a test of their own: stepping from plains into grove at noon should feel like walking into a room.

A desert oasis seen through palm trees
Desert Rim. Water you can see from a long way off.
A lavafall pouring into a caldera beside a hot pool
Volcanic Highlands. The land is drab so the lava can be loud.
The coast from a cliff with turquoise shallows and a sand shelf
Coast Beach. The ocean has six provinces of its own now.

Water, caves, and things worth walking to

Water went through nine rounds this month and I lost my temper at it in at least four of them. The camp creek had dry steps in it. The waterfall looked like a stretched texture instead of falling water. A yellow blob showed up on the lake surface and turned out to be the cloud shadow texture landing on the water’s own sun reflection.

They’re fixed. Falls now have ribbons, churn and feathered edges. Water gives one answer about where its surface is, so fish stay under it. Pools sit at their sills instead of leaving bare column tops.

A still pond in the grove at first light, seen through reeds
The pond in the grove, early.

Caves got mouths you can see. From a hundred and twenty metres, a cave entrance now shows up as a lit doorway with an actual lamp hanging in it, which is the discovery loop in one object: you see a warm point across a valley, you walk to it, and there was always something there. Inside, ore sits in veins that glow by tier instead of scattered blocks.

A Luminid standing at the foot of an enormous lavafall
For scale. That is one luminid, and that is one lavafall.

And the map finally shows the island. It had been quietly answering questions using the old world’s concentric-ring layout, which meant it would tell you the frozen spire was in the desert. The island’s twenty nine registered sites are now real map records, and the fog you clear by walking persists across a save, which, embarrassingly, it didn’t before.

The Ark

This is the one I’ve wanted for a long time.

At a berth near your camp there’s a spine: a horizontal keel about forty five metres long, lying dead in its cradle. Every time one of the seven sanctuary fragments comes home, the colony builds another piece onto it, live, in front of you, with the same builder crew, effects and little ceremony they use for anything else you ask them to build. The ceremony system turned out not to care what it’s building.

As it grows, it lights up, because the light is the progress bar. From your camp, at a glance, with no interface at all, you can tell how far along the whole campaign is. Stage zero is a bare spine. Stage seven is a starship. Then it flies.

The Ark's ring and hull rising in the meadow beside the lake
Part of the way up the ladder. The ring is the last piece to arrive.

The honest part: you can’t make it out at night yet. On a test bench, lit and unlit are obviously different. In the actual game, from a hundred and twenty metres at dusk, there’s a faint warm point where the Ark’s light is and no Ark at all around it. The design says the light is the progress bar, and right now the light is a pinprick. That’s the top of my list.

Then we put it in front of players

We ran a playtest through the middle of the month, and then spent a couple of days repairing the instruments that measured it, because almost every number was wrong on the first pass. Two thirds of the file turned out to be my own machine. The export was sorted backwards, which made the median load time look about thirty five times faster than it really was. Fixing the telemetry was, genuinely, the most valuable engineering of the month.

Once the numbers were honest, they showed a wall. Sessions didn’t tail off gently the way you’d expect. A large group stopped dead at exactly the same point, played a short while and quit. Another group of almost identical size got past that same point and then played for hours. Almost nobody was in between. That’s not a pacing problem or a fun problem. It’s one specific door that some people find and some people don’t.

The door is two tasks hidden in a menu, back to back, straight after the game’s first warm moment, which is about the worst possible spot for them. And behind the door was something worse: a milestone in the settlement chapter that was literally impossible to complete. The objective on screen read “build rock path pieces to connect your core spaces, zero of six”, and the counter it was reading from had two feeders, both of which had quietly become dead code months earlier. It sits second in a strict ordered chain, so that entire chapter could never finish. For anyone. Ever.

The other finding was about hardware, and it changed my priorities for the year. A large slice of testers are on graphics cards several generations older than mine, their frames cost substantially more than mine do, and nobody had a session free of stalls.

So this month performance stopped being a technical chore and became part of the product. A calm game that hitches isn’t calm, and it turns out we’d been measuring calm on the one machine in the world least qualified to judge it: mine.

Three bugs that taught us more than the features did

The luminids had no faces. I walked up to one, orbited it, and there was no face from any angle. The face solve only runs while the creature is close, and “close” was measured from the player’s body. But what actually sees a luminid is the camera, and the camera is often somewhere else: the build camera, photo mode, a cutscene, the third person boom. A luminid forty metres from my body and two metres from my lens had its face frozen at whatever it last looked like from behind, which is to say blank.

Astra the Luminid close up and smiling, name plate reading Calm
The same creature, after. Turns out she had a face the whole time.

One line of code was costing us over a thousand milliseconds. A single search-the-whole-tree call, run recursively, in the thinking loop. Worst case thinking time went from 1,331 milliseconds to 2.6. There are still fourteen hundred of those calls in the codebase.

We weren’t running the physics engine we thought we were. The check compared the string “JoltPhysics” against the string “Jolt Physics”, failed silently, and fell back. For a long time.

It’s the same pattern all three times: the instrument was fine, the question it was asking was subtly wrong, and it reported success the entire time. I now assume every gate is blind until proven otherwise.

Where that leaves us

August gave Luminids a real place to be. September is about filling it, and about something that’s been missing from the fiction since the beginning. I’ll explain that next time.

Nick