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
Idle clicker about running dodgy shops in five settings: a haunted mall, a space station, a pirate ship, a cyberpunk night market and a robot planet. One HTML file, installable on phones.
Translation pending
GamesHTML · JavaScriptGitHub @rstibalOnlineOwner 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.
A small idle clicker about running dodgy shops, in eight settings: a goblin in a haunted mall, an ex-smuggler on a space station, a pirate captain on a ship that sails from port to port, a street vendor in a cyberpunk night market, a repair bot on a planet of robots, an expelled wizard who never left the academy, a jackalope in a Wild West ghost town, or a raptor who has just invented shopping. Plain HTML, CSS and JavaScript in one file, with no build step and no dependencies.
Status: early prototype. All numbers are placeholders.Read the full README ↗A small idle clicker about running dodgy shops, in ten settings: a goblin in a haunted mall, an ex-smuggler on a space station, a pirate captain on a ship that sails from port to port, a street vendor in a cyberpunk night market, a repair bot on a planet of robots, an expelled wizard who never left the academy, a jackalope in a Wild West ghost town, a raptor who has just invented shopping, a fired raccoon sidekick in a superhero headquarters, or a benched fox mascot selling "found" merchandise around a basketball arena. Plain HTML, CSS and JavaScript in one file, with no build step and no dependencies.
Status: early prototype. All numbers are placeholders.
Open index.html in a browser. Progress saves to the browser's local storage.
Add ?speed=10 to the URL to run the game 10 times faster while tuning. Add ?debug to expose the game state as window.__game in the console. Add ?skin=starport (or mall, ship, neon, robot) to force a setting.
To host it, enable GitHub Pages on the main branch (root folder).
The game can be added to a phone's home screen, where it opens full screen like an app and works without a connection:
On iPhone the home-screen app keeps its own save, separate from Safari's, so progress in one doesn't show in the other. On Android they share one save.
manifest.webmanifest and sw.js (network first, so updates show up as soon as you're online) make this work. The icons in icons/ are drawn by python tools/make_icons.py (needs Pillow).
The side panel has a Setting picker. Each setting has its own cast, shops, story, currency names and colors; the numbers are the same, so one save works in all of them and you can switch at any time.
| Setting | Owner | Episodes | Currencies | Look |
|---|---|---|---|---|
| Haunted Mall | Grizzle, a goblin | Haunted Mall, Swamp Market, Crypt Quarter, Midnight Carnival, Sunken Casino, Ghost Line | Beer, eggs, crystals | Dripping ectoplasm: slime green and lilac on green-black, Rubik Wet Paint |
| Starport Nine | Juno Vance, an ex-smuggler | Docking Ring, Hydroponics Deck, Reactor Row, Zero-G Stadium, Pirate Moon, Comet Cruise | Scrap, keycards, stardust | Deep space navy with amber and teal, Russo One |
| The Salty Gull | Captain Nell, a pirate | Barnacle Harbor, Smuggler's Cove, Skull Island, Floating Fair, Treasure Reef, Frostbite Bay | Grog, doubloons, pearls | Jolly Roger: black, bone white and blood red, New Rocker |
| Neon Night Market | Kix, a street vendor | Gutter Street, Rain Bazaar, Chrome Row, Overdrive Circuit, Skyline Tower, Undercity | Batteries, tokens, shards | Black-violet with magenta and cyan, VT323 terminal pixels |
| Planet Cog | Rivet, a repair bot | Scrapyard Flats, Toaster Works, Server City, Spark Festival, Old Spaceport, Rust Moon | Oil, bolts, cores | Scrap heap: tin grey, copper and patina green, Black Ops One |
| Hexwick Academy | Fizz, an expelled wizard | Bell Tower, Greenhouses, Library, Dueling Grounds, Potion Cellars, Observatory | Potions, scrolls, moonstones | Spellfire: plum dark, flame orange and spell cyan, MedievalSharp |
| Tumbleweed Gulch | Dusty, a jackalope | Main Street, Gold Creek, Silver Mine, Rodeo, Railroad Depot, Painted Canyon | Sarsaparillas, horseshoes, nuggets | Saloon lamplight: saddle brown, lamp amber and turquoise, Rye |
| Fern Valley | Clawdia, a raptor | Fern Valley, Tar Pits, Volcano, Dino Games, Ice Age, Meteor Hill | Berries, eggs, amber | Jungle sunset: deep green, orange and lime, Chewy |
| Rimshot Arena | Hoops, a benched fox mascot | Parking Lot, Concourse, Locker Room, Courtside, Jumbotron, Owner's Box | Popcorn, tickets, rings | Championship: black, gold and white, Teko |
| Hero HQ | Patch, a fired raccoon sidekick | Lobby, Training Room, Gadget Lab, Hero Awards, Supervillain Prison, Orbital Watchtower | Sodas, comics, medals |
Each setting's drawn art runs through the page: the episode's scene sits behind the cash with the owner's portrait beside it, the rival heckles from the top of the Goals panel, and the finale character waits in the Finale panel.
The rules below use the Haunted Mall's names.
Each episode has its own district, shops, goal wording and a short story scene at the start and at the finale.
| Episode | District | Shops (first to last) |
|---|---|---|
| 1 | Haunted Mall | Pretzel kiosk, phone-case cart, perfume counter, arcade, elevator toll, dragon lease |
| 2 | Swamp Market | Mushroom stall, bog-water bottler, lucky charms, fog boat tours, stilt-house timeshare, kraken ferry monopoly |
| 3 | Crypt Quarter | Grave-flower cart, coffin showroom, seance parlor, ghost tours, bone-china antiques, mausoleum condos |
| 4 | Midnight Carnival | Cobweb candy floss, ring toss for souls, tarot booth, haunted carousel, house of mirrors, big top lease |
| 5 | Sunken Casino | Barnacle snack bar, soggy slots, mermaid card tables, shipwreck pawn shop, pearl-diving tours, drowned casino deed |
| 6 | Ghost Line | Soot-cake trolley, lost-ticket office, phantom dining car, sleeper-car hire, tunnel-of-screams ride, Ghost Line charter |
After episode 6 the list repeats (the story loops back too) (shown as "Haunted Mall 2" and so on), and the permanent bonus keeps carrying over. All episodes share the same six shop slots, but costs grow each episode: customers, automation and the cash goal cost 2.5x more each episode (x2.5 in episode 2, x6.25 in episode 3, x15.6 in episode 4 and so on). The permanent bonus grows by x1.5 per finale (up to x2.25 with the Finale card maxed), a little slower than costs, so each episode takes a bit longer than the last: a gentle long tail rather than a wall.
Cards survive episode resets. Duplicates level a card up to level 10 (1, 3, 6, 11, 19, 28, 38, 50, 64 and 80 total copies).
Each card is one multiplier that grows with its level. Levels 6 to 10 add half as much each as levels 1 to 5.
| Effect | Haunted Mall | Starport Nine | Perk per level (6-10: half) | At level 5 | At level 10 |
|---|---|---|---|---|---|
| Money | Grizzle | Juno Vance | All income +10% | x1.5 income | x1.75 income |
| Speed | Mort | Sprocket | Shops run 10% faster | x1.5 speed | x1.75 speed |
| Discount | Countess Vex | Madame Ossa | Customers and automation 4% cheaper | 20% off | 30% off |
| Finale | Bramble | Brick | Finale bonus +20% | x2 per finale instead of x1.5 | x2.25 per finale |
| Milestone | Old Bog Witch | Commodore Glint | Each milestone multiplies income by 0.05 more | x2.25 per milestone instead of x2 | x2.38 per milestone |
| Beer | Fang | Scav | Milestones give 20% more beer (scrap on Starport Nine) | 2 per milestone instead of 1 | 2.5 per milestone |
| Chest (Haunted Mall / Starport Nine) | Cost | Cards | Where the currency comes from |
|---|---|---|---|
| Egg chest / Keycard locker | 2 eggs / keycards | 3 | 1 per goal, 3 per finale |
| Beer chest / Scrap crate | 5 beer / scrap | 2 | Shop milestones |
| Crystal barrel / Stardust vault | 12 crystals / stardust | 4 | Duplicates of maxed cards |
Opening a chest deals its cards in a popup, with new cards and level-ups highlighted and a button to open another if you can afford it.
Daily chest: once a day, from your second day on, the egg chest opens free.
Everything lives at the top of the script in index.html. The numbers: SCHEMES (costs, payouts, run times), MILESTONES, UPGRADES (price as a multiple of the shop's automation cost, and strength), GOALS, STORY_GOALS (one per episode; each skin's episodes have a goal line for it), CARDS (weights and strength per level), CHESTS, LEVEL_AT, LATE_LEVEL_STRENGTH (how much levels 6-10 count), PERM_PER_EPISODE, EPISODE_COST_GROWTH (how much costs multiply per episode), OFFLINE_CAP_S, BANK_BONUS, RUSH_MULT, RUSH_S and RUSH_AFTER_S (the welcome-back choice) and FREE_AUTO_SHOPS (shops that start automated from episode 2 on). Everything players read or see is in SKINS: to add a setting, copy a skin, change its words, episodes and theme colors, and it shows up in the Setting picker.
Smoke test: node tools/smoke.mjs loads the game in headless Chrome or Edge (no installs needed, Node 22 or newer), plays each setting for a few seconds, opens a chest, runs a finale, checks every episode's shop icons and story, and fails on any page error. It takes about half a minute; SKINS=mall,neon tests just those, CHROME=/path picks the browser.
Balance check: node tools/sim.mjs reads the numbers from index.html, plays a greedy player who taps every shop the moment it's idle, and prints when each shop opens and when the finale unlocks. Episode 1 currently takes about 25 minutes that way (it buys 3 upgrades along the way), with the fifth goal landing a few minutes before the lease. It also prints when each goal clears. Real players are less efficient, so expect 30 to 40.
It then plays several episodes in a row (carrying over the bonus, beer, eggs and cards, opening chests as soon as it can, plus the free daily chest for every 24 hours played; DAILY=0 turns that off) and prints the median time per episode. node tools/sim.mjs 9 50 plays 9 episodes over 50 runs, and GROWTH=3 node tools/sim.mjs tries a different per-episode cost growth without editing the game (UPGRADES=0, UPCOST=2 or UPSPEC='[{"cost":100,"mult":2}]' try other upgrade setups).
The same table is printed for a casual player (10 minutes every 2 hours) and an idle one (3 minutes, 3 times a day), who only earn from automated shops while away and, while playing, leave a finished shop idle for a few seconds before tapping it again (3 seconds casual, 5 idle). Current real time to unlock each finale:
| Episode | Engaged (nonstop) | Casual | Idle |
|---|---|---|---|
| 1 | 25 minutes | 2 hours | 16 hours |
| 2 | 26 minutes | 2 hours | 8 hours |
| 3 | 30 minutes | 2 hours | 8 hours |
| 4 | 37 minutes | 2 hours | 8 hours |
| 5 | 45 minutes | 2 hours | 8 hours |
| 6 | 56 minutes | 2 hours | 16 hours |
| 7 | 1.2 hours | 2 hours | 16 hours |
| 8 | 1.4 hours | 2 hours | 16 hours |
| 9 | 1.7 hours | 4 hours | 16 hours |
| 10 | 2 hours | 4 hours | 16 hours |
| 12 | 2.8 hours | 4 hours | 16 hours |
| 15 | 4.5 hours | 6 hours | 1 day |
| 20 | 9.1 hours | 8 hours | 1.3 days |
| 25 | 16.9 hours | 12 hours | 1.7 days |
Cards reach level 10 across the board around episode 25 (57 of 60 levels in the simulator). When they topped out at level 5 they were all maxed by episode 12 and episode 20 took 22.6 hours.
Early on, one break's offline earnings cover the rest of an episode, so session players finish on their second visit. The growing costs are what slow them down later. OFFRATE=0.25 and OFFCAP=4 try a lower offline rate or cap (a lower rate barely changes this).
Session players live on what their automated shops earn while they're away, so the start of each episode matters most: until something is automated, a break earns nothing. That's why the first shop starts automated from episode 2 on. Without it (FREEAUTO=0), idle players spend more and more visits of each later episode tapping their way to the first automation, which costs as much as that episode's prices: 1.3 days for episode 5 and 6.7 days for episode 12.
Structure inspired by the discontinued mobile game It's Always Sunny: The Gang Goes Mobile (schemes, episode-style prestige, character cards). This project uses an original setting and cast and is not affiliated with that game or its owners.
| Tech HQ: steel, electric cyan and orange, Racing Sans One |