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。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A daily dark-fantasy roguelite that runs in the browser. Same crypt for everyone, one attempt a day. Players go down floor by floor, stack relics into broken builds, and share how deep they got.
Play: https://onemorecrypt.com/
Controls: arrows / WASD / hjkl to move, Space to wait. On mobile, swipe, tap a tile, or use the d-pad.
npm install
npm run dev # local dev server
npm test # logic tests + a bot that plays 300 full runs
npm run build # static build into dist/
Run BALANCE=1 npx vitest run to print how deep a simple bot gets, as a quick balance check.
No game engine: TypeScript, Vite and a <canvas>. Sprites are 12×12 pixel art written as strings in src/sprites.ts, and sound effects are synthesized with WebAudio, so there are no asset downloads. The gzipped build is about 16 KB of JS.
| File | What it does |
|---|---|
src/game.ts | All game rules (pure logic, no DOM) |
src/relics.ts | Relic catalogue: add new relics here, effects go in game.ts |
src/render.ts | Canvas renderer, particles, lighting |
src/content.ts | Heroes, elites, floor events, combos and achievements |
src/meta.ts | Souls, unlocks, achievements and codex that carry between runs |
src/progress-ui.ts | Hero select, Ossuary and Grimoire screens |
src/hero.ts | The hero sprite, layered by relic (preview every look at /scripts/heroes.html under npm run dev) |
src/audio.ts | Synthesized sound effects and the generative background music |
src/main.ts | UI, input, overlays |
src/share.ts | Share text for X |
src/daily.ts | Daily numbering (Daily #1 = 2026-10-14; a new crypt at midnight Central Time) |
src/online.ts | Supabase calls: sign-in, run upload, leaderboards |
src/social.ts | Sign-in, profile and leaderboard screens |
supabase/schema.sql | Database tables, security rules and leaderboard views |
With no configuration the game runs fully offline: names and progress are saved on the device and the leaderboard is hidden. To turn on accounts and leaderboards:
supabase/schema.sql and click Run.https://onemorecrypt.com/) and add it under Redirect URLs, along with https://notjstn666.github.io/one-more-crypt/ so the old address keeps working.Your code: {{ .Token }} to the template. Players who open the email outside the game's browser (common in the X app) can then type the code instead of tapping the link.SUPABASE_URL and SUPABASE_ANON_KEY. Then re-run the deploy workflow.The anon key is designed to be public; the security rules in schema.sql decide what it can do. Players can only submit runs for themselves, get one daily attempt each, and can't submit dailies for other days. Anyone can read the leaderboards.
Optional:
AUTH_X = true.Every run uploads its full input log. The game is deterministic, so Game.replay() rebuilds any run from its log, which makes it possible to check leaderboard entries for cheating.
.github/workflows/deploy.yml builds and publishes to GitHub Pages on every push to main. One-time setup: Settings → Pages → Source: GitHub Actions.
The game lives at the custom domain onemorecrypt.com (DNS at the registrar, then Settings → Pages → Custom domain with Enforce HTTPS). The link-preview tags use https://onemorecrypt.com/, set in deploy.yml; a repo variable SITE_URL overrides it. Share links use whatever address the player is on.
The social preview image is public/og.png. To regenerate it, run npx vite --port 5199 and then node scripts/make-og.mjs (needs Playwright installed).