Hearts of Iron IV’te Modlama Seçenekleri

Hearts of Iron IV’te bu haftanın ikinci günlüğünde yeni yamayla gelen modlama seçeneklerinden bahsediliyor.

Merhaba millet! Söz verdiğimiz ekstra günlükle karşınızdayız. Öncelikle tüm yama notlarını paylaşacak, ardında modcu tayfaya sunacağımız yeni şeylerin üzerinde duracağız.

1.9 ‘Husky’ Yama Notları

Yama notlarının tamamına bu adresten ulaşabilirsiniz.

Modlama

1.9.0 sürümünde modcu arkadaşların o mükemmel modlarını geliştirmelerine yardım edecek araçlar/geliştirmeler yer alacak. Hata giderimleri ve küçük iyileştirmeler burada sıralamak için çok aşırı fazla olduğundan onlara notlarda yer verdik. Günlükte önemli şeyleri sıralayacağız.

Daha fazla etki, tetikleyici ve oyun değişkeni ile değişken desteği

Ücretsiz yamayla birlikte birtakım yeni efektler/tetikleyiciler ekledik. Tam listeye yama notlarından ya da oyunun oluşturduğu belgelerden erişebilirsiniz.

Bu yeni komut araçlarına ek olarak mevcuttaki efektlere/tetikleyicilere de daha değişken bir destek sağladık. Artık HOI4 betik dili belirteçleri değişken olarak depolamayı destekliyor. Örneğin aşağıdakileri yapabilirsiniz:

hoih-1.png

Yukarıda infantry_equipment belirtecini geçici bir değişkende saklıyoruz ve sonrasında bu saklanan değişkeni add_equipment_to_stockpile efektinde kullanıyoruz.

Şu anda ideoloji/ideoloji grupları, ekipman türleri ve operasyonlar değişken olarak saklanabilir ve tüm efektler/tetikleyiciler bu değişkenleri kabul edecek.

Daha fazlası için de destek eklemeyi planlıyoruz. Eğer yararlı olacağını düşünüyorsanız başka değişken türleri önerebilirsiniz.

Betik dilimiz için daha iyi bir dokümantasyon desteği de ekledik. Aşağıdaki HTML dosyaları yeni betik dokümantasyon aracımızın çıktıları:

History Logger

History Logger, yapay zekanın oynayış biçimlerini gözlemlemek için geliştirdiğimiz ve bundan sonra herkesin kullanımına açık olan aracımız. Araçla ilgili ayrıntılı bilgiye yapay zekâ günlüğünden ulaşabilirsiniz.

output.gif

Aşağıdaki linklere tıklayarak örneklere göz atabilirsiniz:

https://common-assets.paradoxplaza.com/h…?zip=1.zip
https://common-assets.paradoxplaza.com/h…?zip=2.zip

Umarız oyunu elden geçirmeye ya da yapay zekaya yönelik mod yapan arkadaşlara yardımı dokunur. Aracı kullanmak için oyunu -hands_off komutuyla başlatmalısınız. Bu komut oyunun NGame::HANDS_OFF_START_TAG etiketli gözlemci bir ülkeyle başlamasını sağlıyor. Aracı manüel olarak çalıştırmak için oyunu açıp konsola history_logger komutunu girebilirsiniz. Araç çalıştığı sırada oyun her ay, user/documents/Hearts of Iron IV/history_dump klasöründe veri toplayacak. Oyunun yeterince veri topladığına inandığınız zaman klasördeki dosyaları zip haline getirip game\tools\history_viewer\history_viewer.html dosyasına yükleyeceksiniz.

hands off komutu da istediğiniz test koşullarının çıktısını verecek. İsterseniz game\tests adresinden daha fazla koşul ekleyebilirsiniz. Bu koşulların başarıyla okunup okunmadıkları user\documents\Hearts of Iron IV\logs\tests klasörüne raporlanacak.

upload_2020-2-18_10-19-26.png

Çökme Kayıtları

