Geliştirici günlüğü

Geliştirici Günlüğü #27: Tarihî şehirler için ayrı iller

Seçilen tarihî merkezlere, gerekli kontroller geçildiğinde ayrı il veren harita aracını ve paket denetiminde bulunan tekil veri uyuşmazlığını anlatıyoruz.

İçindekiler
Kurgu bir kıyı haritasındaki üç tarihî merkez işareti, komşu bölgelerden ayrı küçük illerin içinde gösteriliyor; seçilen merkezlerin haritada ayrı tutulmasını anlatıyor

Kısaca: MKA Engine’in oyun simülasyonundan ayrı çalışan harita aracı, seçilen yıl için geçerli merkez işaretlerinden karaya oturma uzaklığı ve çakışma kontrollerini geçenlere kendi konumlarını ve tek konumlu illerini verebiliyor. Oyunda il, bir ya da daha çok küçük harita konumunu kapsayan idari bölgedir. Bir merkez işareti, haritada ayrı kalması istenen tarihî noktayı gösteriyor; yıl dışındaki işaretler atlanıyor, uzaklık sınırı aşılır veya merkezler çakışırsa haritayı illere ayırma işlemi duruyor.

Editoryal not: Bu yazı 27 Ekim 2026’daki çalışmayı geriye dönük anlatıyor. Günlük numaraları yayın sırasını izlediğinden #27, içerik tarihi 30 Ekim 2026 olan #26’dan sonra geliyor.

Sorun ne idi?

Bir harita, büyük tarihî idari alanların içinde çok sayıda şehir ve merkez gösterebilir. Bu alanları illere bölerken iki ayrı tarihî merkez aynı ilde birleşirse, oyuncu haritada bunları ayrı yerler olarak göremez. İncelediğimiz harita verisinde Mombasa ile Malindi, Kano ile Rano gibi merkezler aynı tarihî idari alanın içinde kalabiliyordu. Bir merkeze haritada nokta vermek tek başına yetmiyordu; o noktanın kendi ili olması da gerekiyordu.

Bu çalışma, harita konumlarının genel olarak nasıl dağıtıldığını değil, seçilen tarihî merkezlerin her birinin kendi konumunda ve ayrı ilinde kalmasını anlatıyor. Bunu MKA Engine’in oyundan bağımsız harita aracı yapıyor; oyun simülasyonunun bir parçası değil. Hangi merkezlerin önemli olduğu ve hangi yıllarda geçerli sayılacağı oyunun kendi harita verisinden geliyor. Aracın görevi bu seçimi çıktıda korumak.

Nasıl çözdük?

Araç, seçilen yıl için geçerli merkez işaretlerini alıyor; yıl dışındakileri atlıyor. Bir merkeze haritada raptiye koymakla ona ayrı sınır vermek arasındaki fark gibi: nokta yeri gösteriyor, il sınırı onu ayırt ediyor. İşaret denize düşerse, belirlenen uzaklığın içindeki en yakın kara noktasına taşınıyor. Kara bu sınırdan uzaktaysa veya iki merkez aynı konuma düşerse, haritayı illere ayırma işlemi hata bildirerek duruyor; işaret sessizce başka bir yere kaydırılmıyor.

Yıl için geçerli işaretlerden kara uzaklığı ve çakışma kontrollerini geçen her merkez için araç bir harita konumu ayırıyor ve bu konumdan oluşan tek konumlu bir il kuruyor. Bu il komşu parçalarla birleşmiyor; tarihî idari alanın geri kalanı ise haritanın olağan bölme kurallarıyla devam ediyor. Bu kontrollerden biri geçmezse araç hata bildirerek haritayı illere ayırma işlemini durduruyor. Son denetim, tamamlanan her merkezin kendi konumunda ve ilinde kaldığını doğruluyor. Harita paketi, oyunun kullanacağı hazırlanmış harita verilerinin bütünüdür.

