Underground 2 Revived
Chrome과 Firefox에서 Need for Speed Underground 2를 WebGPU로 두고 팬 프로젝트입니다
오픈소스 양치기 게임을 플레이하며 25·75·200 마리의 양을 키보드, 게임패드, 터치로 나누고 모아 이동시킵니다
Play an open-source sheep-herding game with 25, 75 or 200 reactive sheep. Split, gather and guide the flock with keyboard, gamepad or touch controls.
게임TypeScript · JavaScriptGitHub @matthew-kissinger온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Open-source browser sheep herding game. Guide 25, 75 or 200 sheep solo, in co-op or shared-flock competitive for two to four players, with keyboard, gamepad or touch controls. Three.js, React, WebGPU with WebGL2 fallback, and optional solo leaderboards. AGPL-3.0-or-later.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗One dog, one flock, one field. A calm, cel-shaded browser game about guiding sheep through a pasture gate. Get behind the flock, move patiently and use a well-timed bark to bring stragglers home.
Play Sheepdog Sim · Controls and help · Report a bug
Online identity and score requests are fail-soft. Play, completion and local personal bests continue when the score service is unavailable.
No account is required to play. Solo, co-op and shared-flock competitive are available; multiplayer supports two to four players through invite links and regional public lobbies. Campaign and survival modes are not included. See multiplayer development for local play and the persistent history/owner-dashboard candidate.
| Action | Keyboard | Gamepad | Touch |
|---|---|---|---|
| Move | W A S D or arrows | Left stick | Left joystick |
| Sprint | Shift | Right trigger or A / Cross | Sprint button |
| Bark | Space | B / Circle or X / Square | Bark button |
| Change camera | C | Y / Triangle | Camera button |
| Pause | Escape or pause button | Use the on-screen pause button | Pause button |
After stamina runs out, release Sprint and press again to start another sprint. Holding it down through recovery does not automatically restart it. Partial stick movement provides a slower walking pace.
Settings includes keyboard remapping, reduced motion, quality, audio levels and a colorblind dog marker. In Studio, drag the preview or use the orbit controls; choose a camera preset to inspect the dog from another angle.
Requirements:
git clone https://github.com/matthew-kissinger/sds.git
cd sds
npm ci
npm run dev
Open the local URL printed by Vite.
npm run dev also runs the score API: the Cloudflare Vite plugin serves the
Worker from app/cloudflare.config.ts beside the client on the same origin,
with no proxy and a local D1 under .wrangler/state. The API needs a local secret and
database once:
cp .dev.vars.example .dev.vars # local JWT_SECRET, gitignored
node scripts/d1-local-setup.mjs # once, for a fresh local database
Without them the game runs and the online boards report unavailable.
docs/operations/deployment.md has the local workflow in full.
Useful commands:
npm test
npm run lint
npm run typecheck
npm run typecheck:worker
npm run build
npm run preview
npm run probe:boot
npm run probe:play-path
npm run probe:release
npm run check:discovery
Run npm run build before the preview and built-artifact checks. See
the testing guide for validation expectations.
Current evidence and remaining device
or performance limitations are tracked in STATUS.md.
The application is split into four deliberate boundaries:
sim/ deterministic fixed-step herding simulation
app/ React Three Fiber, Three.js, input, audio and player interface
assets/ runtime assets plus editable sources and bake manifests
tools/ deterministic bakes, diagnostics and release verification
worker/ identity and score API; also serves the built client as static assets
The simulation imports no Three.js, React, DOM or network code. The renderer uses one TSL material path for WebGPU and WebGL2. Zustand is the shared state authority for the scene and player interface.
The field is assembled from reproducible source:
Read the version 3 architecture reset for what was retained from version 2, what was removed and why the codebase was rebuilt. Asset-specific recipes and provenance are documented under assets/, including trees, dog, farmer and audio.
Production deploys use the Deploy workflow,
triggered by a release tag on a commit already on main, and the procedure is
docs/operations/deployment.md. One Cloudflare
Worker serves the game and its score API on sheepdogsim.com, so one deploy
ships both from the same commit. The workflow installs dependencies, runs lint,
typechecks, tests and the build, archives the artifact, deploys, then verifies
the live release, the API and the discovery pages.
Contributor checks additionally cover:
The deployed release manifest records the source commit and artifact identity. Device coverage and performance numbers in STATUS.md describe measured configurations, not a guarantee for every phone or PC. Production publication requires owner approval.
Production serves the multiplayer client with a separate realtime Worker at
/r/*. Solo-time boards keep the existing field-v3 partition; multiplayer
history uses a separate database. The 5,000-sheep experiment remains excluded.
Start with CONTRIBUTING.md, then read AGENTS.md and the relevant document under spec/. The spec is the product contract. When implementation and spec disagree, document the decision rather than adding a compatibility branch.
Bug reports should include the browser, device, renderer backend, flock size, seed when known, reproduction steps and console output. Security issues should follow SECURITY.md.
Source code is licensed under GNU AGPL-3.0-or-later, copyright Matthew Kissinger.
Runtime and authoring assets are covered by the asset ledger and
LICENSE-ASSETS. Do not assume a code license applies to third-party or
generated media. Hosted modified versions must provide corresponding source and
retain the applicable notices.
The Korean translation is adapted from sigco3111/sds, a public AGPL-3.0 fork by sigco3111. See docs/translations, which also records that no translation has yet been reviewed by a native speaker.