Phân tích mã nguồn Serious Engine 1
Tổng quan
- Serious Sam được thiết kế như một trò chơi nhiều người chơi.
- Chiến dịch chơi đơn cũng hoạt động như chế độ nhiều người chơi.
- Serious Engine hỗ trợ chơi đơn, nhiều người chơi, ghi demo và phát lại.
Tính quyết định của số dấu phẩy động
- Để đồng bộ hóa trò chơi, việc các phép toán dấu phẩy động hoạt động một cách quyết định là rất quan trọng.
- Vì chỉ phát hành trên Windows, nên có thể tránh được các vấn đề đồng bộ do khác biệt trình biên dịch.
- Để giải quyết các vấn đề do khác biệt độ chính xác của FPU, họ sử dụng precision guard.
Tick vs frame
- Tick rate của logic game được tách biệt khỏi frame rate kết xuất.
- Logic game được cố định ở 20 tick mỗi giây.
- Sử dụng interpolation để có chuyển động và hoạt ảnh mượt mà.
Nhiều người chơi qua mạng
- Mô hình mạng của Serious Engine là client-server.
- Server nhận và xử lý các thông điệp từ client, rồi truyền thông tin liên quan đến tất cả client.
- Sử dụng giao thức UDP để truyền packet.
Lớp packet
- Packet UDP có thể đến sai thứ tự hoặc không đến nơi.
- Serious Engine triển khai giao thức riêng trên UDP để bảo đảm độ tin cậy và thứ tự packet.
- Các packet đáng tin cậy được xác nhận thông qua packet ACK.
Vòng đời kết nối
- Sử dụng packet broadcast để thiết lập kết nối ảo giữa client và server.
- Server gán một định danh duy nhất cho client và định tuyến packet dựa trên đó.
Chơi ngoại tuyến
- Chơi đơn và phát lại demo là những trường hợp đặc biệt của nhiều người chơi.
- Server và client giao tiếp trong cùng một tiến trình.
Lớp thông điệp
- CNetworkMessage là một lớp trừu tượng thông điệp có thể đọc và ghi như stream.
- Thông điệp có thể được nén, mặc định dùng nén LZRW1.
- Sử dụng delta encoding để giảm thiểu lượng dữ liệu truyền đi.
Bảo mật thông điệp
- Thông điệp không được mã hóa.
- Tin nhắn chat được truyền dưới dạng văn bản thuần.
Ý kiến của GN⁺
- Hữu ích cho nhà phát triển game: Cấu trúc mạng và cơ chế đồng bộ của Serious Engine có thể là tài liệu tham khảo hữu ích cho phát triển game nhiều người chơi.
- Tầm quan trọng của hành vi quyết định: Cách bảo đảm tính quyết định của phép toán dấu phẩy động là yếu tố quan trọng để giải quyết các vấn đề đồng bộ trong game.
- Thiết kế giao thức mạng: Việc triển khai một giao thức riêng trên UDP để bảo đảm độ tin cậy và thứ tự là một ví dụ tốt về lập trình mạng.
- Cân nhắc về bảo mật: Việc không có mã hóa thông điệp là một điểm cần cân nhắc về mặt bảo mật trong phát triển game hiện đại.
- Thách thức kỹ thuật: Bài viết giúp hiểu rõ hơn những thách thức kỹ thuật khi triển khai game nhiều người chơi tốc độ cao trong môi trường mạng đầu những năm 2000.
1 bình luận
Ý kiến trên Hacker News
net_bLerping=0trong console.