Stellaris - Lem Güncellemesindeki Modlama Geliştirmeleri - Duman - 03-09-2021
Stellaris geliştirici günlüklerinde bu hafta Lem güncellemesindeki modlama geliştirmelerine dair bilgiler veriliyor.
https://forum.paradoxplaza.com/forum/developer-diary/stellaris-dev-diary-222-moddability-updates-in-lem.1489225/ :Herkese merhabalar, bugün sizlere 3.1 güncellemesiyle birlikte oyunun yazılım diline eklenen yeni özellikleri tanıtacağım.
Geleneklerin yeni sistemde çok daha modlanabilir olduklarından bahsetmiştik, bahsedilen tüm değişikliklerin yanı sıra dilerseniz oyundaki bir karar aracılığıyla seçilebilir hale gelen gelenekler de ekleyebiliyorsunuz. Bugün ağırlıklı olarak değişkenlerden söz edeceğiz.
Değişkenler
Bir önceki güncellemede oyuna dair farklı bilgileri kaydetmenin farklı yollarını oluşturmuştuk, bu noktada kaçırdığımız hususlardan birisi gezegendeki nüfus sayısı gibi trigger değerleriydi. Aynı zamanda değişken konusunda da, PDS'in CK3 gibi yeni oyunlarına kıyasla geride kalmıştık. Son olarak birçok noktada synthax'a dair sıkıntılar söz konusuydu.
3.1 ile birlikte değişkenlerde önemli yol katettik. İlk olarak, bu zamana kadar bir değişkenin değerini elde etmek istediğinizde değişkenin kendisini belirtiyordunuz, artık bunun yanı sıra daha farklı şeyler de yapabiliyorsunuz:
Kod: value = my_var #mevcut scope'ta my_var değişkeninin değerini alır
value = from.capital_scope.my_var #hedefin başkentindeki my_var değişkeninin değerini alır
value = trigger:num_pops #mevcut scope'taki nüfus sayısını alır
value = from.capital_scope.trigger:num_pops #hedefin başkentindeki nüfus sayısını alır
Nokta scopelar kullanabiliyorsunuz, gördüğünüz üzere :<trigger> şeklinde trigger da kullanabiliyorsunuz. Bu şekilde bir değere bağlı tüm triggerlar kullanılabiliyor. (Farklı scopelar arasında değişken kopyalamayı sağlayan eski format artık kullanılamıyor, "value = { scope = x variable = y }" gibi işler yapmanız gerekiyordu.)
3.0'da export_trigger_to_variable etkisi mevcuttu ancak bu sadece fleet_power için çalışıyordu. Bu işlev artık tüm bu tarz triggerlar için çalışıyor. Bu etkiyle elde ettiğiniz değerler { } şeklinde, yine de tekil bir değere bağlı şekilde işliyor:
Kod: export_trigger_value_to_variable = {
trigger = num_assigned_jobs
parameters = {
job = miner
}
variable = num_miner_jobs
}
3.0 ile birlikte modifier sayıları veya kaynak stoğu gibi unsurları değişken olarak kullanabiliyordunuz. add_resource ve add_modifier'a çarpan olarak dahil edebiliyordunuz. 3.1 ile birlikte bu değişkeni farklı yollarla kullanabiliyorsunuz:- Tekil sayıları denetleyen trigger değerleri olarak: num_pops>my_variable, intel={who=from value<trigger:num_pops } gibi.
- Tekil sayıları kullanan etkiler olarak: add_experience = my_variable gibi
- Triggerlanmış kaynak tablolarında çarpan olarak (örneğin binalarda):
Kod: resources = {
category = planet_buildings
cost = {
trigger = { <triggers> }
minerals = 100
}
multiplier = my_var/owner.trigger:num_pops
}
- MTTH/YZ ihtimal etkilerinde:
Kod: ai_chance = {
factor = 1
modifier = {
add/factor = my_var/trigger:num_pops
is_variable_set = my_var
}
}
- add_modifier artık çarpan parametresinin yanı sıra time_multiplier'a da sahip.
- ordered_script_lists dosyasında: (bu özelliği yeni oyunlarımızdan çarptık)
Kod: ordered_owned_fleet - Iterate through each fleet owned by the country - executes the enclosed effects on one of them for which the limit triggers return true. Picks the specific object according to the order specified (position 0, order_by = trigger:num_pops would run the effects on the X with the most pops)
ordered_owned_fleet = {
limit = { <triggers> }
position = <integer, starting with 0>
order_by = <variable>/trigger:<trigger>
inverse = yes/no (default: no - if yes, then 0 is lowest rather than highest)
<effects>
}
Supported Scopes: country
- Eğer değişkeninizin net bir sayı olmasını istiyorsanız, artık round_variable_to_nearest ile bir değere yuvarlayabiliyorsunuz, örneğin 10'un katlarına.
Bu işlevlerin özet halini events klasöründeki bilgi dosyasında bulabilirsiniz. Bu değişkenlerin daha farklı kullanım alanları da olabilir, bu sebeple gelecekte yine bu tarz bir çalışma yapabiliriz. Mevcut çalışmalar şimdiden birçok noktada bize yardımcı oldu:- Ölüm Kültü ödüllerinde binlerce satır kod sildik, yeni versiyon en ideal ödülü belirlemede çok daha etkili.
- Golden Rule ödemelerini düzeltmek: daha önceleri rakamlarda ufak bir hile yapıp, asıl ödenen paraya yakın bir miktar veriyorduk. Artık buna ihtiyaç yok.
- Federasyon Bilim Liderlik Challenge'ı: Artık sahip olduğunuz teknoloji sayısını ve tekrarlanabilir teknolojileri bir faktör olarak ekleyebiliyoruz.
Sprite Sheet Değişiklikleri
Bir hayli şeyden bahsettik ama bahsetmek istediğim hala birkaç şey var. İlk olarak ikon olarak sprite sheet kullandığımız eski unsurlarla (tüm ikonlar tek bir görselde yer alıyor ve listedeki 5. görseli göstermeyi seçiyoruz) bazı sorunlar yaşıyorduk (koloni otomasyon butonunun kazara robot inek ikonu olması gibi), modcular da sadece tek bir mod sprite sheet'in üzerine yazabildiği için bu sistemden oldukça şikayetçiydi.
Arayüzde ikonlar için oluşturulan referansların normal referans şeklinde eklenebilmesini sağladık, böylelikle bu unsurları sprite sheet olmadan oyuna ekleyebiliyorsunuz. Bunu ordu türleri, koloni otomasyon türleri, bombardıman seçenekleri ve gemi boyutları için belirleyebiliyorsunuz.
Kod: spriteType = {
name = "GFX_ship_size_military_1"
sprite_sheet_sprite_type = "GFX_ship_sizes"
default_frame = 2
}
Eski format artık çalışmadığı için modlarda bu doğrultuda güncelleme yapılması gerekecek ancak uzun vadede uyuşmazlık sorunları konusunda önemli bir yol katetmiş olacağız.
Rastgelelik
Bazılarınız, bazı durumlarda random_list gibi fonksiyonların çok da rastgele olmadığını fark etmişti. Özellikle on_game_start aracılığıyla (ve bazı diğer on_actionslarda) bu durum söz konusuydu. Bu oldukça talihsiz bir durum zira başlatılan oyunların birbirinden farklı olmasını sağlayan en önemli faktörlerden birisi bu eventler. Buna benzer bir şekilde loop etkilerinin aynı olması gibi çeşitli hataları da giderdik (25x random_list, 25 tane rastgele sonuç yerine 25 tane aynı sonucu veriyordu.)- on_game_start gibi on_actions eylemlerin rastgele olmaması hatası giderildi. Bu hataya gelecekte düşersek oyun bununla ilgili uyarı veriyor, dolayısıyla bu hatadan sonsuza dek kurtulduk diyebiliriz.
- loops ve every_x loops'ta rastgeleliği arttırdık.
- reroll_random etkisi oluşturduk.
Diğer Havalı Şeyler
Artık özelliklere triggerlı nüfus etkisi ekleyebiliyoırsunuz, örneğin nüfusunuza bir gezegende olumlu, bir başka gezegende olumsuz etki yapan bir özellik verebiliyorsunuz. Bu fonksiyonu kullanarak Void Dwelleri 2 özellik olmaktan çıkarıp, farklı koşullara göre farklı etki sağlayan tek özelliğe indirdik.
Fark etmiş olabileceğiniz üzere Klon Ordusu origini oldukça özgün bazı özelliklere sahip. Bu origin için oluşturduğumuz şeyleri farklı şeyler için de kullanabilirsiniz, örneğin:- Artık türleri tek bir cinsiyet yapabiliyorsunuz.
- Bir binanın imparatorluk genelinde kaç kez inşa edilebileceğini belirleyebiliyorsunuz (ve bu limiti oyun içerisinde azaltıp arttırabiliyorsunuz)
- should_force_decline_species oyun kuralı eklendi.
Ek olarak çok sayıda yeni etki, trigger ve modifier ekledik. Bunlardan bazıları:- set_visited = <system> - gezegeni araştırmadan görebilmenizi sağlıyor.
- set_saved_date - spesifik bir tarihten kayıt almanızı sağlıyor.
- Teknik olarak son etki <scope>_flag'ı ekliyor, böylelikle standart flag etkileri ve triggerlar tüm scopelara uygulanıyor.
- Artık buton etkilerine [loc] komutları ekleyebiliyorsunuz.
- desc = { text = X trigger = { Y } } aracılığıyla artık districtlere, binalara, işlere ve özel projelere farklı tanımlar girebiliyorsunuz.
- has_non_swapped_tradition ve has_tradition_swap etkilerini silip, onları has_active_tradition çatısı altında birleştirdik.
- Script flagı barındırmayan tüm scopelar artık bunlara sahip.
- Mod güncelleyecekler için bir uyarı: count_diplo_ties artık count_relation, count_armies artık count_owned_army veya count_planet_army. any/every/random_mining_station/research_station artık yok. Bunun yerine mining_station/research_station/orbital_station scope'unu kullanabilirsiniz. Ayrıca observation_outpost artık limite sahip değil ancak bunun yerine exists = observation_outpost kodunu kullanabiliyorsunuz.
Tüm bu yeni işlevler Vasi Ekibi olarak bizim için çok faydalı oldu ve kademeli bir şekilde oyunun bunlardan faydalanabilecek eski parçalarına bu işlevleri uyguluyoruz. Son olarak eski trigger_docs.log dosyası artık geçersi, bunun yerine daha kapsamlı bir script_documentation klasörüne sahibiz.
Nemesis güncellemesi öncesinde modcular için bir erken erişim programı yapmıştık. Bu şekilde toplamda 1.6 milyon aboneye sahip yaklaşık 10 modun yamanın çıkış günü güncellenmesini sağladık, oldukça olumlu sonuç verdi. Lem güncellemesi için de bu programa yaklaşık 10 modcu daha eklemeyi düşünüyoruz, eğer ilgileniyorsanız Erken Erişim Talep Formunu doldurabilirsiniz.
|