DOOM CAPTCHA
(doom-captcha.vercel.app)- DOOM CAPTCHA là một CAPTCHA mang tính thử nghiệm, có tính giáo dục và giải trí, yêu cầu bạn tự chơi DOOM® để chứng minh mình là con người
- Phần triển khai cốt lõi biên dịch một bản port Doom tối thiểu sang WebAssembly bằng
Emscripten, đồng thời kết nối vòng lặp game viết bằngCvới UIJavaScript - Các trạng thái game cần cho việc đánh giá CAPTCHA, như người chơi được tạo, tử vong hay tiêu diệt kẻ địch, được truyền sang UI thông qua callback JavaScript
- Các tùy chọn chạy mặc định được đặt là
-skill 5,-fast,-warp e1m1,-nomenu, đưa người chơi vào ngay một trận chiến khó mà không qua menu - Để sử dụng hợp pháp, dự án đã được điều chỉnh để tương thích với
wadsharewaredoom1.wad; có thể xem mã nguồn và liên kết tạo UI v0
Cấu trúc chạy Doom như một CAPTCHA
- DOOM CAPTCHA là một CAPTCHA yêu cầu người dùng chơi DOOM® để chứng minh mình là con người
- Phần triển khai sử dụng
Emscriptenđể biên dịch một bản port Doom tối thiểu sangWebAssembly - Vòng lặp game nền
Ctrongg_game.cvà UI CAPTCHA nềnJavaScriptđược cấu hình để có thể trao đổi trạng thái với nhau - Điểm khởi đầu là một bản port Doom tối thiểu dựa trên
SDL, có thể được biên dịch hiệu quả sangWebAssembly - Để sử dụng hợp pháp, bản build được điều chỉnh để tương thích với
doom1.wad,wadcủa phiên bản shareware
Các thay đổi game để phù hợp với CAPTCHA
-
Xử lý menu và hồi sinh
-
Sự kiện game được truyền tới UI
- UI CAPTCHA nhận trạng thái game thông qua callback JavaScript và dùng chúng trong luồng đánh giá
onPlayerBorn: được gọi khi người chơi được tạo hoặc hồi sinhonPlayerKilled: được gọi khi người chơi tử vongonEnemyKilled: được gọi khi người chơi chính tiêu diệt kẻ địch
-
Độ khó chạy mặc định
- Thay đổi các cờ chạy mặc định trong
d_main.cđể tạo tình huống khó hơn ngay từ đầu -skill 5: đặt độ khó thành"Nightmare!"-fast: làm game khó hơn-warp e1m1: bắt đầu game tại một điểm có hành động-nomenu: không cho người chơi mở menu chính
- Thay đổi các cờ chạy mặc định trong
Mã nguồn và điều kiện sử dụng
- Có thể xem kết quả tạo UI v0 và mã nguồn
- Dự án này dựa trên phiên bản DOOM® shareware được phát hành cho mục đích phi thương mại, và DOOM® là nhãn hiệu đã đăng ký của id Software LLC
1 bình luận
Các ý kiến trên Hacker News
Tôi đã cố chơi theo cách được thiết kế, nhưng khó quá; hóa ra có thể vượt qua bằng mẹo bằng cách đứng yên ở điểm xuất phát và chỉ bắn kẻ địch xuất hiện từ bên phải
Trong các game này, độ chính xác của súng lục tốt đến mức vô lý, nên có thể bắn vài phát từ xa để hạ địch; còn đám địch ở đây dùng shotgun, vốn rất kém hiệu quả ở tầm xa. Game mô phỏng độ tản đạn của shotgun rộng một cách phi thực tế, nên ngay cả khi kẻ địch ở xa ngắm chuẩn thì sát thương cũng rất nhỏ
Ngày trước khi chơi trên NetWare LAN ở trường đại học, chỉ cần giữ khoảng cách là tôi đã thắng được những người cầm vũ khí mạnh hơn nhưng kém chính xác hơn. Thường là shotgun hoặc shotgun hai nòng trong các phiên bản sau, và ai cũng thấy nó đã tay nhất
Cách này hiệu quả cho đến khi có ai đó áp sát từ phía sau; sau khi chết, nếu hồi sinh ở vị trí ổn thì có thể nhanh chóng tìm lại tên đó và trả thù bằng súng lục. Gặp rocket launcher cũng dùng được, miễn là không bị trúng trực tiếp hoặc không đứng ở chỗ sát thương nổ lệch dễ phá hỏng kế hoạch
Nói theo kiểu cũ, đây là cách hiệu quả trong nhiều game kiểu DOOM và các hậu duệ của chúng. Trong HL2 cũng vậy, khẩu súng lục cơ bản bắn liên tục theo số lần bấm nút bắn, không có khoảng cách tối thiểu giữa các phát như vũ khí khác, nên rất hữu dụng
Hơn nữa chỉ dùng bàn phím, nên phím mũi tên trái/phải xoay nhân vật; trong game bắn súng góc nhìn thứ nhất hiện đại, ta quen dùng chúng để di chuyển ngang và dùng chuột để xoay, khiến phản xạ bị rối
Kỹ thuật +100, tính khả dụng -100. Chuyến tàu ký ức +10, và tôi cũng nhận ra giờ mình chơi game dở rồi
Bắt đầu màn này chỉ với súng lục, mà nhìn như độ khó Ultra-Violence hoặc Nightmare, thì chẳng khác nào cầu cho người chơi bị bắn chết
Nếu bản triển khai này hỗ trợ WASD vốn giờ là chuẩn, và cho bắn bằng nút chuột trái như bản gốc, thì chứng minh mình là con người sẽ khá dễ
Đây là màn khó, và nếu tôi nhớ đúng thì là một trong các màn ẩn. Cũng có cảm giác như bật
-fast, và vì không thể di chuyển ngang nên còn khó hơn nhiều. Dù vậy vẫn rất dễ thươngTheo kiểu điều khiển cũ, giữ Alt là có thể di chuyển ngang
Trên máy tôi âm thanh bị cao một cách kỳ lạ, không rõ vì sao. Nhưng nó khá hợp với trải nghiệm vô lý này nên cũng không vấn đề lớn
Có điều gần đây tôi chơi Doom cổ điển khá nhiều
Quái nhiều quá nên tôi phải thử 3–4 lần. Đúng là giống captcha thật
Loại quái vật nào lại không cho WASD, thậm chí tối thiểu cũng không cho Ctrl để bắn vậy? Dù sao vẫn là một captcha ngầu
Mỗi lần phải giải captcha để đăng nhập vào console AWS, tôi lại nghĩ rằng đối tượng mà thứ này cố ngăn chặn thì có thể tự động hóa rất dễ, trong khi đa số người dùng lại khổ sở vì “tính năng” này
Một số mô hình mã nguồn mở có thể giải được mà không cần các cổng gác “an toàn AI” kiểu đó
Apple đã đề xuất một giải pháp cho captcha[1], và tôi đang chờ nó được chuẩn hóa và dùng rộng rãi
[1] https://support.apple.com/en-us/102591
Cách này rõ ràng không tốt hơn cho quyền riêng tư, và trao thêm quyền kiểm soát cho Apple. Tôi thà mất thêm 3 giây cho captcha còn hơn
Đọc đến câu đó là tôi dừng đọc tài liệu hỗ trợ của Apple
Một mẩu kiến thức lặt vặt: các nhà làm Doom đã tự chơi để kiểm tra rằng mỗi màn đều có thể vượt qua khi bắt đầu chỉ với súng lục và 50 viên đạn
Việc repository GitHub ghi công cho tác giả Doom Captcha gốc là điều đúng đắn. Kỳ vọng của tôi với toàn ngành phần mềm ngày nay đang ở mức thấp nhất mọi thời đại, nên thấy vậy rất mừng
Bản gốc vài năm trước ở đây
https://vivirenremoto.github.io/doomcaptcha
https://github.com/vivirenremoto/doomcaptcha
Cái này khó thật. Chắc tôi không phải con người rồi
Lâu lắm rồi tôi chưa chơi Doom, và không có di chuyển ngang thì gần như bất khả thi
Cái này được làm bằng trợ lý AI v0 của Vercel
Link chat ở đây: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0
Nghe có thể ấn tượng, nhưng về mặt chức năng thì nó không khác nhiều so với một trình thiết kế UI kéo-thả kiểu winforms, ngoại trừ việc thêm vài tương tác nhỏ như nút hiển thị “loading” trong vài giây. Tiền thân của nó là Visual Basic cũng đã có từ thập niên 90
Dù vậy, đoạn chat đó đọc một lúc là thấy khổ sở. Đại ý là kiểu “căn giữa chữ trong nút”, “chưa giữa mà, căn giữa đi”, “làm ơn căn chữ vào giữa”
Repository có phần source còn lại ở đây: https://github.com/rauchg/doom-captcha
Họ cũng phải sửa Doom để bỏ qua menu và thêm các callback cần thiết, cùng vài điều chỉnh khác