Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Golden-hour boat regatta on a procedural low-poly ocean. Plays in the browser.
Translation pending
GamesJavaScript · CSSGitHub @hammadshakeelaiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
🌅 Fast golden-hour boat regatta on a procedural low-poly ocean. Race three AI skippers and your own ghost through five tide beacons. three.js GPU ocean, CC0 recorded audio, 60 fps adaptive quality, keyboard / gamepad / touch. Play in the browser.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
▶ Play in your browser ·
How to play ·
Under the hood ·
Previous version: Boat Chase
A fast boat-racing game set on a pastel, golden-hour ocean. You drive a small orange skiff over a faceted low-poly sea, catch air off wave crests, power-drift around sea stacks and light five tide beacons before three rival skippers do. Each run is recorded, so on your next race you're also up against a ghost of your best time.
It runs in the browser and loads in a second or two. There are no model files: every mesh, shader and wave is generated in code.Read the full README ↗A fast boat-racing game set on a pastel, golden-hour ocean. You drive a small orange skiff over a faceted low-poly sea, catch air off wave crests, power-drift around sea stacks and light five tide beacons before three rival skippers do. Each run is recorded, so on your next race you're also up against a ghost of your best time.
It runs in the browser and loads in a second or two. There are no model files: every mesh, shader and wave is generated in code.
| Racing the regatta | Nautical chart |
|---|---|
| Harbour menu | Results and splits |
Light the beacons in order, Marisol → Pelican Reef → Driftwood Light → Coral Spire → Halyard Point, then cross the Tidebreak Gate.
| Action | Keyboard | Gamepad |
|---|---|---|
| Throttle / brake & reverse | W / S | RT / LT |
| Steer | A / D | Left stick |
| Boost | Shift | A or RB |
| Power drift | Space | X or LB |
| Cruise control | R | B |
| Camera: chase / wide / helm | C | Y |
| Nautical chart | M | View |
| Sky: sunrise / noon / dusk | T | D-pad up |
| Pause & options | Esc | Start |
| Restart run | Backspace |
On touch screens you get a steering pad and throttle, brake, boost and drift buttons.
Racing tips
Rendering (three.js)
Points cloud shared by every boat.Performance
Handling
Audio (Web Audio API, real recorded CC0 samples)
tools/audio/build-audio.mjs rebuilds every sound from its source URL. It crossfades loops so they're seamless (it measures the seam before and after), normalizes levels and encodes Ogg + AAC.loopStart / loopEnd (public/audio/loops.json). Measured in the browser, that takes the engine loop's wrap from a 230x sample-step jump down to 1.6x.npm install
npm run dev
Open http://127.0.0.1:5173. To make a production build:
npm run build
npm run preview
To rebuild the audio from the original CC0 sources (needs ffmpeg):
npm run audio
Every push to main builds the game and deploys it to GitHub Pages (.github/workflows/deploy.yml).
src/
main.js renderer, game loop, state machine, adaptive quality
waves.js shared wave model (GLSL + JS)
ocean.js faceted ocean mesh and shader
sky.js sky dome, clouds, horizon silhouettes
palette.js time-of-day palettes with cross-fades
world.js course, islands, surf, beacons, AI racing lines
boat.js procedural skiff model + planing physics
wake.js wake ribbons and pooled spray
race.js countdown, checkpoints, AI skippers, splits, ghost
camera.js chase / wide / helm / orbit camera rig
input.js keyboard, gamepad and touch
audio.js Web Audio mixer
hud.js instrument-style HUD
chart.js nautical chart overlay
tools/audio/ reproducible CC0 audio pipeline
three.js, Vite and Fontsource, plus CC0 sounds from Kenney, rubberduck, Benjamin Burnes, domasx2 and jasinski. The full list with links is in CREDITS.md.
Tidebreaker is the rebuilt successor to Boat Chase.
Code is MIT. Audio is CC0. Fonts are OFL. See LICENSE and CREDITS.md.