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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Multi-organism Conway's Game of Life — design life forms with custom survival rules and watch them compete.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Conway's Game of Life with more
than one kind of life. Organisms with their own birth and survival rules share one grid and
compete; you set up the battle, press play, and watch who wins, who coexists and who goes
extinct.
▶ Live at — runs entirely in the browser; nothing to
install, nothing stored anywhere but your own browser.檢視完整 README ↗Conway's Game of Life with more than one kind of life. Organisms with their own birth and survival rules share one grid and compete; you set up the battle, press play, and watch who wins, who coexists and who goes extinct.
▶ Live at https://game-of-life-studio.com — runs entirely in the browser; nothing to install, nothing stored anywhere but your own browser.
Uint8Array occupants, Uint16Array ages), rules are compiled
to per-organism evaluators once per run, and the Canvas renderer repaints only after a step,
batching cells by colour state so draw cost is bounded by the palette (≤ 160 fill groups), not
by the number of organisms. A CI benchmark fails the build if the baseline frame goes over
budget, and the engine packages compile without the DOM lib — both are enforced by tooling,
not by convention.One person, Claude Code, and a spec-first process on BMad Method v6. The story of the build — what worked, and what broke — is written up in Logbook of a Spec-Driven Developer. Everything the agents worked from is in the repo, in the order it was written:
architecture.md → an
adversarial cross-document review
of all of them → two implementation-readiness reports → epics.md:
six epics, 96 stories, every one traceable to a PRD requirement.docs/implementation-artifacts/ carries the
dev record, the review findings and — since 2026-08-26 — the run's time and token cost per
phase, measured from the agents' own transcripts.implement-next-story, a Claude Code skill
written for this project and consumed here as a git subtree
(.claude/skills/implement-next-story, configured by
). It takes the next
story off , runs
create → implement → review in fresh subagents, opens the pull request and stops. It never
merges. Two epics run as parallel lanes in git worktrees, with cross-epic dependencies as
rows in . 53 story PRs
since then; the median story is 67 minutes from start to PR open (the skill's
README has the full table, and its
records which rules came from incidents on this repo).What the human does, story by story: reads and merges the PRs, answers the [Review][Decision]
items a review leaves in the story file (a PR with one open stays a draft), approves gate rows,
and keeps deferred-work.md — the running
list of what each story chose not to do — honest.
What the human does, epic by epic: a refactor pass. Once an epic is merged, a thorough read
of its code, then the architectural improvements the story agents don't propose on their own,
each one worked out in conversation with Claude Code and committed separately with the prefix
HITL refactor: (git log --grep='HITL refactor', 11 so far). Among them:
regrouping lib/ and components/ into feature folders along their dependency seams,
replacing a hand-synchronised ref + state race guard with a pure reducer,
extracting useBattleDraft out of the battle page
(and useLeaveGuard, useDocumentTitle before it), and
a CI gate that fails the build when a spec ID cited in code no longer resolves
— the spec:check in the scripts table below.
.nvmrc; engine-strict=true fails the install on older Node)npm install
npm run dev:standalone # http://localhost:3000
| Script | What it does |
|---|---|
npm run dev:standalone | Next dev server in standalone (static-export) mode |
npm run build:standalone | Static export to apps/web/out |
npm run typecheck | tsc --noEmit across every workspace |
npm run lint / npm run format | ESLint (flat config) / Prettier over the repo |
npm test | Vitest unit/component tests |
npm run test:coverage | Vitest with v8 coverage |
npm run e2e | Playwright e2e + axe (Chromium/Firefox/WebKit/tablet) |
npm run e2e:chromium | The same suite, Chromium only |
npm run bench / bench:check | Engine benchmark at the 100×60 × 20-organism baseline / fail over budget |
npm run bundle:check | Fails if a route's gzipped first-load JS grows >8 KB past its baseline |
npm run bundle:baseline | Re-measures and rewrites scripts/bundle-baselines.json (commit it) |
npm run spec:check | Fails if a spec ID cited in code (RFC-004 §3.5, AR-2…) no longer resolves |
npm run boundary:check | Proves the engine-boundary ESLint rule still fires on every escape shape |
npm run ci / npm run ci:dev | The full quality gate — see below / same, e2e on Chromium only |
The GitHub Actions workflow in .github/workflows/ci.yml runs on every PR, on every push
to main, and on every v* release tag:
npm run ci is the local mirror of that pipeline — same stages, same order (the stage
list lives in the header comment of ci.yml; keep the two in lockstep). Run it before opening
a PR — the pre-commit hook does not cover the whole gate. npm run ci:dev is the
everyday variant: identical, except e2e runs on Chromium only.
The husky pre-commit hook is the fast subset only (lint-staged: ESLint + Prettier on
changed files, then a project-wide npm run typecheck). It deliberately skips tests, e2e, and
the bundle check so commits stay quick.
Deploy. Merging to main does not deploy — pushing a v* release tag does. Once
quality and e2e are both green on the tagged commit, the deploy job publishes the static
export to GitHub Pages at https://game-of-life-studio.com, so main can carry a
half-built epic while the site stays on the last release. A red run leaves the previous
deployment live. The custom domain is bound by apps/web/public/CNAME, which the export
copies into out/ verbatim. Releasing, hotfixing production, domain, DNS, Pages settings,
rollback and troubleshooting live in docs/ops.md.
Clean-room dry run (do this at epic boundaries). A warm local tree hides "works on my
machine" bugs — stale node_modules, uncommitted files, env drift — that the CI checkout
catches. Reproduce a clean checkout and run the gate:
git archive --format=tar HEAD | (mkdir -p /tmp/gol-clean && tar -x -C /tmp/gol-clean)
cd /tmp/gol-clean && npm ci && npm run ci
| Path | What it is |
|---|---|
docs/planning-artifacts/architecture.md | The umbrella. Its Cross-Cutting Decisions (A–K) are authoritative for anything spanning areas |
docs/planning-artifacts/rfcs/ | Eight RFCs, one per area: modes, rendering, UI, rules engine, state & undo, persistence, colour, testing |
docs/planning-artifacts/ | Brief, PRD, UX design, the adversarial review, readiness reports and epics.md |
docs/project-context.md · CLAUDE.md | The rules AI agents (and humans) must follow when writing code here — the non-obvious ones |
docs/implementation-artifacts/ | Story files with their dev and review records, sprint-status.yaml, deferred-work.md, lane-gates.yaml, validation reports |
docs/ops.md | Domain, DNS, GitHub Pages, rollback |
implement-next-story.tomlbacklog