Geliştirici Günlükleri

MKA Engine'i geliştirirken tuttuğumuz günlükler: neyi neden böyle kurduğumuz ve ne ölçtüğümüz.

MKA Engine'i geliştirirken tuttuğumuz günlükler. Her günlükte bir kararı, nedenini ve ölçtüğümüz sonucu yazıyoruz. Motorun kendisi için MKA Engine sayfasına bakın.

Geliştirici Günlükleri

Geliştirici Günlüğü #13: Betik ve mod sınırları

· Ayrı sayfada aç

Bir çalışma tezgâhındaki pirinç düzenek, oyun kurallarının işini sınırlar içinde tutan bir mekanizmayı simgeliyor

Düzeltme (4 Kasım 2026): Bu yazıdaki döngü ve liste taraması sınırları artık geçerli değil. Betik dili 2–3 Kasım 2026'da kaldırıldı; kurallar Rust veri işlevleriyle yazılıyor ve bu sınırlar yeni modelde yer almıyor. Mod işlem ve bellek sınırları ayrı olarak geçerlidir. Aşağıdaki bölümler, içerik tarihi 19 Ekim 2026 olan özgün metni olduğu gibi korur.

Kısaca: Betikler, strateji oyunlarının kurallarını ve içerik davranışlarını tarif eder. MKA Engine, bu kuralların döngülerde ve uzun liste taramalarında üretebileceği işi ayrı ayrı sınırlar. Sınırı geçen süreyle değil yapılan iş miktarıyla belirlemek, farklı hızlardaki bilgisayarlarda ortak ve öngörülebilir bir durma noktası sağlar.

Bir kural birçok ülkeye ya da bölgeye uygulanabilir; bazen de bir koşul sürdükçe aynı işlem yinelenir. Birkaç satırdan oluşan bir kural bile geniş bir liste veya iç içe tekrarlar altında çok sayıda işe dönüşebilir. Buradaki amaç geniş kuralları yasaklamak değil, tek bir çalıştırmanın ne kadar iş üretebileceğini öngörülebilir tutmaktır.

Sorun ne idi?

Döngü, bir koşul doğru kaldığı sürece aynı işi tekrarlar. Kuralın kendisi koşulu değiştirmiyorsa bu tekrar uzun süre devam edebilir. Liste taraması ise bir koleksiyonun üyelerini sırayla inceler; her üye için koşul denetlemek ya da bir değişiklik yapmak ek iş demektir. Taramanın içine başka bir tarama eklendiğinde, incelenecek üye sayısı her aşamada yeniden çoğalabilir.

Bu yüzden kuralın uzunluğu tek başına gereken işi göstermez. Kısa yazılmış bir döngü çok sayıda kez çalışabilir; kısa bir liste kuralı da çok büyük bir ülke veya bölge kümesinin her üyesini inceleyebilir. Sınır olmadan bu tür işler oyun adımını uzatabilir ve diğer oyuncuların beklemesine yol açabilir. Döngü tekrarlarıyla liste taramalarını ayrı ayrı sınırlamamızın nedeni, işin bu iki biçiminin farklı ölçülmesidir.

Nasıl çözdük?

Döngü sınırı tekrar sayısını, liste sınırı ise tek bir değerlendirmede dolaşılan üye sayısını temel alır. Üye incelenip değişmese de o geçiş yapılan işin parçasıdır. Döngü sınırı aşılırsa o işi yapan etki durur ve hata kaydedilir. Liste taraması kendi sınırını aşarsa o kural değerlendirmesi hata verir; bu, döngü sınırından ayrı bir sonuçtur. Bazı durumlarda liste bütçesi üst katmanda ele alınmazsa oyun adımı durabilir; her durumda devam garantisi veremeyiz.

Sonsuz dönme ihtimali taşıyan dişli zinciri güvenli durma çizgisinde kesiliyor ve nerede durduğu kayda işleniyor

Ne gördük?

