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 ↗Scan barcodes to discover creatures and loot, then take them into the Labyrinth.
The whole game runs in the browser. There's no server, account, database, API or secret key behind it. Your save lives in the browser on your computer. It works fully offline once it's installed.
main is the primary branch. Work there, or on a short-lived branch merged back into it.Install Git for Windows: https://git-scm.com/download/win Keep the defaults, especially "Checkout Windows-style, commit Unix-style line endings", so both computers treat line endings the same way.
Install Node.js 24 LTS (the "LTS" button): https://nodejs.org Next.js needs at least Node 20.9; both computers should use 24.
Install Cursor: https://cursor.com (and Claude Code, if you use it).
Open PowerShell (or Cursor's terminal) and run:
cd $HOME\Desktop
git clone https://github.com/codex-creatures/codex-creatures-clean.git
cd codex-creatures-clean
npm ci
npm ci installs exactly the versions in package-lock.json. The first
git clone asks you to sign in to GitHub in a browser window.
Check it works:
npm test
npm run dev
Open http://localhost:3000. Stop the game with Ctrl+C in the terminal.
After this, everything works with no internet: npm run dev, npm test, npm run build:offline
and the game itself. You only need the internet again to pull/push code or to reinstall packages.
The easy way (Windows): double-click in the project folder:
Start Game.bat: starts the game and opens http://localhost:3000. Works offline. Keep its
window open while you play; close it to stop. If the game is already running, it just opens it.Update.bat: gets the latest code from GitHub (git pull --ff-only origin main) and
reinstalls packages if they changed. It stops, changing nothing, if you have uncommitted work, are
offline, or this computer and GitHub have split. It never pushes, resets or discards anything, and
never touches your save.Or from a terminal:
| What | Command | Address |
|---|---|---|
| Develop and play | npm run dev | http://localhost:3000 |
| On your phone (same Wi-Fi) | npm run dev | http://<this PC's IP>:3000 (the terminal shows it under "Network") |
| A standalone copy (no Node needed to play) | npm run build:offline | http://localhost:8123 |
| Tests | npm test (quick) or npm run test:all (everything, a few minutes) | — |
Port 3000 is fixed on purpose. The browser keeps your save per address, so if the game
moved to port 3001 it would look like an empty save. If 3000 is busy, npm run dev stops with a
message saying so: the game is probably already running in another terminal tab. Close that one
(Ctrl+C there) or just use it.
npm run build:offline makes a codex-offline folder. Copy it anywhere (USB stick, another
laptop) and double-click Play (Windows).bat. It uses Windows' own PowerShell, so that computer
needs nothing installed. Keep the window open while you play. Copying a newer build over the old
folder keeps your save.
Your progress is saved automatically in the browser, for the address you play at:
A save has three parts, all included in an export: progress (everything, the Labyrinth too), the barcode registry (what each barcode you've scanned gives), and battle history.
codex-creatures-save-2026-10-19-0942.json lands in Downloads.Importing is safe:
Only the last save before an import is kept as the backup. For anything you care about, keep exported files (one per day is plenty). They're small.
GitHub is the meeting point. The one rule is: pull when you sit down, push when you get up.
Starting a session (in the project folder):
git status # should say "nothing to commit, working tree clean"
git pull --ff-only origin main # get what you did on the other computer
npm ci # only if package.json / package-lock.json changed
npm run dev
(Update.bat does the first three lines for you, then Start Game.bat the last.)
Finishing a session:
git status # see what changed
git add -A
git commit -m "What I changed"
git push origin main
git status # should say "up to date with 'origin/main'"
And if you want to carry on playing where you left off, export your save (section 3).
Tips
git pull says your local changes would be overwritten, commit them first, then pull again.--ff-only means a pull only ever moves forward. If it refuses ("Not possible to fast-forward"),
both computers have new commits: the histories have split. Don't force anything; ask Claude to
look (it will explain before changing anything).git push is rejected ("fetch first"), the other computer pushed first: run
git pull --ff-only origin main and push again. If that pull refuses, see the point above.git push --force, git reset --hard or similar here.git push once you're
back online. Pull on the other computer before working there.Works offline:
npm run dev, npm test, npm run build, npm run build:offline;public/ and app/fonts/);Needs the internet:
git pull / git push / git clone, and npm ci / npm install;public/sprites keeps working offline.Per-computer setup that isn't in GitHub:
%USERPROFILE%\.claude\projects\…), not in the repo. Anything both computers need is in
CLAUDE.md and docs/design.md instead, so Claude starts with it on either computer..gitignore already ignores .env* files.)app/: the screens (each folder is a page; app/settings is the save manager).components/: shared UI.lib/: the game rules (combat, Labyrinth, items, saves: lib/save.ts, lib/saveFile.ts).hooks/useGameState.ts: the game's state, loaded from and saved to the browser.public/sprites/: all the art (see public/sprites/PIXELLAB.md).app/fonts/: the fonts (open-licensed; licences next to them).offline/: the standalone copy's launchers (npm run build:offline).scripts/check-port.mjs: stops npm run dev with a clear message if port 3000 is taken.Start Game.bat / Update.bat: the double-click launchers (their logic is in scripts/).CLAUDE.md (how to work on the project) and docs/design.md (the game design, and what's
built vs planned): these are what Claude Code reads on either computer.tests/: npm test.