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
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Open a tab, pick a game, play. Everything runs in the browser — no downloads, no sign-up, no ads.
Every thumbnail below is a live link. Click one and you are playing in about a second.
✨ Why it feels good to use
Three commands and you are playing →
Then open.查看完整 README ↗Every thumbnail below is a live link. Click one and you are playing in about a second.
| ⚡ Instant | Canvas games with no build step and no bundle to download. Click and play. |
| 📴 Offline | A service worker caches the shell and assets, so the arcade keeps working on a plane or a dead connection. |
| 🎮 Your controls | Keyboard, mouse, touch and on-screen controls, with rebindable keys on the games that support them. |
| ♿ Reachable | Semantic markup, ARIA labels, visible focus, and pause-on-hidden so nothing runs away while you are in another tab. |
| 🧪 Actually tested | 250+ unit tests, plus a smoke test that boots all 15 games in a real browser on every pull request. |
| 🔓 Yours | MIT licensed. Fork it, reskin it, add your own game. |
git clone https://github.com/koonergurjot/Gurjots-Games.git
cd Gurjots-Games
npm install
npx serve .
Then open http://localhost:3000.
Serve it over HTTP rather than opening index.html from disk — the games load assets from absolute paths like /assets/..., which the file:// protocol cannot resolve.
Useful scripts
| Command | What it does |
|---|---|
npm test | Health check plus the full unit suite |
npm run test:unit | Unit tests only (Vitest) |
node tools/dev/boot-check.mjs | Boots every game in a headless browser and reports anything broken |
npm run health | Verifies every catalogued game resolves |
npm run doctor | Game Doctor — assets, manifests, shells |
npm run sync:games | Regenerates the offline catalog from games.json |
npm run sitemap | Rebuilds sitemap.xml |
games/your-slug/ with an index.html entry point.index.html. It posts GAME_READY to the parent shell so the loading overlay clears — without it your game looks broken even when it works.games/your-slug/thumb.svg, using the same 160×90 viewBox as the others.games.json, then run npm run sync:games.node tools/dev/boot-check.mjs your-slug # must print PASS
npm run health && npm run doctor
Full detail lives in CONTRIBUTING.md and docs/submit-game.md.
flowchart LR
A["🏠 index.html<br/>catalog"] -->|pick a game| B["🎛️ game.html<br/>shell"]
B --> Cmodern wrapper<br/>exists?
C -->|yes| D["gameshells/slug/"]
C -->|no| E["games/slug/"]
D --> F["🎮 your game"]
E --> F
F -->|postMessage GAME_READY| B
B -->|hides the loading overlay| G["▶️ playing"]
F -.->|postMessage GAME_ERROR| H["⚠️ error screen"]
style A fill:#1e2951,stroke:#8ec8ff,color:#e8ecf6
style B fill:#1e2951,stroke:#8ec8ff,color:#e8ecf6
style F fill:#10321f,stroke:#5fcf9f,color:#e8ecf6
style G fill:#10321f,stroke:#5fcf9f,color:#e8ecf6
style H fill:#3a1a22,stroke:#ff8b99,color:#e8ecf6
The catalog in games.json is the single source of truth. It drives the landing page, the sitemap, the offline fallback and the service worker precache — so a game that is not listed there is invisible, however finished it is.
Every pull request runs four independent checks before anything reaches main:
| Check | What it protects |
|---|---|
| Unit Tests | 145 tests across 44 files, on Node 20 and 22 |
| Game Smoke Test | Boots all 15 games over HTTP in headless Chromium and fails on a console error, a failed request, a GAME_ERROR, or a stuck loading overlay |
| Game Doctor | Every catalogued game has its shell, thumbnail, assets and manifest entries |
| Code Doctor | Syntax, unresolved imports, circular dependencies, dead code |
Getting started
Reference
Internals
Project
The health check looks for extra assets declared in tools/reporters/game-doctor-manifest.json. Each slug can list required files (paths) and patterns (globs), resolved relative to the folder holding the playable shell.
{
"requirements": {
"pong": {
"paths": ["manifest.json", "pong.css"],
"globs": ["*.js"]
}
}
}
Add a slug's entry, keep every value in arrays of strings, then run npm run doctor to confirm it passes.
Pull requests are welcome, from a one-word typo fix to a whole new game. Start with CONTRIBUTING.md and the Code of Conduct. Found a security issue? See SECURITY.md.