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
Play physics-based soccer on mobile or desktop with local or online multiplayer
Translation pending
AI summary · website and README
GamesJavaScript · HTMLGitHub @AmmarRicaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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…).Read the full 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.