Stellaris’te Kodlama Değişiklikleri

Stellaris günlüklerinde bu hafta kodlamada yapılan değişiklerden bahsediliyor.

Merhabalar!

Bugün 2.2 Le Guin yaması ile gelecek kodlama değişikliklerinden bahsedeceğiz. Çok fazla teknik detaya gireceğimiz için istiyorsanız bu günlüğü es geçebilirsiniz.

Değişen her şeyi gösteremem, bu nedenle sadece önemlilerinden bahsedeceğim.

Ufak tefek olanlar

  • Ardışık if/else_if/else sentaksları artık tetiklemelere ve etkilere de etki ediyor. Modunuzu tekrar gözden geçirin, eski sentakslar sorun çıkarmasa bile istenmeyen şeylere yol açabilir.
  • Kaynaklarla ilgili değiştirilemeyen şekilde kodlanmış tetiklemeler ve etkiler neredeyse tamamen kaldırıldı, yerlerine her türlü kaynağı alabilenler getirildi. Örneğin “energy >= 200” yerine artık “resource_stockpile_compare = { resource = energy value >= 200 }” veya “add_resource = { my_mod_resource = 10 }” gibi şeyler kullanacaksınız.
  • Çoğu yeni “ekonomi birimi” otomatik olarak yaratılan etkilerle geliyor. Eğer yeni bir Bölge eklerseniz, bir gezegende o türden bölgelerin sayısını arttıran bir etki olacak. Yeni bir iş yaratırsanız da aynı şekilde olacak. Gördüğünüz zaman daha iyi anlayacaksınız.
  • Rastgele olan (random_*) etkilerin ağırlıkları olması. Baya eski bir koddu ve bazılarınız daha önceden bulmuş olabilir. Neredeyse tüm random_* etkileri bazı seçeneklerin daha çok seçilmesi konusunda ayarlanabilir. Ağırlık için bir taban ve ekleyen/çarpan etkiler gerekir.
random_playable_country = {
   limit = { # has comms with 16 or more empires
       count_country = {
           limit = {
               is_country_type = default
               has_communications = prev
           }
           count >= 16
       }
   }
   weights = {
       base = 1
       modifier = { # strongly weighted towards democracies
           add = 6
           has_authority = auth_democratic
       }
       modifier = { # twice as likely for players
           mult = 2
           is_ai = no
       }
   }
   country_event = { id = my_mod.1 }
}

Gezegen & Ekonomi Değişiklikleri

Çoğu içerik tasarımcısının dediği gibi script (yazı betiği) öğrenmenin en iyi yolu script okumaktır. Bu yüzden örnekleri bol tutacağım.

Gezegen Özellikleri
common\deposits\
Eski maden yatağı kavramı 2.2’de değiştirilmesine rağmen kodlarda hala maden yatağı (deposit) olarak geçiyor. Eski maden yataklarından daha esnekler ve tile sistemine bağlı değiller. Örneğin gezegenin iklimi değiştirildiğinde (terraform) yataklar da değişebilir. İnşa engelleyen şeyler temizlendiğinde de bazı etkilere sahip olabilir.

d_rich_mountain = {
   is_for_colonizeable = yes
   use_for_min_max_adjustments = yes
   
   category = deposit_cat_minerals
 
   use_weights_for_terraforming_swap_types = yes
   should_swap_deposit_on_terraforming = yes
   terraforming_swap_types = {
       d_submerged_ore_veins
   }
 
   planet_modifier = {
       district_mining_max = 3
   }
 
   potential = {
       OR = {
           is_planet_class = pc_continental
           is_planet_class = pc_desert
           is_planet_class = pc_alpine
           is_planet_class = pc_arctic
           is_planet_class = pc_arid
           is_planet_class = pc_tundra
           is_planet_class = pc_gaia
       }
   }
 
   drop_weight = {
       weight = @low
       modifier = {
           factor = @planet_type_bonus
           is_cold = yes
       }       
   }
}
d_minerals_2 = {
   resources = {
       category = orbital_mining_deposits
       produces = {
           minerals = 2
       }
   }
   station = shipclass_mining_station
   is_for_colonizeable = no
 
   potential = {
       OR = {
           is_planet_class = pc_asteroid
           is_planet_class = pc_molten
           is_planet_class = pc_toxic
           is_planet_class = pc_frozen
           is_planet_class = pc_barren
           is_planet_class = pc_barren_cold
           is_planet_class = pc_broken
           is_planet_class = pc_shattered
       }   
   }
 
   drop_weight = {
       weight = 5
       modifier = {
           factor = 0.5
           OR = {
               is_planet_class = pc_molten
               is_planet_class = pc_toxic
               is_planet_class = pc_frozen
           }
       }
       modifier = {
           factor = 2.0
           is_asteroid = yes
       }
   }
}
d_collapsed_burrows = {
   icon = d_deep_sinkhole
   time = 120
 
   is_for_colonizeable = yes
   category = deposit_cat_blockers   
 
   potential = { always = no } # added by event
 
   planet_modifier = {
       planet_max_districts_add = -1
   }
 
   on_cleared = {
       create_pop = {
           species = owner
       }
   }
 
   resources = {
       category = deposit_blockers
       cost = {
           energy = 300
       }
   }
}

