diff --git a/common/buildings/NEOW_special_buildings.txt b/common/buildings/NEOW_special_buildings.txt index 17b03618..75c0579a 100644 --- a/common/buildings/NEOW_special_buildings.txt +++ b/common/buildings/NEOW_special_buildings.txt @@ -579,7 +579,7 @@ zone_rouge_01 = { type = special - flag = travel_point_of_interest_natural_feature + flag = travel_point_of_interest_zone_rouge } ########## diff --git a/common/culture/name_lists/NEOW_bosnian.txt b/common/culture/name_lists/NEOW_bosnian.txt new file mode 100644 index 00000000..3155698e --- /dev/null +++ b/common/culture/name_lists/NEOW_bosnian.txt @@ -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 = { + } +} diff --git a/common/customizable_localization/NEOW_travel.txt b/common/customizable_localization/NEOW_travel.txt new file mode 100644 index 00000000..d893fe17 --- /dev/null +++ b/common/customizable_localization/NEOW_travel.txt @@ -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 + } +} diff --git a/common/on_action/province_on_actions.txt b/common/on_action/province_on_actions.txt index ac51fd54..22d6a8ec 100644 --- a/common/on_action/province_on_actions.txt +++ b/common/on_action/province_on_actions.txt @@ -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 = { diff --git a/common/scripted_effects/NEOW_travel_effects.txt b/common/scripted_effects/NEOW_travel_effects.txt new file mode 100644 index 00000000..ca4e1a90 --- /dev/null +++ b/common/scripted_effects/NEOW_travel_effects.txt @@ -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 + } + } +} \ No newline at end of file diff --git a/common/travel/point_of_interest_types/NEOW_travel_point_of_interest_types.txt b/common/travel/point_of_interest_types/NEOW_travel_point_of_interest_types.txt new file mode 100644 index 00000000..a4702399 --- /dev/null +++ b/common/travel/point_of_interest_types/NEOW_travel_point_of_interest_types.txt @@ -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 + } +} \ No newline at end of file diff --git a/common/travel/point_of_interest_types/_travel_point_of_interest_types.info b/common/travel/point_of_interest_types/_travel_point_of_interest_types.info new file mode 100644 index 00000000..084beb94 --- /dev/null +++ b/common/travel/point_of_interest_types/_travel_point_of_interest_types.info @@ -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 = {} +} diff --git a/common/travel/travel_options/_travel_options.info b/common/travel/travel_options/_travel_options.info new file mode 100644 index 00000000..1b629aeb --- /dev/null +++ b/common/travel/travel_options/_travel_options.info @@ -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 + } +} diff --git a/localization/english/replace/gui/travel_planner_window_l_english.yml b/localization/english/replace/gui/travel_planner_window_l_english.yml new file mode 100644 index 00000000..37ef15fd --- /dev/null +++ b/localization/english/replace/gui/travel_planner_window_l_english.yml @@ -0,0 +1,3 @@ +l_english: + + TRAVEL_POINT_OF_INTEREST_TT_poi_special_buildings_zone_rouge:0 "[Province.GetHolding.GetCurrentSpecialBuildingType.GetName]" diff --git a/localization/english/replace/travel/tourism_destinations_l_english.yml b/localization/english/replace/travel/tourism_destinations_l_english.yml new file mode 100644 index 00000000..942fbd04 --- /dev/null +++ b/localization/english/replace/travel/tourism_destinations_l_english.yml @@ -0,0 +1,3 @@ +l_english: + building_zone_rouge_destination_desc: "WIP" + building_zone_rouge_outro_desc: "WIP" diff --git a/localization/english/replace/travel/travel_points_of_interest_l_english.yml b/localization/english/replace/travel/travel_points_of_interest_l_english.yml new file mode 100644 index 00000000..4379ed76 --- /dev/null +++ b/localization/english/replace/travel/travel_points_of_interest_l_english.yml @@ -0,0 +1,2 @@ +l_english: + poi_special_buildings_zone_rouge.visit:0 "Visited the [province.GetHolding.GetSpecialBuildingType.GetName]"