Analisis kode sumber Serious Engine 1
Gambaran umum
- Serious Sam dirancang sebagai game multipemain.
- Kampanye pemain tunggal juga berjalan seperti mode multipemain.
- Serious Engine mendukung pemain tunggal, multipemain, perekaman demo, dan pemutaran ulang.
Determinisme floating point
- Untuk sinkronisasi game, perilaku deterministik dari operasi floating point sangat penting.
- Karena hanya dirilis di Windows, masalah sinkronisasi akibat perbedaan kompiler dapat dihindari.
- Precision guard digunakan untuk mengatasi masalah yang disebabkan oleh perbedaan presisi FPU.
Tick vs frame
- Tick rate logika game dipisahkan dari frame rate rendering.
- Logika game ditetapkan tetap pada 20 tick per detik.
- Interpolation digunakan untuk gerakan dan animasi yang halus.
Multipemain jaringan
- Model jaringan Serious Engine menggunakan arsitektur klien-server.
- Server menerima dan memproses pesan dari klien, lalu meneruskan informasi terkait ke semua klien.
- Protokol UDP digunakan untuk mengirim paket.
Lapisan paket
- Paket UDP bisa datang tidak berurutan atau tidak sampai sama sekali.
- Serious Engine mengimplementasikan protokolnya sendiri di atas UDP untuk menjamin keandalan dan urutan paket.
- Paket yang andal dikonfirmasi melalui paket ACK.
Siklus hidup koneksi
- Paket broadcast digunakan untuk membangun koneksi virtual antara klien dan server.
- Server memberikan pengenal unik kepada klien dan merutekan paket berdasarkan pengenal tersebut.
Permainan offline
- Mode pemain tunggal dan pemutaran demo adalah kasus khusus dari multipemain.
- Server dan klien berkomunikasi di dalam proses yang sama.
Lapisan pesan
- CNetworkMessage adalah abstraksi pesan yang dapat dibaca dan ditulis seperti stream.
- Pesan dapat dikompresi, dan secara default menggunakan kompresi LZRW1.
- Delta encoding digunakan untuk meminimalkan jumlah data yang ditransmisikan.
Keamanan pesan
- Pesan tidak dienkripsi.
- Pesan chat dikirim dalam bentuk plaintext.
Opini GN⁺
- Bermanfaat bagi pengembang game: Struktur jaringan dan mekanisme sinkronisasi Serious Engine dapat menjadi referensi yang berguna untuk pengembangan game multipemain.
- Pentingnya perilaku deterministik: Cara menjamin perilaku deterministik pada operasi floating point merupakan elemen penting dalam menyelesaikan masalah sinkronisasi game.
- Desain protokol jaringan: Implementasi protokol sendiri di atas UDP yang menjamin keandalan dan urutan merupakan contoh yang baik dalam pemrograman jaringan.
- Pertimbangan keamanan: Tidak adanya enkripsi pesan adalah hal yang perlu dipertimbangkan dari sisi keamanan dalam pengembangan game modern.
- Tantangan teknis: Ini membantu memahami tantangan teknis dalam mewujudkan game multipemain berkecepatan tinggi di lingkungan jaringan awal 2000-an.
1 komentar
Komentar Hacker News
net_bLerping=0untuk memainkan game tanpa interpolasi.