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 browser-based, Pixel-Gun-3D–inspired voxel first-person shooter. Single self-contained
index.html built with three.js — no build step required.
Open index.html in a browser, or serve the folder and visit it:
Press START to play. (Needs an internet connection the first time — three.js loads from a CDN.)
Desktop
• WASD — move
• Mouse — look (click to lock the pointer)
• Click — shoot (hold for the auto rifle)
• 1 / 2 / 3 or mouse wheel — switch weaponREADME 전문 보기 ↗A browser-based voxel first-person shooter that walks Egypt's own history — Old Kingdom to Mamluk
Cairo — and then sells you passage out of it. Single self-contained index.html built with
three.js, no build step.
Open index.html in a browser, or serve the folder and visit it:
python3 -m http.server 8000
# then open http://localhost:8000
Press PLAY to play. (Needs an internet connection the first time — three.js loads from a CDN. The
desktop build in electron/ vendors it and runs fully offline.)
SETTINGS (on the title screen and the pause screen) holds mouse or look sensitivity, invert look, field of view, master / music / effects volume, and graphics: HIGH, or FAST (no sun shadows, 1x resolution ceiling) for weaker machines.
Desktop
Movement follows the physical keys, so on an AZERTY keyboard it is ZQSD — and the on-screen key captions say so once the game has seen the layout.
Mobile / touch
Egypt runs as one continuous ladder of waves across four eras, each with its own map, enemies and weapons, and each handing on to the next when its boss falls:
| Waves | Era | Ends with |
|---|---|---|
| 1–3 | Old Kingdom — the pyramid and the chamber beneath it | The Colossus |
| 4–6 | Greek — the agora, and the marsh the Hydra lives in | The Hydra |
| 7–9 | Roman — the frontier fort and the Colosseum | The Champion |
| 10 | Mamluk Cairo | the hub, and the travel booth |
Cairo has no enemies of its own. It is where a run ends and where the rest of the game is bought.
Kills bank ⭐ across the whole run. The booth in the Cairo bazaar spends it on passage to a real destination, each of which is two maps on one ticket and ends somewhere new:
| Destination | ⭐ | The trip | |
|---|---|---|---|
| 🗿 | Mexico | 50 | Olmec La Venta → Aztec Tenochtitlan → the Aztec Market, a second booth |
| 🛡️ | Sweden | 60 | Birka → the fjord and the Skerry Troll → Aldeigjuborg, a third booth |
| 🐉 | China | 70 | Xiangyang's wall and its breach → the chained, burning fleet at Yamen |
Each destination carries its own weapons, its own roster of enemies, and its own bosses. Clearing all three opens the way to the game's ending — see The ending.
Every era and destination swaps the whole loadout:
| Loadout | Weapons |
|---|---|
| Old Kingdom | Bow · Khopesh · Was Scepter |
| The Nile | Harpoon |
| Greek | Sling · Xiphos · Trident |
| Roman | Javelin · Pugio · Greek Fire |
| Mamluk | Qaws · Saif · Naft Pot |
| Olmec | Macana · Blowgun · Atlatl |
| Aztec | Tecpatl · Chimalli · Smoking Mirror |
| Viking | Dane Axe · Hunnish Bow · Throwing Seax |
| Song | Zhanmadao · Repeating Crossbow · Thunderclap Bomb |
Several carry a second mode — the Hunnish Bow draws and holds, the Atlatl and Throwing Seax slash at close range instead of throwing.
Press Z · X · X · C · C · C in order. Toggles god mode, infinite ammo, infinite money, insta-kill
and flight; jumps to any wave or destination. The same flags are reachable as /god, /fly, /tp
and friends in the console (two C presses in a row). The sequence is deliberately awkward so a cheat
cannot fire by accident mid-run.
Both are off in the portal build (the copy that carries the CrazyGames SDK): most shooters bind C to
crouch, and a player reaching for it would open a cheat console. Add #dev to the URL to turn them back
on there for testing.
electron/ wraps this same file in an Electron window with a vendored three.js, so it
runs with no network. See electron/README.md. Current build: 1.1.0, macOS
arm64 only.
tools/portal/build-portal.js (or build_portal.py, the same build for a machine without Node) produces
the self-contained copy for CrazyGames or a similar portal — three.js vendored locally the same way the
desktop build does it, so the game doesn't depend on a CDN inside a sandboxed iframe, plus the CrazyGames
SDK. The store covers and the preview videos are rendered from the game itself by scripts beside it. See
tools/portal/README.md.
tools/audit/ runs the game's whole script headlessly inside py_mini_racer against a stubbed three.js
and reads back real world-space bounding boxes — no browser, no build step. It checks that actors
stand on the floor, that no model renders as floating shards, that every map's ramps climb and its
decks hold you, and that nothing z-fights. See tools/audit/README.md.
pip install py-mini-racer
python3 tools/audit/fullcheck.py # the whole game
python3 tools/audit/chinacheck.py # one destination, end to end
python3 tools/audit/finalcheck.py # the endgame: gate, boss, and the Nile bank
China is the last road. The moment the Yamen Admiral goes down on his own flagship you are not sent home — the Gate of Ages opens where you stand and takes you straight to the final fight. Mexico and Sweden are optional side-roads and neither opens it.
The gate also stands, unlocked, in whichever hub you are in — Cairo, the Aztec Market or Aldeigjuborg — so there is a way back in if you die in the arena. It is never sold at the booth and costs nothing.
Through it is one fight and no waves: THE SUM OF AGES, 5200 HP, a lapis-and-gold monument carrying a rack of trophies from every boss it remembers. It spends its health walking down through four ages, and quotes the fight each trophy came from — the Colossus' heaving ground, the Hydra's venom, the Bearer's fire serpent, the Admiral's burning floor — calling that era's own minions up beside it as it goes. The age is read off its health rather than latched, so dying and coming back resumes the one your damage earned.
When it falls you land on the bank of the Nile: a small, quiet map with a river, a low sun and a stele that names every boss you put down. Nothing to fight, nothing to buy. Press E at the stele to read the roll, and again to begin a new run.
Progress saves by itself at checkpoints — the start of an era, a hub, the start of a trip's leg — and the
title screen offers CONTINUE (and NEW GAME, which asks twice). On CrazyGames it is kept in their Data
module, so it follows a player who logs in; everywhere else in localStorage. Dying rolls you back to the
start of the current era and no further, keeps credit for bosses already beaten, respawns you on the leg
you died on if you were away on a trip, and never touches your banked ⭐.
© 2026 Rafea el Ansary. All rights reserved — the source is public to read, not to reuse. See LICENSE, which also carries the notices for the only third-party pieces in here: three.js (MIT), Natural Earth's coastline data (public domain), and the Rubik and Cinzel typefaces (SIL OFL 1.1, full text in OFL.txt). Everything else — every model, texture, sound and note of music — is generated by the code itself.