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분 만에 확인하기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.