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,即可验证所有权并自行管理介绍。
一分钟完成验证A game combining Categories and Guess Who?
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Pass-and-play deduction game for two players on one phone: a mashup of Guess Who and Categories.
React + Vite, no backend.
package.json lists dependencies as latest. After your first npm install, commit the generated
package-lock.json, or replace latest with the versions it resolved.查看完整 README ↗Pass-and-play deduction game for two players on one phone: a mashup of Guess Who and Categories. React + Vite, no backend.
npm install
npm run dev # http://localhost:5173
npm test # game-rule tests (Node's built-in runner, no extra packages)
npm run build # production build in dist/
npm run preview # serve dist/ locally
package.json lists dependencies as latest. After your first npm install, commit the generated
package-lock.json, or replace latest with the versions it resolved.
src/
data/categories.js category lists (the only place content lives)
game/engine.js pure game state + reducer: every rule, no React, no randomness inside
game/engine.test.js game-rule tests (sound mapping tests live in lib/)
components/ one component per screen (Setup, Reveal, Handoff, Turn, Over) + shared bits
styles/app.css the night-desk theme: tokens, layout, components
styles/extras.css React-build additions (icons, deal-in, case-closed stamp)
lib/haptics.js vibration cues, only after the first tap
lib/sound.js synthesized sound effects + mute
lib/soundEvents.js pure "which sound for this change" mapping (tested)
App.jsx reducer wiring, persistence, focus + screen-reader announcements
Effects are synthesized with Web Audio (no audio files). Each sound is a small list of voices in
src/lib/sound.js; src/lib/soundEvents.js maps game changes to sounds and is unit-tested.
Stamp thump on a rule-out, soft tick on undo, shuffle on deal, card turn on reveals, chime on
handoff, buzzer on a wrong accusation, gavel and jingle on a win. A speaker button (top right)
mutes everything and remembers the choice. Audio starts after the first tap, as browsers require.
Add one define(...) call in src/data/categories.js:
define('birds', 'Birds', 'Wings and whistles.', ['Robin', 'Owl', 'Penguin' /* ... */]),
Item ids are slugs of the name (birds-robin), so reordering or growing a list is safe.
When you want larger pools with random sampling at deal time, do it inside dealSecrets() and
the board setup in src/game/engine.js; the UI only reads getCategory(id).items.
State is saved to localStorage. A reload during a game restores it, but never onto a screen that
could show a secret: a reload mid-turn lands on that player's handoff screen, and a reload during a
secret reveal returns to the hidden step.
Framework preset "Vite", build command npm run build, output directory dist.
base: './' in vite.config.js keeps the build portable.