Europa Universalis IV’te Multiplayer Desteği ve Hotjoin

Europa Universalis IV geliştirici günlüklerinde bu hafta multiplayerdan, senkronizasyon hatalarından ve hotjoin mekaniğinden bahsediliyor.

Herkese merhabalar. Bir başka geliştirici günlüğü ile karşınızdayız, geçtiğimiz hafta günlüğün sonunda bahsettiğimiz üzere uzun süredir kapalı perdeler ardında bir şeyler üzerine çalışıyoruz. Özetlemek gerekirse oyunun multiplayer sistemine odaklanıp hotjoin problemleri ve farklı platformlar arası oynanabilirlik üzerine çalışmalarda bulunduk. Bu haftanın günlüğünde mikrofonu bu çalışmanın mimarı olan Alexivan’a bırakıyorum.

———————-

Merhabalar, ilk olarak PDX oyunlarında multiplayer desteğini sağlamanın pek de kolay olmadığını söylemek isterim, ara ara biz de geliştiriciler olarak aramızda oyundan komple multiplayer özelliğini kaldırmanın daha kolay olabileceği hususunda şakalaşıyoruz, ancak oyuncuların oyunun multiplayer kısmında müthiş deneyimler edinmesi bize multiplayer üzerine odaklanıp sorunları gidermede bir ilham kaynağı haline geldi, aynı zamanda bizler de yaptığımız geliştirici multiplayerlarından büyük zevk alıyoruz.

Europa Universalis IV, mevcut oyunlarımız arasında multiplayer ile alakalı en yüksek karmaşıklığa sahip oyun, bunun sebebi şunlar:

  • Platform
  • Eklentiler
  • Hotjoin
  • Başlangıç Tarihleri/Kayıt Dosyaları
  • Custom Ülkeler
  • Dünya Randomize Edebilmeler
  • Random New World Özelliği

Multiplayer üzerindeki çalışmalarımız 1444’te bir oyun kurup kayıt dosyalarıyla sorunsuz bir şekilde devam ettirebilme üzerine oldu. Geliştirme aşamasında farklı ayarlar altındaki oyunların da, yukarıda gördüğünüz maddelerin sıralanış şeklini öncelik kabul ederek bazı ilerlemeler katettik, bu ilerlemeler esnasında tecrübe ettiğimiz hususlardan ve genel olarak çalışmalarımızdan sizlere bahsetmek isterim.

1.23 Persia yaması için multiplayer üzerinde çalışırken esas amacımız hotjoini çalışır hale getirmekti. Hotjoin sistemi oyunun mevcut yapısını oyuna yeni bağlanan oyuncuya kopyalamakla mükellef bir sistem ve düşündüğünüzde ne kadar zor olabilir ki dedirtiyor, ancak zor. Çünkü bunun sağlanması için oyunun 2 farklı kısmının senkronize edilmesi gerekiyor, 1. kısım gamestate üzerinde yeralan verileri oluşturuyorken 2. kısım gamestate üzerinde bulunmayan verilerden oluşuyor, bunlara kalıcı veriler ve cachelenmiş veriler olarak isimlendirebileceğiz.

Kalıcı verilerde ilk olarak kayıt dosyalarında kayıt dosyalarının yazım esnasında kaydedilmediğini, okurken ve yazarken kaydedildiğini farkettik. Bu durum eğer herkes eşzamanlı olarak bu dosyanın üzerinde aynı değişiklikleri uyguluyorsa sorun değil, ancak hotjoin üzerinden bunu sağladığınız zaman hotjoinle katılanlar daha farklı değişiklikler sundukları için oyunun senkronizasyon hatası vermesiyle sonuçlanıyor.

Bunu çözebilmek adına oyuna check_save gibi çok sayıda konsol komutu ekledik, ilk olarak bir kayıt dosyasını yüklediğinizde veya hotjoinle biri oyuna katıldığında save dosyalarını eşitleyen bir tekrardan hesaplama adımı ekledik, bu kısımdaki birçok veri kalıcı veri olduğu için sıkıntı çıkmadı, bazı hususlar ise cachelenmiş veriden alınıyordu bu da yine farklı hesaplamalara sebep oluyordu, bunu da tüm cachelenmiş verileri hesaplamadan hemen önce temizlemek üzere farklı bir yere alarak çözdük.

Kalıcı veriyle ilgili bir diğer sıkıntı da yükleme sırası ile alakalıydı, burada gerçekleşebilen 2 sorun var. Birincisi yüklenen öğeler kimi zaman kendilerini bir listeye ekliyor, bu durum da listenin yüklenen öğelerin sırasına göre oluşturulmasını sağlıyor, bu da farklı sırayla yüklenen farklı öğelerin senkronizasyon sorunu yaşatmasına sebep oluyor. Bu listeleri belirledikten sonra oyunda yüklenen bu öğelere bir sıra vererek durumu çözdük. İkinci husus ise kayıt dosyasından okunan öğelerin yine kayıt dosyasında bulunan – henüz okunmamış – öğelere referans vermesiydi. Burada da aynı çözümü uyguladık.

