Geliştirici günlüğü

Geliştirici Günlüğü #23: Oyun kurulumu ve mod hataları

Kurulum ilerlemesini, bağımsız oyun durumlarını ve izlenen adım hatalarının nasıl döndüğünü anlatıyoruz; yükleme süresi ölçülmedi.

İçindekiler
Harita masası çalışmayı sürdürürken ayrı tezgahta kurulan oyun dünyası ve görünür kılınan mod hatası

Kısaca: MKA Engine, yeni oyun hazırlığını veya kayıtlı oyunu açma işini arka planda yürütürken oyuncu arayüzünün yanıt vermesini sağlayabilir ve hangi hazırlık bölümünde olduğunu bildirir. Aynı hazırlanmış veriden başlayan oyunlar birbirinden bağımsız durum taşır. Mod (oyuna yeni kural veya içerik ekleyen paket) bir oyun adımı (simülasyonun bir ilerleme adımı) sırasında hata verirse, bu belirli yolda adımın olağan sonucu hata bilgisiyle birlikte döner; bu, her hata türü için genel devam garantisi değildir. Yükleme süresi ölçülmedi.

Sorun ne idi?

Yeni bir oyun başlatmak ya da kayıtlı oyunu açmak; modları, oyun içeriğini, haritayı, kuralları ve başlangıç dünyasını hazırlamayı gerektirir. Bu hazırlık oyuncu arayüzünü uzun süre yanıtsız bırakırsa oyuncu hiçbir şey olmadığını sanabilir. Kurulum sürerken arayüzün yanıt vermesi ve yüklemenin hangi aşamada olduğunu gösterebilmesi gerekir.

Oyun başladıktan sonra da mod kodu bazı oyun adımlarında çalışır. Bir mod hata verdiğinde, yalnızca “işlem başarısız” demek geliştiriciye hangi modun ve hangi işin sorun çıkardığını anlatmaz. Üstelik mod hatasının sonucu, hatanın nerede çıktığına göre değişebilir. Kurulumun ilerlemesiyle oyun adımındaki hata bu yüzden ayrı sorunlardır.

Nasıl çözdük?

Oyun hazırlığını arka planda yürüttük

Motor, yeni oyunu hazırlama ve kayıtlı oyunu açma işini arka planda yürütebilir. Oyuncu arayüzü hazırlık sürerken kendi düğmelerini ve görüntüsünü güncellemeyi sürdürebilir. Motor, modların hazırlanması, oyun içeriğinin okunması, harita ve kuralların hazırlanması, dünyanın kurulması ve oyunun hazır olması gibi anlamlı adımları sırayla bildirir. Bunlar yüzde göstergesi değildir; hangi hazırlık işinin sürdüğünü anlatır.

Yükleme ekranının görünüşünü, yazısını ve ilerleme çubuğunu oyuncu arayüzü seçer. Motor yalnızca bu arayüzün okuyabileceği ilerleme bilgisini sağlar. Bir hazırlık adımı başarısız olursa ilerleme o adımda kalır; bu bilgi tek başına yüklemenin ne kadar süreceğini söylemez.

Arayüz kendi işini sürdürürken ayrı çalışma alanında oyun haritası ve içerik adım adım hazırlanıyor

Aynı hazırlıktan ayrı oyunlar başlattık

Hazırlanmış oyun paketi harita ve mod kaynaklarını tekrar kullanabilir. Ancak bu ortak hazırlık tek bir dünyayı paylaşmak anlamına gelmez: aynı paketten başlatılan her oyun kendi nüfus, ülke ve olay durumuyla ilerler. Bir oyunun gününü ilerletmek diğerinin hamlelerini değiştirmez. Bunu aynı kurallar kitabıyla iki ayrı oyun tahtası kurmaya benzetebiliriz.

Sınama örneğinde aynı paketten art arda başlatılan oyunların özetleri yeni yüklenmiş paketten başlatılan oyunla eşleşti. İki oyun sırayla ilerletildiğinde de her birinin sonucu tek başına yürütüldüğündeki gibi kaldı. Bu, hazırlık verisini yeniden kullanmakla çalışan oyunun durumunu paylaşmanın farklı şeyler olduğunu gösteriyor.

Ortak kural kitabı ve harita iki ayrı oyun tahtasına açılıyor; birindeki hamle ötekini değiştirmiyor

İzlenen oyun adımındaki mod hatasını sonuçla birlikte döndürdük