Ne gördük?

Mandates of History’nin 1337 harita verisindeki 37 merkez işaretinin 34’ü seçilen yıl için geçerliydi ve kara uzaklığı ile çakışma kontrollerini geçti. Bu 34 merkezin her biri kendi konumunu ve tek konumlu ilini aldı. Bunlardan dördü karaya oturabilmek için yakındaki bir noktaya, 2,1–3,9 kilometre arasında taşındı; üç işaret ise yıl dışı olduğundan atlandı. Bunlar o oyunun 1337 harita paketine ait sonuçlar; bütün oyun haritaları için bir sayı değil.

Aynı paket hazırlanırken otomatik denetim, haritayı oluşturan küçük karelerden birinde beklenmeyen bir değer buldu. Etkilenen harita bölümü aynı girdilerle yeniden hesaplandığında, önceki başarılı 1337 prova paketindeki karşılık gelen bölümle birebir eşleşti; hata yinelenmedi. Bir defalık bellek hatası olası açıklamalardan biri, ancak bunu doğrulayan donanım tanısı yok. Denetim paketin bu tutarsızlıkla kabul edilmesini engelledi; tek olaydan bütün hata türlerinin yakalandığı sonucunu çıkarmıyoruz.

Harita görselini oluşturan küçük karelerden biri turuncu renkle işaretlenip büyüteçle gösteriliyor; aynı bölüm yeniden üretildikten sonra sağda eşleşen temiz çıktı yer alıyor

Neden böyle seçtik?

Yıl için geçerli olup kara uzaklığı ve çakışma kontrollerini geçen bir merkezin haritada ayrı görünmesi, yalnızca işaretin doğru yere konmasına bağlı değil; çevresindeki alanlar illere ayrılırken de korunması gerekiyor. Merkeze kendi küçük ilini vermek, harita ölçeklenirken şehirlerin başka bir merkezin altında kaybolmasını önlüyor. Çıktıyı yeniden denetlemek de isteğin harita paketine gerçekten yansıyıp yansımadığını gösteriyor.

Bedeli ne?

Bu yaklaşım, kontrolleri geçen merkezler için tek harita konumundan oluşan küçük iller kuruyor. Yıl dışı işaretler atlanıyor; kara uzaklığı sınırı aşılır ya da merkezler çakışırsa haritayı illere ayırma işlemi duruyor. Bu sonuç haritanın tüm tarihî ayrıntılarının doğru olduğunu kanıtlamıyor.

Sık sorulanlar

Her tarihî merkez kendi ilini alıyor mu?

Yalnızca oyun verisinde seçilen ve yıl, kara uzaklığı ile çakışma kontrollerini geçen merkezler tamamlanıyor; yıl dışındakiler atlanıyor, diğer kontroller geçmezse haritayı illere ayırma işlemi duruyor. 1337 harita paketinde 37 işaretin 34’ü kendi konumunda ve kendi ilinde kaldı.

Bir merkez işareti denize düşerse ya da iki merkez çakışırsa ne olur?

Denizdeki işaret, belirlenmiş uzaklığın içindeki en yakın kara noktasına taşınır. Uygun kara noktası bulunamazsa veya iki merkez aynı konuma düşerse haritayı illere ayırma işlemi hata vererek durur.

Bu sonuç haritanın tarihî doğruluğunu kanıtlar mı?

Hayır. Bu çalışma seçilen merkezlerin harita çıktısında korunmasını ve paket denetimini ele alıyor; haritanın tüm tarihî doğruluğunu ölçmüyor.

Tek küçük karedeki veri hatasının nedeni kesin olarak bulundu mu?

Hayır. Bellek hatası yalnızca olası açıklamalardan biri; bunu doğrulayan donanım tanısı yok.

Kaynaklar ve bağlantılar

Kaynaklar ve ilgili belgeler

Bunlar da ilginizi çekebilir