1 puan yazan GN⁺ 2024-06-14 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-06-14
Hacker News görüşleri
  • Serious Sam'in ağ kodunu uygulayan geliştiriciydi. QuakeWorld'ün tahmin sisteminden ilham alarak basit bir MVP kodladı.
  • Serious Sam LAN partilerinde her zaman iyi çalışıyordu. Diğer oyunlar sorun yaşarken bile kararlı şekilde çalışıyordu.
  • GB Color portundaki Vigilante 8 çok oyunculu modunu deterministik oynanışla uyguladı. GBC link kablosunu kullanarak veriyi her seferinde 1 bayt gönderiyordu.
  • Croteam son derece yetenekli bir oyun geliştirme ekibi. Talos Principle serisini ve özel bir Vulkan oyun motoru geliştirdiler.
  • Bunun Age of Empires'taki "1500 archers on a 28.8" gibi bir fikir olup olmadığı soruluyor.
  • Teknik kaynaklar arttıkça yazılımın daha yavaş ve verimsiz hale gelmesi olgusuna dikkat çekiliyor. Buna "Benjamin Button yazılım tasarımı etkisi" deniyor.
  • Factorio'nun mimarisi yalnızca giriş olaylarını gönderiyor ve senkronize bir simülasyon çekirdeğine dayanıyor.
  • Serious Sam'i PC Gamer demosunda oynadığı zamanı hatırlıyor. Artık klasik bir oyun olarak görülüyor.
  • Serious Engine'in interpolation özelliği açıklanıyor. Konsolda net_bLerping=0 yazarak interpolasyon olmadan oyun oynanabiliyor.