Seven plants without new code: the payoff of building the bones broad
The most satisfying afternoon of the whole plant chapter was the one where we tried to add five new plants and discovered there was almost nothing to build. The world went from two species to seven — a conifer, a shrub, a fern, a wildflower, and a wetland reed joining the grass and the oak — and not one new rule was written to grow them. This is the engineering story of why it was nearly free, and the small honest compromises that kept it that way.
The player-facing version of this — what a layered woodland actually looks like, and why a long-lived oak settles a world the way it does — is its own story. This one is the view from inside the code: a decision made weeks earlier, and the afternoon it paid off.
The first plant wasn’t a plant
Long before there were seven plants, the very first piece of plant work wasn’t a plant at all. It was the substrate — the general machinery that places a plant on the terrain, advances it through its life stages, carries it through dying, and lets it seed the next generation. None of that knew anything about grass, or oaks, or anything else. It was written to operate on any list of species you handed it.
We proved that foundation with a single deliberately trivial plant: a short-lived ground-cover grass, chosen precisely because it was unremarkable. The temptation in that situation is always to let the one example you have in front of you shape the machinery — to bake in assumptions that happen to be true of grass. We worked hard not to. The note we wrote for ourselves at the time was blunt about where the real risk lay.
The bones had to be validated by the one species, not over-fit to it.
That is an uncomfortable discipline, because over-fitting is invisible while you’re doing it. A system that secretly assumes “plants are short and die fast” looks identical to a general one as long as the only plant you ever feed it is short and dies fast. You don’t find out which one you built until you try the second plant — or, in our case, until you try five at once.
The afternoon the bet paid off
The fill-out came much later, as the final piece of the plant chapter before the world was ready for its first creatures. We wanted to flesh the place out: a conifer for evergreen canopy depth, a shrub and a fern for the understory layer that was entirely missing, a wildflower for more ground cover, and a reed for the wet edge of a marsh. Five new plants spanning every layer of a woodland.
Before committing to a plan, we did the un-glamorous thing and checked the assumption against the actual code, candidate by candidate: does this plant need a new mechanic, or doesn’t it? We went in braced to find at least a couple that did. We found none. The placement, growth, dying, seeding, and seasonal systems all already walked whatever list of species we gave them, generically. There was simply no plant-specific code anywhere to extend.
So a new plant turned out to be a data file — a written-down description of what the plant is: how long it lives, where it likes to grow, what it looks like through its stages, how it scatters seed — rather than a programming task.
Adding species was data, not code — every roster-extension, no new mechanics.
That was the lightest outcome of the entire plant chapter. The world roughly tripled its plant variety — two species to seven, spanning four woodland layers and three climates — and the rules underneath it did not change at all. The whole expansion lived in description.
Three honest compromises
It would be dishonest to leave it at “and it all just worked,” because three of those plants only fit the existing machinery because we let the design bend to meet it. None of these are fakes; each is a smaller, truthful version of a richer thing we chose not to build yet. They’re worth telling, because they’re the part of “no new code” that the headline hides.
“Aquatic” became “wetland margin”
We wanted a water plant. But the world has no concept of water depth, and no water table anywhere in its model of the ground — there was simply nothing for a submerged plant to be submerged in. Rather than build an entire water-depth system to support one reed, we redefined the goal. The reed isn’t aquatic; it favors the wettest climate and grows at its edge. It reads as a marsh plant standing where the land turns wet, which is most of what we wanted, and it cost nothing the world didn’t already have.
“Understory” became a placement preference
The shrub and the fern are understory plants — the layer that lives beneath the canopy. The faithful way to model that is shade tolerance: plants that thrive in the dimmer light under taller trees. But the world has no real sense of shade or canopy occlusion; nothing in it knows that a tree casts a shadow another plant could live in. So “understory” became a preference, not a sense. The shrub and fern favor forested ground, which means they end up under the canopy by sharing the same places the trees like — not because they tolerate shade, but because they like the same dirt. From above it looks right. Underneath, it’s a coincidence we arranged on purpose.
The evergreen needed nothing at all
The conifer is the happy one. An evergreen is a plant that stays green through winter while the deciduous trees thin and drop their leaves — and we braced for that to mean new seasonal behavior. It didn’t. The seasonal system was already flexible enough to describe a plant that simply never thins, the same way it describes one that does. “Stays green all year” was already a thing the system could be told, not a thing it had to learn. The conifer slotted in on description alone.
What we left for later, on purpose
The compromises came with a standing promise to ourselves: name the richer version as future work rather than pretend it’s already there. A true open-water aquatic plant — one that actually stands in water the world knows is deep — waits on a real water-depth model. Real shade tolerance — understory plants that live under the canopy because it’s dim, not merely because they share its ground — waits on the world understanding that trees cast shade. Both are written down as things to build, not things to fake. A stand-in you’ve labeled honestly is a deferral; one you’ve forgotten you made is a bug waiting to surprise you.
One small piece of discipline made the expansion safe to make so casually: each species draws its own randomness independently, so adding a plant — or reordering the list — can’t disturb where another plant lands. The world a seed grows stays exactly reproducible no matter how the roster grows, which is its own deeper story. It meant we could widen the roster without holding our breath.
The quiet moral is the one we keep relearning: build the bones broad before you need them, and the world’s richness becomes a matter of describing more life instead of re-engineering the world each time. We’d spent real care, weeks earlier, making the first plant general when we only had one plant to general-ize over — care that looked like over-engineering at the time. The payoff was an afternoon where we reached for five new features and found the machinery already waiting for every one of them.



