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。 以下为已保存的摘录。
A fair, transparent virtual slots demo with 10-letter reels, 5 paylines, and progressive jackpot missions. No real money involved.查看完整 README ↗A fair, transparent virtual slots demo with 10-letter reels, 5 paylines, and progressive jackpot missions. No real money involved.
cd LXAV1
npm install
npm test
npm start
Visit http://localhost:8080 in your browser.
# Run once
npm test
# Watch mode
npm run test:watch
# Coverage report
npm run test:coverage
npm run lint
| Match | Payout |
|---|---|
| 3/10 | 0.50€ |
| 4/10 | 0.75€ |
| 5/10 | 1.00€ |
| 6/10 | 1.50€ |
| 7/10 | 2.00€ |
| 8/10 | 3.00€ |
| 9/10 | 5.00€ |
| 10/10 | 8.00€ |
Base RTP per difficulty is admin-adjustable at runtime (see Admin Panel below) and stored centrally in Firebase, not hardcoded - the values above are defaults, not fixed constants.
Upgrade your wild level to increase bonus symbol frequency:
| Key | Action |
|---|---|
ENTER | Start spin |
↑ / ↓ | Adjust bet |
SHIFT+ENTER | Toggle auto-spin |
M | Toggle mute |
? | Show help |
Accounts with role: "admin" in Firebase (set manually via the Firebase Console - never hardcoded by id) see a 👑 ADMIN entry inside the ID menu, opening a panel to retune each difficulty's target RTP. Changes are stored in Firebase (rtpSettings), not localStorage, so they apply globally to every player immediately, including guests.
npm test
Expected output:
PASS game-engine.test.js
✓ Configuration (4 tests)
✓ Paytable (2 tests)
✓ Difficulty Distribution (2 tests)
✓ Wild Mechanics (6 tests)
✓ Recommended Bet (1 test)
✓ Jackpot Logic (2 tests)
✓ Spin Results (4 tests)
✓ State Persistence (2 tests)
Tests: 23 passed, 23 total
Coverage: game-engine.js 98%, overall 94%
-webkit-overflow-scrollingclamp()All actions logged with:
Flags:
Use these tools:
Supported languages:
Switch in-game via flag picker in header.
| Browser | Version | Status |
|---|---|---|
| Chrome | 90+ | ✅ Full support |
| Firefox | 88+ | ✅ Full support |
| Safari | 14+ | ✅ Full support |
| Edge | 90+ | ✅ Full support |
| IE 11 | N/A | ❌ Not supported |
vercel --prod
No build step is required for the static site - index.html/style.css/etc. at the project root are served as-is. The account/game API lives at api/lxa-account.js, a thin Vercel Serverless Function adapter around functions/lxa-account.js (the actual business logic - auth, rate limiting, idempotency, spin resolution - is unchanged from before the Vercel migration and has no Vercel-specific code in it).
middleware.js blocks public access to files that must never be served (functions/, package.json/package-lock.json, *.test.js, dev-only scripts, *.md) - the project root has no separate "public" output directory, so without this they'd otherwise be fetchable like any other static file.
Required environment variables (Vercel dashboard → Project Settings → Environment Variables): FIREBASE_SERVICE_ACCOUNT, FIREBASE_DATABASE_URL, LXA_PEPPER (optional, has a default).
No cron jobs / no demo bots: vercel.json defines none - Vercel's Hobby (free) plan only runs cron jobs once per day and rejects the deploy for sub-daily schedules, and a keep-alive is not needed on Vercel.
Unofficial demo, no real-money or gambling function. No LICENSE file is present in this repo yet.
No. This is a demo with virtual credits only.
No. All credits are for demonstration only.
Yes. Game engine is transparent, open-source, and audited.
Yes, the game works offline. Leaderboard and account sync require internet.
Made with ❤️ by Leo
Accounts live under accounts/<id> : <name> (e.g. 25 : ANA). The server looks accounts up by their id field, so a hand-edited node is still found; the node key is refreshed on every save and after an admin edit of the ID or name. Opening the admin PLAYERS list renames any leftover legacy account:N nodes once. Note: the Firebase console sorts keys as text, so 100 : X is listed before 25 : ANA.
The stake can never exceed half of the price of the next WILD level (game.maxBetForWildLevel, e.g. 1.250.000 at level 0, 1.750.000 at level 1, 25.000.000 at level 49; at the top level 50 the ladder simply continues with 25.500.000; it follows the admin WILD cost multiplier). Enforced in the engine ( esolveSpin), on the server (spin returns 400) and in the UI (+/- and the 50% button are clamped; a short message shows the cap). The 50% button still means half of the balance, but never more than the cap. Rationale: jackpot tiers pay a multiple of the stake, so an uncapped stake would act as a money multiplier.