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
A retro pixel-art arena shooter where every kill pops up an annoying ad. Free to play in your browser.
Translation pending
GamesTypeScript · CSSGitHub @euangoddardOnlineOwner 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
A retro pixel-art arena shooter where every kill is sponsored!
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A retro pixel-art arena shooter where every kill is sponsored: each enemy you slay triggers an
obnoxious pop-up ad that pauses the game until you get rid of it.
Built with TypeScript + Vite, rendered on a 320×180 canvas scaled up with crisp pixels. All sprites
are hand-defined pixel grids and all sound is synthesised with WebAudio — no asset files.
The game is live at https://ad-nauseam.euans.space. Every push to main builds and deploys
dist/ to GitHub Pages (.github/workflows/deploy.yml).Read the full README ↗A retro pixel-art arena shooter where every kill is sponsored: each enemy you slay triggers an obnoxious pop-up ad that pauses the game until you get rid of it.
Built with TypeScript + Vite, rendered on a 320×180 canvas scaled up with crisp pixels. All sprites are hand-defined pixel grids and all sound is synthesised with WebAudio — no asset files.
npm install
npm run dev # http://localhost:5173
npm run build # typecheck + production build in dist/
The game is live at https://ad-nauseam.euans.space. Every push to main builds and deploys
dist/ to GitHub Pages (.github/workflows/deploy.yml).
One-off setup:
ad-nauseam.euans.space, then tick Enforce HTTPS once the certificate is issued.euans.space DNS, add a CNAME record for ad-nauseam pointing at
<github-username>.github.io.The site URL used for the canonical and social-preview tags is set in .env.production; change it
there if the domain changes.
| Key | Action |
|---|---|
| WASD | Move |
| Mouse / arrow keys | Aim and attack with the current weapon |
| 1 / 2 / 3 | Select wand / sword / nova |
| 4 / 5 | Select scatter wand / bombs (once bought in the shop) |
| 6 | Select your hero's own weapon |
| Q | Swap between wand and sword |
| Mouse wheel | Cycle weapons (skips the nova while it's recharging) |
| E / right-click | Unleash the nova |
| Space / Shift | Dash (brief invulnerability) |
| P / Esc | Pause |
| M | Mute |
| F | Toggle fullscreen |
Later waves don't keep growing forever: a wave tops out at 22 enemies (they're tougher by then), and no more than 12 are on screen at once. The rest wait their turn.
There are no walls: the floor goes on forever and the camera follows you. Enemies that fall too far behind come back in from just off screen, so you can't simply outrun a wave, and red markers at the edge of the screen show where off-screen enemies are. Bosses stay on screen (the rabid bear stuns itself charging into the edge of it).
Every boss you kill moves you on to the next map: dungeon → desert → slime land → dungeon … Each map has its own floor and braziers, and repaints every enemy (sun-bleached and sandy in the desert, dripping green in slime land). Each also has its own native enemy:
Every sixth wave (so straight after wave 5) is a boss fight, and which boss you get is random. Bosses always drop gems, and every time a boss's signature attack hits you, an ad pops up.
The All-Seeing Eye: a giant bloodshot eyeball whose iris follows you around. It either:
Below half health it gets angry: a red iris, faster movement, quicker aim, a beam that sweeps after you, and bigger rings of tears. Killing it always pops an ad.
The Bat Twins: two giant bats that flutter around you erratically. Each one either swoops (its eyes flare, a dotted line shows the dive, then it dives straight through) or screeches a fan of sound waves. Kill one and the other gets angry.
Rabid Bear: lumbers after you foaming at the mouth. Up close it mauls you with three quick swipes; from range it paws the ground, locks on and charges, stunning itself if it hits a wall (your chance to punish it). Every hit gives you rabies: you lose 3 HP a second for 4 seconds.
Everything you buy makes the enemies tougher too. Each upgrade level, weapon, pet and stronger hero adds to your threat (shown on the title screen and in the shop): +5% enemy HP, +2% enemy damage and +1% enemy speed per point.
Every kill drops 1–10 coins (tougher enemies pay more; summoned minions pay half; bosses pay more). Gems are rarer: a 3% chance per kill, +1 for every wave you clear, and 5–10 from bosses. When you die, the coins and gems from that run are banked and the game-over screen takes you to the shop (you can also press S on the title screen). Everything is saved in your browser between runs.
The UPGRADES tab spends coins:
| Item | What it does |
|---|---|
| Damage (5 levels) | +20% damage with everything per level |
| Max HP (5 levels) | +15 max HP per level (you start with 120) |
| Nova recharge (3 levels) | Nova cooldown 5s shorter per level |
| Scatter wand | New weapon (4): fires three bolts in a fan |
| Bombs | New weapon (5): a lobbed bomb that explodes, hitting everything nearby |
| Adopt a spider (250) | A pet that scuttles over and bites enemies, webbing them to half speed |
| Adopt a wolf (300) | A fast pet that runs enemies down and pounces on them |
| Adopt a dragon (400) | A blue baby dragon that follows you and breathes fire at enemies |
| Adopt a phoenix (600) | Circles you shooting homing fireballs, and revives you once per run |
The HEROES tab spends gems on new characters (pick the one you play as there too):
| Hero | Gems | |
|---|---|---|
| Adventurer | free | 120 HP, the classic |
| Mage | 30 | 100 HP. Magic bolts pierce through enemies, Space blinks (teleports) instead of dashing, nova recharges 40% faster |
| Knight | 50 | 200 HP and 1.5× damage, barely knocked back, but slow |
| Achilles | 200 | Immune to every hit... except there's a 10% chance it finds his heel, which takes half his max HP |
Shop controls: A/D to switch tabs, W/S or the mouse to pick, Space or click to buy (or pick a hero), Enter or PLAY to start.
Each kill has a 25% chance to pop up an ad. Ads are themed on whatever you just killed, start off mild and get nastier every wave (longer countdowns, more dodging, new ad types unlocking), and each one fights back in a different way:
You never know which you're getting until you close it: some ads secretly come with a sponsor reward (2× fire rate, 2× damage, speed boost, +30 HP, instant nova recharge); others make you accept a downgrade (slowed, half damage, jammed wand, −20 HP, reversed controls). Early waves are mostly rewards; later waves are mostly downgrades.
Clicking any call-to-action just gets you another ad. The "REMOVE ADS $49.99/mo" button gets you an ad too. Game over shows how many seconds of your life the ads took.