Hearts of Iron IV – 1.3.3 Yamasından Bilgiler #2

Hearts of Iron IV geliştirici günlüklerinde bu hafta 1.3.3 yamasına dair bilgi verilmeye devam ediliyor.

Merhabalar, bu günlükte test aşamasında sonlara yaklaştığımız 1.3.3 yamasından bilgiler vereceğiz. Bu günlük içerisinde yapayzekadan sorumlu SteelVolt ve teknoloji şefimiz Tomasz Kowalczyk de sizlerle bilgi paylaşacak dolayısıyla uzun bir günlük olacak.

Endüstri – Kaynak Eksikliği Etkisi Değişiklikleri

Geçen hafta endüstriden bahsetmiştik, son bir değişikliğimiz daha var: şu anda üretim hatları kaynak eksikliğinden dolayı maksimum %80 etki alabiliyor. Bu demek oluyor ki çok sayıda fabrika inşa ederseniz kaynak yokluğuyla başedebilirsiniz. Bu hem gerçekdışı bir hava yaratıyordu hem de bu hammaddelere sahip olmayı daha az önemli hale getiriyordu. Sahip olunmayan kaynaktan elde edilen yavaşlama artık çoklu bir şekilde hesaplanıyor ve bu etki %100’e kadar çıkabiliyor.

resources-jpg.241049

Arayüz Değişiklikleri

Yamada hata giderimi ve denge değişikliklerinin yanı sıra oyunda oyuncuyu gereksiz yere uğraştıran durumlarda çözüm olacak çeşitli arayüz değişikliklerinde bulunduk.

  • Herhangi bir binanın inşaatının en yüksek önceliğe sahip olmasını istiyorsanız artık inşaa ederken CTRL ile tıkladığınızda otomatik olarak listenin en üstüne çıkacak.
  • Belki de çok uzun zaman önce eklememiz gereken bir şey ama artık bir divisionu seçtiğinizde listede o divisionlar da seçili oluyor.
    selelect-jpg.241054
  • Kalabalık ve kaotik bir savaşta bazı birimlerinizi kayıp mı ettiniz? Artık ekranın sağ alt köşesinde aynı zamanda M tuşuyla da aktifleştirilebilen bir buton mevcut. Bu buton haritada diğer ülkelerin birimlerinin sembollerini gizliyor, kendi birimlerinizi daha rahat görüyorsunuz.
  • Kimi zaman az bilgiye sahip olduğunuz hususlarda önceden plan yapmak zor olabileceği için araziyi vs.’i daha iyi görebilmenizi sağlama amacıyla savaş sisi efektini kapatan bir butona daha sahibiz.
  • Oyunlarımızda kullanmak üzere yükleme ekranı barı adını verdiğimiz devrimsel bir şey icat ettik.
    load-jpg.241050
  • Multiplayerlarda boyna lag yapan bir arkadaşınız mı var? Tam düşmanın hiç beklemediği bir toprağına çıkartma yapacakken ekranınıza bir anda arkadaşınız laglıyor kutucuğu mu çıkıyor? Artık bir oyuncu lag yaptığında ekranda bildirim olarak belirlenecek, bu bildirimin üstüne mouse’ı getirdiğinizde hangi oyuncunun ne kadar geride kaldığını görebileceksiniz. Eğer oyuncu sizi yakalarsa bu bildirim kaybolacak.
  • Air winglerle tutarlı olması için artık atanmamış birimler için de bir bildirime sahibiz. Bu örneğin bir dostunuzdan gönüllü asker aldığınızda ancak bu askerlerin nerede olduğuna dair bir fikriniz olmadığı gibi durumlarda oldukça kullanışlı, sadece bu bildirimin üstüne tıklayarak herhangi bir divisiona atanmamış askerinizin nerede olduğunu görebilirsiniz.
    unassigned_divs-png.241051

Yapayzeka

Together for Victory’nin çıkışı öncesi yayımladığımız yapayzeka günlüklerinden sonra çok sayıda oyuncu yapayzekaya odaklanan günlüklerin devam etmesini istiyordu ve istekleriniz tarafımızdan duyuldu. Karşınızda SteelVolt.

Merhabalar, geçen hafta grip dolayısıyla çalışamadığım gerçeğini bir kenara bırakırsak sizlere benim kontrol alanımda nelerin yapıldığına dair bilgi sunmak için Hearts of Iron IV’u geliştirmeye kısa bir süreliğine ara verdim.

