About
Wavebreakers is a multiplayer arcade jetski racer built in Godot 4. The key focus is ocean swell as terrain: wakes become player-generated geometry, and tides and currents act as dynamic track features. Every racer rides with a pillion passenger who reacts physically to each launch, carve, and landing; handling items, taunting rivals, and doubling as the game’s diegetic UI by reacting to the environment and other players. The design bets on a single idea executed deeply rather than a breadth of features: make the water feel dynamic and alive, build a cohesive, inviting visual identity, and the rest of the game will follow.
Stylistically, the visual direction bypasses hyper-realism in favour of stylised realism. The engine leverages physically based rendering (PBR) to simulate authentic light scattering and water reflections, while utilising illustrative, high-contrast effects for wave foam and atmospheric gradients. By pairing simplified asset geometry with highly saturated colour palettes, the aesthetic achieves a painterly realism — impossibly clear turquoise water over white sand during the day, deep purples and oranges at sunset, always alive with caustics, sea spray, and sub-surface scattering for backlit crests.
Crucially, every property that decides a race remains physically simulated and readable. Skilled play demands water-reading: launching off swell crests for trick boosts, carving wave faces and aligning landings to maintain velocity, and riding a rival’s wake to draft before slingshotting past. The rendering pipeline serves the physics, ensuring the ocean is never a passive backdrop, but the primary mechanical engine.
The constraint that shapes everything
One rule governs the entire architecture: gameplay water is CPU-analytic, deterministic,
and never reads from the GPU. The sea surface is a pure function of position and synchronised
game time, calculated via a sum of Gerstner wave components, so every client in an online race
evaluates an identical base surface for a given game tick (wakes ride on top through a separate
deterministic channel — only their visual field is local). The vehicle physics loop is
structured as a pure (state, input, tick) function, collapsing client prediction,
reconciliation replay, ghost playback, and AI bots onto a single code path.
Because the game is modest in scale, the majority of the performance budget is allocated to the ocean simulation, lighting, and weather. The wake field, detail-normal cascades, spray particles, and underwater caustics are strictly presentation. The CPU remains the source of truth; the GPU is treated as a visualiser, never a simulator. This one-directional causality is what allows the simulation to be highly ambitious while remaining viable for low-latency online multiplayer.
What this blog documents
This devblog tracks the technical systems under the hood and the overall development progress. Posts dive into concrete architecture decisions, hidden complexities, optimisation telemetry, and the systemic traps that only look obvious in hindsight. Where possible, breakdowns are grounded directly in the shipped production code.
Workflow & Tooling
This project and devblog are driven by an experienced solo software engineer. Modern development tools, including Large Language Models (LLMs), are utilised to accelerate code prototyping, scaffold boilerplate, and refine text structure — the experiences with AI-assisted development will likely form their own posts in time, as there are tremendous efficiency improvements, especially for rapid prototyping, but also some unique challenges. All architectural decisions, performance benchmarks, and final editorial controls are strictly human-verified to ensure accuracy.
Subscribe by RSS.