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.