Merge branch 'next-version-dev' of https://forgejo.damimani-alex.org/damimani/N3OW into next-version-dev

This commit is contained in:
edwardtheelbowhigh 2026-06-06 23:15:10 +01:00
commit 10a66496fe
11 changed files with 496 additions and 1 deletions

View file

@ -579,7 +579,7 @@ zone_rouge_01 = {
type = special
flag = travel_point_of_interest_natural_feature
flag = travel_point_of_interest_zone_rouge
}
##########

View file

@ -0,0 +1,258 @@
name_list_NEOW_bosnian = {
cadet_dynasty_names = {
"dynn_Aleksi_c_act_"
"dynn_Anti_c_act_"
"dynn_Ateljevi_c_act_"
"dynn_Babi_c_act_"
"dynn_Ba_s_crn_i_c_act_"
"dynn_Bogdanovi_c_act_"
"dynn_Darmo_s_crn_"
"dynn_Jovanovi_c_act_"
"dynn_Nikoli_c_act_"
"dynn_Petrovi_c_act_"
"dynn_D_bar_or_d_bar_evi_c_act_"
"dynn_Ili_c_act_"
"dynn_Pavlovi_c_act_"
"dynn_Markovi_c_act_"
"dynn_Stojanovi_c_act_"
"dynn_Popovi_c_act_"
"dynn_C_crn_obanovi_c_act_"
"dynn_Kujund_z_crn_i_c_act_"
"dynn_Karahod_z_crn_i_c_act_"
"dynn_Aganovi_c_act_"
"dynn_Hod_z_crn_i_c_act_"
"dynn_Islamovi_c_act_"
"dynn_Kova_c_crn_evi_c_act_"
"dynn_Alilovi_c_act_"
"dynn_Anda_c_crn_i_c_act_"
"dynn_Andri_c_act_"
"dynn_Ara_c_crn_i_c_act_"
"dynn_Ak_s_crn_amija"
"dynn_Alimanovi_c_act_"
"dynn_Ai_c_act_"
"dynn_Bara_c_act_"
"dynn_Banovi_c_act_"
"dynn_Ahmedhod_z_crn_i_c_act_"
"dynn_Alajbegovi_c_act_"
"dynn_Alispahi_c_act_"
"dynn_Bajraktarevi_c_act_"
"dynn_Bajramovi_c_act_"
"dynn_Bandi_c_act_"
"dynn_Bunoza"
"dynn_Bojo"
"dynn_Bevab"
"dynn_Bi_c_crn_ak_c_crn_i_c_act_"
"dynn_Bogi_c_crn_evi_c_act_"
"dynn_Bu_s_crn_ulad_z_crn_i_c_act_"
"dynn_C_act_avar"
"dynn_C_crn_ejvanovi_c_act_"
"dynn_Ceki_c_act_"
"dynn_Drakuli_c_act_"
"dynn_C_crn_eprkalo"
"dynn_C_act_ejvanovi_c_act_"
"dynn_Cvijanovi_c_act_"
"dynn_C_act_erimagi_c_act_"
"dynn_Deket"
"dynn_Delime_d_bar_ac"
"dynn_Dervi_s_crn_agi_c_act_"
}
dynasty_names = {
"dynn_Aleksi_c_act_"
"dynn_Anti_c_act_"
"dynn_Ateljevi_c_act_"
"dynn_Babi_c_act_"
"dynn_Ba_s_crn_i_c_act_"
"dynn_Bogdanovi_c_act_"
"dynn_Darmo_s_crn_"
"dynn_Jovanovi_c_act_"
"dynn_Nikoli_c_act_"
"dynn_Petrovi_c_act_"
"dynn_D_bar_or_d_bar_evi_c_act_"
"dynn_Ili_c_act_"
"dynn_Pavlovi_c_act_"
"dynn_Markovi_c_act_"
"dynn_Stojanovi_c_act_"
"dynn_Popovi_c_act_"
"dynn_C_crn_obanovi_c_act_"
"dynn_Kujund_z_crn_i_c_act_"
"dynn_Karahod_z_crn_i_c_act_"
"dynn_Aganovi_c_act_"
"dynn_Hod_z_crn_i_c_act_"
"dynn_Islamovi_c_act_"
"dynn_Kova_c_crn_evi_c_act_"
"dynn_Alilovi_c_act_"
"dynn_Anda_c_crn_i_c_act_"
"dynn_Andri_c_act_"
"dynn_Ara_c_crn_i_c_act_"
"dynn_Ak_s_crn_amija"
"dynn_Alimanovi_c_act_"
"dynn_Ai_c_act_"
"dynn_Bara_c_act_"
"dynn_Banovi_c_act_"
"dynn_Ahmedhod_z_crn_i_c_act_"
"dynn_Alajbegovi_c_act_"
"dynn_Alispahi_c_act_"
"dynn_Bajraktarevi_c_act_"
"dynn_Bajramovi_c_act_"
"dynn_Bandi_c_act_"
"dynn_Bunoza"
"dynn_Bojo"
"dynn_Bevab"
"dynn_Bi_c_crn_ak_c_crn_i_c_act_"
"dynn_Bogi_c_crn_evi_c_act_"
"dynn_Bu_s_crn_ulad_z_crn_i_c_act_"
"dynn_C_act_avar"
"dynn_C_crn_ejvanovi_c_act_"
"dynn_Ceki_c_act_"
"dynn_Drakuli_c_act_"
"dynn_C_crn_eprkalo"
"dynn_C_act_ejvanovi_c_act_"
"dynn_Cvijanovi_c_act_"
"dynn_C_act_erimagi_c_act_"
"dynn_Deket"
"dynn_Delime_d_bar_ac"
"dynn_Dervi_s_crn_agi_c_act_"
"dynn_Kazazi_c_crn_"
"dynn_Klepi_c_crn_"
"dynn_Rahi_c_act_"
"dynn_Mid_z_crn_i_c_act_"
}
male_names = {
3 = {
Adam Adem Almin Antonio Antun Armin Arnes Afan Abdulah Anel
Bratislav Bogdan Bo_z_crn_o Borislav Borko Branimir
Dobrivoje Du_s_crn_ko Demir Dervi_s_ced_ Drago D_z_crn_emaludin D_z_crn_evad
Eldin Elmir Erol Esmir Enis Enver
Gazi Gojko
Ivica Iman Imer Inel Irnes Irshad Islam Ismail Ivan
Jakub
Radosav Rajko Ramo Rasim Ringo
Milan Miralem Miran Miroslav Mirsad
Nedim
Sini_s_crn_a Svetislav Salem Sanel Sead Sejad Sulejman
_Z_crn_ivojin _Z_crn_ivorad Zvonimir
}
2 = {
_S_crn_koro
_Z_crn_ivko
Atanasije Aca Aco Anto Aidin Aldin Alen Arif Arnel Asmir Avdo Ayd_i_dot_n Adi Ajdin Aldijana
Blagoje Bogoljub Borivoje Bo_s_crn_ko Berislav
_C_crn_edomir
Dragomir Dejan Damir Danilo Dino Dra_z_crn_eta Daris Dobroslav Dalibor Davud D_z_crn_afer D_z_crn_enis
Edvin Eldar Elvir Erhan Ermin Esat Emir
Fe_d_bar_a Ferhat
Goran Grga
Hamid Haris
I_s_crn_tvan Igor Ilhan Imran Irmin Irvin Ishak Ismet Ivo
Jadranko Janko Jasmin_male Jure
Mihret Mirko
Radivoje Ratko Sr_d_bar_an Ramiz Re_s_ced_id Rifat
Predrag
Slavoljub Semir Senad
Lazar Ljubi_s_crn_a Luka
Milivoje Milomir Muharem Mak Meris Mirnes Munir Mustafa Muamer Mersudin
Nenad Nermin Nijaz Nik_s_crn_a Nidal
Omer Osman Ostoja Ozren
Rizo Rostam Rustem
Sava Stojan Stjepan Safet Salim Sa_s_crn_a Sre_c_act_ko Sultan Senjamin
Tihomir Toma Tomislav
Velimir Vlastimir Vahid Vlatko Volkan
_Z_crn_arko _Z_crn_ivko
}
1 = {
_D_bar_or_d_bar_e
_Z_crn_eljko
Aleksa An_d_bar_elko Andreja Antonije Aleksandar Arijan Adnan Adin Admir Alija Alvin Amir Asem Atif Amar
Boban Boris Branko Bo_z_crn_idar Bojan Boro Bo_z_crn_a Bekir Benjamin Branislav
Dragan Du_s_crn_an Dragoljub Dragoslav Danijel Dimitrije Dragi_s_crn_a Dal D_z_crn_emal D_z_crn_enan D_z_crn_an
Elmin Edhem Edin Elvin Emrah Enes Ervin
Fahrudin Faris
Habib Hajrudin Halim Halid Hamza
Ilija Ibrahim Ibro Idris_Arabic Ines Irfan Isa Iskandar Izet
Jovica Jadran Jasin Jovan Jozo
Kenan Kasim
Ljubomir Ljuba
Miodrag Milorad Marko Mirko Milovan Mile Mom_c_crn_ilo Milutin Milenko Mahir Mehmed Mirza
Neboj_s_crn_a Nikola Novica Neven Nadeem
Obren Ognjen Omar
Radovan Radi_s_crn_a Radoslav Rade Refik
Petar Pavle
Slobodan Slavi_s_crn_a Stevan Slavko Sabahattin
Talib Tariq Tvrtko Tahir
Vojislav Vladan Vuk Vedad
Zain Zdravko Zvezdan
}
female_names = {
3 = {
_Z_crn_ivka
Almina Alma
Bojana
Elvedina Elvira
Iris
Marica Melisa Maja
Natalija
Olgica
Stana Suzana Slavka Sabrina Semka
Zora Zagorka
}
2 = {
Andrijana Anka Amela Aida Arijana
Biljana
Dobrila Desanka Dragica Dina Dea
Er_z_crn_ebet Ermina
Jasmina Jelica Jasna
Leposava Ljubinka Lidija Larisa
Miroslava Marina Miljana Meliha Mervana
Nade_z_crn_da Nefisa Nikolina
Olga Olivera
Rada Radojka Ru_z_crn_a
Sla_d_bar_ana Slobodanka Sanja Sa_s_crn_a_female Sad_z_crn_ida
Tima
Violeta
Zumreta Zana
}
1 = {
An_d_bar_ela An_d_bar_elka Andrea Armina
Branislava Bosiljka Branka
Du_s_crn_ica Dragana Du_s_crn_anka Danijela
Eldina Emina
Hena
Ivana Ivanka Ivona Ilma
Jelena Jovanka Jasminka
Katarina Kada
Ljubica
Marija Milica Milena Milanka Milka Mira Mirsada
Nevenka Nata_s_crn_a Nada Nadica
Ornela
Radmila Ru_z_crn_ica
Sne_z_crn_ana Slavica Svetlana Silvija Selma Suvada
Tatjana Tanja Tijana
Vera Vesna Verica
Zorica Zorka
}
}
dynasty_of_location_prefix = "dynnp_od"
patronym_suffix_male = "dynnpat_suf_i_c_act_"
always_use_patronym = yes
# Chance of male children being named after their paternal or maternal grandfather, or their father. Sum must not exceed 100.
pat_grf_name_chance = 60
mat_grf_name_chance = 10
father_name_chance = 10
# Chance of female children being named after their paternal or maternal grandmother, or their mother. Sum must not exceed 100.
pat_grm_name_chance = 10
mat_grm_name_chance = 60
mother_name_chance = 10
mercenary_names = {
}
}

View file

@ -0,0 +1,96 @@
GetSpecialBuildingTouristDescriptor = {
type = province
text = { # Zone Rouge
trigger = {
has_special_building = yes
has_building_or_higher = zone_rouge_01
}
localization_key = building_zone_rouge_destination_desc
}
}
GetTouristHoldingOutro = {
type = province
random_valid = yes
text = { #Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = building_zone_rouge_outro_desc
}
}
GetSpecialBuildingSong = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_building_with_flag = poi_special_buildings_zone_rouge
}
localization_key = event_song_natural_wonders_03
}
}
GetSpecialBuildingCatSleepingSpot = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_building_with_flag = poi_special_buildings_zone_rouge
}
localization_key = cats_sleeping_natural_wonders_01
}
}
GetSpecialBuildingNonsensicalClaim = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = guide_natural_wonder_5
}
}
GetSpecialBuildingPerson = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = natural_guide
}
}
MonumentTypeDesc = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = monument_beautiful_natural_wonder
}
}

