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 word-search game in the style of Spelling Bee/Bonza: drag across a hexagonal letter grid to spell words from that day's word list.
Click and drag from tile to tile — each tile you drag across must be adjacent to the last, and letters are read off in the order you cross them. Release on the last tile of a valid word to submit it; releasing anywhere else cancels the selection. If the submitted word isn't on the list, it's rejected with a red flash. Words you've already found are tracked in the sidebar, grouped by length by default (toggle to a flat alphabetical list if you prefer).檢視完整 README ↗A word-search game in the style of Spelling Bee/Bonza: drag across a hexagonal letter grid to spell words from that day's word list.
Click and drag from tile to tile — each tile you drag across must be adjacent to the last, and letters are read off in the order you cross them. Release on the last tile of a valid word to submit it; releasing anywhere else cancels the selection. If the submitted word isn't on the list, it's rejected with a red flash. Words you've already found are tracked in the sidebar, grouped by length by default (toggle to a flat alphabetical list if you prefer).
This is an early-stage prototype. The board and word list for each day are pre-generated — deterministically seeded by that calendar date (Mountain Time) — by a scheduled GitHub Actions workflow (.github/workflows/generate-puzzles.yml, running scripts/generatePuzzles.ts) and committed as static JSON under public/puzzles/YYYY-MM-DD.json; the client fetches the current day's file rather than generating anything itself, so once a day's puzzle has been served to any player, an app redeploy can never change it out from under them. Board construction uses constructive backtracking placement: words are placed one at a time along weighted-random adjacent-tile paths across the (partially filled) board, undoing and retrying when a placement leads to a dead end, until every tile is covered by at least one placed word. The dictionary is filtered for offensive words before it's ever bundled (SCOWL's profanity/slur tags, the LDNOOBW blocklist, and a hand-maintained blacklist/whitelist — see scripts/generateWordLists.py). If an offensive word still slips through, npm run puzzles:remove-word -- <word> retroactively scrubs it from every already-committed puzzle file (without touching the board or any other word) and adds it to the blacklist so it's never planted again.
Requires Node.js. Install dependencies, then:
npm install
npm run dev # start the dev server at http://localhost:5173
npm run build # production build
npm run preview # preview a production build
npm run check # typecheck (svelte-check + tsc) — no linter configured yet
npm run test # Vitest — currently covers just the board-construction algorithm
npm run bench # Vitest benchmarks for the board-construction algorithm
dev/build/check each regenerate the word list from SCOWL first; the first run needs network access and make, and takes roughly a minute (cached after that). npm run dev additionally generates today's and tomorrow's puzzle files locally if they're not already present, so there's nothing to fetch a 404 on — build/check don't, since they're also what CI runs, and CI must never silently generate a puzzle a scheduled workflow run happened to miss.
Built with Svelte 5 (runes), TypeScript, and Vite.
prototypes/ holds standalone HTML/CSS experiments from before the Svelte app existed — not part of the build.