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
Deliver, dodge, combo. 6 zones, trains, ice & meteors. New Daily Challenge every day.
Translation pending
GamesHTML · PLpgSQLGitHub @quangdai1321OnlineOwner 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
Loading the full README. The saved excerpt is shown below.
Browser game for the Dlicom AI Game Jam. One HTML file plus assets/ (Dili render and Dlicom logo for the menu). No build step, no backend. All music and sound effects are synthesized live with WebAudio.
Run
Open index.html in a modern browser. (index.v1.html is the original prototype.)
Install as an app: the game is a PWA (manifest.webmanifest + sw.js). Chrome/Edge/Android show 📲 Install app on the menu; on iPhone use Share → Add to Home Screen. Once loaded it also plays offline: the page is network-first (new deploys arrive on the next visit) and assets are cache-first.Read the full README ↗Browser game for the Dlicom AI Game Jam. One HTML file plus assets/ (Dili render and Dlicom logo for the menu). No build step, no backend. All music and sound effects are synthesized live with WebAudio.
Open index.html in a modern browser. (index.v1.html is the original prototype.)
Install as an app: the game is a PWA (manifest.webmanifest + sw.js). Chrome/Edge/Android show 📲 Install app on the menu; on iPhone use Share → Add to Home Screen. Once loaded it also plays offline: the page is network-first (new deploys arrive on the next visit) and assets are cache-first.
Each shift starts with 60 seconds.
| Rule | Effect |
|---|---|
| Delivered under par time | Bonus x2, +2s extra shift time |
| No crash during the order | Bonus x3 |
| Consecutive deliveries | Combo +1 (+50 per combo level). Traffic gets faster as combo rises |
| Crash | Combo reset, −3s. Each extra crash on the same order costs 1s more (up to −6s) |
| Crash while carrying | The 📦 is knocked out of your hands and lands back in the road. Grab it again; the order clock keeps running |
| Close call (a car passes within a hair) | +25 points (+5 per combo level), brief slow-motion |
| Every delivery | +4s shift time (+3s from delivery 12, +2s from delivery 24) |
| Every 3 deliveries | Pick an upgrade: Speed, Dash, Shield, Magnet, +10s |
| Clearing a zone | +8s shift time |
Dili runs at 185 px/s (Speed upgrade: +12% per level, max 5). DASH recharges in 2.0s (−15% per Dash level).
A new player's first shift walks through 4 hands-on steps in a card at the bottom of the screen: Move (WASD/arrows, or the D-pad/joystick on phones) → Pick up the 📦 (yellow dots) → Deliver to the 🏠 (green dots, dodge cars) → DASH (SPACE, or the ⚡ button). Each step ticks ✓ the moment you do it, including a step you already did early. On phones a pulsing ring points at the D-pad and the DASH button. Finishing gives +10s and +20 🪙. The card turns see-through when Dili or the target is behind it. SKIP › closes it for good. It shows by itself only on the very first run. Replay it any time with Settings → 🎓 Tutorial → REPLAY (from the menu), or open the game with ?tutorial at the end of the URL (it shows once per page load, even for veterans).
From the Night District on, some cars are road ragers (red roof stripe). They honk, flash their lights and speed up when Dili is in their lane ahead of them.
🤝 CO-OP on the menu (idea from @NaikwadiRe49999). Team scores have their own 🤝 CO-OP tab in the ranking: the host submits the shift when it ends (best shift per team, names like ANN + BEN + CAT, your teams highlighted); this needs supabase/leaderboard_v5_coop.sql, and until it is run the tab just says it is not set up yet. Create a room, send the invite link (or the 4-letter code) to up to 3 friends, and deliver together in the same city (a 5th player is told the room is full):
?coop=CODE), so reloading brings you back to the same room. Whoever is in a room with no host for a few seconds (or gets a knock while the old host is silent) takes over as host, and if two hosts meet, one steps down. Closing the tab tells your friend right away. 🔑 JOIN ANOTHER ROOM switches to a friend's code.dili-coop-CODE), straight over WebSocket with the publishable key; nothing is written to the database. Every message reaches everyone in the room, so bigger rooms send less often (host 7→5/s, others 10→5/s): about 17 messages/s delivered for 2 players, ~40 for 3 and ~60 for 4. The free Realtime quota (about 100 messages/s for the whole project, and a monthly cap) only fits a couple of busy rooms at once; a paid plan raises it. ?coopnet=local swaps the network for a BroadcastChannel between two tabs (used by the tests).A 💀 BOSS RUSH button on the menu (between Daily and Ranking). You go straight into the boss of every zone, one after another: Monster Truck → Stampede → Blackout → … → Meteor Storm. Before each boss there is a 3-second breather ("NEXT BOSS: 🐎 STAMPEDE · 3·2·1"). The clock stops and the boss order can't be picked up yet. Each boss takes 3 hits. Hits give +4s, a defeat +6s and the zone card +8s. When time runs out, the result is how many of the 11 bosses you took down, and your time for a full clear. The HUD shows 💀 BOSS RUSH 3/11. There are no random events and no zone goals. Boss Rush keeps its own record (BOSS RUSH BEST 7/11 bosses · FULL CLEAR 212.4s). It never touches the leaderboard, your normal personal best, ghosts or zone unlocks. Sharing posts "I took down 7/11 bosses" with the game link (no challenge link).
A 📅 Daily #N button on the menu (or press D). Everyone gets the same city layouts, the same orders and the same upgrade offers that day. Your best score and number of attempts are saved per day.
| # | Zone | Reached after | Hazard |
|---|---|---|---|
| 1 | 🏙️ Downtown | start | Light traffic |
| 2 | 🐴 Country Village | 5 deliveries | Animals on dirt roads: 🐎 horses gallop in long straight runs (a kick knocks you back and costs 2s), 🐄 cows stop to graze in the way, 🐔 chickens slow you down. DASH hops past them |
| 3 | 🌃 Night District | 9 | Dark, alleys, 💢 road-rager cars |
| 4 | 🏖️ Sunny Beach | 13 | Boardwalk, palms and gulls. 🦀 Crabs scuttle around: a pinch knocks you back and costs 1s |
| 5 | 🏜️ Desert Dunes | 17 | Sand slows Dili down; sandstorms blind you and push you sideways |
| 6 | 🐒 Jungle Trail | 21 | 🐒 Monkeys steal your package! The thief runs away from you (the path and arrow follow it). Catch it within 9s to get the package back (+3 🪙) or the order fails. DASH past monkeys to stay safe |
| 7 | ⛈️ Neon Storm | 25 | Rain, low visibility, lightning |
| 8 | ⚓ Sunset Harbor | 29 | Trains: signals flash red and a bell rings, then a train sweeps the track |
| 9 | 🏮 Night Market | 34 | Crowds wander the streets: bumping into people knocks you back, and cars stop for them |
| 10 | ❄️ Snow Peak | 39 | Ice: Dili slides. Snowfall, snowman roadblocks |
| 11 | 🌙 Moon Base | 45 | Meteors land on red target circles. Low gravity, floaty movement |
| ∞ | 🌙 Moon Base II, III… | every 8 more | +15% traffic, train and meteor speed per loop |
Every zone has its own side objective, shown at the top of the screen and on the zone card. Completing it pays +300 per zone (times the loop), +15 🪙 and +5s. The zone card shows whether you made it. Complete all 11 for the 🎯 Goal Getter achievement.
| Zone | Goal |
|---|---|
| 🏙️ Downtown | 3 clean deliveries (no crash) |
| 🐴 Country Village | 3 deliveries without bumping an animal |
| 🏖️ Sunny Beach | 3 deliveries without getting pinched |
| 🐒 Jungle Trail | Win back 2 stolen packages |
| 🌃 Night District | 3 close calls with cars |
| 🏜️ Desert Dunes | 2 deliveries without touching sand |
| ⛈️ Neon Storm | 2 FAST deliveries |
| ⚓ Sunset Harbor | Grab 2 power-ups |
| 🏮 Night Market | 3 deliveries without bumping anyone |
| ❄️ Snow Peak | Jump 2 barriers with DASH |
| 🌙 Moon Base | Dodge 5 meteors up close |
The last delivery of every zone is a 💀 BOSS fight. The boss has an HP bar: 3 hits (4 from loop II). Every boss order you deliver is one hit (+300 × hit × loop, +3 🪙, +4s) and a new boss order appears. Hits don't count as deliveries, so the next zone isn't cut short. After each hit the boss gets angrier: the monster truck drives faster, strikes and meteors come more often, trains return sooner, the wind pushes harder, and herds and crowds grow. The HP bar shakes on a hit and glows on the LAST HIT. The final hit defeats it (+800 per loop, +30 🪙, +6s):
| Zone | Boss |
|---|---|
| 🏙️ Downtown | 🚚 Monster Truck: chases you along the shortest path |
| 🐴 Country Village | 🐎 Stampede: a whole extra herd of faster horses |
| 🏖️ Sunny Beach | 🦀 Crab Invasion: crabs everywhere |
| 🐒 Jungle Trail | 🐒 Monkey Gang: twice the thieves |
| 🌃 Night District | 🌑 Blackout: near-darkness, every driver is a road rager |
| 🏜️ Desert Dunes | 🌪️ Mega Sandstorm: a sandstorm that never stops, strong wind |
| ⛈️ Neon Storm | ⚡ Thunderstorm: lightning strikes the glowing circles |
| ⚓ Sunset Harbor | 🚆 Train Rush: trains come back almost immediately |
| 🏮 Night Market | 🎆 Festival Crowd: three times the crowd |
| ❄️ Snow Peak | ☃️ Avalanche: giant snowballs drop where you're heading |
| 🌙 Moon Base | ☄️ Meteor Storm: meteors three times as often |
Achievements: 💀 Boss Slayer (first boss) and 👹 Boss Hunter (all 11, unlocks the BOSS HORNS hat).
Low striped barriers block some alleys (the traffic-free shortcuts). Walk into one and you crash; DASH to jump it (+50 points, +1 🪙). Every dash is now a little hop.
From the 2nd delivery a power-up appears on the road every ~12s (max 2, gone after 15s, seeded like the rest of the run): ❤️ Repair (+1 shield and +3s, or +6s when shields are full), 💥 Blast (a shockwave: cars within ~3 tiles are wrecked for +50 and +1 🪙 each and come back 3–5s later. Animals and people are stunned and can be walked through, a monkey thief drops the package, the boss truck is stunned, incoming meteors vanish), 🧲 Magnet (8s, 1.8x pickup range, pulls coin-shower coins), 🚀 Turbo (6s, +35% speed), 👻 Ghost mode (5s, pass through everything), ⏱️ +5 seconds. Active ones show as timers next to the coin counter. The HUD always shows your 3 shield slots (🛡️🛡️○), so you can see your "health" and when Repair refills it.
Each zone has its own traffic: sedans, 🚕 taxis, 🚌 buses (long and slow), vans, 🏎️ sports cars (fast, racing stripes), 🍦 ice-cream trucks, 🚜 tractors in the Village, 🏖️ beach buggies and surf vans, jeeps with a spare wheel in the Desert, Jungle and Snow, and six-wheeled 🌙 rovers with solar panels on the Moon. Every model has its own size and speed and is drawn once into a cached sprite.
| Order | Rule | Reward |
|---|---|---|
| 🔥 Urgent | A countdown starts at pickup. Too late and the order is lost | x2 |
| 🥚 Fragile | One crash while carrying and it breaks | x2 |
| 👑 VIP | Much longer trip | x3 |
| 📦 2 Drops | One pickup, two doors, any order | Each door counts as a delivery |
Player idea: more funny things to deliver. Some normal orders turn into:
🚓 Police chase (a cop follows the shortest path to you for 10s; escape for +150) · 🌫️ Thick fog (visibility shrinks around Dili; not in the already-dark zones) · 🌧️ Flash rain (slippery roads) · ⭐ Happy hour (all points x2) · 🚗 Rush hour (more, faster traffic) · 🪙 Coin shower (grab coins for the wardrobe) · 🪂 Dlicom Airdrop (9 Dlicom crates float down on parachutes: a shadow and ring show where each one lands. Catch them for +3 🪙, or +12 🪙 for a rare golden 🎁. They blink and vanish after 5s)
Every map has 4 rooftop billboards with the Dlicom logo, baked into the map so they cost nothing per frame. Every package (the one to pick up, the one Dili carries, the airdrop crates) carries a Dlicom logo stamp, and the trains are Dlicom-blue with the logo on the engine.
The official account is one tap away (player feedback: highlight the official Dlicom logo): the DLICOM PRESENTS logo on the menu and the 𝕏 FOLLOW @DlicomApp button open https://x.com/DlicomApp, the splash and the game over screen show @DlicomApp next to the logo, and every shared score post ends with @DlicomApp #DlicomGameJam.
Deliveries, close calls, zone clears and coin showers earn 🪙 coins. Spend them in 🎨 Skins on the menu (or press K):
Preview anything: hover a card (mouse) and Dili tries it on in the preview, pets and dash trails included; tap something locked or too expensive and you still see it on Dili for a few seconds, next to the hint on how to get it. Buying asks first (player feedback: avoid accidental purchases): tapping an item you don't own opens a BUY THIS? dialog with the price and what you'll have left, while Dili tries the item on in the preview. CANCEL / Esc spends nothing, BUY / Enter buys it. Items you own are equipped with one tap.
13 achievements give coins and unlock the rare items. The equipped colour shows next to your name on the leaderboard.
Under the daily missions there is one bigger goal for the whole week, the same for every player (e.g. deliver 150 packages, defeat 8 zone bosses, 50 close calls, combo x20 in one run). Progress adds up across all your runs from Monday 00:00 UTC. The reward is a rare skin that can only be won this way, rotating week by week: 🌌 Galaxy (colour), 🧙 Wizard Hat, ✨ Golden (colour). If you already own that week's skin you get 300 🪙 instead. In the wardrobe the current week's item says 🎯 THIS WEEK.
Three missions a day, the same for every player (picked from 12 by the date): deliveries, VIP orders, a boss, close calls, combos, coin showers, reaching Desert Dunes, clean streaks, escaping the police, special orders, dashes or the Daily Challenge. Progress adds up across runs; each mission pays 30–60 🪙 and finishing all three adds a +50 🪙 bonus. Open them from 📋 Missions on the menu. New missions (idea from @Masum4990): ⏱️ Blitz (5 deliveries in your first 3 minutes of a run without a crash) and zone bosses (defeat the Monster Truck in Downtown, the Stampede in Country Village or the Blackout in Night District; only that zone's boss counts). Completing 10 daily missions in total unlocks the 📋 Mission Pro award and a missions-only pet: 🐰 Bunny (DASH recharges 20% faster).
After a normal run, 👻 Race your ghost (or press G) replays the same city, orders and events while a see-through Dili retraces your best run on that map. Beat it and your new run becomes the ghost. In the Daily Challenge, your best attempt of the day is the ghost automatically. Each order starts from the previous door, so a seed always produces the same chain of orders whatever route you take.
The game screenshots the best moment of every run a beat after it happens: 💀 a boss defeated, 🗺️ a new zone unlocked, 🔥 combo x10+, 🚓 a police escape or 👑 a VIP delivery (in that order of priority). The game over screen shows it as a polaroid, and Share / Challenge uses it as the picture on the score card and mentions it in the post text.
Every run uses a random seed. ⚔️ Challenge on the game over screen shares a link (?c=…). Whoever opens it plays the same city, orders, upgrade offers and events and sees "▼ 345 TO BEAT PHUC" on the HUD. The result appears on their game over screen.
Within each zone: 1 extra car joins every 2 deliveries, and traffic speeds up. Between zones: a "Zone Clear" screen shows the next zone's hazard. The menu shows which zones you have unlocked.
Personal Best (score, fastest delivery, best combo, furthest zone, best-run pace) and Daily Challenge results are saved in localStorage on this browser only.
Traffic, trains and meteors speed up within each zone as you deliver (up to +45% by the 10th delivery of a zone, more on later loops). After your first run everything starts 8% faster (player feedback: "make levels a little more difficult"); the very first run keeps the gentler pace.
Screens no longer cut: switching between menu, wardrobe, settings, lobby, pause, upgrade and game over crossfades the last frame of the old screen over the new one (0.25s; the snapshot is taken before a resolution switch can wipe the canvas). Buttons ease in and out of their hover size instead of jumping, and a press sends a soft ring out of the button with a light tap sound (and a short buzz on phones).
A wide board (feedback: bigger, with more detail about each player): each row shows the rank (medals and tinted rows for the top 3), the player's Dili in their colour, name, the zone they reached (icon and name, with the loop), best combo, deliveries and score. The header counts how many players are ranked, and a card under the list shows your rank and best score even when you are outside the top 10. Opened from the game over screen, that card shows THIS RUN next to your BEST. 🏆 LIVE #N: during a ranked run (normal or daily) the board is loaded once at the start, and a pill above the coin counter shows where your current score would place you, popping when you pass someone. Tabs: All-time · This week · Daily · 🤝 Co-op.
⚙️ on the menu (top-right) or Settings in Pause:
Intl.NumberFormat (toLocaleString built a new formatter on every call). Jungle Trail's shade is baked into the map instead of a full-screen darkness pass every frame (Jungle JS per frame: p95 11.3ms → 5.5ms).Everything is synthesized live with WebAudio: a master compressor and a generated reverb give the music and effects depth, with no audio files.
Lead melody: every track has its own tune, two 16-step phrases generated from the track's seed and played AABB. The notes are chord tones of the current bar, so the melody follows the harmony. It gets louder and doubles an octave up as the combo heats up. CHILL plays a soft, slow version.
Background music: a procedural loop for the menu and for each zone, with a cymbal at every phrase and a snare fill before the next. It speeds up and adds layers as your combo grows, goes to full intensity during a boss, and gets quieter while paused.
Ambience per zone, from looping filtered-noise beds, a drone and small one-shot details: city air and birds (Downtown), crickets (Night District), gusting wind that roars during sandstorms (Desert), rain (Neon Storm), waves and gulls with the odd ship horn (Harbor), crowd murmur and vendor chimes (Night Market), wind and wind chimes (Snow Peak), and a hum with station beeps (Moon Base).
Positional sound: honks, trains, meteors, lightning and the police siren are panned left/right by where they are on screen and get quieter with distance. The nearest car has an engine hum that rises as it approaches, with a Doppler shift.
More life in the effects: every sound gets a small random pitch (±3%, the same for all its notes), so repeated pickups and coins do not sound robotic. A doorbell "ding-dong" rings from the house on each delivery, parcels rustle when picked up, fast cars passing within ~2 tiles whoosh by (panned), and crashes add a metal clank and glass tinkle. Each zone has its own room size: dry in the countryside, beach and desert, a big echo in the night market, neon city, jungle and on the Moon.
Warmer effects (feedback: "the SFX could use more polish"): square and saw voices go through a low-pass that follows the note, so they keep their arcade character without the buzz, and every note fades out with a short tail instead of stopping dead. The hissiest layers (dash, close call, power-up, crash glass, victory) moved down into the body of the sound; stars, the timer tick and crabs use rounder waves. Measured on 25 effects, the share of energy above 4kHz dropped from -13dB to -26dB on average (dash -2 → -27dB, close call -1 → -18dB), with peaks still under -7dB.
Footsteps that match the surface: road, village dirt, sand crunch, snow, soft moon steps. The audible part is a mid-range tap, so they come through on phone speakers too. Left and right steps sound slightly different. They can be turned off separately in Settings → Footsteps. Measured on the final mix: steps poke about 3.5dB above the music in ARCADE and more in CHILL, with no clipping. The master bus is at gain 1.0 (was 0.55, about 5dB quieter than needed); the loudest SFX pile-up peaks around −4dB after the compressor.
The menu has a 🏆 Ranking button (or press L) with two boards: All-time and today's Daily. Each player appears once, with their best score. The same name played on two devices (phone + PC) is merged in the game, which fetches the top 30 and keeps each name's highest row. At the end of a run the score is submitted automatically. The first time, the game asks for a name (2–16 characters). The game over screen then shows your rank, e.g. "Rank #4 of 57".
Three boards: All-time, This week (resets Monday 00:00 UTC) and today's Daily. The top 3 of each week receive the exclusive 🏆 Champion Trophy hat and 150 🪙 the next time they open the game.
Setup (one time):
supabase/leaderboard.sql and run it.supabase/leaderboard_v2.sql (new zones + skins).
Then supabase/leaderboard_v3.sql (weekly board + last week's podium).
Then supabase/leaderboard_v4.sql (hides players' device ids: the table becomes insert-only, reads go through the functions).SUPABASE_URL and SUPABASE_KEY near the top of the script in index.html.The anon key is designed to be public. Row Level Security only lets players read scores and add new ones. They cannot edit or delete anything. The database rejects impossible scores and allows at most one submission per device every 20 seconds. Scores are still reported by the browser, so a determined cheater could post a fake one: remove it in Table Editor → scores. Leave the two constants empty and the leaderboard stays hidden.
To see how the game really runs on players' devices, each finished run (time up, quit, restart or tab closed; at least 8s of play) sends one anonymous row: average and low FPS, render scale, graphics/motion/control settings, screen size, zone reached, deliveries, score, what caused each crash, and the active boss. No names or personal data. Players can turn it off in Settings → Share anonymous stats.
Setup: run supabase/telemetry.sql once in the Supabase SQL Editor. The table is insert-only for the public key; read it in the dashboard (the file ends with ready-made queries). Until the table exists the game silently skips sending.
Hosted on Vercel: https://dili-delivery-seven.vercel.app/
Music style (Settings → Music): ARCADE (upbeat, speeds up with your combo) · CHILL 🌿 (calm lo-fi take on each zone's chords: soft pads, warm e-piano, a lazy arpeggio and a soft heartbeat kick; no hats or cymbals, warm and slow) · OFF. ARCADE hats and cymbals are short and soft, and the mix never opens past ~9kHz, so there is no constant "tss". A second pass after more "chizz" feedback: the snare is now a soft thump (no noise burst), the phrase cymbal is gone, the closed hat is a faint tick, the music never opens past ~6kHz in play, and the hissy part of every ambience bed plays at about a third of its old level through a 2.6kHz low-pass (another ~15dB less energy above 5kHz). The zone ambience (rain, crickets, wind) goes through a gentle low-pass and is quieter still in CHILL: measured energy above 5kHz dropped by about 20dB in the night and rain zones.
Living mix: the music "opens up" (low-pass filter) as the combo grows, is fully open during bosses, sounds muffled while paused, and ducks under crashes, deliveries, thunder and boss stingers.
Effects: an iris opening at the start of a run, camera zoom kicks on deliveries, combos and boss wins, star sparkles on delivery, speed lines while dashing, a red pulse on crashes, a glowing screen edge on combo milestones, coins flying to the score, hit-stop, dizzy stars and zone weather.