INKWAVE Technical Overview
INKWAVE is a Three.js game distributed as static files. Everything in it — characters, animation, weapons, textures, props, sound effects and music — is generated in code; the only downloaded assets are two fonts. Online rooms add one small relay service; the game itself still runs in the browser.
Key facts
- Renders with three.js r186, vendored and loaded as plain ES modules
- No build step to run the game; any static file server works
- Custom render pipeline: MSAA HDR, GTAO, bloom and a grade pass
- Ink is painted into a 4K texture atlas while a CPU grid tracks turf and gameplay queries
- Online play runs on a small Cloudflare Worker relay, one Durable Object per room
- Every player simulates their own squidkid at full frame rate and streams a 20 Hz tick; remote players are interpolated about 100 ms behind
- The website is a static build; the relay is separate from the site
- Released under the MIT license
Rendering
INKWAVE renders through a custom pipeline built on three.js: an MSAA HDR target, optional ground-truth ambient occlusion (GTAO), UnrealBloom, and a grade pass that applies vibrance, log-space contrast, split-toning and a vignette before output. Quality presets run from Low to Ultra, so the game scales to the available GPU.
Ink simulation
Ink is painted in texture space. Every paintable face owns a region of one 4K atlas, and splats are drawn into it on the GPU while a coarse CPU grid keeps the turf score and gameplay queries in sync. The level shader layers the ink over the surface with its own height, gloss and wetness, which is why fresh ink shines, dries over time and drips down walls.
Stages and characters as data and code
A stage layout is a list of boxes and ramps for one half of the arena; the other half is the same geometry rotated 180 degrees, so both teams always play an identical field. Ambient occlusion is baked offline. The newest stage, Cargo Terminal, uses a stage kit with per-stage geometry, props, surfaces and murals.
Characters are fully procedural: geometry, materials, a 60-bone rig and every animation are code, driven by a spring-based pose system. The current squidkids have sculpted heads and eyes with real lids, blinking, gaze and breathing, layered outfits and sneakers, with level of detail tiers for distance. Every stage also received a lighting pass at day and dusk.
Systems and events
Weapons, actors and the match emit typed events; effects, HUD and audio subscribe. The game also exposes a freeze/step debug interface, so filmstrips, handling measurements and bot simulations are reproducible frame by frame.
Online architecture
Online play is peer-simulated through a small relay. Each player opens one WebSocket to a Cloudflare Worker with a Durable Object per room code; the relay only tracks membership, elects the host and forwards messages. Private rooms hold up to eight players and are joined with a five-character code.
Every squidkid has one owner. A player simulates their own squidkid at full frame rate and streams a 20 Hz tick; everyone else renders it through the same animation system, on a smoothed playback clock about a tenth of a second behind. Positions follow a cubic Hermite path, corrections settle on a damped curve, and a respawn cuts instead of gliding across the map. Ink is replicated splat for splat, so every screen shows the same turf, and hits are decided by the shooter's screen and applied by the victim's owner.
The host also runs the bots, the match clock and the final judge. If a player drops, a bot takes over their squidkid; if the host leaves, the room migrates to the oldest remaining player and the match continues.
Boss Battle simulation
In a Boss Battle the host simulates HULLBREAKER. Each move is a small record with a start time, a seed and parameters, so every client can reproduce the same telegraphs and hazards from the same data; hazard damage is applied by each victim's own client from the replicated shapes. Damage to the boss is shooter-authoritative, and a host migration adopts the boss from the last snapshot.
This website
The official site is a static Astro build served as Cloudflare Workers Static Assets. Every page you are reading is pre-rendered HTML; the game itself is a separate static application served under /play/. Online play uses the game's own relay at relay.inkwavegame.com, which is deployed separately from the website. The website source is at github.com/rayGoMoon/ink-wave-game.
Browser support
Chrome and Edge are the target browsers; Firefox works, and Safari runs but is slower. A discrete or recent integrated GPU is recommended for the High quality preset; the settings menu has lower tiers. Gamepads work on the HTTPS site.
Source and license
The game source is at github.com/jaydendavisnc/inkwave under the MIT license. INKWAVE is an independent project and is not affiliated with Nintendo.
Keep reading
- How to Play — rules, ink mechanics and modes
- Features — what the game includes
- About INKWAVE — the project and its author
- Play INKWAVE — run the game in your browser