Yazdığım son geliştirici günlüğünde bir sonraki günlükte eski bir hikayeyi anlatırım diye düşünmüştüm. Bu olay henüz biz HoI4’ü geliştirme aşamasındayken yaşandı. Yapayzekaya dair çok sayıda çalışma yaptıktan sonra oyunu açık bırakıp izlediğimizde farkettik ki Almanya sürekli İngiltere’yi yeniyor. İngiltere’nin Kraliyet Donanması’nı geçmek büyük iş ancak baktığımızda Sovyetleri yenmeyi başarmış bir Almanya’nın İngiltere’ye çıkartma yapabilecek bir endüstriye de sahip olmasını doğal karşıladık. Ancak meğer olaya fazla iyimser yaklaşmışız, meğer olan şey yapayzekanın bir bölgeye atanmış donanmaları çağırışında problem yaşaması ve dolayısıyla uzak bir yere gönderdiği gemiyi ihtiyaç duyduğunda geri çağırmamasıymış.

Aşağıda buna yönelik yama notu mevcut:

  • Donanma yapayzekasının değişen durumlara daha iyi karşılık vermesine yönelik geliştirmelerde bulunuldu.
  • Donanma yapayzekası artık eğer donanma savaşına yardım etmekle görevlendirilmemişlerse strike fleetlerini kıyıdaki savaşlara yardımcı olmaları için görevlendiriyor.

İkinci madde yapayzekanın strike fleet yönetimindeki bir geliştirme. (Strike fleet bir yeri koruma veya saldırma amaçlı üretilmeyen, direkt olarak düşman donanmasını yoketmeye odaklanan birim)

Önümüzdeki yamada çalışmasını yaptığımız tüm yapayzeka geliştirmelerini tamamlamamış olsak da yine de büyük geliştirmeler mevcut ve bu geliştirmelerden bazılarını bugün sizlerle paylaşmak isterim.

İlk olarak meşhur birim spamı:

  • Yapayzeka artık ne kadar birim taşıyabileceğini belirlerken erzak miktarını daha iyi hesaplıyor.
  • equipment_stockpile özelliğiyle yapayzekanın ne kadar stockpile’a ihtiyacının olduğunu etkileyebiliyorsunuz.
  • Çok fazla division’a sahip ülkeler kendilerini güvende hissetmek için daha çok miktarda stockpile’a sahip olmaya çalışacak.

Yapayzekanın destekleyebileceği division sayısını hesaplamasını belirleyen kodda birkaç ufak bug vardı ve geliştirilmeye oldukça açıktı. Artık kod daha iyi bir durumda. Aynı zamanda yapayzekayı stockpile yönetiminde daha iyi hale getirdik ve yapayzeka artık eğer hali hazırda çok birime sahipse daha fazla stockpile’a sahip olmaya çalışıyor.

  • Deployment yapayzekasının üretim hatlarını daha iyi yönetmesi sağlandı ve gerekli olan division miktarının daha net hesaplanabilmesine yönelik değişiklikler yapıldı.

Bu kısmen bir önceki maddeyle bağlantılı, eskiden yapayzeka çok sayıda üretim hattını birimlere ayırıyordu ancak belli durumlarda bu üretim hatlarındaki üretimi iptal edip sıfırdan başlıyordu. Tüm bu sistemde büyük değişiklikler yapıldı ve yapayzeka artık yaşadığı olaylara daha ılımlı tepkiler veriyor.

  • Yapayzeka artık ürettiği şeyi istediği miktarda elde ettiyse üretim hattına müdahale ediyor.

Maddede de belirtildiği üzere, eskiden yapayzeka öncesinden bir birimi üretim hattına koyduysa onu üretmeye devam ediyordu, bu durum değişen şartlara reaksiyon vermesine mani oluyordu. Bu durum da değişti.

Şimdi ise daha önce nasıl farkedilmediğine şaşırdığım bir hatadan bahsedeceğim.

  • Yapayzekanın savunma emrine sahip bölgelerde direniş karşıtı eylemde bulunmayıp fethedilmiş toprağı tamamen görmezden gelmesi hatası giderildi.

Direnişe karşı mücadele etme konusunda yapayzekanın daha iyi hareket etmesi gerektiğinden bahsediyorduk, meğer yapayzeka bu konuda hiçbir şey yapmıyormuş. Tüm bu hata kodda yapayzekanın ilgili hamleleri toprağı kontrol etmesi durumunda değil, toprağa sahip olması durumunda yapsın şeklinde yazılmasından kaynaklı.

Endüstride yaptığımız değişiklikler sonrası yapayzekada da buna uygun birtakım düzenlemeler yapılması gerekiyordu.

  • Yapayzeka artık kime ne zaman lend-lease vereceğini daha iyi değerlendiriyor.
  • Yapayzeka artık eski ekipmanlarını da lend-lease olarak gönderebiliyor.
  • Yapayzeka eğer karşılayamıyorsa veya yardım ettiği ülkeye yardım etmesi artık mantıklı değilse lend-lease’i geri çekebiliyor.
  • Yapayzeka artık çok sayıda sivil fabrikaya sahipse askeri yerine donanma inşaatı yapmaya daha meyilli olmuyor.

