Teaching a read-only sky to change

← All field notes

For its whole life, the weather in The Long Watch was a thing you could only ask questions of. Name any spot on the map and it would compute that place’s rainfall, temperature, and wind fresh, on the spot, holding nothing of its own. That was clean and dependable — and it was a wall. The day a player should finally be able to change the weather, there was simply no surface to change.

A sky with no writable side

The weather had always been pure read-authority. Nothing about it was ever stored or mutated; every answer was recomputed from the world’s underlying recipe the instant you asked. Two people on the same seed got the same sky because the sky kept no state to disagree about — it was a function, not a record. That is a lovely property to build on, and it has a story of its own in a sibling post: weather that comes from somewhere.

The trouble is that a function you can only read has nowhere to put a change. We wanted three new powers — summon rain, calm a storm, push back frost — and each of them is, by definition, an act of writing on the weather. The whole engineering problem of this work was inventing a writable side for a system that had been built, deliberately and from the start, to have none.

The player-facing half of that story — what the three wishes feel like, and why we made a god’s say over the sky so quiet — lives in its companion: weather you can ask for, gently. This post is the other half: how the sky was taught to change at all.

The shape a change should take

The first real decision was what a player’s change is. We had two tempting options and rejected both. It is not a permanent edit stamped onto the map — that is how reshaping the land works, and the sky is not the land. And it is not a rewrite of the weather’s underlying recipe — touch that and you have changed the world for all time, everywhere, which is far more than “make it rain over here for a while.”

What we landed on instead is a soft, regional overlay — a bubble of influence scoped to where the player aimed, strongest at its center, falling off to nothing at its edges, and decaying on a timer until it expires on its own. It is deliberately transient: it swells in, holds, and is gone again, leaving no state behind to clean up. Each verb writes into that same shape — summon rain and push back frost raise their values inside the bubble, calm a storm lowers the storm’s contribution within it. What that shape feels like to wield — a wish, not a switch — is the companion’s to tell; here it is simply the smallest writable thing the sky could carry.

A circular fall of rain over one patch of golden-hour voxel meadow, dense at the centre and fading to dry, sunlit ground at its edges, with the rest of the land clear around it.Concept art · pre‑alpha
A change shaped like a soft bubble — strongest where you aim, fading at the edges, and gone again when its window runs out.

The elegant part is what we didn’t have to rebuild. The existing weather lookups — the ones the whole game already leans on — weren’t torn open. They simply learned to also read these bubbles and fold their influence in on top of whatever the place would naturally be doing. Where no bubble is in effect, the answer is exactly what it always was, to the last decimal. A power is an extra layer the reader adds in, never a hole punched through the floor it stands on.

Pure addition, never a restructure

One constraint kept the whole thing honest, and we held it like a rule of physics: the new reading had to be a strict addition layered on top, never a reshuffle of the old math. With no active bubbles, the weather must give back byte-for-byte the same numbers it always had — not “close,” not “within rounding,” identical.

That sounds fussy until you remember what depends on this system. The sky feeds soil temperature, plant survival, erosion, the audio — a long chain of things that two players on a shared seed expect to see unfold the same way. If adding a writable surface had quietly shifted the baseline by a hair, every one of those would have drifted with it, and the shared-seed promise the game is built on would have cracked. Proving the new code is a perfect no-op when nobody has touched the weather is what made it safe to bolt this onto a load-bearing system at all.

A power is something the world reads in addition to itself — never a rewrite of what the world already was.

Calm a storm took the most care here, because it is the one verb that pushes against something already in motion. The engineering answer kept the addition rule intact: calming reads in only at the moment of asking and never edits the world’s storm timetable, so the seed-decided sequence of storms stays byte-identical whether or not anyone ever calms one. Why a god’s hand on a storm is a quieting and not a deletion is for its player-facing companion to describe; the point here is that it changes nothing the world had already decided.

Remembered without being stored

Because every bubble is a pure function of where and when it was cast and how much time has passed, the changed sky never has to be saved at all — on load the game replays the player’s logged actions and re-derives each bubble from scratch, so a loaded world reproduces exactly the same weather as one that was never closed, and the save never grows to hold it. That the weather is recomputed rather than recorded is one answer in a larger record-the-deed-not-the-result pattern, told in remembering what you did, not what it did — and followed, where that pattern once sprang a leak, in the power that reset itself on load. The only care a writable sky added was making sure a re-derived bubble applies its effect exactly once on load, never twice.


The close that passed on the wrong axis

Here is the honest part, and the most instructive. We ran our code-complete gate, and it passed. By every check we had, the feature was done. And the actual play scene crashed on launch.

The new weather surface had been threaded everywhere it needed to go — everywhere except one boundary in the startup path, where the connection that hands the running weather to the scene was simply never made. None of our tests caught it, and the reason is the uncomfortable one: every test built its own little setup by hand and exercised the system in isolation. Not one of them booted the real scene the way a player does. So the gap lived precisely in the seam between “each piece works” and “the pieces are wired together when the game actually starts” — the one place no test ever looked.

The gate was green on the axis we measured and wrong on the axis that mattered: the real scene crashed at launch.

The fix threaded that last connection. But the part that earns its place in this story is the second fix: we added a test that drives the actual startup path — that boots the real scene and not a tidy stand-in — so this whole class of gap can’t ship green again. It was not the first time a green gate measured the wrong axis: an earlier close proved a world correct without once watching it live.

One smaller indignity surfaced at the same time. The new powers had been bound to keys past the end of an ordinary keyboard — unreachable, every divine verb stranded above the top row. We remapped them down into keys a person can actually press. It is the humblest kind of bug, and a perfect reminder that “the code runs” and “a human can use it” are two different claims.

What the writable side bought

When the work was finally closed — after the world’s caretaker had played it, kept our placeholder feel-values as the tuned ones, and asked that calm a storm still only the storm’s gusts rather than all wind — the sky had something it had never had before. Not a richer recipe, not a bigger save file, but a thin writable layer it never owned: a region-scoped, finite, fading overlay the weather reads in addition to itself.

These three are the first actions in the game that change the weather field at all, where every prior answer the sky ever gave was purely computed. And the way we got there is the part worth keeping: we didn’t teach the sky to change by rewriting what it was. We taught it to be read in a new way — and left the old answer, where no one has reached in, exactly as true as it ever was.

Keep reading

Concept art · pre‑alpha