Serious Engine 1 kaynak kodu analizi
Genel bakış
- Serious Sam çok oyunculu bir oyun olarak tasarlandı.
- Tek oyunculu kampanya da çok oyunculu mod gibi çalışır.
- Serious Engine; tek oyunculu, çok oyunculu, demo kaydı ve oynatmayı destekler.
Kayan nokta determinizmi
- Oyunun senkronizasyonu için kayan nokta işlemlerinin deterministik çalışması önemlidir.
- Yalnızca Windows'ta yayımlandığı için derleyici farklılıklarından kaynaklanan senkronizasyon sorunlarından kaçınılabildi.
- FPU hassasiyet farklarından doğan sorunları çözmek için hassasiyet koruyucusu kullanıldı.
Tick vs kare
- Oyun mantığının tick hızı, render kare hızından ayrıdır.
- Oyun mantığı saniyede 20 tick olarak sabittir.
- Akıcı hareket ve animasyon için interpolation kullanılır.
Ağ üzerinden çok oyunculu
- Serious Engine'in ağ modeli istemci-sunucu yapısındadır.
- Sunucu, istemcilerden gelen mesajları alıp işler ve ilgili bilgileri tüm istemcilere iletir.
- Paket iletimi için UDP protokolü kullanılır.
Paket katmanı
- UDP paketleri sırası bozulmuş şekilde gelebilir ya da hiç ulaşmayabilir.
- Serious Engine, UDP üzerinde kendi protokolünü uygulayarak güvenilirliği ve paket sırasını garanti eder.
- Güvenilir paketler ACK paketleriyle doğrulanır.
Bağlantı yaşam döngüsü
- İstemci ile sunucu arasında sanal bağlantı kurmak için broadcast paketleri kullanılır.
- Sunucu, istemciye benzersiz bir tanımlayıcı atar ve paketleri bunun üzerinden yönlendirir.
Çevrimdışı oynanış
- Tek oyunculu ve demo oynatma, çok oyunculunun özel durumlarıdır.
- Sunucu ve istemci aynı süreç içinde iletişim kurar.
Mesaj katmanı
- CNetworkMessage, akış gibi okunup yazılabilen bir mesaj soyutlamasıdır.
- Mesajlar sıkıştırılabilir ve varsayılan olarak LZRW1 sıkıştırması kullanılır.
- Veri aktarımını en aza indirmek için delta encoding kullanılır.
Mesaj güvenliği
- Mesajlar şifrelenmez.
- Sohbet mesajları düz metin olarak iletilir.
GN⁺ görüşü
- Oyun geliştiricileri için faydalı: Serious Engine'in ağ mimarisi ve senkronizasyon mekanizmaları, çok oyunculu oyun geliştirme için yararlı bir referans olabilir.
- Deterministik çalışmanın önemi: Kayan nokta işlemlerinin deterministik çalışmasını sağlamanın yolları, oyun senkronizasyonu sorunlarını çözmede önemli bir unsurdur.
- Ağ protokolü tasarımı: UDP üzerinde güvenilirlik ve sıra garantisi veren özel bir protokol uygulanması, ağ programlama açısından iyi bir örnektir.
- Güvenlik değerlendirmeleri: Mesaj şifrelemesinin olmaması, modern oyun geliştirmede güvenlik açısından dikkate alınması gereken bir noktadır.
- Teknik zorluklar: 2000'lerin başındaki ağ ortamında hızlı tempolu çok oyunculu bir oyunun nasıl hayata geçirildiğini anlamaya yardımcı olur.
1 yorum
Hacker News görüşleri
net_bLerping=0yazarak interpolasyon olmadan oyun oynanabiliyor.