Hypersomnia - game bắn súng nhiều người chơi mã nguồn mở và công nghệ được dùng trong Assassin's Creed: Valhalla cùng drone Skydio
(github.com/TeamHypersomnia)- Hypersomnia là một game bắn súng nhiều người chơi dựa trên cộng đồng, hỗ trợ đấu tay đôi với bạn bè hoặc chiến đấu giữa hai clan, và là trò chơi có thể chơi online từ năm 2017
- Được viết bằng Modern C++ và triển khai không dùng game engine, đồng thời được cung cấp như một game mã nguồn mở miễn phí
- Cấu trúc trò chơi kết hợp chiến thuật của Counter-Strike, sự năng động của Hotline Miami và nét hoài niệm pixel art của các RPG old-school; hiện cung cấp 24 loại súng độc nhất, 10 bản đồ cộng đồng và hai chế độ Bomb defusal cùng Gun game
- Các kênh phân phối gồm chơi trên trình duyệt, Steam, Windows, Linux AppImage và macOS dmg; khi khởi động game sẽ chạy interactive Tutorial
- Có thể chạy server bằng Server Docker hoặc Headless AppImage, và mọi archive đều được ký số, kèm đường dẫn xác minh chữ ký
- Trình chỉnh sửa bản đồ tích hợp sử dụng cách làm việc 100% WYSIWYG trực tiếp trong thế giới game, được tạo bằng ImGui và dùng định dạng bản đồ JSON
- Chỉ cần dán các thư mục PNG, WAV, OGG vào thư mục bản đồ là game sẽ tự động nhận diện
- Kéo thả GIF vào cảnh là nó sẽ hoạt động ngay như animation trong game
- Bản đồ đang làm có thể được playtest chỉ với một cú nhấp, còn các client kết nối sẽ tự động tải xuống phiên bản bản đồ hiện tại và tài nguyên tùy chỉnh
- Server, game và editor đều nằm trong cùng một file thực thi trên mọi OS, nên có thể bắt đầu một phiên làm việc từ editor, dừng bằng ESC rồi quay lại đúng trạng thái ban đầu
- Mạng được xây dựng dựa trên tính quyết định của mô phỏng đa nền tảng, hoạt động 100% quyết định giữa client trình duyệt, client native trên Windows, Linux, macOS và cả bản dựng native ARM
- Thay vì liên tục gửi toàn bộ trạng thái đối tượng qua mạng, hệ thống chỉ truyền input của người chơi, phần còn lại được mỗi client mô phỏng cục bộ
- Để đảm bảo tính quyết định của phép tính dấu chấm động, dự án dùng
clangtrên mọi OS, áp dụng/fp:strictcho bản dựng Windows,-ffp-model=strictcho bản dựng ARM, và thay các hàm toán học nhưstd::sin,std::sqrtbằng các triển khai thuộc họ STREFLOP - Trong ví dụ có hai nhân vật do người chơi điều khiển, với tickrate 60Hz thì lưu lượng vào khoảng
40 kbit/s (= 5 KB/s), và chỉ các nhân vật do người chơi điều khiển mới đóng góp vào lưu lượng mạng
- Client trình duyệt và client native có thể chơi cùng trên một server nhờ libdatachannel và datachannel-wasm
- Có thể host server ngay trong trình duyệt rồi kết nối bằng client native, hoặc mở server từ client native rồi gửi liên kết truy cập cho trình duyệt
- Bản trình duyệt hỗ trợ đăng nhập Discord, rank match và global Leaderboards; nếu liên kết tài khoản Discord với tài khoản Steam thì bản Steam và bản web sẽ dùng chung rating
- rectpack2D được viết cho việc đóng gói texture hiện đang được dùng trong Assassin's Creed: Valhalla, bởi một công ty sản xuất drone và trong 2 bài báo khoa học
- Phần triển khai memory pool cung cấp vùng lưu trữ liên tục, cấp phát O(1), giải phóng O(1), dereference O(1), tự động mở rộng và hành vi quyết định; khi truyền trạng thái thế giới ban đầu, nó còn bao gồm cả trạng thái nội bộ của pool đối tượng game để client có thể mô phỏng một cách quyết định với cùng định danh đối tượng và thứ tự bộ nhớ
- self-updater tích hợp sẽ tự động tải xuống và áp dụng bản cập nhật, xác minh đó có phải là bản cập nhật đến từ khóa công khai của nhà phát triển được hardcode thông qua lời gọi
ssh-keygenhay không; nếu nơi lưu trữ bản dựng bị tấn công và có bản độc hại bị đưa lên, các client hiện có sẽ từ chối áp dụng bản cập nhật đó
1 bình luận
Ý kiến trên Hacker News
Tôi từng tự hỏi liệu phép toán dấu phẩy động có được đặc tả hoàn toàn hay không, đáng lẽ nên tìm kiếm trước: https://stackoverflow.com/questions/49471943/floating-point-...
Nó không chỉ kết thúc bằng một lệnh
sqrt, mà thường bắt đầu từ xấp xỉ Taylor rồi chạy phương pháp Newton vài lần để tinh chỉnh kết quả, nên sẽ có nhiều lựa chọn như bậc của chuỗi Taylor, điểm tâm và số lần lặpIEEE 754 có thể quy định phép nhân, nhưng với
sqrt,sin,cos,tanthì phải quyết định cách tính, và thông thường phần cài đặt đó nằm trong thư viện chuẩn do trình biên dịch cung cấpNgoài ra, số dấu phẩy động không thỏa tính kết hợp, nên
(a+b)+c != a+(b+c), vì vậy chỉ cần đổi thứ tự phép toán cơ bản là kết quả cũng có thể khác nhauCách làm tròn có thể khác nhau giữa các kiến trúc, và nếu trộn arm/amd/intel thì có khả năng xuất hiện hành vi không quyết định: https://en.wikipedia.org/wiki/IEEE_754#Reproducibility
Có vẻ trò chơi này dùng cài đặt dấu phẩy động bằng phần mềm để tránh vấn đề đó, và nếu cộng thêm một trình biên dịch thống nhất thì có lẽ sẽ tránh được phần lớn rắc rối
https://docs.oracle.com/cd/E77782_01/html/E77791/z4002282485...
Trong C và nhiều ngôn ngữ khác, các toán tử phổ biến không được ánh xạ tường minh tới các phép toán dấu phẩy động cụ thể, nên trình biên dịch có rất nhiều quyền tùy nghi
Ngoài ra còn có trạng thái toàn cục vô hình như chế độ làm tròn cũng được dùng ở một mức độ nào đó; nếu nhớ không nhầm thì DirectX từng đổi cờ ở hậu trường
-marchkhác nhau thì kết quả cũng có thể lệch đi khá nhiềuChỉ là chúng không phải mã nguồn mở, và điều đó không có nghĩa đây không phải thành tựu. Thực sự đây là việc rất khó
[0] https://springrts.com/
Điểm khác ở đây là các game RTS không dùng vật lý dấu phẩy động mang tính quyết định, nên Hypersomnia cần một lời giải mới
Nó lấp vào khoảng trống mà TA và SupCom để lại, còn SupCom 2 tự nó là một game RTS nhỏ hơn, casual hơn và khá ổn, nhưng vẫn không tới mức đó
Và tốt hơn là đừng nhắc đến PA
BAR cũng có vẻ rất hứa hẹn: https://www.beyondallreason.info
Không phải bản thân trò chơi đã được đưa vào AC:Valhalla, mà là thư viện đóng gói texture được tạo ra trong quá trình phát triển đã được dùng trong đó[1]. Tất nhiên tôi không có ý hạ thấp thành tựu này, vì riêng việc đó cũng đủ để thành một bài viết
Ngoài ra, việc nói nó là nguồn gốc của hệ thống ECS được dùng trong Unity cũng có vẻ hơi cường điệu. Trước năm 2010 tôi đã từng dùng các game engine sử dụng ECS, và trong giới game engine thì nó có vẻ bắt nguồn từ Operation Flashpoint[2]
[1] https://github.com/TeamHypersomnia/rectpack2D
[2] https://t-machine.org/index.php/2007/09/03/entity-systems-ar...
Một ngày nào đó khi có thời gian, có lẽ là sau khi nghỉ hưu, tôi muốn thử làm việc như thế này, và những dự án như vậy rất có thể sẽ trở thành tài liệu học tập để tìm hiểu thế giới đó
Nó làm tôi nhớ đến ARC cuối những năm 90, tức Attack Retrieve Capture, giờ chỉ còn được duy trì cầm chừng dưới cái tên Armor Critical
https://en.wikipedia.org/wiki/Attack_Retrieve_Capture
http://armorcritical.com
Tôi tò mò không biết ngoài ra họ đã làm gì về mặt thương mại để duy trì dự án, có kế hoạch phát hành trên Steam hay không, và thế giới liên tục ảnh hưởng tới gameplay như thế nào
Tôi cũng muốn biết kỹ thuật thông minh dùng để tái dựng trạng thái vật lý khi người chơi mới tham gia sẽ trông như thế nào từ phía những người chơi đang có mặt, ví dụ như vị trí viên đạn có bị xê dịch hay không
Tôi cũng đầu tư khoản tiết kiệm khá tốt nên có thể toàn tâm tập trung vào Hypersomnia
Tôi muốn phát hành trên Steam trước cuối năm 2024
Hiện tại hoàn toàn chưa có thế giới duy trì liên tục; đó chỉ là nhắc sơ như một teaser về hướng có thể đi tới trong tương lai nếu trò chơi thành công
Việc dựng lại vật lý không được làm thay đổi vị trí chút nào. Thứ được dựng lại chỉ là các “trạng thái nóng” như va chạm hoặc cây cối, và thời điểm trạng thái này có ý nghĩa chỉ là khi chạy mô phỏng từ trạng thái này sang trạng thái tiếp theo, nên sau đó nó không ảnh hưởng tới việc render
Ảnh hưởng duy nhất có thể xảy ra với người chơi hiện tại là tụt khung hình một lần nếu thế giới vật lý cần dựng lại quá lớn, nhưng trên thực tế mọi bản đồ hiện vẫn còn nhỏ và phù hợp nhất với các trận 3v3
Thứ hai, tôi đã tìm thấy một lỗi lớn trên MacOS. Ở màn hình tạm dừng/cài đặt, thao tác chuột bị lệch rất nhiều nên tôi thậm chí không thể bấm được các tùy chọn ở menu chính
Tôi đã gom ảnh chụp màn hình, log và báo cáo hệ thống ở đây: https://youtu.be/O4OoMdeFAt0
Tôi hầu như luôn chơi trên Windows và Linux nên đã lâu rồi chưa chạy thử trên MacOS, tôi sẽ xem có thể sửa được không
Đặc biệt là các bài về ECS và mạng
Thật vui khi thấy nó đã tiến xa đến vậy
Tôi có đặt liên kết tới các bài blog quan trọng của Glenn Fiedler khi giải thích kiến trúc tất định trong README, nhưng tôi không phải người đó, nên nếu điều đó gây hiểu lầm thì đó không phải chủ ý của tôi
https://www.freeinfantry.com/
https://en.m.wikipedia.org/wiki/Infantry_(video_game)