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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.