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,即可验证所有权并自行管理介绍。
一分钟完成验证Total Battle stack calculator
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Pyrrhic works out which units to send against a Total Battle epic monster. You tell it what your account
owns — tier ranges, mercenaries and their caps, every bonus source — plus the housing you have free and the
monster you are hitting; it sizes each stack so the ones that die first are the ones you can afford to lose,
simulates the fight, and gives you the counts to type into the game along with the damage and the recovery
bill. It runs entirely in your browser: no account, no server, no telemetry, no network call of any kind
(ADR-0002).查看完整 README ↗Pyrrhic works out which units to send against a Total Battle epic monster. You tell it what your account owns — tier ranges, mercenaries and their caps, every bonus source — plus the housing you have free and the monster you are hitting; it sizes each stack so the ones that die first are the ones you can afford to lose, simulates the fight, and gives you the counts to type into the game along with the damage and the recovery bill. It runs entirely in your browser: no account, no server, no telemetry, no network call of any kind (ADR-0002). Profiles, saved marches and settings live in this browser's storage and can be exported as JSON or handed over as a link that carries the whole configuration in the URL fragment, which browsers never send anywhere.
Vite and React 19 with TypeScript in strict mode. The UI is Mantine 9 used as documented — the theme in
src/ui/theme.ts is generated from the design hues by src/ui/palette.ts, targeting relative luminance so
every group colour lands in the same contrast band, and sections compose stock components rather than
carrying their own CSS (ADR-0008). State is zustand, schemas and migrations are zod, unit tests are Vitest,
end-to-end and visual tests are Playwright. The app is a progressive web app with a hand-written service
worker (no PWA dependency) and ships to GitHub Pages from main.
Node 22 (.nvmrc) and pnpm 10.
pnpm i
pnpm dev --port 5180
The component gallery — every kit and domain composite, in both colour schemes — is at /#kit. It exists in
development only; the production build folds the route away and never bundles it.
The service worker is not registered by pnpm dev, since it fights hot reloading. Start with
VITE_PWA_DEV=1 pnpm dev to exercise it.
pnpm test, pnpm lint, pnpm typecheck, pnpm format:check, pnpm data:check and pnpm build are what
CI runs. The scripts do not forward a path filter, so call the runners directly for one file:
pnpm vitest run src/ui/kit/ChoiceList.test.tsx # one unit test file
pnpm vitest run -t 'the arrows move' # one test by name
pnpm exec playwright test e2e/troops.spec.ts # one e2e spec
pnpm test:visual # kit-page screenshots and axe, at 390 and 1280
pnpm contrast # every contrast pair the palette promises, WCAG 2.2
pnpm size # bundle budgets against a built dist/
pnpm test:visual:update re-baselines the screenshots after a deliberate change; pnpm size needs
pnpm build first. Playwright needs its browsers once: pnpm exec playwright install.
| Where | What |
|---|---|
docs/PLAN.md | Architecture, the engine specification, the milestones and the story status table; §7 is the running review log |
docs/design-rules.md | The owner's UI and UX charter. When a rule and a plan disagree, the rule wins |
docs/design.md | The design system as built: palette, surfaces, type, glyphs, component defaults, wording glossary |
docs/plans/ | The design overhaul (personas, journeys, cards, stories D-xx) and the UI foundation plans, including the Mantine migration |
docs/decisions/ | Architecture decision records, indexed in docs/decisions/README.md |
docs/investigations/ | Numbered findings: cross-device sync, the Google Drive requirements, TotalStack observed live, the Mantine spike, the frame spike, hosting, the rules-compliance review |
docs/research/ | Game data tables, captured fixtures, the battle-model observations and the TotalStack review the engine was validated against |
The kit's contract is in src/ui/kit/README.md.
The tables under src/data/tables/ are plain JSON and are meant to be edited by players, in the GitHub web
editor if that is all you have — no development environment required (ADR-0007). Read
docs/data/README.md for what every table and field means and where to read the value
in game, then follow CONTRIBUTING.md: edit the file, run pnpm data:format if you can,
bump dataVersion, add a changelog line, and attach the in-game evidence. Values nobody can check are not
merged; a value that disagrees with what is in the repository is useful information, not a problem. Schemas,
cross-table integrity and the engine regression tests all run on the pull request.
Signed-in sync across devices is optional, opt-in and off by default: a build without
VITE_BACKEND_ORIGIN has no account rows at all and never loads the SDK. See docs/sync.md
and ADR-0009.
AGPL-3.0-or-later; a hosted copy has to stay open too. Game data is factual and shared under the same repository terms.
There are no third-party icon assets. Game concepts — units, groups, resources, states — are drawn with
the platform's own Unicode emoji through one Glyph component, the way the game and TotalStack write them,
so there is no icon licence to carry and nothing to fetch. Lucide (ISC) supplies the interface chrome only:
chevrons, gears, close buttons. Inter and Fraunces are bundled variable fonts under the SIL Open Font
License. Nothing is loaded from a CDN.