İlk başta bahsettiklerimiz maddelerde de belirtildiği gibi artık yapayzeka lend-lease mekaniğini daha adam akıllı bir şekilde kullanıyor. Son madde ise başta ABD olmak üzere çok sayıda devleti etkileyen bir durumdu, kısaca yapayzeka çok sayıda sivil endüstriye sahip olduğunda bu durum askeri fabrikaya daha az ihtiyacı olduğunu düşünmesine ve daha çok gemi basmasının doğru olduğunu düşünmesine sebep oluyordu.

Son olarak yapayzeka güvendeki cepheleri yönetmede daha başarılı. Eskiden hiçbir tehditin bulunmadığı cephelere dahi birkaç birim gönderiyordu, bu sınırların bazıları birlikte savaşılan ülkeyle olan sınırlar dahi olabiliyordu. Kısaca artık yapayzekanın daha çok birimini daha çok etki eden cephelerde göreceksiniz.

Yapayzeka kısmını beni oldukça mutlu etmiş bir ekran görüntüsüyle kapatalım, aşağıda Çin’i henüz yenememişken Sovyetler’e savaş açmamış bir Japonya var.
untitled-jpg.241055

Performans ve Optimizasyon

Küçük bir uyarı, bu kısım daha çok işin kod kısmıyla ilgilenenler için.

Düşündük ki oyuncularımız oyunun işleyişiyle ilgili daha teknik ayrıntılara vakıf olmak isteyebilirler ve nelerle uğraştığımızı bir de bu açıdan incelemek isteyebilirler. Eğer bu kısım ilginizi çekerse lütfen belirtin, şimdi sözü proje teknoloji şefimiz Tomasz Kowalczyk’e bırakıyorum.

Merhabalar, bugün sizlere bu yama kapsamında yaptığım optimizasyon çalışmalarından bahsedeceğim. Tabi ki önümüzdeki yamalarda bu optimizasyonu daha da ileri aşamalara götürmek istiyoruz ancak 1.3.3’te oyunun %14 ila %18 arasında hızlandığı bilgisini verebilirim. Bu ilk bakışta çok büyük bir oranmış gibi gelmeyebilir ancak bu yamadaki amacımız performansı etkileyen “spike” adı verdiğimiz şeyleri gidermekti. Spike dediğimiz şeyler genellikle 24 saat geçerken örneğin oyunun anlık donmasına sebebiyet veren şeyler, özellikle oyunun son dönemlerine doğru bu donmalar daha sinir bozucu bir hal almaya başlayabiliyordu. Bu yamada özellikle bu donma olayının üstüne gittik ve geliştirmelerde bulunduk. 1.3.2 ile 1.3.3’ü karşılaştırdığım vakit 1.3.2’deki bir günlük tick 4 saniyede tamamlanırken 1.3.3’te 0.4 saniyeden daha kısa bir sürede tamamlandı.

Genellikle oyuncularımızla bu kadar teknik hususları paylaşmıyoruz ancak bu sefer sizlere oyunu neyin yavaşlattığını ve bunlara nasıl çözümler ürettiğimizi paylaşmak isterim.

  • Barış konferansının kodlarında değişiklik yapıldı, eskiden her ülke hangi toprağı alabilir diye teker teker hesaplama yapılıyordu. Devasa savaşlarda sürekli skip butonuna basarak geçiş yaptığınızda oyun her seferinde bunu tekrardan hesaplıyor ve bu da oyunun kasmasına sebebiyet veriyordu. Bu durum büyük küçük her savaşın barış konferansında gerçekleşmekle birlikte küçük savaşlarda daha az farkediliyordu. Bunun çözümü için kodu baştan yazmamız gerekti.
  • Oyuncunun bir donanmaya tıklayıp ardından bir bölgede herhangi bir göreve aktarması durumunda oyun bir naval path-find hesabı yapıp donanmayı ondan sonra ilgili yere gönderiyordu. Bunun sebebi yapayzekanın bir yere donanma gönderirken doğru geminin doğru görevi yaptığının kontrol edilmesiydi ancak görünüşe göre bu kod çalıştığı süre zarfınca gemiye sürekli olarka “oraya git” emri veriyordu. Bu tür path-finding oldukça zor olmakla birlikte bir satır kod eklemek bu sorunu çözdü.
  • Erzak hatlarındaki değişikliklerin büyük etkisi oldu.