check_save kodu ile hotjoin sonrasında kayıt dosyalarında bir fark olmadığını tescilledikten sonra, aramızda multiplayerlar yaparak başka ne gibi sorunlar var diye aradık, bu hususta bize en çok yardımcı olan husus randomlog oldu, bu randomlog üzerinde senkronizasyondan çıkmış işlemleri görebiliyoruz. Senkronizasyon sorunu yaşadığımızda randomlog verisine bakıp tam olarak host neyi nasıl hesapladı, bu esnada senkronizasyon sorunu yaşayan bilgisayar neyi nasıl hesapladı görebiliyoruz ve bu her ne kadar sorunun kaynağını gösterse de neden bu şekilde bir sorun yaşandığını açıkça ifade edemiyor, bunu da çözmek için fazladan loglar ekleyip bu farklılığa yol açan asıl sebebi incelememiz gerekiyor.

Kalite kontrol ekibinin senkronizasyon avlamaya ayırabileceği zaman oldukça kısıtlı olduğu için, ne zaman bir senkronizasyon sorunuyla denk geliriz bilemediğimizden otomatik testler yapmaya başladık. Bunun için standalone sunucu buildinde değişiklikler yapıp kullandığımız scripti yenileyerek oyunun senkronizasyon hatası avlamasını sağlamaya çalıştık. Haftasonları ve geceleri bu şekilde testler yaparken, haftaiçi ve sabahları bu hataları giderdik. Bu otomatik senkronizasyon hatası tespitlerinde aynı zamanda bilgisayarların bir hatayla karşılaştıklarında bunun raporunu tuttuktan sonra baştan oyun açarak yeni bir teste başlamasını sağladık, bu da zamandan çok daha iyi faydalanmamızı sağladı.

Artık çok sayıda senkronizasyon hatası elde edebildiğimizi gördüğümüzde Stellaris’teki OOS dump sistemini EU4’e kopyaladık, bu sistem senkronizasyon sorunuyla ilgili önemli bilgileri farklı bir klasörde topluyor.

Tüm bu çalışma üzerinde yanılmıyorsam geçtiğimiz 7 ay gibi uzun bir süre çalıştık, bu çalışma esnasında ekip ciddi bir efor sarfetti, çok sayıda unsuru giderdik, karşılaştığımız sorunlarla ilgili çok sayıda “özel çözümler” üretmemiz gerekti, ilk başta beklediğimizden çok daha zorlu bir çalışma oldu, sizlere oyunu “0 hata” bir şekilde sunmak isterdik, ancak henüz oraya ulaşamadık.

Sizlerden ricamız eğer oyunlarınızda senkronizasyon hatası alırsanız bize bunu bildirmeniz, bildirirken verebildiğiniz kadar çok bilgi vererek buna neyin sebep olabileceğini bize anlatmanız, OOS dump dosyasını ve bu sorunun gerçekleştiği kayıt dosyasını bize ulaştırmanız. Eğer bu durum 1 kereliğine değil her oyuna girdiğinizde sürekli olarak yaşanan bir şeyse, başlangıç seçenekleri olarak -randomlog veya -hardoos yazarsanız daha detaylı bir log elde edinebiliriz. Aynı zamanda sizlere bu süreci kolaylaştıracak bir araç yapmaya çalışacağım.

Kısaca; multiplayer üzerinde çok detaylı bir çalışma yapıldı ve bu çalışmaya devam etmeyi planlıyoruz. Platformlar arası oynanış, dlcler arası oynanış ve hotjoinde şu an sorun yaşamıyor olmalısınız. Yaşadığınız sorunları bize rapor ederek bunların daha kolay ortadan kaldırılmalarını sağlayabilirsiniz.

——————–

Teşekkürler Alexivan. Haftaya sizlere Cradle of Civilization ile birlikte oyuna eklenen bazı mekaniklerden bahsedeceğiz, eklentinin çıkmasına sadece haftalar kalmışken 1.23 ve eklentiyle birlikte oyundaki sizlere henüz bahsetmediğimiz tüm değişiklikleri toparlayıp size sunmak istiyoruz.

Şimdi bakınca resim barındırmayan günlük gerçekten hoş durmuyor, bu durumu değiştirmek için şunu ekleyebiliriz:
eu4_mill_360-gif.310884

Yazar: Ali Alper Duman

Yayın Direktörü @ Strategyturk

Yorumla

STRATEGYTURK

Strategyturk'te strateji oyunlarından haberleri, yama notlarını, geliştirici günlüklerini ve daha birçok içeriği Türk strateji oyuncularına Türkçe bir biçimde sunuyoruz. Aynı zamanda yeni çıkan strateji oyunlarının ve eklentilerinin incelemelerini yapıyor, bu oyunlara dair sürekli olarak içerik oluşturuyoruz.

Sosyal medya sayfalarımızı takip ederek strateji oyunlarındaki gelişmelerden haberdar olabilirsiniz.

Son Yorumlar

  • Furkan: Yüzdelik olarak ne kadar yol aldınız acaba?
  • Yılmaz: 1.3.2 yaması ne zaman çıkar

KATEGORİLER

ARŞİV