Imperator: Rome geliştirici günlüklerinde bu hafta birim görevleri mekaniğinden ve Balkan coğrafyasından bahsediliyor.
https://forum.paradoxplaza.com/forum/ind...l.1165834/ :Imperator: Rome için kaleme alınmış bir başka geliştirici günlüğüne hoş geldiniz.
Bu günlükte sizlere birim görevlerinden bahsedecek, Balkanlar ve Daçya bölgesinin oyunun başlangıcındaki durumuna dair bilgiler paylaşacağız.
Birim Görevleri
Yayınlarımızda farketmiş olabileceğiniz üzere birim otomasyonu dilemeniz takdirde oyununuzun çok önemli bir parçası haline gelebilir. Birim görevleri ile istediğiniz ordunun kontrolünü yapay zekaya verebilirsiniz, bunu yapmanız durumunda yapay zeka devreye girerek tıpkı yapay zeka ülkelerde olduğu gibi ordularınızı belirlediğiniz görev çerçevesinde yönetir.
Bu ana ordularınızda kullanmak isteyeceğiniz bir mekanik değil, ancak ikincil ordularınızda veya geride bıraktığınız savunma ordularında değerlendirebilirsiniz. Görev sahibi birimler şart olmadıkça ordu bölme, birleştirme, sıkıştırma gibi özellikleri kullanmıyorlar.
Birim görevleri ile amaçladığımız unsurlardan birisi birimlerin davranış kodlarını basitleştirip modlanabilir bir hale getirmek ve oyunculara NPC davranışında daha yüksek bir varyasyon sağlamak.
Her ne kadar tüm ordularınızı yapay zeka kontrolüne vermek istemeseniz de, çeşitli durumlarda ordunuzun bir kısmını yapay zeka kontrolüne bırakabilir ve asıl ordunuza odaklanabilirsiniz.
Verilebilir Görevler:
- Çıkartma: EU4'teki otomatik taşıma mekaniğine benziyor, çıkartma görevine sahip donanmalara sahipseniz kara yoluyla ulaşılamayan bir şehre ordunuzu taşımaya çalışmanız durumunda bu görevi verdiğiniz gemi limandan ayrılıp ordunuzu taşıyacak.
- Bağımsız Operasyon: Bu görevi verdiğiniz ordu herhangi bir önceliğe sahip olmadan yapay zeka kontrolüne girer.
- Sınır Savunması: Bu görevi verdiğiniz ordu topraklarınızdan dışarı çıkmaz ve savunma yapmaya çalışır.
- Keşif: Bu görevi verdiğiniz ordu sınırınızda devriye gezerek düşman hareketlerini rapor eder.
- İsyancılarla Mücadele: Bu görevi verdiğiniz ordu topraklarınızdaki isyancı ordularını ortadan kaldırmaya çalışır.
- Yedek: Bu görevi verdiğiniz ordu sınırlarınızda durmak şartıyla düşmanla temasa girmekten kaçınır.
- Filo Avlama: Düşman filolarını arayıp yoketmeye çalışır.
Özel Birim Görevleri
Oyunda ordularınıza veremediğiniz, ancak yapay zeka ordularda rastlayabileceğiniz görevler var. Sadakatsiz Generaller spesifik bir ordunun kendi istedikleri gibi hareket etmesine sebep olacak, böylelikle bu orduları ölüme gönderemeyeceksiniz. Paralı askerler paralarını ödememeniz durumunda sizden emir almayı kesip kendi istedikleri şekilde hareket edecekler.
Bunların yanı sıra Köle İsyanları için de ayrı bir sistemimiz var, köle isyancıları en yakın zengin şehri arayıp orayı yağmalamak ve köleleri serbest bırakmak isteyecekler.
Birim Görevleri sisteminin bir diğer güzel yanı modlanabilirliği. Bu sistemi oluşturan Chaungin sizlere modlamaya dair bilgiler sunacak, ardından geri dönüp haritanın son parçasından bahsedeceğim.
Modlama
Kod itibariyle isyancılar, sadakatsiz generaller ve hedef birimle birleşmeye çalışan birimler de görev sahibi olarak yer alıyorlar ve belli bir derece modlanabilir durumdalar.
Bazı görevler oyunun geliştirilişinin başlangıcında hardcode bir biçimde kodlanmış durumda, ancak dosyalarda yer alıyorlar dolayısıyla modcular çeşitli değişikliklerde bulunabilir. Gelecekte korsanlık veya barbarlar gibi görev bazlı olmayan çeşitli davranış biçimlerini ve EU4'teki vassal davranışları sistemlerini de görev sistemine taşıyabiliriz. Hatta dilerseniz kendi vassal davranışlarınızı modlayarak oluşturabilirsiniz.
Görev kodlaması esnasında kodun çalışma şekli görevlerin sadece birinin aktif olabilmesi üzerine. Aktif görevler arasında değişim ancak ve ancak şu yollarla gerçekleşebilir:
- Oyuncu arayüz üzerinden yeni bir görev seçerse, (interface_allow koduyla)
- Aktif görevin birim için öncelik değeri 0'ın altına düşerse, (allow koduyla)
- Kod belli şeylerin gerçekleşmesi durumunda değişmeye ayarlanmışsa.
Kodlardan bahsetmişken gelin bir örnek kod inceleyelim:
Kod:#Disloyal unit objective. Automatically switched to when unit commander goes disloyal.
objective_disloyal = {
priority = 100 #If above 0, check allow and automatically switch to this objective if there are no objectives with higher priority allowed.
allow = {
exists = commander
OR = {
commander = {
loyalty <= 33
}
AND = {
unit_owner = {
treasury < 0
}
commander = { is_mercenary = yes }
}
}
}
interface_allow = {
always = no
}
#Custom evaluation function.
mode = add #none/add/replace
#Custom evaluation function. Unit scope. Use scope:province to access the province being evaluated.
#Negative => better, positive => worse. If total sum exceeds 1 million unit will not go there. Beware fixed point overflow at 2 million...
pure_weight = yes
weight = {
modifier = {
trigger = {
scope:province = {
NOT = { owner = root.unit_owner } #Prefer our homeland (since we want to revolt there).
}
}
add = {
value = 2000
}
}
modifier = {
trigger = {
scope:province = {
AND = {
owner = root.unit_owner
this = root.unit_owner.capital_scope
}
}
}
add = {
value = 1050000
}
}
}
}
interface_allow ve allow kodlarından bahsetmiştik. Eğer bir görev aktifleştirilebiliyorsa allow kodunun geçerli bir sonuç vermesi gerekiyor. Eğer oyuncunun bu görevi seçememesini istiyorsak, interface_allow false sonucu vermeli. Öncelik değeri 0'ın üstüne çıkan bir görev, allow kodunun geçerli bir sonuç vermesi durumunda, daha yüksek önceliğe sahip bir görev mevcut değilse otomatik olarak yeni aktif görev haline gelir.
Henüz bahsetmediğimiz bir ana unsur daha söz konusu, o da weight/score/value. Bunlar bir birimin bir şehre gitmeyi ne kadar istediğini ifade ediyor. Yapay zekanın çalışmasını sağlayan fonksiyonlardan birisi bu. Peki böyle bir şeyi nasıl modlayabilirsiniz? Yapmanız gereken şey mevcut fonksiyonlara kendi value değerinizi vermek. Bunun ardından şehir bazına weight belirleyebilirsiniz.
Burada belirtmek gerekir ki oyunda ordu davranışlarında çok sayıda hardcoded materyal mevcut. Kimi durumlarda bu hardcoded unsurlardan kurtulmak için pure_weight = yes kodunu kullanmanız gerekebilir. Örneğin bir savaşta yapayzeka birimi kuşatmaya gönderirken sizin görevlendirmeniz savaşmaya gönderiyorsa bu kodla hardcode öncelikten kurtulabilirsiniz.
Fonksiyon skoru itibariyle 1 milyonun üstünde çıkması durumunda birim o bölgeye gitmiyor, barışçıl hamleler yüz binde, kuşatmalar 50 binde, muharebeler ise 20 bin civarlarında. Bu değerler oyunun gelecekteki versiyonlarda değişim gösterebilir, şu anki sistemde EU4'ten kalan bazı unsurlar var.
Weight ölçümünü oyunda konsola "mapmode ai" yazıp istediğiniz birimi seçtikten sonra görüntüleyebiliyorsunuz. Bu noktada oyunun en az bir gün ilerlediğine emin olun yoksa çökme sorunuyla karşılaşabilirsiniz. Bunu yapmanız durumunda aşağıdaki gibi bir haritayla karşılaşıyorsunuz:
Hazır konuya girmişken standart fonksiyon çıkışının bazı dış unsurlarca etkilenebileceğini de belirtmek gerekir. Yapay zeka ilgili ülkede aktif mi, ordu hangi göreve sahip vb. Birim görevlerine dair bir not, ordular kabaca kuşatma orduları ve savaş orduları olarak 2 farklı göreve atanıyor, tahmin edebileceğiniz üzere savaş ordularının amacı düşman ordusuyla karşılaşmak.
Birim yapay zekasını kodlarken karşılaşabileceğiniz bir başka kavram daha mevcut: Tehdit. Tehdit seviyesi unit_threat triggerı ile çalışıyor. Bu değer bir nüfuz haritasıyla ölçülüyor. Şu anda sadece Release D versiyonda konsola ai.map threat yazılması durumunda inceleyebiliyorsunuz (ileride değişecek, oyunun çıkışında debug komutlarını gizlemekle ilgili bir sorunumuz var). Bir birim için 1.0 tehdit seviyesi, karşıdaki birimin neredeyse denk güçte olduğunu gösterirken, tehdit seviyesi 10 ise karşıda 10 kat güçte bir birim var demek. Aşağıda eski bir versiyondan bir ekran görüntüsü mevcut:
Peki yapay zeka şu an hangi görevleri kullanabiliyor? Sadece objective_null (varsayılan, ya oyuncu tarafından ya da normal yapay zeka kontrolündeki birimler) ve objective_naval_landing kodları yapayzekanın gemi hareket ettirmesi üzerine. Kodda gördüğünüz çıkartma görevlerinde çok sayıda hardcoded unsur var ve ufak değişiklikler dışında gerçek anlamda kodlanması zor.
Son olarak birim yapay zekasında yaptığınız her kodlamada oyunda performans düşüklüğüne sebep olabilirsiniz, bu kapsamda aşağıdaki tanımlarda değişiklikler yapmanız fayda sağlayabilir:
MAX_UNITS_PER_TURN = 200
TACTICAL_DEPTH= 60
timing.show ve ai.pawns konsol komutlarıyla neyin oyunu yavaşlattığını görebilir, birim yapay zekasını test edebilirsiniz.
Daçya ve BalkanlarSon olarak bu zamana kadar geliştirici günlüklerinde bahsetmediğimiz bir bölgeye, Balkanlara geçiyoruz.
Oyunun birçok bölgesi gibi Balkanlar ve genel olarak Tuna bölgesi kabilelerin kontrolü altında. Hem Helen dünyası hem de Keltlerin nüfuzu altında bulunan bu bölge zaman içerisinde tarihte İskender ve Argeadlar olmak üzere Makedonya'nın genişlemesinden, Roma Cumhuriyetinin yayılmasından ve Trakya'da Lysimachos'un fetihlerinden etkilendi. Kelt halkları yine Balkanlardan geçerek Anadolu'ya yerleştiler.
Bölgenin yerlilerine gelirsek, batıdaki İliryalılar ve doğudaki Daçyalılar çok sayıda küçük kabile devletine bölünmüş haldeler. Bu bölünmüşlüğe son vermeyi başaran bir ülke İlirya veya Daçya'ya dönüşebilir.
Başlangıç ÜlkeleriPannonia Keltleri:
- Getia: Oyundaki en büyük Getia kabile devleti. Bölgesine oranla güçlü ancak güneyindeki komşularına oranla topraklarında daha düşük nüfus yoğunluğu mevcut.
- Tyrgetia: Tyras nehrinin kıyısında küçük bir Getia kabile devleti.
- Moesia: Kuzey Trakya'da yer alan orta güçteki bu devlet Trakya devletine tehdit oluşturuyor.
- Triballia: Tuna nehrinin kenarında yer alan bu devlet Getialılar ve Makedonlarla düşmancıl ilişkilere sahip.
- Dardania: Bölgenin en güçlü krallıklarından birisi olan Dardania etraftaki ülkelerin içişlerine müdahil olmasıyla tanınıyor. İskender'in ölümü sonrası tekrar bağımsızlıklarını elde etmeyi başardılar.
Bu dönemde Kelt kabileleri çoktan Pannonia havzasına ve Tuna nehrinin kıyılarına yerleşmişti. Başlangıç tarihimizden kısa bir süre önce Makedonya ve Anadolu coğrafyalarına da giriş yapan Keltler Anadolu'da Galatya Krallığını kurmuştu. Anadolu'ya yerleşmeyi başaran herhangi bir Kelt kabilesi de aynı yolu izleyebilir. Her şeye rağmen Keltler İliryalılara ve Daçyalılara nazaran sayıca daha azlar.
- Dindaria
- Tilataeia
- Scordiscia
- Cotinia
İliryalılar:
Balkanların batısında ve Dalmaçya kıyısında yoğunlaşan İliryalılar İtalya'daki ve Yunanistan'daki ülkelerle diplomasi ve ticaret yapmalarının yanı sıra aynı zamanda komşuları tarafından pek de hoş karşılanmayan korsancılıkla ilgileniyorlardı. İliryalı kabileler birleşmeleri durumunda İlirya'yı kurarak etrafındaki ülkelere tehdit oluşturabilir.
- Armistia
- Daorsia
- Pieria
- Delmatia
- Libernia
- Ditionia
- Oxuaioia
- Scordiscia
- Breucia
- Deuria
- Ditionia
- Libernia
- Cataria
- Cotinia
- Iapodia
- Istria
- Abria
Daçyalılar:
Daçyalıların kökenine dair pek bir bilgi sahibi değiliz, ancak batıdaki iliryalılar gibi Daçyalılar da oyunun başlangıcından çok önceleri bu topraklarda yer alıyordu. Daçyalı kabileler bölgelerini birleştirmeleri durumunda Daçya'ya dönüşebilir ve komşularına daha büyük bir tehdit haline gelebilirler. Daçya toprakları bölünmüş olsa da, burada demir ve metal kaynakları yer alıyor.Bugünlük bu kadar, önümüzdeki hafta biraz sıradışı bir günlüğümüz olacak ve Imperator: Rome'un modlanabilirliğinden bahsedeceğiz.
- Potulatensia
- Bastia
- Ratacensia
- Buridavensia
- Caucoensia
- Ansamensia
- Appulia
- Albocensia
- Saldensia