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
무료 브라우저 축구 매니저 게임, 클럽 운영·선수 영입·청소년 아카데미·48리그·883구단
Free browser soccer manager game. Take over a club, sign players, work the transfer market, run a youth academy and chase the title across 48 leagues and 883 clubs.
게임TypeScript · CSSGitHub @proelium27온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A soccer management sim that runs entirely in your browser, in the spirit of
Basketball GM. Take over a club and run it season
after season: pick the XI and the formation, work two transfer windows, develop
an academy, keep the books straight, and chase promotion, the league, a
continental cup and the World Cup.
Play it: worldsoccersim.org — no account, no
download, no server. Every save lives in your own browser's IndexedDB.README 전문 보기 ↗A soccer management sim that runs entirely in your browser, in the spirit of Basketball GM. Take over a club and run it season after season: pick the XI and the formation, work two transfer windows, develop an academy, keep the books straight, and chase promotion, the league, a continental cup and the World Cup.
Play it: worldsoccersim.org — no account, no download, no server. Every save lives in your own browser's IndexedDB.
Math.random() in the sim.
The same seed gives the same world, which is what makes the balance audits in
scripts/ and the validation gates in test/validation/ possible at all.docs/eafc-import.md.)The game explains itself in-app at /manual, and /changelog lists every
player-visible change with dates.
Needs Node 20+.
npm install
npm run dev # Vite dev server
| Command | What it does |
|---|---|
npm run dev | dev server |
npm run build | production build (the worldsoccersim.org target) |
npm test | full vitest suite (164 files) |
npm run test:watch | vitest in watch mode |
npm run typecheck | tsc --noEmit |
npm run cli | headless sim harness, for audits |
There are two embedded build targets besides the default —
npm run build:itch and npm run package:crazygames — for platforms that host
the game inside an iframe at a path we don't control. docs/crazygames.md has
the runbook.
First npm test after a src/core change is slow. Generating a 320-club
world costs a few seconds and most test files want one, so worlds are cached on
disk and keyed by a hash of all of src/core. A core edit buys one rebuild
(~60s) and is free after that. SOCCER_GM_NO_FIXTURE_CACHE=1 skips the cache.
src/
engine/ the match sim — pure, no DOM, no storage
core/ league logic: season loop, progression, transfers, AI, cups, finance
db/ IndexedDB persistence + migrations + JSON export/import
worker/ web worker entry and its typed message protocol
ui/ React app (pages, components, LeagueContext)
test/
validation/ the Monte Carlo and multi-season gates
scripts/ audits, probes and one-off measurement tools (run with tsx)
engine/ and core/ import zero browser APIs, which is what lets the audit
scripts and CI run them in plain Node.
Two things are load-bearing and easy to break by accident:
rng
shifts every result downstream of it. New per-player traits and post-hoc
attribution must come off their own seeded stream.scripts/, not just a green test run.Both are covered properly in CLAUDE.md, which you should read before changing sim code.
CLAUDE.md is the current record — architecture, invariants, and a feature
ledger explaining what each system is, where it lives, and its non-obvious
traps. Everything else is narrower:
| Doc | What it is |
|---|---|
SOCCER_GM_SPEC.md | The original 2026-07 build brief. Historical — the engine spec and validation gates still hold; its world and roadmap sections describe a game that diverged. Its header box lists where. |
DESIGN.md / PRODUCT.md | The visual design system and the product brief. src/ui/styles.css is the source of truth for tokens. |
docs/finance-design.md | Design intent of the finance layer. |
docs/transfer-mobility.md | Postmortem: how the country strength ladder once inverted. |
docs/save-performance-plan.md | Why saves are split across IndexedDB stores. |
docs/player-save-findings.md | A live work queue built from real player saves. |
docs/eafc-import.md | The dev-only EA FC roster converter. |
docs/crazygames.md | Building and shipping the CrazyGames bundle. |
docs/analytics.md | PostHog pointers; src/ui/analytics.ts owns the event set. |
CI runs two jobs: a typecheck, and the suite sharded across 6 runners (the wall-clock is dominated by a handful of full-world multi-season sims, so sharding beats a single machine).
test/validation/ holds the realism gates — goals per game, draw rate, table
spread, top scorer, multi-season integrity. They are bands, not exact values,
and the standing rule when one fails is fix the statistic, not the band.
That lesson has been learned four separate times and each instance is written
up in CLAUDE.md.
No licence file, so default copyright applies: all rights reserved. The source is public to read, not to reuse.
The engine takes structural inspiration from ZenGM's hockey sim (the tick loop, the gate cascade, composite ratings), whose source is readable but not open source. Every line here is original, and it needs to stay that way — don't copy code, constants, structure or comments from that project.