View file

@ -405,6 +405,14 @@ on_building_completed = {
add_travel_point_of_interest = poi_special_buildings_economic
}
else_if = {
limit = {
has_building_with_flag = { flag = travel_point_of_interest_zone_rouge }
NOT = { has_travel_point_of_interest = poi_special_buildings_zone_rouge }
}
add_travel_point_of_interest = poi_special_buildings_zone_rouge
}
# The Builder event chain
if = {
limit = {

View file

@ -0,0 +1,11 @@
add_poi_zone_rouge_effect = {
if = {
limit = {
has_bp3_dlc_trigger = yes
}
poi_lifestyle_experience_effect = {
LIFESTYLE = wanderer
VALUE = travel_minor_lifestyle_xp
}
}
}

View file

@ -0,0 +1,35 @@
# Zone Rouge
poi_special_buildings_zone_rouge = {
build_province_list = {
every_special_building_province = {
limit = {
has_building_with_flag = { flag = travel_point_of_interest_zone_rouge }
}
add_to_list = provinces
}
}
on_visit = {
send_interface_toast = {
title = poi_special_buildings_zone_rouge.visit
left_icon = root
add_poi_zone_rouge_effect = yes
wanderer_lifestyle_destination_effect = yes
traveler_dnager_xp_effect = {
MIN = 2
MAX = 3
}
if = {
limit = {
has_government = landless_adventurer_government
has_perk = organized_muster_rolls_perk
}
add_gold = minor_gold_laamps_value
}
}
visiting_poi_effect = yes
}
}

View file

@ -0,0 +1,18 @@
Structure:
# Travel Points of Interest type
# Each entry represents a type of interesting locations to visit.
key = {
# Effect that gets triggered when a character visits a POI for the first time
# Root - Traveling character.
# scope:province - province being visited
on_visit = {}
# Optional, effect which is run monthly period to find which provinces have this type of point of interest
# If provinces are also added/removed via effects (`add_travel_point_of_interest`, `remove_travel_point_of_interest`),
# they need to be valid/invalid in this effect too.
#
# use add_to_list = provinces to return which provinces are valid
build_province_list = {}
}

View file

@ -0,0 +1,61 @@
Structure:
# Travel Option
key = {
# Trigger which has to be true to be shown while planning travel. Scope is the travel owner.
is_shown = {}
# Trigger which has to be true to be able to be picked while planning travel. Scope is the travel owner.
is_valid = {}
# Scripted cost which will be applied to the travel owner once the travel start, if the option is picked. Scope is the travel owner character.
# We have chosen to remove the gold cost and have the player choose what options they want to apply for a limited number of slots. Still maintaining it for special options.
cost = {}
# Travel modifier which gets applied to the travels safety/speed if the option is picked.
travel_modifier = {
travel_speed = number
travel_safety = number
}
# Character modifier that gets applied to the travel owner character
owner_modifier = {}
# Effect that gets triggered once the travel starts, or once the option is gained mid-travel.
# Root - Travel Owner.
# scope:travel_speed - Travel Speed (percentage points above 100%)
# scope:travel_safety - Travel Safety
on_applied_effect = {}
# Effect that gets triggered once the travel ends.
# Root - Travel Owner.
# scope:travel_speed - Travel Speed (percentage points above 100%)
# scope:travel_safety - Travel Safety
on_travel_end_effect = {}
### Brief: ai_will_do (scripted value int32)
# How likely is the AI to pick this option if valid? Options will be selected using weighted random.
# Options will be re-evaluated after each option is added.
#
# Root - Travel Plan.
# Extra scopes:
# scope:highest_future_danger_value - highest danger value on route; to compare with `travel_safety`
ai_will_do = {}
# Select which court characters are added to the travel entourage when this option is added.
# Weighted list is evaluated until all values are negative, or `max` is reached.
travel_entourage_selection = {
# List is all court characters.
# root = character in the travel plan owners' court
# scope:owner = character owning the travel plan
weight = {
value = 10
}
# Up to how many characters to select for a player
max = 2
# Up to how many characters to select for an AI
ai_max = 2
}
}

View file

@ -0,0 +1,3 @@
l_english:
TRAVEL_POINT_OF_INTEREST_TT_poi_special_buildings_zone_rouge:0 "[Province.GetHolding.GetCurrentSpecialBuildingType.GetName]"

View file

@ -0,0 +1,3 @@
l_english:
building_zone_rouge_destination_desc: "WIP"
building_zone_rouge_outro_desc: "WIP"

View file

@ -0,0 +1,2 @@
l_english:
poi_special_buildings_zone_rouge.visit:0 "Visited the [province.GetHolding.GetSpecialBuildingType.GetName]"