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
A walkable, flyable, mineable Goldberg-polyhedron planet in the browser - WebGPU three.js, streaming chunks, craft a plane and circle the world
GamesTypeScript · JavaScriptGitHub @matthew-kissingerOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Exploration rebuild, 2026-11-01: walking and exploration lead the design, with crafting supporting the journey. Aurelia now uses a complete spherical landscape with six named habitats, five modular tree families and eight understory/flower modules. The other five worlds now use their own full-sphere terrain and climate recipes, with fifteen named regions, eleven new tall-growth families and fifteen groundcover modules: crystal impact basins, eroded desert mesas, glacial shelves, basalt calderas and fungal atolls. Six modular creature types replace the old animals in suitable habitats. Residents persist, with habitat behavior and articulated foot contacts. Airless Vespera has mineral growth and no native animals. A larger baked explorer uses nine authored clips, runtime blending and step-aware foot IK, plus configurable clothes, hair, headwear, packs, colors and stature. Lighting, surface materials, vehicles, equipment, camp kits, resource bundles and falling trees have also been rebuilt.
Survival and Creative have separate versioned saves. Open M → Explorer to switch mode or customize the character. Creative supplies every tool and vehicle, free building and destination travel through M → Worlds / Regions. Regions follows the current planet. Survival uses gathered resources, nearby cooking/crafting stations and physical travel; atlas buttons mark a course.
For food, B → Camp → Campfire costs 3 wood + 2 stone; select it and place with Q. Within 10 m of that fire, B → Make → Roast Meat uses 1 raw meat + 1 wood. To leave the planet, build a Workbench and Furnace, mine stone for iron ore and smelt two ingots. Craft the Starfarer at the Workbench with 8 wood + 4 stone + 2 iron ingots, board with E and climb above the displayed orbital height. The 12-wood skiff stays atmospheric.
The worlds-v3 save namespace keeps old foreign-world layer edits separate. On first
load, compatible Aurelia progress, inventory and appearance carry forward from the
prior mode's aurelia-v2 slot; the original slot is preserved. An explorer saved on
an old foreign world returns safely to Aurelia. Old foreign outposts/edits remain in
the old slot because their terrain and layer grid changed.
Selected simulation systems remain. Named-region discoveries and animal observations/feeding persist; landmarks are currently decorative and the population model is bounded habitat behavior, not a simulated food web. See the exploration direction, concept art, performance evidence, and meshlet evaluation. The Surveyor interface uses etched brass, enamel instruments and a route atlas. Cloud sampling and terrain transitions are refined; Survival vitals persist across reloads, and stowing a craft brakes its dismount momentum. A longer Survival run found a first-draw terrain-buffer burst, now handled through bounded GPU priming. The validation receipt distinguishes the pre-fix 16-minute journey from the three subsequent physical-flight repeats. See the game interface.
The older single-world description and screenshots below are historical, not the current feature specification.
For repeatable diagnostics, node scripts/profile-game.mjs LABEL PORT gpu captures
an unchanged local build, and node scripts/smoke-streaming.mjs http://127.0.0.1:PORT/
checks asynchronous edits, rapid planet changes, and worker recovery in a disposable
no-save browser. scripts/smoke-ui.mjs and scripts/smoke-rendering.mjs accept the same origin
argument and check interface flows and both rendering backends. Set CHROME_PATH if
Chrome is not in the default Windows location.
npm run assets:build regenerates the explorer GLB and surface-detail texture from
their editable sources. npm run assets:kits exports the shared fauna and vegetation
parts as portable GLB review kits; the game builds those small shared profiles once
and animates/varies them at runtime. scripts/smoke-expedition.mjs checks real-input movement,
foot contact, pausing and travel; scripts/smoke-expedition-ui.mjs checks modes,
stations, customization and save isolation. scripts/measure-travel.mjs separately measures
cold and cached travel in fresh browsers without motion recording overhead. Add
--all-worlds after its run-count and output label to visit all five new worlds and
return through cached destinations. scripts/smoke-worlds.mjs ORIGIN OUTPUT checks
native region travel, walking, surface traversal and orbital representation; add
--no-screenshots for an independent timing pass or --gl for WebGL2.
Play it: https://matthew-kissinger.github.io/goldberg-planet/
A small browser game on a spherical planet whose surface is a true Goldberg polyhedron (hexagons plus exactly twelve pentagons). The loop is one sitting long: walk the hex planet, chop trees for wood, craft a wooden bush plane from 12 wood, and fly it around the world, from a footstep in a clearing to the whole planet hanging in space. The topology is derived from scratch: combinatorial tile ids stitched across 20 icosahedral charts, no geometry library (Shape and identity).
Best in a WebGPU browser (Chrome/Edge); it falls back to WebGL2 automatically everywhere else. Phones get touch controls automatically, and a standard gamepad drives the whole loop.
| the wooden plane you craft | forests grow from the same seed | the whole planet in frame |
This is a deliberately small slate. An earlier, much larger survival-builder cycle ("Hearth and Horizon": building kits, fishing, cooking, caves gameplay, weather, creatures, pentagon landmarks) was burned down to this loop on 2026-10-26; its docs live in docs/archive/.
npm install
npm run dev # open the printed URL
npm test # topology, world, trees, crafting, drops, save, input, character tests
npm run build # typecheck + production bundle (deployed to Pages by CI)
URL params: ?mode=survival|creative (defaults Survival), ?seed=anything (world seed), ?m=192 (Goldberg frequency), ?gpu=gl (force
the WebGL2 fallback), ?touch=1 (force the touch UI), ?clouds=0 (no cloud layer),
?skyq=low|high (sky march quality; defaults low on coarse-pointer devices), ?debug=1
(start with F3 diagnostics open), ?nosave=1 (no local save), ?reset=1 (clear this
seed's save slot before boot), ?mute=1 (start muted), ?plane=1 (start with the plane
already crafted).
Progress (player, wood, plane, felled trees, loose logs) autosaves to localStorage per
seed and frequency.
| Keyboard + mouse | Touch | Gamepad | |
|---|---|---|---|
| Move / throttle | WASD (Shift sprints) | left stick (push past the rim to sprint) | left stick (full tilt or RB sprints) |
| Look / steer | mouse (pointer lock, or drag) | drag | right stick |
| Zoom (first person to orbit) | wheel | pinch | LB + right stick |
| Jump / climb, descend | Space, Ctrl or C | ▲ ▼ buttons | A, LT |
| Chop | left click (hold to keep swinging) | tap the tree | X or RT |
| Crafting panel | B (Esc closes) | craft button | Y (A crafts, B closes) |
| Craft + board / stow plane | E | plane button | Start |
| Free-flight (Creative) | F | ||
| Mute, stats, help | N, F3, H | Back+LB, R3+LB, R3 |
Velocity chases wherever you look, forward/back set the throttle, and, the part that makes it feel like flying around a planet, flying level holds your altitude above the ground, not above sea level. The flight model samples the column field under you and ahead of you, so rising terrain lifts you over ridgelines and falling terrain lets you sink back down the far side, all the way around the sphere.
src/main.ts: boot behind the splash, then the frame loop (input, player, camera,
streaming, chopping, save, HUD, render).src/game/: the loop itself. coreLoop.ts (inventory, chop, pickup, craft, board),
controls.ts (keyboard/touch/gamepad merged into one per-frame intent), cameraRig.ts
(ground-to-orbit camera), autosave.ts, spawn.ts, hints.ts (per-device copy).src/sim/: pure rules. crafting.ts, resourceDrops.ts, save.ts, equipment.ts
(character action and held item).src/world/: Goldberg tiles to terrain. Layers, terrain noise, columns (with natural cave
voids carved into the terrain), trees, chunk streaming, and ray picking.src/render/: chunk mesher, far sphere, ocean, sky and clouds, stars, character and
plane, loose-log drops, tile highlight.src/player/: player physics and the raw input devices.window.render_game_to_text() returns a read-only JSON snapshot (mode, inventory, target,
nearest tree bearing, plane state) for automated playtests.
three/webgpu (r185); automatic WebGL2 fallback (?gpu=gl).npm test and npm run build.?touch=1, with no console errors.base: './', so the same dist/ works under
https://matthew-kissinger.github.io/goldberg-planet/ and local static preview paths.main via .github/workflows/deploy.yml. The app is
static: no server, secrets, or runtime API keys.public/audio/music/MUSIC.md) predates the
burndown and still names the old pentagon domains.MIT. See LICENSE.