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
Tự động chiến đấu với 12 nhân vật và tùy chỉnh hình ảnh, âm thanh, chiêu thức
Translation pending
AI summary · website and README
GamesHTML · JavaScriptGitHub @tphuc3519-coderOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.