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
이번 생은 축구다. 오프사이드(풀타임)에서 고교 3학년부터 은퇴까지, 훈련·이적·이벤트 선택으로 한 선수의 커리어를 만듭니다. 설치 없이 바로 하는 무료 웹 시뮬레이션 게임입니다.
Translation pending
GamesTypeScript · SvelteGitHub @tasddc1226OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
축구선수의 한 생을 살아보는 브라우저 축구 커리어 게임 — OFFSIDE 풀타임: 휘슬이 울릴 때까지
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
고3 축구선수의 한 생을 살아보는 브라우저 커리어 게임. 훈련을 고르고, 이벤트마다 선택하고, 이적·병역·국가대표를 거쳐 은퇴까지. • 고교 3학년에서 시작해 은퇴할 때까지 시즌 단위(프리시즌·전반기·후반기)로 진행한다. 훈련, 선택형 텍스트 이벤트, 이적 시장, 병역(상무·특례), 국가대표(A매치·월드컵· 아시안게임·올림픽)가 커리어를 바꾼다. • 리그는 고교·대학·K3·K리그2·K리그1부터 J1리그·MLS·에레디비시·리그 1·분데스리가· 세리에 A·라리가·프리미어리그까지 13개. 구단은 가상 이름을 쓴다(구단명은 유저가 직접 바꿔 쓸 수 있다). • 선수는 34개 세부 능력치를 갖고, 육각형 레이더와 포지션별 OVR로 요약해 보여 준다. • 은퇴한 커리어는 명예의 전당(공개 순위)에 오른다. 공지·업데이트 게시판에는 댓글을 달 수 있다. 게임은 전부 브라우저에서 돈다. 서버는 게임을 시뮬레이션하지 않고, 기록 보관과 공유 기능만 맡는다. pnpm workspaces + Turborepo 모노레포. Node ≥ 22.13, TypeScript strict.Read the full README ↗
고3 축구선수의 한 생을 살아보는 브라우저 커리어 게임. 훈련을 고르고, 이벤트마다 선택하고, 이적·병역·국가대표를 거쳐 은퇴까지.
플레이: offside-lab.com · 릴리즈 기록: Releases
게임은 전부 브라우저에서 돈다. 서버는 게임을 시뮬레이션하지 않고, 기록 보관과 공유 기능만 맡는다.
| 위치 | 내용 |
|---|---|
apps/web | Svelte 5 SPA (Vite). 화면은 src/ui/*, 게임 로직은 packages/game. 세이브는 localStorage. Cloudflare Workers Static Assets로 배포 |
apps/api | Hono on Cloudflare Workers + D1(Drizzle). 익명 프로필·Google 로그인·복구 코드, 커리어·시즌 요약 적재, 명예의 전당, 공지·업데이트 게시판과 댓글, 구단명 커스텀, 서버 밸런스 설정, 운영 도구 |
packages/game | 게임 엔진(순수 TS, 시드 RNG를 세이브에 저장). 웹·앱·시뮬레이터가 함께 쓴다(ADR-014) |
packages/contracts | API 요청·응답 Zod 스키마와 밸런스 스펙(@offside/contracts/balance) |
tooling/fulltime-sim | 헤드리스 밸런스 시뮬레이터. packages/game을 그대로 import해 대량 커리어를 돌리고 밸런스 기준선(reference/random.json)과 비교한다 |
tooling/scripts | 의존 방향 검사, 운영 배포 보조 스크립트 등 |
docs/ | adr/(아키텍처 결정), tracking/(보드·결정 로그), operations/(런북), archive/offside/(원작 문서, 참고용) |
pnpm workspaces + Turborepo 모노레포. Node ≥ 22.13, TypeScript strict.
pnpm install
pnpm db:migrate # 로컬 D1 마이그레이션 (apps/api)
pnpm dev # web(vite) + api(wrangler dev)
pnpm lint && pnpm lint:deps && pnpm format:check && pnpm typecheck && pnpm test && pnpm build # 머지 전 검증 체인
pnpm --filter @offside/web e2e # Playwright e2e
pnpm --filter @offside/fulltime-sim sim 20000 random <tag> # 밸런스 시뮬레이션
pnpm --filter @offside/fulltime-sim check-parity <tag> # 밸런스 기준선(reference/random.json) 비교
ci.yml, self-hosted runner) → squash 머지 → main push가 staging에 배포된다.deploy-production.yml로 배포한다.
preflight(읽기 전용)로 확인한 뒤 같은 SHA로 deploy를 실행한다.vYYYY.MM.DD.N(KST 날짜 + 그날 순번)과 GitHub 릴리즈가
자동으로 만들어진다. 릴리즈 노트는 직전 릴리즈 이후 머지된 PR 목록이다.docs/operations/production-release.md.자세한 규칙은 CLAUDE.md와 AGENTS.md에 있다. 요점:
localStorage 세이브를 읽는 마이그레이션을 함께 낸다.tooling/fulltime-sim으로 전후를 비교한다. 운영 중 조정할
수치는 코드 대신 운영 도구의 서버 밸런스 설정으로 바꾼다.T-<Phase>-<번호>, 브랜치·PR 제목도 이 ID로 시작한다.2026-09-24 Phase 9에서 원작 OFFSIDE(React + TanStack SPA, Web Worker 결정론 시뮬레이터,
콘텐츠 팩, 서버 체크포인트 동기화)를 지금의 확률·이벤트 기반 게임 풀타임으로 전면
교체했다(ADR-013). 원작 문서는
docs/archive/offside/에, 원작의 마지막 main 커밋은
offside-final 태그에 남아 있다.
All Rights Reserved — 오픈소스가 아니다. 자세한 내용은 LICENSE.