Kuralın sırasını somutlaştırmak için bir ülkeye ait bir defalık ödeme olayını düşünelim: ülkenin altını 1’den azsa olay 7 altın eklesin. Önce olayın koşulu sınanır; koşul doğruysa anlık etki uygulanır. Etkiler yazıldıkları sırayla ilerlediğinden, sonraki bir etki önceki değişikliği görür. Olayın yazdığı yeni değer aynı oyun adımının sonraki sistemlerinde de görülebilir. Bu örnekteki 1 ve 7, yalnızca olayın koşul ve etki değerleridir; motor sınırı değildir.

Liste sınırının neden önemli olduğu, iç içe taramalarda daha belirginleşir. Bir kural ilk geçişte bazı ülkelerde değişiklik yapıp sonraki geçişte iş sınırına ulaşabilir. Sınır hatası daha önce uygulanmış değişiklikleri kendiliğinden geri almaz; bu nedenle kuralın bir kısmı tamamlanmışken geri kalanı çalışmayabilir. Burada önemli ayrım, kuralın niyeti ile bir değerlendirmede gerçekten tamamlayabildiği iş miktarıdır.

Neden böyle seçtik?

Sınırı geçen saniyeye göre değil yapılan işe göre belirliyoruz. Aynı saniye hızlı bir bilgisayarda daha çok, yoğun çalışan veya daha yavaş bir bilgisayarda daha az işlem anlamına gelebilir. Oyun adımını duvar saatine bağlamak bu nedenle bilgisayardan bilgisayara farklı kesme noktaları doğururdu.

İş miktarı, makine hızından bağımsız bir simülasyon ölçüsüdür: aynı başlangıç durumu ve aynı kural, aynı iş miktarında sınırına dayanır. Böylece bilgisayarların işlem hızı değişse de kesme noktası değişmez. Bu yaklaşım aynı oyun girdilerinin farklı makinelerde tutarlı biçimde değerlendirilmesini destekler; bilgisayarların aynı sürede bitireceğini iddia etmez.

Hızları farklı iki bilgisayar aynı sayıda oyun taşını işleyip aynı noktada duruyor; kum saatleri farklı hızda akıyor

Bedeli ne?

Geniş ve geçerli bir kural da iş sınırına ulaşabilir; sınır kurala tamamlanacağı garantisini vermez. İçerik yazarı, büyük bir taramayı bölge veya koşul gruplarına ayırabilir ya da her geçişte incelenecek üyeleri daraltabilir. Böylece tek bir çalıştırmaya yüklenen iş küçülür; ancak grupların kapsamını ve her geçişin tamamlanabilirliğini yine içerik yazarı planlamalıdır.

Sırada ne var?

Bu günlükte kuralların ne kadar iş yapabileceğini ele aldık. Sırada, strateji haritasının hangi parçalardan oluştuğunu ve bu parçaların birbirine nasıl bağlandığını anlatacağız.

Sık sorulanlar

Bu günlük bir hız artışı gösteriyor mu?

Hayır. Burada bir performans ölçümü yapmadık; anlattığımız değişiklik, bir kuralın üretebileceği iş miktarını sınırlıyor.

Modlar da aynı sınırları mı kullanıyor?

Modların işlem ve bellek için ayrı sınırları vardır; bunlar burada anlatılan betik döngüsü ve liste sınırlarından ayrıdır. Modların çalışma biçimi için Geliştirici Günlüğü #8 yazısına bakabilirsiniz.

Sınır, yazdığım oyun kuralını değiştirir mi?

Hayır. Kuralın amacı, koşulu ve etkisi içerik yazarının tanımladığı gibi kalır; sınır tek bir değerlendirmede yapılabilecek işi belirler. Geniş bir kural tasarlarken kapsama ve geçişlerin büyüklüğüne dikkat etmek gerekir.

Kaynaklar

  • MKA Engine betik dili ve belirlenimlilik kılavuzları.
  • MKA Engine mod başvuru belgesi.

İlgili okumalar: Geliştirici Günlüğü #7 ve Geliştirici Günlüğü #8. Daha fazlası için MKA Engine, geliştirici günlükleri ve iletişim sayfalarına bakabilirsiniz.