Komutun çalıştırılması ya da kayıt dosyasının yüklenmesi sırasında bir şeyler ters giderse ve oyun çökerse, oyun çalıştırılan son komutu veya script/history/save line adresindeki son yüklenen dosyayı çalıştıracak. Bu dosyanın oyunun neden çöktüğü konusunda sizi bilgilendirmesini ve biz sorunu çözene dek sorun yaşamanızı önlemesini umuyoruz.

upload_2020-2-17_15-47-22.png

Bu bilgi yalnızca oyun -crash_data_log komutuyla başlatılırsa (performansa etki ettiği için normal geliştirme oturumlarında kullanmanız önerilmez) toplanacak. Çökme çıktısı user\Documents\Paradox Interactive\Hearts of Iron IV\crashes\…\meta.yml adresine kaydedilecek ve dosya ve satır bilgisini sunacak.

Eğer oyun bir kayıt dosyası yüklenirken çöküyorsa user\Documents\Paradox Interactive\Hearts of Iron IV\settings.txt dosyasındaki save_as_binary komutunu no olacak şekilde değiştirmenizi öneririm. Böylelikle kayıt dosyasını içeriğine metin olarak ulaşabilirsiniz.

Elbette çökme sorunuyla karşılaşırsanız hata raporu oluşturun ki sıkıntıyı çözebilelim.

Ülke Etiket Rumuzları

Ülke etiketleri için bir rumuz sistemi ekliyoruz. Bu rumuzlar etiket gibi işleyecek (ülke etiketlerinin kullanıldığı çoğu yerde kullanılabilen üç harfli etiketler şeklinde olacaklar) ama oynanış sırasında farklı ülkelerle eşlenebilecekler. Örneğin:

upload_2020-2-17_16-9-56.png

Burada SPD, VIC ve MOT ülke etiket rumuzları. SPD, gerçekte SPR etiketine (yani ülkenin asıl etiketi) ve SPR_carlist_spain_flag işaretine sahip olan ülkeyle eşleşiyor. Komuta baktığımızda:

upload_2020-2-17_16-11-17.png

Komut asıl SPR‘yi bulacak ve politik gücü o ülkeye ekleyecek.

Orijinal etiket/tetikleyici kombinasyonuna ek olarak ülke etiket rumuzunu da bir değişkenle, event hedefiyle ya da derecelendirme sistemiyle eşleyebilirsiniz. Bir önceki örnekte MOT ülke etiket rumuzunun, betiğin başka bir kısmında her bir ülke için ayrı ayrı belirlenen generic_operation_target değişkeniyle eşleştiğini görmüştük.

Ülke Derecelendirme

Betik dilimize yeni bir derecelendirme sistemi ekledik. Bu sistemin örneklerine game\common\scorers\country adresinden ulaşabilirsiniz.

Burada ülkeleri bir dizi tetikleyici ve değişken kullanarak derecelendirebilir ve sonrası o derecelendirme girdisini get_sorted_scored_countries ve get_highest_scored_country gibi efektlerde kullanabilirsiniz.

Bu sistem çeşitli yapay zekâ uygulamalarınca da kullanılıyor. Örneğin, operasyon yapay zekâsı tamamen hazır halde ve hedef seçmek için bu derecelendirme sistemini kullanıyor. Şifre kırma yapay zekâsı da şifre kıracak bir hedef belirlemek için sistemi kullanıyor.

Değişken Tanımlama

Artık betik dilini kullanarak özel değişkenler ekleyebileceksiniz. Bu yeni değişkenler game\common\modifier_definitions adresinde yer alacak.

Bir değişkeni tanımladıktan sonra ülke/bölge/lider değişkenlerini etkileyen kısımlarda kullanılabilir. Etkileri değişken ipuçları kısmında görünmekle beraber, o değişkenin efekt ve tetikleyicilerdeki değerine ülke/bölge kapsamında modifier@modifier_token koduyla, birlik lideri kapsamında ise leader_modifier/unit_modifier kodlarıyla erişebilirsiniz.

Ctrl + Alt + Tıklama ile Betik Dosyalarını Açma