Oyundaki çok sayıda mekanik sahip olunan erzak ve gerekli erzak arasındaki dengeyi esas alıyor. Oyun bunu bir bölgeye hasar almadan kaç birim sığdırabileceğini hesaplarken kullanıyor. Bu koddaki her satır bölgedeki desteklenen erzak limitini sorguluyordu, bölgedeki tüm birimleri hesaplıyor, o birimlerin erzak kullanımını hesaplıyor, ardından bölge ne kadarını destekliyor bunu hesaplıyordu. Bu çok sayıda oyun mekaniğine etki eder bir biçimde yüzlerce kez yapılınca büyük bir yavaşlama sebebi haline geliyordu. Bunun yeirne artık bir bilgiyi tek bir kere sorgulatıp o bilgiyi daha sonra kullanılmak üzere depolamasını sağladım. Depolanan bilginin kullanılması durumunda neredeyse performans hiç etkilenmiyor.

Erzak sistemiyle ilgili bir diğer unsur da birim sayısının çokluğuydu. Özellikle oyunun son dönemlerine doğru çok sayıda division’a sahip olduğunuzda yine çok sayıda şey hesaplanıyordu. Bunda geliştirmeler yapmak için çok şey denesem de nihayetinde her bölgedeki erzak tüketiminin hesaplanılışını baştan yazmam gerekti. Artık teker teker bölgelere bakıp ardından birimleri inceleyip erzak tüketimi hesaplamaktansa bunun tam tersi, her saat artık birim erzak tüketim miktarını ve konumunu rapor ediyor ve bu bilgi kullanılıyor. Aynı şeymiş gibi gelebilir ama teknik açıdan aslında çok farklı şeyler. Bu değişiklik sayesinde erzak sistemindeki oldukça ağır bir kodu kaldırabildik. Açıkçası bu değişiklik yaptığımız en hoş değişikliklerden biriydi. En iyi optimizasyon bir şeyi kaldırmak oluyor bazen.

  • Teker teker listelenmesi anlamsız olabilecek çok sayıda erzak sistemiyle ilgili geliştirmemiz oldu dolayısıyla bunları teker teker saymaktansa size şöyle bir istatistiki bilgi vereyim, eskiden oyundaki hesaplamaların %65’i erzak sistemiyle alakalı hesaplamalardı, artık bu oran %6.
  • Günlük spike’lara yönelik bir diğer optimizasyon da yapayzekanın division designer’la oynamasında değişiklikler yapmaktı. Bu sefer çözüm oldukça basitti, farkettim ki ne zaman bir yere division eklesek division şablonları baştan hesaplanıyor. Bu da hatrı sayılır bir yük oluşturuyor oyuna, bunun yerine template istatistiklerini yapayzeka slotları doldurmayı tamamladıktan sonra yenilemek bundan kaynaklanan yavaşlamayı büyük oranda azalttı.
  • Yapayzekanın çıkartma planlarıyla, yapayzekanın belli bir cepheye birimleri yaymasını sağlayan kodla, filoların radardan elde ettiği bonusu hesaplamasında, konvoy rotalarının yollardan biri kapalıysa hangi yolu tercih edeceğini hesaplamasında ve daha birçok şeyde önemli optimizasyonlar yapıldı.
  • En son ve favori optimizasyonum, Clausewitzh oyun motorunda kimsenin dokunmaya cüret etmediği bir kod parçası vardı. Bu kod tüm kullanıcı arayüz elemanlarını ağaç şeklinde değil düz bir yolla işleme sokuyordu. Bu demek oluyor ki ekranda görünebilecek ne kadar çok pencere ve butonunuz varsa oyun o kadar yavaş işliyor ve bunun olması için ilgili pencerenin açık olmasına dahi gerek yok. Bu koda dair bilgimiz uzun süredir vardı ancak mevcut arayüzü kırmadan bu kodda değişiklik yapmak neredeyse imkansızdı ancak bir yolunu buldum. Eski kod frame başına 120 bin etkileşime sahipken şimdiki kod sadece 700, sadece gerekli olan arayüz elemanlarına etki ediyor. Bu demek oluyor ki teknoloji ağacını açtığınızda arkada bir kod üretim hattı penceresiyle ilgili işlem yapmıyor.

Daha önce de belirttiğimiz üzere oyunun son dönemindeki performansını geliştirme çalışmalarımıza devam edeceğiz. Optimizasyon işinde 1,5 hafta gibi bir süre çaba sarfettim ve oldukça önemli kazanımlar elde ettik ve önümüzdeki yamalarda bu konuya eğilmeye devam edeceğiz.

Bugünkü Paradox Interactive twitch kanalında Daniel ve ben Kaiserreich oyunumuza devam ediyor olacağız, kaçırmayın!

Forum Konusu.

Yazar: Ali Alper Duman

Yayın Direktörü @ Strategyturk

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.

Son Yorumlar

  • Furkan: Yüzdelik olarak ne kadar yol aldınız acaba?
  • Yılmaz: 1.3.2 yaması ne zaman çıkar

KATEGORİLER

ARŞİV