Canopy started with a single question: what if the player character had realistic aerodynamics?

Most endless runners treat movement as binary — you're on the ground or you're in the air, you're moving or you're stopped. The skill is reaction time and pattern recognition. That's a valid game, but it's also a genre that's been done thoroughly. I wanted something where the movement itself was interesting — where understanding how your character behaved in the air was the core skill, not just how fast you could tap.

The leaf came from that question. A falling leaf isn't fast or agile. It drifts. It catches on air pockets. It responds to things ahead of time, not in the moment. If you want a leaf to end up somewhere specific, you have to start guiding it before it gets there. That's a completely different skill than a reflex game, and it felt worth building around.

The Physics Problem

The first challenge was making the leaf feel right. Real leaf physics are complex — drag, lift, rotation, turbulence — and simulating them accurately would produce something either unpredictable or computationally heavy. The goal wasn't accuracy; it was feel. The leaf needed to behave in a way that felt natural without actually being natural.

The current system uses a simplified model: the leaf has a vertical velocity that's constantly pulled toward a terminal falling speed. Floating (releasing input) applies upward drag and slight unpredictable drift. Diving (holding input) reduces drag and accelerates the fall. Boost overrides both with a short burst of strong upward velocity.

What makes it feel like a leaf rather than a generic floating object is the drift — a small, randomized horizontal nudge applied during float that's just pronounced enough to require active correction without being so strong that it's frustrating. Getting the magnitude of that drift right took probably twenty iterations. Too much and the game feels chaotic and unfair. Too little and the leaf feels mechanical and arcade-y.

The current value is somewhere that most players describe as "floaty but controllable," which is exactly where it needs to be.

The Forest

Early prototypes had branches that were static obstacles — solid rectangles placed according to a simple random algorithm that guaranteed a navigable path. This worked mechanically but looked terrible and felt sterile. A forest that doesn't move isn't a forest.

The current branch system generates each layer of the forest procedurally, with gap widths that narrow as the run progresses. After Year 1, individual branches are given a sway parameter — a sine wave offset that makes them oscillate horizontally at different rates. The player can't see the oscillation parameters, but they can feel when a gap is narrowing and compensate. Learning to read that rhythm is one of the skills that separates good runs from great ones.

The seasonal color system came from a question that came up during the foliage rendering work: if I'm already tracking the color of every leaf in the canopy, could I change those colors gradually over time? The answer was yes, and the implementation ended up being one of the nicest-feeling parts of the whole game. Instead of transitioning seasons by changing a global color, the system flags individual leaves for transition one by one as the player passes through them. The result is a gradient that ripples through the canopy — spring green fading into summer's deep green, then warming into autumn orange, then going bare for winter. It takes about 200 points to complete each season, which is long enough that the transition feels gradual.

The Boost Economy: Three Wrong Versions

The boost mechanic went through more redesigns than anything else in Canopy. The original version was simple: you had three boost charges, they regenerated on a timer, and that was it. This worked but created a bad habit: players would save all three charges and use them only in genuine emergencies. The result was a game where the boost felt like a safety net rather than an active tool.

Version two tried to fix this with a different regeneration system — charges regenerated faster when you collected seeds, encouraging active play. This was better, but it created a new problem: players who were good at collecting seeds essentially had unlimited boosts, which made the late game too forgiving.

Version three is the current system: charges decay over time (one charge every 30 seconds), but collecting any pickup pauses the decay for 5 seconds. This inverts the relationship. Instead of playing aggressively to earn more boosts, you play aggressively to not lose the boosts you already have. The feeling is completely different — it's less "build up a resource" and more "keep the pressure off." Active, greedy runs stay stocked. Passive, careful runs bleed charges slowly until they're in trouble.

The golden leaf — which appears after distance 1000 and instantly refills all charges — came from playtesting feedback that the late game felt punishing if you'd lost charges early. The golden leaf gives skilled players who've survived to that point a meaningful reward that partially resets the pressure. It shows up rarely enough to feel like a gift.

What Came Late: Birds and Wind

Wind zones and dark birds were both added late in development, and both almost didn't make it in.

Wind zones were cut twice before the final version. The first implementation made the wind too strong — it felt unfair because the force was applied suddenly, with no visual warning. The second version added a visual indicator but the indicator was small and easy to miss under pressure. The final version uses a visible shimmer effect that covers the width of the screen in the zone, making it obvious where the wind begins and ends. The force is also lower than the original version — just enough to require a correction, not enough to push you into a branch before you can respond.

Dark birds came from a conversation about what makes the late game feel different from the early game beyond just faster movement and tighter gaps. The answer was: moving obstacles. Birds follow simple predictable paths — a gentle sine wave with a fixed amplitude — but their paths cut through gaps that would otherwise be navigable, requiring the player to time their approach around the bird's position. They appear infrequently enough that they never become the dominant challenge, but their presence makes the post-400 forest feel alive in a way it didn't before.

Where It Ended Up

Canopy in its current form is a game I'm genuinely happy with. It has a clear feel, a distinct skill curve, and enough systems layered on top of each other that a long run feels meaningfully different from a short one. The combo system, the firefly streaks, the boost economy, the seasonal transitions — none of these are essential to the core game, but all of them add something real when they're working together.

It's also still changing. The branch generation will continue to be tuned as more people play and report where the difficulty curve feels unfair versus genuinely hard. The seasonal palette for winter is due for a refresh. And there are a few mechanics in early prototyping that might eventually make their way in — or might not, if they don't earn it.

Play Canopy here, or read about how the color mixing in Decant was designed.