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 cartoon twin-stick zombie survival royale. Build cover, blast the horde, outlast the shrinking zone. Play free — no install, no sign-up.
Translation pending
GamesJavaScript · CSSGitHub @Deegan4OnlineOwner 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
Last Pulse — a portrait, mobile-first cartoon twin-stick survival battle royale (single-file HTML5 canvas game)
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Pick a fighter, pick a gun, drop into a field of 15. Outlast the other players, the roaming zombies, and the closing safe zone — scavenge scrap and build your own cover while you're at it. Last one standing wins.
opens the game in your browser — no install, no sign-up · for a permanent URL see Play
…plus Milo, Chip, Yuki, Finn, Cypher, Shade, Nova, Onyx & Titan — unlocked as you level up.
The repo is already Pages-ready (index.html at root + .nojekyll). This gives a fast, permanent URL that never breaks:
main → Folder: / (root) → SaveThen play at https://deegan4.github.io/last-pulse/ — it rebuilds automatically on every push to main.
These use free third-party proxies for the public index.html. If one shows a blank page or error, give it a minute (they cache briefly after a push) or try the next:
For local development, clone the repository, run python3 scripts/build-game.py, then python3 -m http.server 8000. Open http://localhost:8000. HTML, scripts, styles and assets must stay together.
Edit src/; root index.html and assets/game/ are generated deployment artifacts.
| Area | Source |
|---|---|
| Enemy drawings and palettes | src/game/rendering/enemies.js |
| Enemy stats and creation | src/game/entities/enemies.js |
| Combat and perks | src/game/combat/ |
| Characters, weapons and release notes | src/game/data/ |
| Movement, touch and gamepad | src/game/input/ |
| Screens and selection | src/game/ui/ |
| Styling and markup | src/styles/game.css, src/index.html |
| iOS save/purchase bridge | src/game/native/bridges.js |
| Native Swift app | LastPulseIOS/LastPulse/ |
Run python3 scripts/build-game.py after source edits, then node scripts/validate.mjs.
Xcode's Build Shared Game phase packages the same sources and canonical assets/
directly into the app's GameContent/ directory on every build and archive. It needs
Python 3, not Node or npm. LastPulseIOS/GameContent/ is an ignored local preview output.
See architecture and build details.
WASD + mouse on desktop, plus gamepad support.normal, fast runner, and tanky brute in the mix, plus Horde horrors: acid-lobbing Spitters, bursting Bloaters, swarming Stalkers, and armored Juggernaut mini-bosses on milestone waves — all ramping in HP, speed, and damage each wave.| Action | Touch (mobile) | Keyboard / Mouse (desktop) |
|---|---|---|
| Move | Left stick | WASD / arrow keys |
| Aim & fire | Right stick (auto-fire) | Mouse aim · click or Space to fire |
| Reload | automatic | R |
| 🔨 Build (wall → spikes → turret) | 🔨 button — tap to cycle, fire to place | B to cycle · fire to place |
| ⚡ Lightning | ⚡ button | Q |
| 💣 Bomb | 💣 button | E |
| 🪝 Grapple | 🪝 button | F (again to release) |
Everything — markup, styles, and game logic — lives in a single index.html. No build system, no package manager, no dependencies.
# play / iterate: just open it
open index.html # or: python3 -m http.server 8000
# syntax-check both script blocks + version / asset gates (fast, no execution)
node scripts/validate.mjs
Want to drive it headlessly (launch, play a match, screenshot, smoke-test)? There's a ready-made skill at .claude/skills/run-brawl-arena/:
node .claude/skills/run-brawl-arena/driver.mjs --play --mode horde --shoot
See CLAUDE.md for architecture notes, memory.md for the running design log, and ROADMAP.md for the future plan.