Belirli bir oyun adımında izlenen bir mod hata verirse, motor o adımın normal sonucunu ve yeni hata bilgisini birlikte döndürebilir. Bu sınanmış yolda adım zaten uygulanmıştır; hata veren mod durdurulur ve sonraki adımlar o mod olmadan yürütülebilir. Hata raporu modun adını, sorunun hangi iş sırasında çıktığını ve ne tür hata olduğunu gösterir. Motor daha önce uygulanmış adımı geri almaz.

Bu, her hata yolunun aynı sonucu verdiği anlamına gelmez. Örneğin yalnızca bilgi isteyen bir komuttaki denetim hatası komutu reddedebilir ama modu durdurmayabilir. Bu nedenle burada anlattığımız devam davranışı yalnızca izlenen oyun adımı sırasında hata oluşan yol için geçerlidir; her yükleme, komut veya mod arızasında oyunun süreceğine dair güvence değildir.

Uygulanmış oyun adımının yanında mod hatası raporu ve durdurulmuş mod simgesi

Ne gördük?

Normal biçimde hazırlanan oyunla arka planda hazırlanan oyun, karşılaştırılan örneklerde aynı sonucu verdi. Hazırlığın bölümleri sırayla okunabildi. Aynı paketten başlatılan iki oyunun birbiriyle sırayla ilerlemesi de her birinin tek başına ilerlemesinden farklı bir sonuç üretmedi.

Mod hatası örneğinde ise adımın olağan raporu kaybolmadı; yeni hata bilgisi onunla birlikte geldi. Hata bir kez bildirildi ve duran mod sonraki adımlarda yeniden aynı hatayı üretmedi. Bu davranış belirli adım-hatası yolu ve izlenen mod için doğrulandı. Yükleme süresi veya bu düzenin ne kadar zaman kazandırdığı ölçülmedi.

Neden böyle seçtik?

Motor, oyun hazırlığı sürerken oyuncu arayüzünün yanıt vermesini sağlar; oyuncuya ne göstereceğine ise arayüz karar verir. Böylece arayüzün motorun her iç hazırlık adımını yeniden tasarlaması gerekmez.

Mod adımı zaten uygulandıysa onu hiç olmamış gibi geri almak oyun dünyasını değiştirebilir. Hata bilgisini yalnız modun içinde tutmaksa onu o adımın sonucunu okuyan tarafa ulaştırmaz. Sınanan adım-hatası yolunda normal sonucu koruyup yeni hatayı onunla birlikte döndürmemizin nedeni budur.

Bedeli ne?

Oyuncu arayüzü ile motorun ilerleme bilgisini güvenle paylaşması gerekir; ayrıca her oyunun ayrı durumu için ayrı bellek kullanılır. Mod hatasının adım sonucuna eklenmesi yalnız izlenen oyun-adımı yolundaki hatayı kapsar. Kurulum ve diğer hata yolları farklı sonuç verebilir; yükleme hızı ya da bellek maliyeti ölçülmedi.

Sırada ne var?

Bir sonraki günlükte, milyonlarca nüfus grubunun her gün ayrıntılı biçimde işlenmesi yerine değişimin gerektiği günü nasıl bulduğumuzu anlatacağız.

Sık sorulanlar

Oyun kurulurken oyuncu arayüzü neyi gösterebilir?

Motor, hazırlığın hangi anlamlı bölümünde olduğunu sırayla bildirir. Yüzde göstergesi veya yükleme ekranı tasarlamak oyuncu arayüzünün işidir.

Aynı hazırlanmış paketten iki oyun başlarsa dünyaları birleşir mi?

Hayır. Ortak hazırlık verisi yeniden kullanılabilir; her oyunun değişen durumu ayrıdır ve sırayla oynatıldıklarında da birbirlerinin sonucunu değiştirmez.

Mod hata verince oyun adımı geri alınıyor mu?

Anlatılan izlenen oyun-adımı yolunda hayır: adım uygulanmış olarak kalır ve normal sonuç hata bilgisiyle birlikte döner. Hata veren mod durdurulur; bu, her hata türü için genel bir devam garantisi değildir.

Bu çalışma yükleme süresini kısalttı mı?

Bunu ölçmedik. Doğruladığımız, kurulumun arka planda yürütülebilmesi ve ilerlemenin okunabilmesidir.

Mod sınırlarının nedenlerini Geliştirici Günlüğü #13’te, modların motora nasıl bağlandığını Geliştirici Günlüğü #8’de anlatmıştık. Aynı oyun sonucunun çok oyunculu oyunlardaki önemini Geliştirici Günlüğü #2’de okuyabilir, MKA Engine ve geliştirici günlükleri sayfalarını inceleyebilir veya iletişim sayfasından bize ulaşabilirsiniz.

Kaynaklar ve ilgili belgeler

Bunlar da ilginizi çekebilir