debug mode‘da odak, yasa, karar, event, spirit ve araştırmaların betik dosyalarını açmak için ctrl + alt + tıklama kombinasyonunu kullanabilirsiniz.

focus.gif

Yukarıda mevcuttaki bir odağı düzenlerken kaydettiğimiz örneği görüyorsunuz. Ayrıca, görüldüğü üzere bir odağı değiştirdiğinizde ağacın orijinal konuma dönmemesi için yeniden yüklemede iyileştirmeye gittik.

Daha Fazla Yapay Zekâ Stratejisi

Yapay zekanın davranışını şekillendirmek ve baskınlaştırmak için birçok yeni strateji ekledik. Yapay zekanın belli cephelere daha fazla birlik isteyeceği ya da planlarını etkinleştireceği veya etkinleştirmeyeceği, saldırganlık düzeyini değiştireceği vb. isteklerde bulunacağı stratejiler oluşturabileceksiniz. Bu stratejiler, Müttefikler’in Mihver güçlere karşı daha başarılı çıkartmalar yapmasını sağlamamıza fazlasıyla yardımcı oldu.

Düzenlenebilir Oyun Hızı

Çoklu oyuncu modları üzerinde çalışan bir dizi modcu arkadaş bu özelliği talep etmişti. Artık NGame::GAME_SPEED_SECONDS değeriyle oynayarak oyun hızını değiştirebilirsiniz.

Operasyon Modlama

Operasyon sistemi oldukça komutlanabilir olacak şekilde tasarlandı. Yeni operasyonlar oluşturmak için kapsamlı değişiklikler yapabilirsiniz.

Temelde bir operasyon üç aşamadan oluşuyor. Ana oyun uyarlamasında bu üç aşama üç farklı havuzdan rastgele bir şekilde seçiliyor: sızma, gerçekleştirme, sıvışma (istisnai durumlar da söz konusu – örneğin, sahte istihbarat operasyonları sızma ve sıvışma aşamasına sahip değil). Ancak, bu düzene uymak zorunda değilsiniz.

Screenshot_64.jpg

Her aşamanın o aşamayı gerçekleştirip gerçekleştiremeyeceğinizi belirleyen gereksinimleri var (örneğin, eğer hedef ülkenin denize kıyısı yoksa denizaltıyla sızamazsınız). Her aşama belirli miktarda ekipman da gerektiriyor ki bunlar stokunuzdan otomatik olarak alınıyor. Nakliye uçağı gibi maliyetli ekipmanlar için operasyon tamamlandığında ekipmanın iade edilmesini isteyebilirsiniz.

upload_2020-2-20_10-18-14.png

Bazı aşamalarda fabrikalar birkaç gün boyunca maliyet olarak kullanılacak.

Bir aşamanın seçilme olasılığı, eventte görünen ai_chances vb. gibi düzenlenebilen temel bir değer ile belirlenecek.

Her aşamanın yoğunlaştığı üç şey var: plan, sonuç ve operasyon başarısız olursa ortaya çıkacak olan ekstra sonuç. Ayrıca iki görsele ihtiyaç duyuyoruz. Bunlardan birisi genel bakışı temsil edecek şekilde üstte, öteki ise aşamayı gösterecek şekilde haritada yer alıyor.

Aşamaları bitirdiğimize göre operasyonların kodlanmışken nasıl göründüğüne geçebiliriz:

upload_2020-2-20_10-19-39.png
upload_2020-2-20_10-21-7.png

Göründüğü kadar korkutucu değil aslında.

upload_2020-2-20_10-31-2.png

Çoğunluğu gui ile ilgili. Dolayısıyla modcular için büyük bir gizeme neden olmamalı. icon kodu teşkilat ekranındaki görseli belirtiyor. Operasyon hazır olduğunda haritada görünen ikon map_icon koduyla belirtiliyor. name ve desc kodları yerelleştirme satırlarının isim ve açıklama kısımlarını oluşturuyor. priority ise bu operasyonun mevcut operasyonların içindeki yerini belirliyor.

