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 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A GTA: Vice City–flavoured driving sandbox that runs on real streets, anywhere on Earth.
Type a place — your street, Miami Beach, Shibuya — and it pulls the actual road network and
building footprints for that spot and turns them into a drivable city.
No build step, no dependencies, no API key. Open index.html and drive.
Free and always will be. Any tier gets GHOST MODE: full speed across open ground and
straight through buildings, where the car is otherwise a road car that drops to walking pace off
the tarmac. Backers get the word that unlocks it, in a post on the page.查看完整 README ↗A GTA: Vice City–flavoured driving sandbox that runs on real streets, anywhere on Earth. Type a place — your street, Miami Beach, Shibuya — and it pulls the actual road network and building footprints for that spot and turns them into a drivable city.
No build step, no dependencies, no API key. Open index.html and drive.
git clone https://github.com/RaushanSakhibzadin/GoogleMapsGTA.git
cd GoogleMapsGTA && open index.html # or: python3 -m http.server
Free and always will be. Any tier gets GHOST MODE: full speed across open ground and straight through buildings, where the car is otherwise a road car that drops to walking pace off the tarmac. Backers get the word that unlocks it, in a post on the page.
| W A S D / arrows | drive, reverse, steer — up to 360 km/h |
| Space | handbrake — hold it into a corner and the back end steps out |
| H | horn |
| N / the ☾ pad | daylight ⇄ dusk. The game opens in daylight |
| V / the 3D button | top-down view ⇄ chase view |
| M / tap the radar | the full city map — drag to pan, pinch to zoom |
| R / the bar along the bottom | next radio station; the name plays and stops it |
| ♪ | two volumes, the game's and the radio's |
| ⤓ LOG | saves what the map servers sent and everything that went wrong |
| Esc | pause / change city |
| touch | on-screen pads appear automatically on phones and tablets |
| Geocoding | Nominatim turns "Ocean Drive, Miami Beach" into a lat/lon |
| Geometry | Overpass API, out geom qt;. Split into streets / buildings / landmarks so the loading screen only waits for what it cannot start without |
| Projection | Local equirectangular: x = (lon−lon₀)·111320·cos(lat₀). Metres are the world unit |
| Physics | Forward/lateral velocity split, per-car mass, OBB collisions off a 26 m bucket grid |
| Off-road | A drivable mask stamped along centrelines; off it the car crawls, unless GHOST |
| Streaming | 1.8 km tiles, geometry batched per 512 m cell, one cell built per frame |
| Loading | The screen waits 9 s for the streets and 6 for the wide map, then starts you in the bundled city and keeps the request running — if it lands, the real city swaps in behind the wheel. Silent mirrors cost 10 s instead of 42 |
| Cache | Every script is fetched with ?v=<hash> over the contents of all of them, so a deploy is never invisible |
| Tests | 87 Playwright suites — node tests/run.mjs, about fifty minutes |
Everything is plain <script> files sharing one global scope, deliberately not ES modules:
modules are blocked over file://, and opening the game straight off disk is the point. Load
order is fixed in index.html.
index.html markup style.css styling data/belgrade.js the offline city
js/i18n.js ten languages js/util.js palette, theme
js/geo.js network: Overpass, Nominatim js/log.js the session log
js/world.js OSM parsing, indexes, streaming js/terrain.js the heightfield
js/turf.js casinos, the bet, the spray can
js/entities.js cars, traffic, police, physics js/body3d.js the car as a cuboid
js/game.js state, shifts, missions, wanted js/io.js input, audio, canvas
js/render.js top-down view js/render3d.js chase view + the dispatcher
js/soft3d.js chase view without a GPU js/gl.js WebGL2 plumbing, ear clipping
js/carmesh.js the car mesh js/proctex.js every texture, from fractals
js/radio.js the dial js/main.js the loop, menus, debug hooks
tools/ buildcity.py, logfixture.py, stamp.mjs, glb2car.py, perkword.mjs, mirror.mjs
tests/ the suite, and the captured sessions it replays
Why the decisions are not in this file. Nearly every non-obvious line in this repo carries a comment saying what was tried, what it measured, and why it is the way it is. That is where the reasoning lives — next to the code it explains, where it cannot drift out of date.
The repo is called GoogleMapsGTA and the original ask was Google Maps. It uses OpenStreetMap instead, for two reasons: the Google Maps API needs a billed key, which cannot go in a public repo; and Google serves rendered tiles — pictures of a map, with no road centrelines or building polygons in them, so there would be nothing to collide against. Overpass returns real vector geometry, which is what the physics needs.
Map data © OpenStreetMap contributors (ODbL). Geocoding by Nominatim, geometry by Overpass — please respect their usage policies. Radio directory by Radio Browser.
A parody tribute. Not affiliated with, endorsed by, or connected to Rockstar Games or Google.