Bölgeler
common\districts\
Daha önceki günlüklerde de bahsettiğimiz gibi Bölgeler eski “tile” sisteminin yerine geçiyor. Bunun kodları ise inşaat süresi, nerede inşa edilebileceği, başka gezegen türlerinde neye dönüştürülebileceği (makine dünyaları vs), inşaat ve bakım masrafı, gezegene olan etkileri ve yapay zekanın öncelik verme ağırlığı.

Binalar
common\building\
Binalar çoğunlukla aynı ama yukarıda da görebileceğiniz bazı yeni işlevselliğe sahipler. Örneğin “triggered_planet_modifier” binayı kimin kontrol ettiğine göre normal iş, dron işi veya fabrika işleri verebilir. İnşa maliyeti, bakım masrafı ve kaynak üretimi “resources={}” altında. Foundry ise sadece iş ekliyor herhangi bir kaynak üretmiyor.

building_foundry_2 = {
base_buildtime = 480
can_build = no
category = manufacturing
allow = {
has_upgraded_capital = yes
}
triggered_planet_modifier = {
potential = {
exists = owner
owner = { is_hive_empire = yes }
}
modifier = {
job_alloy_drone_add = 5
}
}
triggered_planet_modifier = {
potential = {
exists = owner
owner = { is_machine_empire = yes }
}
modifier = {
job_fabricator_add = 5
}
}
triggered_planet_modifier = {
potential = {
exists = owner
owner = { is_regular_empire = yes }
}
modifier = {
job_foundry_add = 5
}
}
resources = {
category = planet_buildings
cost = {
minerals = 600
volatile_motes = 50
}
upkeep = {
energy = 4
volatile_motes = 1
}
}
upgrades = {
building_foundry_3
}
prerequisites = {
tech_alloys_1
}   
triggered_desc = {
trigger = {
exists = owner
owner = { is_regular_empire = yes }
}
text = job_foundry_effect_desc
}
triggered_desc = {
trigger = {
exists = owner
owner = { is_hive_empire = yes }
}
text = job_alloy_drone_effect_desc
}
triggered_desc = {
trigger = {
exists = owner
owner = { is_machine_empire = yes }
}
text = job_fabricator_effect_desc
}
ai_weight = {
weight = 1
modifier =
{
factor = 4
owner = {
has_monthly_income = {
resource = alloys
value < 15
}
}
}
}
ai_resource_production = {
alloys = 1
trigger = {
always = yes
}
}
}[/code]
İşler
common\pop_jobs\
Binaların eklediği işler ise diğerlerinden tamamen ayrı ama yine de tanıdık bir sentakste yazıldı. Enforcer işi normalde 1 Unity üretiyor, Polis Devletiyseniz ise 2. Ayrıca Anti-Crime Campaign etkisi varsa bakım masrafı 2 enerji daha fazla ama aynı şekilde suçu daha fazla düşürüyor.
[code]enforcer = {
category = specialist
condition_string = SPECIALIST_JOB_TRIGGER
building_icon = building_precinct_house
clothes_texture_index = 5
possible = {
specialist_job_check_trigger = yes
}
resources = {
category = planet_enforcers
produces = {
unity = 1
}   
produces = {
trigger = {
owner = { has_valid_civic = civic_police_state }
}
unity = 1
}
upkeep = {
trigger = {
planet = { has_modifier = anticrime_campaign }
}
energy = 2
}
}
pop_modifier = {
pop_defense_armies_add = 2
}
planet_modifier = {
planet_crime_add = -25
}
triggered_planet_modifier = {
potential = {
owner = { has_non_swapped_tradition = tr_domination_judgment_corps }
}
modifier = {
planet_crime_add = -5
}       
}
triggered_planet_modifier = {
potential = {
planet = { has_modifier = anticrime_campaign }
}
modifier = {
planet_crime_add = -10
}       
}
weight = {
weight = @specialist_job_weight
modifier = {
factor = 0.2
has_citizenship_rights = no   
NOT = { has_trait = trait_mechanical }
}
modifier = {
factor = 2
has_trait = trait_resilient
}           
modifier = {
factor = 2
has_trait = trait_very_strong
}   
modifier = {
factor = 1.5
has_trait = trait_strong
}   
modifier = {
factor = 10
is_enslaved = yes
has_slavery_type = { type = slavery_military }
}           
modifier = {
factor = 0.50
has_trait = trait_weak
}
modifier = {
factor = 0.1
can_take_servant_job = yes
}
modifier = {
factor = 1.5
has_job = enforcer
}       
}
}