upload_2020-2-20_10-31-55.png

days kodu operasyonun başladığı andan itibaren ne kadar süreceğini ifade ediyor. Hazırlık aşaması sadece gerekli kaynakların toplanmasından oluşuyor.

network_strength hedef ülkedeki casusluk ağının ne kadar güçlü olduğunu gösteriyor.

operatives kodu operasyonu başlatmak için gereken casus sayısını belirtiyor. Bu aynı zamanda ülkede belirtilen sayıda casus yoksa operasyonun kilitli olacağı anlamına geliyor. Dolayısıyla 3 ya da daha fazla casusa ihtiyaç duyulan operasyonları test etmek zor olabilir.

visible = {} tetikleyicisi karar ve yasalarda olduğu gibi çalışıyor. Eğer değer sağlanıyorsa operasyon görünür oluyor.

allowed = {} ve available = {} kodları görünmüyor. allowed = {} kodu operasyonun bir ülke tarafından gerçekleştirilip gerçekleştirilemeyeceğini belirliyor. Eğer bir operasyonu sadece belli ülkeler gerçekleştirsin istiyorsanız (örneğin Almanya harici ülkelerin gerçekleştirdiği ağır su baskınları) bu çok işinize yarayacak. available = {} operasyonun alınıp alınamayacağını (görünür olup olmadığını) belirtiyor. Eğer oyuncuların olası bir operasyonun mevcut olduğunu görmesini istiyorsanız (visible = {} tetikleyicisini available = {} tetikleyicisinden daha seyrek yaparak) bu işinize yarayacaktır.

upload_2020-2-20_10-32-59.png

selection_target kodu bu operasyonun gerçekleştirileceği hedef sayısını kısıtlıyor (FROM her zaman hedef ülkeyi belirtirken FROM.FROM hedef bölgeyi, tabii eğer belirli bir bölge varsa, ROOT ise operasyonu gerçekleştirecek ülkeyi belirtiyor). Bu kodlar oyunun haritadaki her bölge için tüm etiketleri kontrol etmesini, yani performansa kötü etkide bulunmasını engelliyor.

selection_target_state operasyon için nasıl bir bölgenin seçileceğini (bu örnekte bölgede direniş olmak zorunda) belirleyen bir tetikleyici. selection_target ile birleşince yine bu örnekte sadece hedef ülkede direnişin var olduğu bölgeleri seçebiliyorsunuz.

upload_2020-2-20_10-37-39.png

equipment kodu, operasyon için gereken ekipmanların belirlendiği ayrı bir kategoriyi simgeliyor. Yukarıda da dediğim gibi, ekipman sadece belli aşamalara yönelik olabilir ama bu parametreyi kullanmak oyunun seçtiği aşamalardan bağımsız olarak temel bir maliyet oluşturmanıza yarıyor.

required_tokens ülkenin elindeki belirteçleri kontrol etmeye yarıyor. Ana oyunda belirteçler sadece diğer operasyonlardan elde edilse de teorik olarak eventlerden, odalardan ya da kararlardan da kazanılabilirler. Pek bir amaca hizmet ettikleri söylenemez. Bir tek oyuncuları bir operasyonu gerçekleştirmeden önce başka operasyonları tamamlamaya zorluyor ve iki operasyonu bağlamaya yarıyorlar.

upload_2020-2-20_10-38-26.png

risk_chance kodu işlerin casuslarınız için ne olasılıkla işlerin kötü gideceğini düzenliyor. Örnekte %20’ye ayarlı olduğunu görüyoruz. Rastgele sayı üretici casuslarınızın kötü bir gün geçireceğine karar verirse, on_action niteliğindeki on_operative_detected_during_operation kodunu çalıştırıyor ve çeşitli sonuçların (yakalanma, öldürülme, yaralanma, saklanma) olasılığını hesaplıyor.

experience kodu operasyona katılan casusların kazandığı tecrübeyi belirtiyor.

