When the leaves turned white: teaching a world to show the year passing

← All field notes

For a long stretch, The Long Watch had a calendar but never showed it. We’d built the underlying sense of time early on — the length of a day, the turning of it, a year split into four equal seasons — as plain, derivable facts you could query for any moment.

The seasons were true. They were just invisible. Nothing on screen changed as the year turned, and a game about tending a place doesn’t feel alive if the place never visibly reacts to its own clock. This is the story of the stretch where we fixed that — and of the bug that, on its first autumn, turned every tree in the world stark white.

Treating the year as one cycle, not a pile of switches

The tempting way to add seasons is to bolt on toggles one at a time: a sprouting flag here, a colour swap there, a dormancy check somewhere else. We deliberately didn’t. We treated the whole annual cycle as a single thing, with five aspects moving together in lockstep: when seeds are allowed to germinate, how fast a plant grows in each season, the autumn shedding of leaves, the dead-quiet of winter dormancy, and the windows when seeds disperse. Each plant carries a small profile describing how it behaves across all five over the year, so the season is one coherent pulse running through the whole organism rather than a handful of independent rules that could drift out of step.

Two plants carry the contrast in the current roster, and they were chosen to read differently on purpose. The oak is deciduous: it germinates in spring, fills out and peaks in summer, thins and recolours through autumn, goes bare and dormant in winter, then leafs out again the next spring. The meadow grass is perennial: it shifts colour through the seasons and slows to a near-stop in winter, but it never sheds — it just dims and holds. Look at the same world in two different months and it reads as two different places, which is exactly the point.

A broad oak in mid-autumn, its crown thinned to about half and turned amber and gold, standing over a meadow of grass dimmed to muted ochre.Concept art · pre‑alpha
Autumn on the oak: the crown thinned to half and gone amber, the grass beneath it just dimmed and holding.

The growth speeds tell the same story underneath. The oak runs hardest in summer and idles entirely in the cold; the grass peaks in spring and keeps a faint pulse even through winter. We didn’t want the year to be cosmetic — we wanted the visible colour and the invisible biology to be the same signal. (How a plant earns each stage of its growth is its own story, told in Nothing grows on a timer; here we’re only bending the rate by season.)

Two ways to see the season at once

We wanted the year to be readable without a single number on screen, so we made it visible two ways at the same time — in the colour of the leaves and in the shape of the tree.

The colour moves through roughly four reads as the year turns: a fresh, almost translucent green at leaf-out, a deeper full green through summer, an autumn amber, and then bare. The grass walks a quieter version of the same path. The shape is the louder signal: at each season boundary the oak’s crown is rebuilt so it can physically thin out — full through spring and summer, down to about half in autumn, and a bare trunk in winter before it fills back in. The trunk persists year-round; the crown is the thing that comes and goes. Watching a tree drop from full to half to bare and then green up again the following spring makes the rhythm unmistakable in a way no colour shift alone ever could.

The world now visibly cycles through the in-game year — autumn is something you can see happening, not a value ticking somewhere out of sight.

The save file never learned what season it is

A quiet design choice underpins all of this: we never store the current season. It’s re-derived from the saved time and the world’s calendar settings every single time a world loads. Ask “what season is it here, now?” and you get a stable, computed answer — nothing is written down that could disagree with the clock.

The payoff is concrete: adding the entire seasonal system changed what a saved world stores not at all. A world saved before any of this existed loads into the new build and simply starts living through its year, because the season was always derivable from data the save already held. It’s the cheap kind of feature — the kind where the new behaviour falls out of facts you were already keeping, instead of demanding a migration.


When the leaves turned white

Then the first real run, and the bug the post is named for. After the very first autumn boundary, every canopy in the world snapped to stark, solid white.

A grove of trees at golden hour whose leafy crowns have all turned an unnatural stark white, standing out against the warm autumn ground below.Concept art · pre‑alpha
The bug the post is named for: the first autumn turned every crown a ghostly white.

The cause was in the thing that makes the season visible at all. Because the crown is rebuilt from scratch at each season boundary so it can thin out, that rebuild was quietly producing a fresh canopy mesh — and the fresh mesh didn’t carry over the colour the tree was supposed to be wearing. The seasonal tint lived on the old crown; the new crown came up blank, and blank rendered as white. It only bit once the year actually turned, because before the first boundary the original crown was still standing. The fix was small once we saw it: capture the tree’s colour material once when it’s first set up, then re-apply it every time the crown is re-skinned, so the season’s colour survives the rebuild instead of being thrown away with the old mesh.

The honest part is why it took a real run to surface. The system looked completely correct on paper — the colour logic was right, the rebuild logic was right, and reading either one in isolation told you nothing was wrong. The defect only existed in the seam between them, and that seam only matters when a crown is actually rebuilt with real geometry on screen. Earlier checks had exercised stand-ins; this one finally drove the genuine rendering path, and the world turned white the instant it did.

“Looks ratified on paper” is not the same as having watched it actually run.

The cheaper bug, and why it mattered too

The white crown was the vivid failure; the quieter one was about cost. Our first cut recomputed each plant’s seasonal colour for every individual plant, every frame. That’s a lot of identical arithmetic — every oak in a stand is the same shade of amber on the same day — and it scales with the wrong thing: the number of plants, times the frame rate.

The fix was to compute the colour once per species per tick and reuse it, rather than per plant per frame. The season changes on the slow clock of the year, not between two frames a sixtieth of a second apart, so caching the answer and handing the same value to every plant of a species costs nothing in fidelity. With the modest roster the game runs today the saving is small, but its shape is what we cared about: the cost no longer climbs with how densely the world is planted or how fast it’s drawing.

It pairs neatly with the crown rebuild, which earns its keep the same way — the expensive re-skin happens at most four times a year, once per season boundary, not on every frame. The visible season is built almost entirely out of work that happens rarely.

What it set in motion

The look shipped at sensible first-pass values rather than chased to perfection. There’s an obvious next pass — a colour-punch on the saturation so autumn reads even warmer — that we deliberately left as optional polish instead of grinding a tuning loop until it was “done.” It reads right by feel, and that was the bar.

The more interesting legacy is that the season stopped being only about plants. The same seasonal rhythm that speeds summer growth and slows winter rot — the soil temperature underneath it all — later went on to govern how a fallen creature’s body breaks down into the ground, so a corpse returns its nutrients faster in the warm months and lingers in the cold. That thread is told in Return to the earth. And there’s an honest gap we’ve left open: the winter slowdown of scavenger activity is designed for but not yet modelled, so for now the cold quiets the plants and the soil but not yet everything that lives on them.

What we came away with is the small, stubborn lesson under both bugs. A world only feels alive if it changes on its own slow clock whether or not you act — and the only way to know it really does is to let the year turn and watch. The first time we did, the trees went white. We’re glad they did it where we could see.

Keep reading

Concept art · pre‑alpha