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 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Game đối kháng tự động vẽ bằng canvas 2D, không cần cài gì, không có bước build. Mười hai đấu thủ từ nhiều vũ trụ, mười hai màn đấu, và hai bản chơi: xem máy đánh với máy, hoặc tự cầm tay đánh bằng WASD + nút chiêu — kèm một chế độ Phiêu lưu farm quái lên cấp. Giao diện Việt / Anh đổi được bằng một nút.README 전문 보기 ↗
Game đối kháng tự động vẽ bằng canvas 2D, không cần cài gì, không có bước build. Mười hai đấu thủ từ nhiều vũ trụ, mười hai màn đấu, và hai bản chơi: xem máy đánh với máy, hoặc tự cầm tay đánh bằng WASD + nút chiêu — kèm một chế độ Phiêu lưu farm quái lên cấp. Giao diện Việt / Anh đổi được bằng một nút.
| 12 đấu thủ | mỗi người một hồ sơ: vai trò, chín trục sức mạnh, bộ chiêu mô tả gọn, và phần "xem chi tiết số liệu" cho ai muốn soi từng con số. Tanjiro dùng basic combo và nhịp melee tự nhiên; Satoru Gojo giữ cự ly trung bình, quản lý hai Infinity Charge hữu hạn và dùng Unlimited Void để kiểm soát không gian mà không gây damage |
| 12 màn đấu | Dojo · Night Street · Stadium · Forest · Deep Space · Sunset Roof · Volcano · Sky Temple · Frozen Peak · Desert Ruins · Crystal Cave · Sakura Garden — mỗi màn có một ô dán ảnh nền riêng |
| 2 bản chơi | bấm PRESS START là chọn: Xem máy đánh (bản gốc) hoặc Tự cầm tay đánh. Bản người chơi bật nút W-A-S-D + bốn ô chiêu có vòng hồi chiêu ngay trên màn hình, và nới khung sàn rộng ra cho dễ nhìn |
| 5 chế độ đấu | 1v1 · hỗn chiến 3–6 người · đánh đội 2–4 đội · giải vòng tròn · giải loại trực tiếp |
| Phiêu lưu (chỉ bản người chơi) | chọn một nhân vật rồi đi 24 màn: cấp 1 ít máu và chỉ có đòn thường, hạ quái ăn EXP để lên cấp (điểm thuộc tính) và điểm skill (mở / nâng bậc ba ô chiêu). Cứ màn thứ 4 là một BOSS — một đấu thủ thật trong bảng. Thua thì vẫn giữ phần đã farm |
| Giao diện hiện đại | hệ màu graphite/navy, điểm nhấn cyan–gold tiết chế, màn chọn toàn màn hình, bảng hồ sơ gọn và HUD trong trận dễ đọc trên cả desktop lẫn điện thoại |
| 2 ngôn ngữ | Tiếng Việt / English, nút 🌐 ở thanh công cụ, trong màn chọn và trên màn tiêu đề |
| Nhạc nền của bạn | mặc định tắt; nạp nhạc riêng cho từng màn ở trang xưởng rồi bật ở thanh công cụ |
| Trang | File | Ai dùng | Có gì |
|---|---|---|---|
| Trang chơi | play.html | mọi người | màn tiêu đề → chọn cách chơi → chọn nhân vật → chọn màn → đánh. Không có bảng dán ảnh/tiếng |
| Trang xưởng | index.html | mình bạn | đủ bảng dán ảnh, dán tiếng, nạp hàng loạt, nút thử chiêu, ghi hình, xuất gói |
play.html dựng ra từ index.html, đừng sửa tay:
python3 tools/mk_play.py # đọc index.html -> ghi play.html
Nó chỉ làm hai việc: cắt mấy khối đánh dấu <!--STUDIO-->…<!--/STUDIO--> và đặt
window.ARCADE=1 để engine bật vỏ arcade. Sửa game thì sửa index.html rồi chạy lại
script; tools/t_play.js dựng lại và so từng byte nên quên chạy là test đổ.
python3 -m http.server 8000
# trang chơi http://localhost:8000/play.html
# trang xưởng http://localhost:8000/index.html
Mở bằng http:// chứ đừng nhấp đúp mở file://: gói phát hành và bộ giọng mẫu đi bằng
fetch, mà file:// thì trình duyệt chặn. (Nhấp đúp vẫn chơi được, chỉ là phải kéo thả
thư mục assets/ vào bảng tiếng bằng tay.)
CLAUDE.md).pack.json.assets/pack/pack.json rồi commit + push.fetch gói đó lúc mở. Ô nào người chơi chưa có gì thì lấy từ gói; gói
không bao giờ đè lên file người ta tự nạp.
pack.jsonlà một file JSON chứa toàn bộ ảnh dạng base64 nên nó nặng: mỗi PNG phình thêm ~33%. GitHub chặn file trên 100 MB (và cảnh báo từ 50 MB), nên nếu bộ ảnh to thì giảm số khung hoạt ảnh, hoặc chuyển sang backend (xem mục cuối).
Không muốn xuất lại cả gói chỉ vì đổi một tiếng thì để file rời trong assets/voice —
game nạp được mọi ô tiếng từ đó, không riêng mấy ô giọng:
cp tieng-cua-ban/*.mp3 assets/voice/ # đặt tên ĐÚNG TÊN Ô: punch.mp3, ginyu_force.mp3…
python3 tools/mk_manifest.py # quét thư mục rồi ghi lại manifest.json
git add assets/voice && git commit -m "them tieng"
mk_manifest.py: trang web không liệt kê được thư mục, nó chỉ đọc danh
sách trong manifest.json. Quên chạy là game không thấy file nào.pack.json thì gói thắng (gói nạp trước) — đừng để một ô ở cả hai
chỗ, chọn một đường thôi.python3 tools/mk_voice.py (cần espeak-ng +
MBROLA); nó tự gọi mk_manifest.py ở bước cuối nên file bạn thảy vào không bị xoá khỏi
danh sách.main. Workflow .github/workflows/pages.yml tự bật Pages (bước
configure-pages có enablement: true) rồi dựng và đẩy lên — không phải vào Settings
bấm gì. Muốn kiểm lại thì Settings → Pages phải hiện Source = GitHub Actions.Get Pages site failed … Not Found) thì vào tab
Actions → Pages → Re-run all jobs.https://<tài-khoản>.github.io/autobattle/https://<tài-khoản>.github.io/autobattle/studio/Trang xưởng chỉ giấu đường dẫn chứ không khoá — Pages không có mật khẩu. Ai mò đúng địa chỉ vẫn mở được, nhưng họ chỉ đổi được bản nằm trong máy họ: gói phát hành nằm trong repo, muốn đổi thật thì phải commit.
Cả game là file tĩnh, không cần Node, không cần server. Đưa lên đúng ba thứ:
play.html -> trang chơi (đổi tên thành index.html nếu muốn nó là trang gốc)
index.html -> trang xưởng (nên để trong thư mục con, ví dụ /studio/)
assets/ -> gói phát hành + bộ giọng mẫu
Netlify: kéo thả nguyên thư mục vào netlify.com/drop là xong. Vercel: vercel deploy.
Muốn khoá trang xưởng bằng mật khẩu thật thì Netlify (bản trả phí) và Cloudflare Access
đều làm được ở mức hosting, không phải sửa code.
Bước 2–3 ở trên là chỗ vướng duy nhất: đổi một cái ảnh cũng phải đẩy repo. Muốn bấm nút là xong thì cần một chỗ chứa file có API ghi. Ba hướng, rẻ dần theo công sức:
| Hướng | Mất gì | Được gì |
|---|---|---|
| Supabase Storage (gợi ý) | tài khoản miễn phí 1 GB, khoảng 30 dòng JS | upload thẳng từ trang xưởng, trang chơi đọc URL công khai |
| Cloudflare R2 + Worker | tên miền + Worker, ~10 GB miễn phí | rẻ nhất khi bộ ảnh lớn, tự viết route upload |
| Firebase Storage | tài khoản Google | giống Supabase, SDK nặng hơn |
Chỗ phải sửa trong repo này rất nhỏ, vì cả hai trang đã đi qua đúng một cửa:
packLoad() trong index.html đang đọc hằng PACK_URL = 'assets/pack/pack.json'.
Đổi nó thành URL công khai của bucket là trang chơi đọc từ mạng ngay.supabase.storage.from('pack').upload('pack.json', blob, {upsert:true})) là bấm một nút
ăn ngay, khỏi commit.index.html — trang xưởng cũng là file tĩnh ai cũng tải về đọc được. Cách gọn:
bucket chỉ cho ghi qua một Edge Function / Worker, hàm đó đòi một mật khẩu bạn gõ vào ô
trên trang xưởng và giữ trong localStorage.Nhắn tôi khi bạn đã có tài khoản (Supabase hay Cloudflare) là tôi nối thẳng vào, kèm test.
node tools/t_reg.js # 36 cặp đấu, bắt lỗi trang
node tools/t_play.js # hai trang: play.html khớp bản dựng, luồng arcade, gói phát hành
node tools/t_stage.js # sáu màn đấu, ảnh nền, bóng đổ
node tools/t_ui.js # tên game, hai ngôn ngữ, hồ sơ nhân vật, nhạc nền tự chỉnh
node tools/t_bulk.js # nạp hàng loạt theo tên file
node tools/t_voice.js # bộ giọng dựng sẵn
Danh sách đầy đủ và mọi ghi chú về cơ chế nằm trong CLAUDE.md.
Conan is a Strategist / Controller built around a deliberately slow clue loop. Clues are stored per enemy (0–6). Every landed basic Deduction gives one Clue; auxiliary Clues from reading an enemy active skill, landing the Wristwatch, or making that enemy miss during one Skateboard ride count toward the same total. 6 total Clues = Case Solved. Case Solved is spent on Decisive Evidence / One Truth Prevails, a low-damage stun with no football involved.
Core values: Deduction 6 damage / 1.6s and +1 Clue on hit; Case Solved at 6 total Clues including auxiliary Clues; Soccer Ball Shot is the only football attack, 85 damage / 15s / 3s stun / about 35% arena knockback; Stun-Gun Wristwatch 2 / 12s and +1 auxiliary Clue on hit with immediate 3s Sleep, no damage-based early wake, then 3s Groggy; ChiChi Scolding alone can reflect the tranquilizer needle, and a reflected needle that hits Conan applies the same Sleep → Groggy sequence to him; Turbo Engine Skateboard collision 18 / 10s with one miss-read Clue per enemy/ride; Decisive Evidence 38 damage + 1.5s stun. No low-HP awakening, healing, resurrection, lethal weapon, or hard-coded maximum HP.