outcome_chance sadece asıl sonucu elde etme olasılığınızı belirliyor. Kodda yazan değer ne kadar düşükse oyuncunun ekstra ödül kazanma olasılığı o kadar yüksek oluyor. Başarısız olma olasılığı olan bir operasyon oluşturmak istiyorsanız, operasyonun sonucu kötü olacak şekilde belirleyip outcome_chance kodunun başarısızlık olasılığı gibi işlemesini sağlayabilirsiniz.

outcome_modifiers kısmı operasyonun sonucunu etkileyen değişkenleri belirliyor. Bu değişkenler, teşkilat geliştirmeleri, ulusal etkiler, yasalar ya da bakanlar gibi farklı yerlerde bulunan değişkenler. Bu değişkenlerin toplamına bağlı olarak temel sonuç az çok olası hale geliyor (operasyon her zaman bir sonuca vardığından ekstra sonuç da az çok olası hale geliyor).

Olası değişkenler arasında outcome_modifiers (sonuç olasılığını düzenliyor), risk_modifiers (risk olasılığını düzenliyor) ve cost_modifiers (ekipman maliyetini düzenliyor) yer alıyor.

Operasyonların değişkenleri kendi başlarına belirleyebilmesi sistemi çok daha esnek hale getiriyor. Diğer kısımlarda değişkenlerin kodlarla tanımlanması gerekirken burada değişkene operasyon içinde bir isim vererek tanımlamak mümkün. Değişkeni bir bakana, teknolojiye ya da ulusal etkiye eklediğinizde ismiyle değişkene atıfta bulunabilirsiniz.

upload_2020-2-20_10-39-31.png

Burası ise asıl büyünün gerçekleştiği yer. outcome_execute kodu bir efekti yürütmeye yarayan bir alandan ibaret (bir odak ya da karardan farkı yok diyebiliriz). outcome_extra_execute da başka bir efekt alanı. outcome_chance operasyon tamamlandığında outcome_execute mu yoksa outcome_extra_execute mu yürütülecek onu belirliyor (aslında outcome_chance, outcome_extra_execute yerine outcome_execute kodunun yürütülme olasılığını belirliyor).

Bu örnekte oyun bonus sağlayacak olursa bu bonusun ne kadar büyük olacağını belirleyen bir random_list kodu bulunuyor. Burada harika bir sürü şey yapılabilir. Örneğin, düşman ülkenin istikrarını düşüren ve hatta bazı şartlar sağlanırsa iç savaş çıkaran operasyonlar tertiplenebilir.

Eğer bir operasyonun hep aynı şekilde sonuçlanmasını istiyorsanız yürütülecek efekti outcome_extra_execute kısmına yerleştirin ve set_outcome_chance kodunu 0 olarak ayarlayın.

outcome_potential kodu operasyon başlamadan önce beklenen sonucu görmeniz sağlayan bir ipucu oluşturuyor. Gördüğünüz üzere, outcome_execute ile aynı nitelikte ama oyunculara operasyonu gerçekleştirdiklerinde en az ne elde edeceklerini gösteriyor.

upload_2020-2-20_10-40-27.png

Bu kısım ise aşamaların nasıl seçildiğini belirliyor. Her aşamanın belli bir seçilme olasılığı var. Gördüğünüz üzere, bu olasılığı düzenleyebiliyorsunuz.

Özellikle yukarıdaki görselde kodlanan operasyonda bir hata söz konusu ki bunu günlüğü yazarken fark ettim. Bakalım bulabilecek misiniz?

Operasyon aşamaları hedef bölge seçilmeden giriliyor. Dolayısıyla FROM.FROM kodundaki temel direniş değer kontrol değişkeni çalışmıyor.

Yazar: H. Serhat Çavunt

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.

STRATEGYTURK TWITTER

18:00'da Imperator: Rome Magna Graecia ön gösterimiyle yayında olacağız: https://t.co/dEkfLjgjDK https://t.co/asuHLCTTXt
Crusader Kings III'te Örgütleşmeler ve İç Savaşlar #ck3 https://t.co/SfKA5Etuae

Strategyturk Flickr