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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A fast, mobile-first, touch-first physics soccer game — the classic style discs, built to be played
with two thumbs on a phone (and great on desktop and arcade "cocktail" setups too). It's a single
self-contained index.html: no build step, no dependencies, no server. Graphics are drawn on a
, sound is synthesized with the Web Audio API, and it installs & runs offline as a PWA.
Play: open index.html, or host it anywhere static (GitHub Pages, Netlify, an S3 bucket…).README 전문 보기 ↗Shipped under the working title Magnetball; the repository, the storage keys and the file format strings keep that name, by design.
A fast, mobile-first, touch-first physics soccer game — the classic style discs, built to be played
with two thumbs on a phone (and great on desktop and arcade "cocktail" setups too). It's a single
self-contained index.html: no build step, no dependencies, no server. Graphics are drawn on a
<canvas>, sound is synthesized with the Web Audio API, and it installs & runs offline as a PWA.
Play: open index.html, or host it anywhere static (GitHub Pages, Netlify, an S3 bucket…).
assets/ is absent./menu page (/settings redirects there), synced live with the game tab.It's plain static files. Either:
# open directly
open index.html # macOS (or just double-click)
# …or serve (recommended, so the service worker + fetches behave like production)
python3 -m http.server 8000 # then visit http://localhost:8000
Any static host. For GitHub Pages: push these files to the repo root, then
Settings → Pages → Deploy from branch → main / root.
The board reads from a Google Sheet with zero backend, and can write scores/replays via a small
Google Apps Script. Full setup — sheet sharing, the script to paste, and mock data — is in
LEADERBOARD_SETUP.md. The script lives in leaderboard.gs.
index.html The entire game (HTML + CSS + JS + canvas engine)
sw.js Service worker (offline / PWA, network-first for HTML)
manifest.json PWA manifest
icon.svg App icon
assets/ Optional art (flags, animal faces, controller icons) — see assets/README.md
menu/ The /menu route (the same document with the game switched off)
settings/ The old name of that route — a redirect to ../menu/
tests/ Headless Playwright suites — see tests/README.md
docs/ TODO, terminology, and the audit reports
leaderboard.gs Google Apps Script for the live leaderboard (paste into the Sheet)
LEADERBOARD_SETUP.md How to wire up the Google Sheet leaderboard
mock-scores.tsv Paste-in sample rows for the leaderboard sheet
ROADMAP.md Shipped log + backlog
CLAUDE.md Notes for working on this codebase — start at its START HERE section
CONTROLS.md Every input and what it does
server/, infrastructure/ The online match server, lockstep relay and Azure setup (not the game)
tools/ Dev-only scripts (commercial filming, goal seeds)
Vanilla HTML/CSS/JS. Fixed-timestep physics (1/60s) with sub-stepped collisions; elastic
disc/wall/arc collisions; theme engine driving both CSS variables and the canvas palette;
localStorage for all saves. No frameworks, no bundler, no network required to play.
The game exposes a debug hook when window.__MAGNETDEBUG = true (set before load) via
window.__magnet. 150 headless Playwright suites drive the real page — node tests/run.mjs.
See tests/README.md for what each covers, and CLAUDE.md
for how to write one.
Design & code: Ammar. Everything is programmatic — the pitch, the discs, the ball and every cosmetic are drawn on the canvas, and all audio is synthesised at runtime. The only image assets are optional: country flags and a few CC0 Kenney packs (animal faces, controller icons), each with a drawn fallback.