Sosyal Tabakalar
Yukarıdaki Enforcer’ın üyesi olduğu Uzmanlar gibi tabakalar (veya sınıflar) da aynı şekilde çalışır. Kaynak tüketimi, üretimi, etkileri ve ayarları vardır. Gestalt Bilinç imparatorlukları için olan simple_drone tabakası en basit örnek olabilir:

simple_drone = {
rank = 0
clothes_texture_index = 2
# This is called whenever a Pop is created, moved to a different planet, or gets a new owner
assign_to_pop = {
exists = owner
owner = { is_gestalt = yes }
}
weight = {
weight = 1
}   
pop_modifier = {
pop_housing_usage_base = 1
pop_amenities_usage_no_happiness_base = 1
}
# scope: pop to be resettled
allow_resettlement = {
always = yes
}
resettlement_cost = {
energy = 100
}
unemployment_resources = {
category = unemployment_resources
# Standby Mode Crime event
upkeep = {
trigger = {
planet = {
has_modifier = standby_mode
}
}
energy = 2
}
}
resources = {
category = pop_category_drones
upkeep = {
trigger = {
is_organic_species = yes
}
food = @living_standard_food_normal
}
upkeep = {
trigger = {
is_robotic_species = yes
}
energy = @living_standard_energy_normal
}       
}   
}

Kaynaklar
Kaynaklar artık tamamen kodlanabilir yani oyuna kendi kaynaklarınızı kolayca ekleyebilirsiniz. Bu kodlar biraz değişti, pazarda ticaret edilebilirliği, eksiye düşerseniz ne olur ve yapay zeka önceliği gibi şeyler de içeriyor. Stratejik kaynaklar da bu veri tabanında yer alıyor.

food = {
tradable = yes
market_amount = 100
market_price = 100
max = 10000
deficit_modifier = food_deficit #found in static modifiers
ai_weight = {
weight = 1
}
ai_wants = {
base = 300
}
}[code]
[code]sr_dark_matter = {
tradable = yes
market_amount = 5
market_price = 100
max = 10000
prerequisites = { "tech_mine_dark_matter" }
visibility_prerequisite = { always = yes }
ai_weight = {
weight = 100
}
}

Hepimiz 2.2 ve MegaCorp için son rötuşları yapıyoruz, gelecek hafta 2.2 yama notlarını yayınlayacağız.

Yazar: Cem Kaya

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

Hearts of Iron IV'te 1.6.2 Beta Yamasındaki Son Durum #hoi4 #heartsofiron4 https://t.co/13WaZJMSwf
Europa Universalis IV'te Görev Ağaçlarının Tasarlanması ve Yeni Olası Görev Ağaçları #eu4 #europauniversalis4 https://t.co/dATYJUK1tE

Strategyturk Flickr