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 cute physics-flavoured endless runner for desktop and mobile browsers. Built with Phaser 3, TypeScript and Vite.
Add ?debug to the URL to draw the collision shapes and expose the scene as window.__scene.README 전문 보기 ↗Hop, dash and splash down an endless river as a wobbly little duck. A cheerful 2D endless runner for desktop and mobile browsers, published on Poki. Built with Phaser 3, TypeScript and Vite.
Guide a chubby, squishy duck down a never-ending river. Jump over logs and rocks, double jump over crate stacks, and dash to smash crates. Collect corn kernels for points, then spend them on new ducks.
The duck swims by itself. On a player's first run the river pauses at the first log and the first crate, and a callout shows exactly what to press; on later runs the DASH button (or the D key) glows whenever a crate is coming and the dash is ready.
| Action | Desktop | Touch |
|---|---|---|
| Jump (press again in the air to double jump) | W, ↑ or Space | JUMP button (bottom-left), or tap the left half |
| Dash (smashes crates) | D or → | DASH button (bottom-right), or tap the right half |
| Start | Enter, a jump key or D | Play button, or any tap on the menu |
| Play again | Enter | Play Again button |
| Pause / resume | Esc or P | Pause button |
Needs Node.js 20+. The asset tools also need Python 3 with pillow and numpy.
npm install
npm run dev # http://localhost:5173 (also printed as a LAN URL for phone testing)
| Script | What it does |
|---|---|
npm run dev | Dev server with hot reload |
npm run typecheck | TypeScript check (must pass before committing) |
npm run build | Production build into dist/ |
npm run preview | Serve the last production build |
npm run build:poki | Poki build into dist-poki/ and a zip ready to upload (see below) |
Debug mode: add ?debug to the URL to draw hit boxes, log Game Events to the console and
expose the scene as window.__scene. Debug mode is stripped from the Poki build.
npm run build:poki builds with the real Poki HTML5 SDK
and zips the result as wobbly-duck-poki-v<version>-<commit>.zip, with index.html at the zip
root. The dev build uses a local stand-in instead (fake ads, events logged in debug mode).
package.json version + git commit (e.g. v0.1.0+3f5c2d1). It shows small
in the corner of the main menu and in the browser console, and it's in the zip name, so a bug
report or screenshot always tells you which build it came from. A build made with uncommitted
changes is marked -dirty.npm version patch (or minor), then npm run build:poki, then
upload the zip.gameplayStart; later runs and resumes get a commercial
break first. The SDK starts in parallel with the game (it can take seconds), and SDK calls queue
behind it in order. It uses rewarded breaks for the revive,
and sends Game Events. If the SDK is blocked (ad blocker) the game still
plays, without revives.src/config.ts: speeds, jump, water, spawning,
scoring, skins, prices, biomes, celebrations.src/game/Patterns.ts) are timed in seconds of
travel, so fairness holds at any speed. Obstacle spacing, food arcs and the crate-stack heights
were checked against the real jump physics and with in-game bots.index.html, src/ui/, src/style.css), not canvas text. It's
crisp at any pixel density and respects phone safe areas.src/platform/. Gameplay code never calls the
Poki SDK directly.index.html DOM overlay markup (menus, HUD, shop, revive)
src/main.ts Phaser game config, version label
src/config.ts All gameplay tuning
src/core/ Viewport, InputManager, Storage, Audio
src/platform/ Platform adapter: LocalPlatform (dev) / PokiPlatform (Poki build)
src/art/ Duck sheet layout and animations
src/game/ Duck, DuckView, Water, Background, ObstacleManager, FoodManager,
Parade, LilyPads, Patterns + Spawner, Skins, BestMarker, Confetti,
Analytics, effects (Splashes, ScorePopups, CameraShake, DashMeter)
src/scenes/ BootScene (loading), GameScene (state machine + game loop)
src/ui/ DOM UI and icons
assets-src/ High-res source art (versioned, not shipped)
public/assets/ Optimised WebPs (everything here ships)
tools/ Asset and build scripts (not shipped)
docs/ Specs, notes, screenshots (not shipped)
Source art lives in assets-src/. tools/optimize-images.py crops,
resizes and converts it to WebP in public/assets/, the only images the game loads. Art that
isn't used stays in assets-src/ and is listed under UNUSED in that script. The first load is
about 700 KB. Duck skins and the lake scenery load later, only when needed.
| Tool | Purpose |
|---|---|
tools/optimize-images.py | Export every runtime image (the MANIFEST) |
tools/process-duck-strip.py | Turn a duck strip on white into a transparent, eye-aligned sheet |
tools/pack-duck-variants.py | Pack generated duck variants into the duck sheet layout |
tools/pack-strip.py | Pack a sprite strip into equal cells (frog, lily pads) |
tools/split-kernel-sheet.py | Split the corn-kernel sheet into single images |
tools/zip-build.py | Zip a build for upload, with the version in the name |
Every asset's source and licence is recorded in docs/ASSET_LOG.md.
| Doc | For |
|---|---|
| AGENTS.md | Architecture rules, layout, gotchas, status. Read first when changing code (Claude Code loads it via CLAUDE.md) |
| docs/UI_SPEC.md | Menus, HUD, shop, revive and game-over spec |
| docs/DUCKLING_PARADE.md | The Duckling Parade twist: rules, fairness, scoring |
| docs/ASSET_SPEC.md | Art and audio style guide, sizes, pivots, what's still wanted |
| docs/ASSET_LOG.md | Source and licence of every asset |
| docs/ANALYTICS.md | The Poki Game Events the game sends, and why |
| docs/DUCK_CATALOG.md | Worldwide duck checklist for future skins |
| docs/publishing/ | Poki thumbnail |
Game by Saiss. Third-party code and fonts:
Game art is project-owned (see docs/ASSET_LOG.md).